@plait/core 0.51.3 → 0.51.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (61) hide show
  1. package/board/board.component.d.ts +1 -1
  2. package/esm2022/board/board.component.mjs +5 -5
  3. package/esm2022/core/children/children.component.mjs +5 -5
  4. package/esm2022/core/element/context-change.mjs +1 -1
  5. package/esm2022/core/element/element.component.mjs +5 -5
  6. package/esm2022/core/element/plugin-element.mjs +5 -5
  7. package/esm2022/core/island/island-base.component.mjs +9 -9
  8. package/esm2022/interfaces/board.mjs +1 -1
  9. package/esm2022/interfaces/element.mjs +1 -1
  10. package/esm2022/interfaces/node.mjs +1 -1
  11. package/esm2022/interfaces/operation.mjs +1 -1
  12. package/esm2022/interfaces/path-ref.mjs +1 -1
  13. package/esm2022/interfaces/path.mjs +1 -1
  14. package/esm2022/interfaces/rectangle-client.mjs +1 -1
  15. package/esm2022/interfaces/selection.mjs +1 -1
  16. package/esm2022/plugins/create-board.mjs +1 -1
  17. package/esm2022/plugins/with-board.mjs +1 -1
  18. package/esm2022/plugins/with-group.mjs +1 -1
  19. package/esm2022/plugins/with-hand.mjs +1 -1
  20. package/esm2022/plugins/with-history.mjs +1 -1
  21. package/esm2022/plugins/with-hotkey.mjs +1 -1
  22. package/esm2022/plugins/with-moving.mjs +1 -1
  23. package/esm2022/plugins/with-selection.mjs +1 -1
  24. package/esm2022/plugins/with-viewport.mjs +1 -1
  25. package/esm2022/services/image-context.service.mjs +3 -3
  26. package/esm2022/testing/fake-events/event-objects.mjs +4 -4
  27. package/esm2022/transforms/board.mjs +1 -1
  28. package/esm2022/transforms/general.mjs +1 -1
  29. package/esm2022/transforms/node.mjs +1 -1
  30. package/esm2022/transforms/selection.mjs +1 -1
  31. package/esm2022/utils/angle.mjs +36 -0
  32. package/esm2022/utils/board.mjs +1 -1
  33. package/esm2022/utils/clipboard/clipboard.mjs +1 -1
  34. package/esm2022/utils/clipboard/common.mjs +1 -1
  35. package/esm2022/utils/clipboard/data-transfer.mjs +1 -1
  36. package/esm2022/utils/clipboard/navigator-clipboard.mjs +1 -1
  37. package/esm2022/utils/common.mjs +1 -1
  38. package/esm2022/utils/dom/common.mjs +1 -1
  39. package/esm2022/utils/dom/foreign.mjs +1 -1
  40. package/esm2022/utils/drawing/line.mjs +1 -1
  41. package/esm2022/utils/drawing/rectangle.mjs +1 -1
  42. package/esm2022/utils/element.mjs +17 -5
  43. package/esm2022/utils/group.mjs +1 -1
  44. package/esm2022/utils/history.mjs +1 -1
  45. package/esm2022/utils/hotkeys.mjs +1 -1
  46. package/esm2022/utils/id-creator.mjs +1 -1
  47. package/esm2022/utils/index.mjs +2 -1
  48. package/esm2022/utils/math.mjs +11 -1
  49. package/esm2022/utils/reaction-manager.mjs +1 -1
  50. package/esm2022/utils/selected-element.mjs +1 -1
  51. package/esm2022/utils/selection.mjs +6 -2
  52. package/esm2022/utils/to-image.mjs +1 -1
  53. package/esm2022/utils/touch.mjs +1 -1
  54. package/esm2022/utils/tree.mjs +1 -1
  55. package/esm2022/utils/viewport.mjs +1 -1
  56. package/fesm2022/plait-core.mjs +94 -35
  57. package/fesm2022/plait-core.mjs.map +1 -1
  58. package/package.json +1 -1
  59. package/utils/angle.d.ts +5 -0
  60. package/utils/index.d.ts +1 -0
  61. package/utils/math.d.ts +8 -0
@@ -1 +1 @@
1
- {"version":3,"file":"plait-core.mjs","sources":["../../../packages/core/src/utils/weak-maps.ts","../../../packages/core/src/interfaces/pointer.ts","../../../packages/core/src/interfaces/custom-types.ts","../../../packages/core/src/utils/tree.ts","../../../packages/core/src/interfaces/selection.ts","../../../packages/core/src/utils/position.ts","../../../packages/core/src/interfaces/rectangle-client.ts","../../../packages/core/src/interfaces/plugin-key.ts","../../../packages/core/src/utils/selected-element.ts","../../../packages/core/src/constants/keycodes.ts","../../../packages/core/src/constants/cursor.ts","../../../packages/core/src/constants/selection.ts","../../../packages/core/src/constants/index.ts","../../../packages/core/src/utils/dom/common.ts","../../../packages/core/src/core/element/context-change.ts","../../../packages/core/src/core/element/plugin-element.ts","../../../packages/core/src/utils/math.ts","../../../packages/core/src/utils/board.ts","../../../packages/core/src/utils/dom/foreign.ts","../../../packages/core/src/utils/dom/environment.ts","../../../packages/core/src/utils/environment.ts","../../../packages/core/src/utils/helper.ts","../../../packages/core/src/utils/history.ts","../../../packages/core/src/utils/hotkeys.ts","../../../packages/core/src/utils/id-creator.ts","../../../packages/core/src/utils/drawing/rectangle.ts","../../../packages/core/src/utils/drawing/arrow.ts","../../../packages/core/src/utils/drawing/circle.ts","../../../packages/core/src/utils/drawing/line.ts","../../../packages/core/src/constants/zoom.ts","../../../packages/core/src/transforms/viewport.ts","../../../packages/core/src/transforms/theme.ts","../../../packages/core/src/transforms/board.ts","../../../packages/core/src/utils/to-point.ts","../../../packages/core/src/utils/viewport.ts","../../../packages/core/src/utils/common.ts","../../../packages/core/src/utils/dnd.ts","../../../packages/core/src/utils/moving-element.ts","../../../packages/core/src/utils/to-image.ts","../../../packages/core/src/utils/clipboard/types.ts","../../../packages/core/src/utils/clipboard/common.ts","../../../packages/core/src/utils/clipboard/data-transfer.ts","../../../packages/core/src/utils/clipboard/navigator-clipboard.ts","../../../packages/core/src/utils/clipboard/clipboard.ts","../../../packages/core/src/utils/touch.ts","../../../packages/core/src/interfaces/group.ts","../../../packages/core/src/interfaces/viewport.ts","../../../packages/core/src/interfaces/path.ts","../../../packages/core/src/interfaces/node.ts","../../../packages/core/src/transforms/general.ts","../../../packages/core/src/transforms/node.ts","../../../packages/core/src/transforms/selection.ts","../../../packages/core/src/transforms/element.ts","../../../packages/core/src/transforms/index.ts","../../../packages/core/src/utils/selection.ts","../../../packages/core/src/utils/group.ts","../../../packages/core/src/interfaces/element.ts","../../../packages/core/src/interfaces/operation.ts","../../../packages/core/src/interfaces/point.ts","../../../packages/core/src/interfaces/history.ts","../../../packages/core/src/interfaces/theme.ts","../../../packages/core/src/interfaces/direction.ts","../../../packages/core/src/utils/element.ts","../../../packages/core/src/interfaces/board.ts","../../../packages/core/src/interfaces/path-ref.ts","../../../packages/core/src/plugins/create-board.ts","../../../packages/core/src/plugins/with-board.ts","../../../packages/core/src/plugins/with-history.ts","../../../packages/core/src/plugins/with-hand.ts","../../../packages/core/src/plugins/with-selection.ts","../../../packages/core/src/plugins/with-viewport.ts","../../../packages/core/src/utils/reaction-manager.ts","../../../packages/core/src/plugins/with-moving.ts","../../../packages/core/src/plugins/with-options.ts","../../../packages/core/src/core/island/island-base.component.ts","../../../packages/core/src/plugins/with-hotkey.ts","../../../packages/core/src/services/image-context.service.ts","../../../packages/core/src/core/element/element.component.ts","../../../packages/core/src/core/children/children.component.ts","../../../packages/core/src/plugins/with-group.ts","../../../packages/core/src/board/board.component.ts","../../../packages/core/src/testing/core/create-board.ts","../../../packages/core/src/testing/core/fake-weak-map.ts","../../../packages/core/src/testing/fake-events/event-objects.ts","../../../packages/core/src/public-api.ts","../../../packages/core/src/plait-core.ts"],"sourcesContent":["import { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { PathRef } from '../interfaces/path-ref';\n\n// record richtext type status\nexport const IS_BOARD_CACHE = new WeakMap<Object, boolean>();\n\nexport const FLUSHING = new WeakMap<PlaitBoard, boolean>();\n\nexport const NODE_TO_INDEX = new WeakMap<PlaitNode, number>();\n\nexport const NODE_TO_PARENT = new WeakMap<PlaitNode, Ancestor>();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_AFTER_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n\nexport const BOARD_TO_ROUGH_SVG = new WeakMap<PlaitBoard, RoughSVG>();\n\nexport const BOARD_TO_HOST = new WeakMap<PlaitBoard, SVGSVGElement>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<\n PlaitBoard,\n {\n host: SVGGElement;\n upperHost: SVGGElement;\n activeHost: SVGGElement;\n container: HTMLElement;\n viewportContainer: HTMLElement;\n }\n>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT_IN_BOARD = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_MOVING_POINT = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_VIEWPORT_ORIGINATION = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_IS_SELECTION_MOVING = new WeakMap<PlaitBoard, boolean>();\n\n// save no standard selected elements\nexport const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap<PlaitBoard, { elements: PlaitElement[]; timeoutId: any }>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const PATH_REFS: WeakMap<PlaitBoard, Set<PathRef>> = new WeakMap();\n","export enum PlaitPointerType {\n 'hand' = 'hand',\n 'selection' = 'selection'\n}\n","/**\n * Extendable Custom Types Interface\n */\n\ntype ExtendableTypes = 'Viewport' | 'SetViewportOperation' | 'SetSelectionOperation';\n\nexport interface CustomTypes {\n [key: string]: unknown;\n}\n\nexport type ExtendedType<K extends ExtendableTypes, B> = unknown extends CustomTypes[K] ? B : CustomTypes[K];\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\n\nexport function depthFirstRecursion<T extends TreeNode = TreeNode>(\n node: T,\n callback: (node: T) => void,\n recursion?: (node: T) => boolean,\n isReverse?: boolean\n) {\n if (!recursion || recursion(node)) {\n let children: TreeNode[] = [];\n if (node.children) {\n children = [...node.children];\n }\n children = isReverse ? children.reverse() : children;\n children.forEach(child => {\n depthFirstRecursion(child as T, callback, recursion);\n });\n }\n callback(node);\n}\n\nexport const getIsRecursionFunc = (board: PlaitBoard) => {\n return (element: PlaitElement | PlaitBoard) => {\n if (PlaitBoard.isBoard(element) || board.isRecursion(element)) {\n return true;\n } else {\n return false;\n }\n };\n};\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF19'; // 主色 0.1 透明度\n\nexport interface Selection {\n anchor: Point;\n focus: Point;\n}\n\nexport const Selection = {\n isCollapsed(selection: Selection) {\n if (selection.anchor[0] == selection.focus[0] && selection.anchor[1] === selection.focus[1]) {\n return true;\n } else {\n return false;\n }\n }\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\n\nexport const sortElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n return [...elements].sort((a: PlaitElement, b: PlaitElement) => {\n const pathA = PlaitBoard.findPath(board, a);\n const pathB = PlaitBoard.findPath(board, b);\n return pathA[0] - pathB[0];\n });\n};\n","import { rotate } from '../utils';\nimport { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * [x, y] x,y between 0 and 1\n * represents a point in the rectangle\n */\nexport type PointOfRectangle = [number, number];\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n return RectangleClient.isHitX(origin, target) && RectangleClient.isHitY(origin, target);\n },\n isHitX: (origin: RectangleClient, target: RectangleClient) => {\n const minX = origin.x < target.x ? origin.x : target.x;\n const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n isHitY: (origin: RectangleClient, target: RectangleClient) => {\n const minY = origin.y < target.y ? origin.y : target.y;\n const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n getPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n ] as [Point, Point];\n },\n getRectangleByCenterPoint(point: Point, width: number, height: number) {\n return RectangleClient.getRectangleByPoint([point[0] - width / 2, point[1] - height / 2], width, height);\n },\n getRectangleByPoint(point: Point, width: number, height: number): RectangleClient {\n return {\n x: point[0],\n y: point[1],\n width,\n height\n };\n },\n getRectangleByPoints(points: Point[]): RectangleClient {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getCornerPointsByPoints(points: Point[]) {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n return [\n [xMin, yMin],\n [xMax, yMin],\n [xMax, yMax],\n [xMin, yMax]\n ] as [Point, Point, Point, Point];\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width - offset * 2,\n height: rectangle.height - offset * 2\n };\n },\n inflate: (rectangle: RectangleClient, delta: number) => {\n const half = delta / 2;\n return {\n x: rectangle.x - half,\n y: rectangle.y - half,\n width: rectangle.width + half * 2,\n height: rectangle.height + half * 2\n };\n },\n isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => {\n return (\n rectangle.x === otherRectangle.x &&\n rectangle.y === otherRectangle.y &&\n rectangle.width === otherRectangle.width &&\n rectangle.height === otherRectangle.height\n );\n },\n getCornerPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ] as [Point, Point, Point, Point];\n },\n getCenterPoint: (rectangle: RectangleClient) => {\n return [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2] as Point;\n },\n\n getEdgeCenterPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n getConnectionPoint: (rectangle: RectangleClient, point: PointOfRectangle) => {\n return [rectangle.x + rectangle.width * point[0], rectangle.y + rectangle.height * point[1]] as Point;\n },\n expand(rectangle: RectangleClient, left: number, top: number = left, right: number = left, bottom: number = top) {\n return {\n x: rectangle.x - left,\n y: rectangle.y - top,\n width: rectangle.width + left + right,\n height: rectangle.height + top + bottom\n };\n },\n getGapCenter(rectangle1: RectangleClient, rectangle2: RectangleClient, isHorizontal: boolean) {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const align = [rectangle1[axis], rectangle1[axis] + rectangle1[side], rectangle2[axis], rectangle2[axis] + rectangle2[side]];\n const sortArr = align.sort((a, b) => a - b);\n return (sortArr[1] + sortArr[2]) / 2;\n },\n isPointInRectangle(rectangle: RectangleClient, point: Point) {\n const x = point[0],\n y = point[1];\n return x > rectangle.x && x < rectangle.x + rectangle.width && y > rectangle.y && y < rectangle.y + rectangle.height;\n },\n getBoundingRectangle(rectangles: RectangleClient[]): RectangleClient {\n if (rectangles.length === 0) {\n throw new Error('rectangles can not be empty array');\n }\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n rectangles.forEach(rect => {\n minX = Math.min(minX, rect.x);\n minY = Math.min(minY, rect.y);\n maxX = Math.max(maxX, rect.x + rect.width);\n maxY = Math.max(maxY, rect.y + rect.height);\n });\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n};\n","export enum PlaitPluginKey {\n 'withSelection' = 'withSelection'\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Selection } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\nimport { Point } from '../interfaces/point';\nimport { sortElements } from './position';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport { getRectangleByElements } from './element';\nimport { PlaitOptionsBoard } from '../plugins/with-options';\nimport { PlaitPluginKey } from '../interfaces/plugin-key';\nimport { WithPluginOptions } from '../plugins/with-selection';\n\nexport const getHitElementsBySelection = (\n board: PlaitBoard,\n selection?: Selection,\n match: (element: PlaitElement) => boolean = () => true\n) => {\n const newSelection = selection || (board.selection as Selection);\n const rectangleHitElements: PlaitElement[] = [];\n if (!newSelection) {\n return [];\n }\n const isCollapsed = Selection.isCollapsed(newSelection);\n if (isCollapsed) {\n const hitElement = getHitElementByPoint(board, newSelection.anchor, match);\n if (hitElement) {\n return [hitElement];\n } else {\n return [];\n }\n }\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (!PlaitBoard.isBoard(node) && match(node) && board.isRectangleHit(node, newSelection)) {\n rectangleHitElements.push(node);\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return rectangleHitElements;\n};\n\nexport const getHitElementByPoint = (\n board: PlaitBoard,\n point: Point,\n match: (element: PlaitElement) => boolean = () => true\n): undefined | PlaitElement => {\n let hitElement: PlaitElement | undefined = undefined;\n let hitInsideElement: PlaitElement | undefined = undefined;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (hitElement) {\n return;\n }\n if (PlaitBoard.isBoard(node) || !match(node)) {\n return;\n }\n if (board.isHit(node, point)) {\n hitElement = node;\n return;\n }\n\n /**\n * 需要增加场景测试\n * hitInsideElement 存的是第一个符合 isInsidePoint 的元素\n * 当有元素符合 isHit 时结束遍历,并返回 hitElement\n * 当所有元素都不符合 isHit ,则返回第一个符合 isInsidePoint 的元素\n * 这样保证最上面的元素优先被探测到;\n */\n\n if (!hitInsideElement && board.isInsidePoint(node, point)) {\n hitInsideElement = node;\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return hitElement || hitInsideElement;\n};\n\nexport const getHitSelectedElements = (board: PlaitBoard, point: Point) => {\n const selectedElements = getSelectedElements(board);\n const targetRectangle = selectedElements.length > 0 && getRectangleByElements(board, selectedElements, false);\n const isInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isInTargetRectangle) {\n return selectedElements;\n } else {\n return [];\n }\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n const sortedElements = sortElements(board, selectedElements);\n BOARD_TO_SELECTED_ELEMENT.set(board, sortedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement | PlaitElement[]) => {\n let elements = [];\n if (Array.isArray(element)) {\n elements.push(...element);\n } else {\n elements.push(element);\n }\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, ...elements]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement, isRemoveChildren = false) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.includes(element)) {\n const targetElements: PlaitElement[] = [];\n if (board.isRecursion(element) && isRemoveChildren) {\n depthFirstRecursion(\n element,\n node => {\n targetElements.push(node);\n },\n node => board.isRecursion(node)\n );\n } else {\n targetElements.push(element);\n }\n const newSelectedElements = selectedElements.filter(value => !targetElements.includes(value));\n cacheSelectedElements(board, newSelectedElements);\n }\n};\n\nexport const clearSelectedElement = (board: PlaitBoard) => {\n cacheSelectedElements(board, []);\n};\n\nexport const isSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n return !!selectedElements.find(value => value === element);\n};\n\nexport const temporaryDisableSelection = (board: PlaitOptionsBoard) => {\n const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);\n board.setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, {\n isDisabledSelect: true\n });\n setTimeout(() => {\n board.setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, { ...currentOptions });\n }, 0);\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const PERIOD = 190;\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum CursorClass {\n crosshair = 'crosshair'\n}","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';\n\nexport const ACTIVE_STROKE_WIDTH = 1;\n\nexport const SELECTION_RECTANGLE_CLASS_NAME = 'selection-rectangle';\n","export * from './keycodes';\nexport * from './cursor';\nexport * from './selection';\n\nexport const HOST_CLASS_NAME = 'plait-board-container';\n\nexport const ACTIVE_MOVING_CLASS_NAME = 'active-with-moving';\n\nexport const SCROLL_BAR_WIDTH = 20;\n\nexport const MAX_RADIUS = 16;\n\nexport const POINTER_BUTTON = {\n MAIN: 0,\n WHEEL: 1,\n SECONDARY: 2,\n TOUCH: -1\n} as const;\n\nexport const PRESS_AND_MOVE_BUFFER = 3;\n\nexport const HIT_DISTANCE_BUFFER = 5;\n","import { Options } from 'roughjs/bin/core';\nimport { POINTER_BUTTON } from '../../constants';\nimport { Point, RectangleClient } from '../../interfaces';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createPath() {\n const newG = document.createElementNS(NS, 'path');\n return newG;\n}\n\nexport function createRect(rectangle: RectangleClient, options?: Options) {\n const rect = document.createElementNS(NS, 'rect');\n rect.setAttribute('x', `${rectangle.x}`);\n rect.setAttribute('y', `${rectangle.y}`);\n rect.setAttribute('width', `${rectangle.width}`);\n rect.setAttribute('height', `${rectangle.height}`);\n for (let key in options) {\n const optionKey = key as keyof Options;\n rect.setAttribute(key, `${options[optionKey]}`);\n }\n return rect;\n}\n\nexport const setStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.setAttribute('stroke-linecap', value);\n};\n\nexport const setAngleForG = (g: SVGGElement, centerPoint: Point, angle: number) => {\n if (angle === 0) {\n g.removeAttribute('transform');\n return;\n }\n var centerX = centerPoint[0];\n var centerY = centerPoint[1];\n\n let cosTheta = Math.cos(angle);\n let sinTheta = Math.sin(angle);\n\n let transformMatrix = [\n cosTheta,\n sinTheta,\n -sinTheta,\n cosTheta,\n centerX * (1 - cosTheta) + centerY * sinTheta,\n centerY * (1 - cosTheta) - centerX * sinTheta\n ];\n\n let matrix = 'matrix(' + transformMatrix.join(',') + ')';\n g.setAttribute('transform', `${matrix}`);\n};\n\nexport const setPathStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.querySelectorAll('path').forEach(path => {\n path.setAttribute('stroke-linecap', value);\n });\n};\n\nexport function createMask() {\n return document.createElementNS(NS, 'mask');\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number, fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}\n\n/**\n * Check if a DOM node is an element node.\n */\nexport const isDOMElement = (value: any): value is Element => {\n return isDOMNode(value) && value.nodeType === 1;\n};\n\n/**\n * Check if a value is a DOM node.\n */\nexport const isDOMNode = (value: any): value is Node => {\n return value instanceof window.Node;\n};\n\nexport const hasInputOrTextareaTarget = (target: EventTarget | null) => {\n if (isDOMElement(target)) {\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n return true;\n }\n }\n return false;\n};\n\nexport const isSecondaryPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.SECONDARY;\n};\n\nexport const isMainPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.MAIN;\n};\n","import { PlaitBoard, PlaitElement } from '../../interfaces';\nimport { PlaitPluginElementContext } from './context';\n\nexport interface BeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n beforeContextChange: (value: PlaitPluginElementContext<T>) => void;\n}\n\nexport interface OnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n onContextChanged: (value: PlaitPluginElementContext<T, K>, previous: PlaitPluginElementContext<T, K>) => void;\n}\n\nexport function hasBeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is BeforeContextChange<T, K> {\n if (value.beforeContextChange) {\n return true;\n }\n return false;\n}\n\nexport function hasOnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is OnContextChanged<T, K> {\n if (value.onContextChanged) {\n return true;\n }\n return false;\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard, PlaitElement, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\n\n@Directive()\nexport abstract class PlaitPluginElementComponent<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>\n implements OnInit, OnDestroy {\n g!: SVGGElement;\n\n rootG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n @Input()\n set context(value: PlaitPluginElementContext<T, K>) {\n if (hasBeforeContextChange<T, K>(this)) {\n this.beforeContextChange(value);\n }\n const previousContext = this._context;\n this._context = value;\n if (this.element) {\n ELEMENT_TO_COMPONENT.set(this.element, this);\n }\n if (this.initialized) {\n this.cdr.markForCheck();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.element.children) {\n this.g = createG();\n this.rootG = createG();\n this.rootG.append(this.g);\n } else {\n this.g = createG();\n }\n }\n }\n\n get context() {\n return this._context;\n }\n\n get element() {\n return this.context && this.context.element;\n }\n\n get board() {\n return this.context && this.context.board;\n }\n\n get selected() {\n return this.context && this.context.selected;\n }\n\n get effect() {\n return this.context && this.context.effect;\n }\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.element.type) {\n (this.rootG || this.g).setAttribute(`plait-${this.element.type}`, 'true');\n }\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n ELEMENT_TO_COMPONENT.delete(this.element);\n }\n removeSelectedElement(this.board, this.element);\n (this.rootG || this.g).remove();\n }\n}\n\nexport const ELEMENT_TO_COMPONENT = new WeakMap<PlaitElement, PlaitPluginElementComponent>();\n","import { Point } from '../interfaces';\nimport { RectangleClient } from '../interfaces/rectangle-client';\n\n// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function getNearestPointBetweenPointAndSegment(point: Point, linePoints: [Point, Point]) {\n const x = point[0],\n y = point[1],\n x1 = linePoints[0][0],\n y1 = linePoints[0][1],\n x2 = linePoints[1][0],\n y2 = linePoints[1][1];\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n return [xx, yy] as Point;\n}\n\nexport function distanceBetweenPointAndSegments(points: Point[], point: Point) {\n const len = points.length;\n let distance = Infinity;\n for (let i = 0; i < len - 1; i++) {\n const p = points[i];\n const p2 = points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n }\n }\n return distance;\n}\n\nexport function getNearestPointBetweenPointAndSegments(point: Point, points: Point[], isClose: Boolean = true) {\n const len = points.length;\n let distance = Infinity;\n let result: Point = point;\n\n for (let i = 0; i < len; i++) {\n const p = points[i];\n if (i === len - 1 && !isClose) continue;\n const p2 = i === len - 1 ? points[0] : points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n result = getNearestPointBetweenPointAndSegment(point, [p, p2]);\n }\n }\n return result;\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}\n\n// https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point\nexport function distanceBetweenPointAndRectangle(x: number, y: number, rect: RectangleClient) {\n var dx = Math.max(rect.x - x, 0, x - (rect.x + rect.width));\n var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nexport const isLineHitLine = (a: Point, b: Point, c: Point, d: Point): boolean => {\n const crossProduct = (v1: Point, v2: Point) => v1[0] * v2[1] - v1[1] * v2[0];\n\n const ab: Point = [b[0] - a[0], b[1] - a[1]];\n const ac: Point = [c[0] - a[0], c[1] - a[1]];\n const ad: Point = [d[0] - a[0], d[1] - a[1]];\n\n const ca: Point = [a[0] - c[0], a[1] - c[1]];\n const cb: Point = [b[0] - c[0], b[1] - c[1]];\n const cd: Point = [d[0] - c[0], d[1] - c[1]];\n\n return crossProduct(ab, ac) * crossProduct(ab, ad) <= 0 && crossProduct(cd, ca) * crossProduct(cd, cb) <= 0;\n};\n\nexport const isPolylineHitRectangle = (points: Point[], rectangle: RectangleClient, isClose: boolean = true) => {\n const rectanglePoints = RectangleClient.getCornerPoints(rectangle);\n const len = points.length;\n for (let i = 0; i < len; i++) {\n if (i === len - 1 && !isClose) continue;\n const p1 = points[i];\n const p2 = points[(i + 1) % len];\n const isHit =\n isLineHitLine(p1, p2, rectanglePoints[0], rectanglePoints[1]) ||\n isLineHitLine(p1, p2, rectanglePoints[1], rectanglePoints[2]) ||\n isLineHitLine(p1, p2, rectanglePoints[2], rectanglePoints[3]) ||\n isLineHitLine(p1, p2, rectanglePoints[3], rectanglePoints[0]);\n if (isHit || isPointInPolygon(p1, rectanglePoints) || isPointInPolygon(p2, rectanglePoints)) {\n return true;\n }\n }\n\n return false;\n};\n\n//https://stackoverflow.com/questions/22521982/check-if-point-is-inside-a-polygon\nexport const isPointInPolygon = (point: Point, points: Point[]) => {\n // ray-casting algorithm based on\n // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n\n const x = point[0],\n y = point[1];\n\n let inside = false;\n for (var i = 0, j = points.length - 1; i < points.length; j = i++) {\n let xi = points[i][0],\n yi = points[i][1];\n let xj = points[j][0],\n yj = points[j][1];\n\n let intersect = yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n};\n\nexport const isPointInEllipse = (point: Point, center: Point, rx: number, ry: number, angle = 0) => {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x1 = (point[0] - center[0]) * cosAngle + (point[1] - center[1]) * sinAngle;\n const y1 = (point[1] - center[1]) * cosAngle - (point[0] - center[0]) * sinAngle;\n\n return (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry) <= 1;\n};\n\nexport const isPointInRoundRectangle = (point: Point, rectangle: RectangleClient, radius: number, angle = 0) => {\n const { x: rectX, y: rectY, width, height } = rectangle;\n const isInRectangle = point[0] >= rectX && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + height;\n const handleLeftTop =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + radius)) > radius;\n const handleLeftBottom =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY + height &&\n point[1] <= rectY + height - radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + height - radius)) > radius;\n const handleRightTop =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + radius)) > radius;\n const handleRightBottom =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY + height - radius &&\n point[1] <= rectY + height &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + height - radius)) > radius;\n const isInCorner = handleLeftTop || handleLeftBottom || handleRightTop || handleRightBottom;\n\n return isInRectangle && !isInCorner;\n};\n\n// https://gist.github.com/nicholaswmin/c2661eb11cad5671d816\nexport const catmullRomFitting = function(points: Point[]) {\n const alpha = 0.5;\n let p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n const result: Point[] = [];\n result.push([Math.round(points[0][0]), Math.round(points[0][1])]);\n var length = points.length;\n for (var i = 0; i < length - 1; i++) {\n p0 = i == 0 ? points[0] : points[i - 1];\n p1 = points[i];\n p2 = points[i + 1];\n p3 = i + 2 < length ? points[i + 2] : p2;\n\n d1 = Math.sqrt(Math.pow(p0[0] - p1[0], 2) + Math.pow(p0[1] - p1[1], 2));\n d2 = Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));\n d3 = Math.sqrt(Math.pow(p2[0] - p3[0], 2) + Math.pow(p2[1] - p3[1], 2));\n\n // Catmull-Rom to Cubic Bezier conversion matrix\n // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n // [ 0 1 0 0 ]\n // [ -d2^2a /N A/N d1^2a /N 0 ]\n // [ 0 d3^2a /M B/M -d2^2a /M ]\n // [ 0 0 1 0 ]\n\n d3powA = Math.pow(d3, alpha);\n d3pow2A = Math.pow(d3, 2 * alpha);\n d2powA = Math.pow(d2, alpha);\n d2pow2A = Math.pow(d2, 2 * alpha);\n d1powA = Math.pow(d1, alpha);\n d1pow2A = Math.pow(d1, 2 * alpha);\n\n A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n N = 3 * d1powA * (d1powA + d2powA);\n if (N > 0) {\n N = 1 / N;\n }\n M = 3 * d3powA * (d3powA + d2powA);\n if (M > 0) {\n M = 1 / M;\n }\n\n bp1 = [(-d2pow2A * p0[0] + A * p1[0] + d1pow2A * p2[0]) * N, (-d2pow2A * p0[1] + A * p1[1] + d1pow2A * p2[1]) * N];\n bp2 = [(d3pow2A * p1[0] + B * p2[0] - d2pow2A * p3[0]) * M, (d3pow2A * p1[1] + B * p2[1] - d2pow2A * p3[1]) * M];\n\n if (bp1[0] == 0 && bp1[1] == 0) {\n bp1 = p1;\n }\n if (bp2[0] == 0 && bp2[1] == 0) {\n bp2 = p2;\n }\n\n result.push(bp1 as Point, bp2 as Point, p2 as Point);\n }\n\n return result;\n};\n\n/**\n * the result of slope is based on Cartesian coordinate system\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getEllipseTangentSlope(x: number, y: number, a: number, b: number) {\n if (Math.abs(y) === 0) {\n return x > 0 ? -Infinity : Infinity;\n }\n const k = (-b * b * x) / (a * a * y);\n return k;\n}\n\n/**\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getVectorFromPointAndSlope(x: number, y: number, slope: number) {\n if (slope === Infinity) {\n return [0, -1] as Point;\n } else if (slope === -Infinity) {\n return [0, 1] as Point;\n }\n let vector = [1, -slope] as Point;\n if (y < 0) {\n vector = [-vector[0], -vector[1]];\n }\n return vector as Point;\n}\n\n/**\n * The DOM likes values to be fixed to 3 decimal places\n */\nexport function toDomPrecision(v: number) {\n return +v.toFixed(4);\n}\n\nexport function toFixed(v: number) {\n return +v.toFixed(2);\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { distanceBetweenPointAndRectangle } from './math';\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n};\n\nexport function isInPlaitBoard(board: PlaitBoard, x: number, y: number) {\n const plaitBoardElement = PlaitBoard.getBoardContainer(board);\n const plaitBoardRect = plaitBoardElement.getBoundingClientRect();\n const distances = distanceBetweenPointAndRectangle(x, y, plaitBoardRect);\n return distances === 0;\n}\n\nexport function getRealScrollBarWidth(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n let scrollBarWidth = 0;\n if (!hideScrollbar) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n scrollBarWidth = viewportContainer.offsetWidth - viewportContainer.clientWidth;\n }\n return scrollBarWidth;\n}\n","import { NS } from './common';\n\nexport function createForeignObject(x: number, y: number, width: number, height: number) {\n var newForeignObject = document.createElementNS(NS, 'foreignObject');\n newForeignObject.setAttribute('x', `${x}`);\n newForeignObject.setAttribute('y', `${y}`);\n newForeignObject.setAttribute('width', `${width}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(target: SVGForeignObjectElement | SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n\nexport function updateForeignObjectWidth(target: SVGForeignObjectElement | SVGGElement, width: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n }\n}\n","export const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * get {x,y} point\n * @param point\n * @returns point\n */\nexport function normalizePoint(point: number[]) {\n return Array.isArray(point)\n ? {\n x: point[0],\n y: point[1]\n }\n : point;\n}\n\nexport const RgbaToHEX = (Rgb: string, opacity: number) => {\n return Rgb + Math.floor(opacity * 255).toString(16);\n};\n\nexport function isContextmenu(event: MouseEvent) {\n return event.button === 2;\n}\n","import { MERGING, PlaitBoard, PlaitOperation, SAVING } from '../interfaces';\n\n/**\n * Check whether to merge an operation into the previous operation.\n */\n\nexport const shouldMerge = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_viewport' && op.type === prev?.type) {\n return true;\n }\n return false;\n};\n\n/**\n * Check whether an operation needs to be saved to the history.\n */\n\nexport const shouldSave = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_selection' || op.type === 'set_viewport') {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check whether an operation should clear the redos stack.\n */\n\nexport const shouldClear = (op: PlaitOperation): boolean => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nexport const PlaitHistoryBoard = {\n /**\n * Get the saving flag's current value.\n */\n isSaving(board: PlaitBoard): boolean | undefined {\n return SAVING.get(board);\n },\n\n /**\n * Get the merge flag's current value.\n */\n\n isMerging(board: PlaitBoard): boolean | undefined {\n return MERGING.get(board);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n */\n\n withoutMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, false);\n fn();\n MERGING.set(board, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n */\n\n withoutSaving(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isSaving(board);\n SAVING.set(board, false);\n fn();\n SAVING.set(board, prev);\n }\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS: any = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n arrow: ['down', 'left', 'right', 'up'],\n extendArrow: ['shift+down', 'shift+left', 'shift+right', 'shift+up'],\n moveBackward: 'left',\n moveForward: 'right',\n moveUp: 'up',\n moveDown: 'down',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n extendUp: 'shift+up',\n extendDown: 'shift+down',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z',\n shift: 'shift'\n};\n\nconst APPLE_HOTKEYS: any = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS: any = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) {\n return true;\n }\n if (IS_APPLE && isApple && isApple(event)) {\n return true;\n }\n if (!IS_APPLE && isWindows && isWindows(event)) {\n return true;\n }\n return false;\n };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isArrow: create('arrow'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isMoveUp: create('moveUp'),\n isMoveDown: create('moveDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendUp: create('extendUp'),\n isExtendDown: create('extendDown'),\n isExtendArrow: create('extendArrow'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo'),\n isShift: create('shift')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /**** Easily confusing characters are removed by default oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { RectangleClient } from '../../interfaces/rectangle-client';\nimport { setStrokeLinecap } from '../dom/common';\n\n/**\n * drawRoundRectangle\n */\nexport function drawRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n options: Options,\n outline = false,\n borderRadius?: number\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n let radius = borderRadius || 0;\n if (radius === 0) {\n const defaultRadius = Math.min(width, height) / 8;\n let radius = defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\n }\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n return rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n options\n );\n}\n\nexport const drawRectangle = (board: PlaitBoard, rectangle: RectangleClient, options: Options) => {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);\n setStrokeLinecap(rectangleG, 'round');\n return rectangleG;\n};\n","import { rotate } from '../math';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { Options } from 'roughjs/bin/core';\nimport { Point } from '../../interfaces';\n\nexport function arrowPoints(start: Point, end: Point, degree = 40) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n let hypotenuse = Math.hypot(width, height); // 斜边\n const realRotateLine = hypotenuse / 2;\n const rotateWidth = (realRotateLine / hypotenuse) * width;\n const rotateHeight = (realRotateLine / hypotenuse) * height;\n const rotatePoint = [\n end[0] > start[0] ? end[0] - rotateWidth : end[0] + rotateWidth,\n end[1] > start[1] ? end[1] - rotateHeight : end[1] + rotateHeight\n ];\n const pointRight = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (degree * Math.PI) / 180) as Point;\n const pointLeft = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (-degree * Math.PI) / 180) as Point;\n return { pointLeft, pointRight };\n}\n\nexport function drawArrow(rs: RoughSVG, start: Point, end: Point, options: Options, maxHypotenuseLength = 10, degree = 40): SVGGElement[] {\n const { pointLeft, pointRight } = arrowPoints(start, end, degree);\n const arrowLineLeft = rs.linearPath([pointLeft, end], options);\n const arrowLineRight = rs.linearPath([pointRight, end], options);\n return [arrowLineLeft, arrowLineRight];\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawCircle(roughSVG: RoughSVG, point: Point, diameter: number, options: Options): SVGGElement {\n return roughSVG.circle(point[0], point[1], diameter, options);\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\nimport { createG, createPath } from '../dom/common';\n\nexport function drawLine(rs: RoughSVG, start: Point, end: Point, options: Options): SVGGElement {\n return rs.linearPath([start, end], options);\n}\n\nexport function drawLinearPath(points: Point[], options?: Options, closePath?: boolean) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n points.forEach((point, index) => {\n if (index === 0) {\n polylinePath += `M ${point[0]} ${point[1]} `;\n } else {\n polylinePath += `L ${point[0]} ${point[1]} `;\n }\n });\n\n if (closePath) {\n polylinePath += 'Z';\n }\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `${options?.fill || 'none'}`);\n options?.strokeLineDash && path.setAttribute('stroke-dasharray', `${options.strokeLineDash}`);\n g.appendChild(path);\n\n return g;\n}\n\nexport function drawBezierPath(points: Point[], options?: Options) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n for (let i = 0; i < points.length - 3; i += 3) {\n if (i === 0) {\n polylinePath += `M ${points[0][0]} ${points[0][1]} `;\n } else {\n polylinePath += `C ${points[i + 1][0]} ${points[i + 1][1]}, ${points[i + 2][0]} ${points[i + 2][1]}, ${points[i + 3][0]} ${\n points[i + 3][1]\n }`;\n }\n }\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `none`);\n g.appendChild(path);\n\n return g;\n}\n","export const ZOOM_STEP = 0.1;\nexport const MIN_ZOOM = 0.1;\nexport const MAX_ZOOM = 4;\n","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { SetThemeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitTheme } from '../interfaces';\n\nexport function setTheme(board: PlaitBoard, themeColorMode: PlaitTheme) {\n const operation: SetThemeOperation = { type: 'set_theme', properties: board.theme, newProperties: themeColorMode };\n board.apply(operation);\n}\n\nexport interface ThemeTransforms {\n setTheme: (board: PlaitBoard, themeColorMode: PlaitTheme) => void;\n}\n\nexport const ViewportTransforms: ThemeTransforms = {\n setTheme\n};\n","import { ThemeColorMode } from '../interfaces/theme';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { getRectangleByElements } from '../utils/element';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport {\n clampZoomLevel,\n clearViewportOrigination,\n getViewBoxCenterPoint,\n getViewportOrigination,\n initializeViewportContainer\n} from '../utils/viewport';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { setViewport } from './viewport';\nimport { depthFirstRecursion, getRealScrollBarWidth } from '../utils';\nimport { PlaitElement } from '../interfaces/element';\nimport { setTheme } from './theme';\nimport { FitViewportOptions } from '../interfaces/viewport';\n\nfunction updateViewport(board: PlaitBoard, origination: Point, zoom?: number) {\n zoom = zoom ?? board.viewport.zoom;\n setViewport(board, {\n ...board.viewport,\n zoom,\n origination\n });\n clearViewportOrigination(board);\n}\n\nconst updatePointerType = <T extends string = PlaitPointerType>(board: PlaitBoard, pointer: T) => {\n if (board.pointer === pointer) return;\n board.pointer = pointer;\n const boardComponent = BOARD_TO_COMPONENT.get(board);\n boardComponent?.markForCheck();\n};\n\nfunction updateZoom(board: PlaitBoard, newZoom: number, isCenter = true) {\n newZoom = clampZoomLevel(newZoom);\n\n const movingPoint = PlaitBoard.getMovingPointInBoard(board);\n const nativeElement = PlaitBoard.getBoardContainer(board);\n const nativeElementRect = nativeElement.getBoundingClientRect();\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n let focusPoint = [boardContainerRect.width / 2, boardContainerRect.height / 2];\n\n if (!isCenter && movingPoint && distanceBetweenPointAndRectangle(movingPoint[0], movingPoint[1], nativeElementRect) === 0) {\n focusPoint = [movingPoint[0] - nativeElementRect.x, movingPoint[1] - nativeElementRect.y];\n }\n\n const zoom = board.viewport.zoom;\n const origination = getViewportOrigination(board);\n const centerX = origination![0] + focusPoint[0] / zoom;\n const centerY = origination![1] + focusPoint[1] / zoom;\n const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\nfunction fitViewport(board: PlaitBoard) {\n let scrollBarWidth = getRealScrollBarWidth(board);\n\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const zoom = board.viewport.zoom;\n const autoFitPadding = 16;\n const viewportWidth = boardContainerRect.width - 2 * autoFitPadding;\n const viewportHeight = boardContainerRect.height - 2 * autoFitPadding;\n\n let newZoom = zoom;\n if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {\n newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);\n } else {\n newZoom = 1;\n }\n\n const centerPoint = getViewBoxCenterPoint(board);\n const newOrigination = [\n centerPoint[0] - boardContainerRect.width / 2 / newZoom + scrollBarWidth / 2 / zoom,\n centerPoint[1] - boardContainerRect.height / 2 / newZoom + scrollBarWidth / 2 / zoom\n ] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\nfunction fitViewportWidth(board: PlaitBoard, options: FitViewportOptions) {\n let scrollBarWidth = getRealScrollBarWidth(board);\n\n const boardContainer = PlaitBoard.getBoardContainer(board);\n const boardContainerRectangle = boardContainer.getBoundingClientRect();\n\n let finalWidth = 0;\n if (options.maxWidth) {\n finalWidth = options.maxWidth;\n } else {\n finalWidth = boardContainerRectangle.width;\n }\n\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const contentWidth = finalWidth - 2 * options.autoFitPadding;\n let newZoom = 0;\n if (contentWidth < elementHostBox.width) {\n newZoom = Math.min(contentWidth / elementHostBox.width);\n } else {\n newZoom = 1;\n }\n\n let finalHeight = elementHostBox.height * newZoom + 2 * options.autoFitPadding;\n if (finalHeight > options.limitHeight) {\n const containerEl = boardContainer.closest(`.${options.containerClass}`) as HTMLElement;\n containerEl.style.height = `${finalHeight}px`;\n initializeViewportContainer(board);\n } else {\n finalHeight = options.limitHeight;\n }\n\n const centerX = elementHostBox.x + elementHostBox.width / 2;\n const centerY = elementHostBox.y + elementHostBox.height / 2;\n const newOrigination = [\n centerX - finalWidth / 2 / newZoom + scrollBarWidth / 2 / newZoom,\n centerY - finalHeight / 2 / newZoom + scrollBarWidth / 2 / newZoom\n ] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\n/**\n * apply theme to every element (remove element custom properties)\n * invoke applyThemeColor\n */\nfunction updateThemeColor(board: PlaitBoard, mode: ThemeColorMode) {\n mode = mode ?? board.theme.themeColorMode;\n setTheme(board, { themeColorMode: mode });\n\n depthFirstRecursion((board as unknown) as PlaitElement, element => {\n board.applyTheme(element);\n });\n}\n\nexport const BoardTransforms = {\n updatePointerType,\n updateViewport,\n fitViewport,\n updateZoom,\n updateThemeColor,\n fitViewportWidth\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\n\nexport const getViewBox = (board: PlaitBoard) => {\n return PlaitBoard.getHost(board).viewBox.baseVal;\n};\n\n/**\n * Get the screen point starting from the upper left corner of the svg element (based on the svg screen coordinate system)\n */\nexport function toHostPoint(board: PlaitBoard, x: number, y: number): Point {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\n/**\n * Get the point in the coordinate system of the svg viewBox\n */\nexport function toViewBoxPoint(board: PlaitBoard, hostPoint: Point) {\n const viewBox = getViewBox(board);\n const { zoom } = board.viewport;\n const x = hostPoint[0] / zoom + viewBox.x;\n const y = hostPoint[1] / zoom + viewBox.y;\n const newPoint = [x, y] as Point;\n return newPoint;\n}\n\nexport function toViewBoxPoints(board: PlaitBoard, hostPoints: Point[]) {\n const newPoints = hostPoints.map(point => {\n return toViewBoxPoint(board, point);\n });\n return newPoints;\n}\n\n/**\n * `toHostPoint` reverse processing\n * Get the screen point starting from the upper left corner of the browser window or the viewport (based on the screen coordinate system)\n */\nexport function toScreenPointFromHostPoint(board: PlaitBoard, hostPoint: Point) {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [hostPoint[0] + rect.x, hostPoint[1] + rect.y] as Point;\n}\n\n/**\n * `toViewBoxPoint` reverse processing\n */\nexport function toHostPointFromViewBoxPoint(board: PlaitBoard, viewBoxPoint: Point) {\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board);\n const x = (viewBoxPoint[0] - viewBox.x) * zoom;\n const y = (viewBoxPoint[1] - viewBox.y) * zoom;\n return [x, y] as Point;\n}\n","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { MAX_ZOOM, MIN_ZOOM } from '../constants/zoom';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { BoardTransforms } from '../transforms/board';\nimport { getRectangleByElements } from './element';\nimport { toHostPointFromViewBoxPoint, toViewBoxPoint } from './to-point';\nimport { BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';\n\nconst IS_FROM_SCROLLING = new WeakMap<PlaitBoard, boolean>();\n\nconst IS_FROM_VIEWPORT_CHANGE = new WeakMap<PlaitBoard, boolean>();\n\nexport function getViewportContainerRect(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n\n return {\n width: viewportRect.width + scrollBarWidth,\n height: viewportRect.height + scrollBarWidth\n };\n}\n\nexport function getElementHostBBox(board: PlaitBoard, zoom: number) {\n const childrenRect = getRectangleByElements(board, board.children, true);\n const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const containerWidth = viewportContainerRect.width / zoom;\n const containerHeight = viewportContainerRect.height / zoom;\n let left: number;\n let right: number;\n let top: number;\n let bottom: number;\n\n if (childrenRect.width < containerWidth) {\n const centerX = childrenRect.x + childrenRect.width / 2;\n const halfContainerWidth = containerWidth / 2;\n left = centerX - halfContainerWidth;\n right = centerX + halfContainerWidth;\n } else {\n left = childrenRect.x;\n right = childrenRect.x + childrenRect.width;\n }\n if (childrenRect.height < containerHeight) {\n const centerY = childrenRect.y + childrenRect.height / 2;\n const halfContainerHeight = containerHeight / 2;\n top = centerY - halfContainerHeight;\n bottom = centerY + halfContainerHeight;\n } else {\n top = childrenRect.y;\n bottom = childrenRect.y + childrenRect.height;\n }\n return {\n left,\n right,\n top,\n bottom\n };\n}\n\n/**\n * Normalize the scaling ratio, or return the corrected scaling ratio if the limit is exceeded\n */\nexport function clampZoomLevel(zoom: number, minZoom = MIN_ZOOM, maxZoom = MAX_ZOOM) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function calcNewViewBox(board: PlaitBoard, zoom: number) {\n const boardContainerRectangle = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\n const horizontalPadding = boardContainerRectangle.width / 2;\n const verticalPadding = boardContainerRectangle.height / 2;\n const viewBox = [\n elementHostBBox.left - horizontalPadding / zoom,\n elementHostBBox.top - verticalPadding / zoom,\n elementHostBBox.right - elementHostBBox.left + (horizontalPadding * 2) / zoom,\n elementHostBBox.bottom - elementHostBBox.top + (verticalPadding * 2) / zoom\n ];\n return viewBox;\n}\n\nexport function getViewBoxCenterPoint(board: PlaitBoard) {\n const childrenRectangle = getRectangleByElements(board, board.children, true);\n return [childrenRectangle.x + childrenRectangle.width / 2, childrenRectangle.y + childrenRectangle.height / 2] as Point;\n}\n\nexport function setSVGViewBox(board: PlaitBoard, viewBox: number[]) {\n const zoom = board.viewport.zoom;\n const hostElement = PlaitBoard.getHost(board);\n hostElement.style.display = 'block';\n hostElement.style.width = `${viewBox[2] * zoom}px`;\n hostElement.style.height = `${viewBox[3] * zoom}px`;\n\n if (viewBox && viewBox[2] > 0 && viewBox[3] > 0) {\n hostElement.setAttribute('viewBox', viewBox.join(' '));\n }\n}\n\nexport function updateViewportOffset(board: PlaitBoard) {\n const origination = getViewportOrigination(board);\n if (!origination) {\n return;\n }\n const [scrollLeft, scrollTop] = toHostPointFromViewBoxPoint(board, origination);\n updateViewportContainerScroll(board, scrollLeft, scrollTop);\n}\n\nexport function updateViewportContainerScroll(board: PlaitBoard, left: number, top: number, isFromViewportChange: boolean = true) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const previousScrollLeft = viewportContainer.scrollLeft;\n const previousScrollTop = viewportContainer.scrollTop;\n // scrollTop assign 11.8 will get 11.5 in chrome\n // scrollTop assign 11.8 will get 11 in firefox, safari\n // scrollTop assign 11.4 will get 11 in chrome, firefox, safari\n if (viewportContainer.scrollLeft !== Math.floor(left) || viewportContainer.scrollTop !== Math.floor(top)) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n const offsetWidth = viewportContainer.offsetWidth;\n const offsetHeight = viewportContainer.offsetHeight;\n if (previousScrollLeft === viewportContainer.scrollLeft && previousScrollTop === viewportContainer.scrollTop) {\n // The scroll event cannot be triggered, so the origination is modified directly based on the scroll distance.\n updateViewportByScrolling(board, previousScrollLeft, previousScrollTop);\n } else {\n const isValidLeftOrTop =\n left > 0 &&\n top > 0 &&\n left < viewportContainer.scrollWidth - offsetWidth &&\n top < viewportContainer.scrollHeight - offsetHeight;\n if (isFromViewportChange && isValidLeftOrTop) {\n setIsFromViewportChange(board, true);\n }\n }\n }\n}\n\nexport function updateViewportByScrolling(board: PlaitBoard, scrollLeft: number, scrollTop: number) {\n const origination = toViewBoxPoint(board, [scrollLeft, scrollTop]);\n if (Point.isEquals(origination, getViewportOrigination(board))) {\n return;\n }\n BoardTransforms.updateViewport(board, origination);\n setIsFromScrolling(board, true);\n}\n\nexport function initializeViewportContainer(board: PlaitBoard) {\n const { width, height } = getViewportContainerRect(board);\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n viewportContainer.style.width = `${width}px`;\n viewportContainer.style.height = `${height}px`;\n}\n\nexport function initializeViewBox(board: PlaitBoard) {\n const zoom = board.viewport.zoom;\n const viewBox = calcNewViewBox(board, zoom);\n setSVGViewBox(board, viewBox);\n}\n\nexport function initializeViewportOffset(board: PlaitBoard) {\n if (!board.viewport?.origination) {\n const zoom = board.viewport.zoom;\n const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const viewBox = calcNewViewBox(board, zoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom] as Point;\n updateViewportOrigination(board, origination);\n updateViewportOffset(board);\n return;\n }\n updateViewportOffset(board);\n}\n\nexport const updateViewportOrigination = (board: PlaitBoard, origination: Point) => {\n BOARD_TO_VIEWPORT_ORIGINATION.set(board, origination);\n};\n\nexport const clearViewportOrigination = (board: PlaitBoard) => {\n BOARD_TO_VIEWPORT_ORIGINATION.delete(board);\n};\n\nexport const getViewportOrigination = (board: PlaitBoard) => {\n const origination = BOARD_TO_VIEWPORT_ORIGINATION.get(board);\n if (origination) {\n return origination;\n } else {\n return board.viewport.origination;\n }\n};\n\nexport const isFromScrolling = (board: PlaitBoard) => {\n return !!IS_FROM_SCROLLING.get(board);\n};\n\nexport const setIsFromScrolling = (board: PlaitBoard, state: boolean) => {\n IS_FROM_SCROLLING.set(board, state);\n};\n\nexport const isFromViewportChange = (board: PlaitBoard) => {\n return !!IS_FROM_VIEWPORT_CHANGE.get(board);\n};\n\nexport const setIsFromViewportChange = (board: PlaitBoard, state: boolean) => {\n IS_FROM_VIEWPORT_CHANGE.set(board, state);\n};\n\nexport function scrollToRectangle(board: PlaitBoard, client: RectangleClient) {}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Subscription, timer } from 'rxjs';\n\nconst BOARD_TO_RAF = new WeakMap<PlaitBoard, { [key: string]: number | null }>();\n\nconst getTimerId = (board: PlaitBoard, key: string) => {\n const state = getRAFState(board);\n return state[key] || null;\n};\n\nconst getRAFState = (board: PlaitBoard) => {\n return BOARD_TO_RAF.get(board) || {};\n};\n\nexport const throttleRAF = (board: PlaitBoard, key: string, fn: () => void) => {\n const scheduleFunc = () => {\n let timerId = requestAnimationFrame(() => {\n const value = BOARD_TO_RAF.get(board) || {};\n value[key] = null;\n BOARD_TO_RAF.set(board, value);\n fn();\n });\n const state = getRAFState(board);\n state[key] = timerId;\n BOARD_TO_RAF.set(board, state);\n };\n let timerId = getTimerId(board, key);\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n }\n scheduleFunc();\n};\n\nexport const debounce = (func: () => void, wait: number, options?: { leading: boolean }) => {\n let timerSubscription: Subscription | null = null;\n return () => {\n if (timerSubscription && !timerSubscription.closed) {\n timerSubscription.unsubscribe();\n timerSubscription = timer(wait).subscribe(() => {\n func();\n });\n } else {\n if (options?.leading) {\n timer(0).subscribe(() => {\n func();\n });\n }\n timerSubscription = timer(wait).subscribe();\n }\n };\n};\n","import { PlaitBoard } from \"../interfaces/board\";\n\nexport const IS_DRAGGING = new WeakMap<PlaitBoard, boolean>();\n\n\nexport const isDragging = (board: PlaitBoard) => {\n return !!IS_DRAGGING.get(board);\n};\n\nexport const setDragging = (board: PlaitBoard, state: boolean) => {\n IS_DRAGGING.set(board, state);\n}","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { setDragging } from './dnd';\nimport { BOARD_TO_MOVING_ELEMENT } from './weak-maps';\n\nexport const getMovingElements = (board: PlaitBoard) => {\n return BOARD_TO_MOVING_ELEMENT.get(board) || [];\n};\n\nexport const isMovingElements = (board: PlaitBoard) => {\n return (BOARD_TO_MOVING_ELEMENT.get(board) || []).length > 0;\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n setDragging(board, false);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n setDragging(board, true);\n};\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { findElements, getRectangleByElements } from './element';\n\nconst IMAGE_CONTAINER = 'plait-image-container';\n\nexport interface ToImageOptions {\n elements?: PlaitElement[];\n name?: string;\n ratio?: number;\n padding?: number;\n fillStyle?: string;\n // List of class names. The list must be in the form class1,class2,...\n inlineStyleClassNames?: string;\n}\n\n/**\n * Is element node\n * @param node\n * @returns\n */\nfunction isElementNode(node: Node): node is HTMLElement {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n * load image resources\n * @param url image url\n * @returns image element\n */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error('Failed to load image'));\n img.src = src;\n });\n}\n\n/**\n * create and return canvas and context\n * @param width canvas width\n * @param height canvas height\n * @param fillStyle fill style\n * @returns canvas and context\n */\nfunction createCanvas(width: number, height: number, fillStyle = 'transparent') {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n\n canvas.width = width;\n canvas.height = height;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n ctx.strokeStyle = '#ffffff';\n ctx.fillStyle = fillStyle;\n ctx.fillRect(0, 0, width, height);\n\n return {\n canvas,\n ctx\n };\n}\n\n/**\n * convert image to base64\n * @param url image url\n * @returns image base64\n */\nfunction convertImageToBase64(url: string) {\n return loadImage(url).then(img => {\n const { canvas, ctx } = createCanvas(img.width, img.height);\n ctx?.drawImage(img, 0, 0);\n return canvas.toDataURL('image/png');\n });\n}\n\n/**\n * clone node style\n * @param nativeNode source node\n * @param clonedNode clone node\n */\nfunction cloneCSSStyle<T extends HTMLElement>(nativeNode: T, clonedNode: T) {\n const targetStyle = clonedNode?.style;\n if (!targetStyle) {\n return;\n }\n\n const sourceStyle = window.getComputedStyle(nativeNode);\n if (sourceStyle.cssText) {\n targetStyle.cssText = sourceStyle.cssText;\n targetStyle.transformOrigin = sourceStyle.transformOrigin;\n } else {\n Array.from(sourceStyle).forEach(name => {\n let value = sourceStyle.getPropertyValue(name);\n targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));\n });\n }\n}\n\n/**\n * batch clone target styles\n * @param sourceNode\n * @param cloneNode\n * @param inlineStyleClassNames\n */\nfunction batchCloneCSSStyle(sourceNode: SVGGElement, cloneNode: SVGGElement, inlineStyleClassNames: string) {\n if (inlineStyleClassNames) {\n const classNames = inlineStyleClassNames + `,.${IMAGE_CONTAINER}`;\n const sourceNodes = Array.from(sourceNode.querySelectorAll(classNames));\n const cloneNodes = Array.from(cloneNode.querySelectorAll(classNames));\n\n sourceNodes.forEach((node, index) => {\n const childElements = Array.from(node.querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n const cloneChildElements = Array.from(cloneNodes[index].querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n sourceNodes.push(...childElements);\n cloneNodes.push(...cloneChildElements);\n });\n\n // processing styles\n sourceNodes.map((node, index) => {\n cloneCSSStyle(node as HTMLElement, cloneNodes[index] as HTMLElement);\n });\n }\n}\n\n/**\n * convert images in target nodes in batches\n * @param sourceNode\n * @param cloneNode\n */\nasync function batchConvertImage(sourceNode: SVGGElement, cloneNode: SVGGElement) {\n const sourceImageNodes = Array.from(sourceNode.querySelectorAll(`.${IMAGE_CONTAINER}`));\n const cloneImageNodes = Array.from(cloneNode.querySelectorAll(`.${IMAGE_CONTAINER}`));\n await Promise.all(\n sourceImageNodes.map((_, index) => {\n return new Promise(resolve => {\n const cloneImageNode = cloneImageNodes[index];\n // processing image\n const image = (cloneImageNode as HTMLElement).querySelector('img');\n const url = image?.getAttribute('src');\n if (!url) {\n return resolve(true);\n }\n convertImageToBase64(url).then(base64Image => {\n image?.setAttribute('src', base64Image);\n resolve(true);\n });\n });\n })\n );\n}\n\n/**\n * clone svg element\n * @param board board\n * @param options parameter configuration\n * @returns clone svg element\n */\nasync function cloneSvg(board: PlaitBoard, elements: PlaitElement[], rectangle: RectangleClient, options: ToImageOptions) {\n const { width, height, x, y } = rectangle;\n const { padding = 4, inlineStyleClassNames } = options;\n const sourceSvg = PlaitBoard.getHost(board);\n const selectedGElements = elements.map(value => PlaitElement.getComponent(value).g);\n const cloneSvgElement = sourceSvg.cloneNode() as SVGElement;\n const newHostElement = PlaitBoard.getElementHost(board).cloneNode() as SVGGElement;\n\n cloneSvgElement.style.width = `${width}px`;\n cloneSvgElement.style.height = `${height}px`;\n cloneSvgElement.style.backgroundColor = '';\n cloneSvgElement.setAttribute('width', `${width}`);\n cloneSvgElement.setAttribute('height', `${height}`);\n cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));\n\n await Promise.all(\n selectedGElements.map(async (child, i) => {\n const cloneChild = child.cloneNode(true) as SVGGElement;\n batchCloneCSSStyle(child, cloneChild, inlineStyleClassNames as string);\n\n await batchConvertImage(child, cloneChild);\n newHostElement.appendChild(cloneChild);\n })\n );\n cloneSvgElement.appendChild(newHostElement);\n return cloneSvgElement;\n}\n\n/**\n * current board transfer pictures\n * @param board board\n * @param options parameter configuration\n * @returns images in the specified format base64\n */\nexport async function toImage(board: PlaitBoard, options: ToImageOptions) {\n if (!board) {\n return undefined;\n }\n const elements = options.elements || findElements(board, { match: () => true, recursion: () => true, isReverse: false });\n const targetRectangle = getRectangleByElements(board, elements, false);\n const { ratio = 2, fillStyle = 'transparent' } = options;\n const { width, height } = targetRectangle;\n const ratioWidth = width * ratio;\n const ratioHeight = height * ratio;\n\n const cloneSvgElement = await cloneSvg(board, elements, targetRectangle, options);\n const { canvas, ctx } = createCanvas(ratioWidth, ratioHeight, fillStyle);\n\n const svgStr = new XMLSerializer().serializeToString(cloneSvgElement);\n const imgSrc = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgStr)}`;\n\n try {\n const img = await loadImage(imgSrc);\n ctx.drawImage(img, 0, 0, ratioWidth, ratioHeight);\n return canvas.toDataURL('image/png');\n } catch (error) {\n console.error('Error converting SVG to image:', error);\n return undefined;\n }\n}\n\n/**\n * download the file with the specified name\n * @param url download url\n * @param name file name\n */\nexport function downloadImage(url: string, name: string) {\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n a.click();\n a.remove();\n}\n","import { PlaitElement } from '../../interfaces';\n\nexport enum WritableClipboardType {\n 'medias' = 'medias',\n 'elements' = 'elements'\n}\n\nexport type WritableClipboardData = PlaitElement[] | any[];\n\nexport interface WritableClipboardContext {\n text: string;\n type: WritableClipboardType;\n data: WritableClipboardData;\n}\n\nexport interface ClipboardData {\n files?: File[];\n elements?: PlaitElement[];\n medias?: any[];\n text?: string;\n}\n","import { ClipboardData, WritableClipboardContext, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const buildPlaitHtml = (type: WritableClipboardType, data: WritableClipboardData) => {\n const stringifiedClipboard = JSON.stringify({\n type,\n data\n });\n return `<plait>${stringifiedClipboard}</plait>`;\n};\n\nexport const getClipboardFromHtml = (html: string): ClipboardData | null => {\n const plaitString = html?.match(/<plait[^>]*>(.*)<\\/plait>/)?.[1];\n if (plaitString) {\n try {\n const plaitJson = JSON.parse(plaitString);\n if (plaitJson) {\n if (plaitJson.type === WritableClipboardType.elements) {\n return {\n elements: plaitJson.data\n };\n } else if (plaitJson.type === WritableClipboardType.medias) {\n return {\n medias: plaitJson.data\n };\n }\n }\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n return null;\n};\n\nexport const stripHtml = (html: string) => {\n // See <https://github.com/developit/preact-markup/blob/4788b8d61b4e24f83688710746ee36e7464f7bbc/src/parse-markup.js#L60-L69>\n const doc = document.implementation.createHTMLDocument('');\n doc.documentElement.innerHTML = html.trim();\n return doc.body.textContent || doc.body.innerText || '';\n};\n\nexport const getProbablySupportsClipboardWrite = () => {\n return 'clipboard' in navigator && 'write' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardWriteText = () => {\n return 'clipboard' in navigator && 'writeText' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardRead = () => {\n return 'clipboard' in navigator && 'read' in navigator.clipboard;\n};\n\nexport const createClipboardContext = (\n type: WritableClipboardType,\n data: WritableClipboardData,\n text: string\n): WritableClipboardContext => {\n return {\n type,\n data,\n text\n };\n};\n\nexport const addClipboardContext = (\n clipboardContext: WritableClipboardContext,\n addition: WritableClipboardContext\n): WritableClipboardContext => {\n const { type, data, text } = clipboardContext;\n if (type === addition.type) {\n return {\n type,\n data: data.concat(addition.data),\n text: text + ' ' + addition.text\n };\n }\n return clipboardContext;\n};\n","import { buildPlaitHtml, getClipboardFromHtml } from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setDataTransferClipboard = (dataTransfer: DataTransfer | null, type: WritableClipboardType, data: WritableClipboardData) => {\n dataTransfer?.setData(`text/html`, buildPlaitHtml(type, data));\n};\n\nexport const setDataTransferClipboardText = (data: DataTransfer | null, text: string) => {\n data?.setData(`text/plain`, text);\n};\n\nexport const getDataTransferClipboard = (data: DataTransfer | null): ClipboardData => {\n const html = data?.getData(`text/html`);\n if (html) {\n const htmlClipboardData = getClipboardFromHtml(html);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n\n return {};\n};\n\nexport const getDataTransferClipboardText = (data: DataTransfer | null) => {\n if (!data) {\n return {};\n }\n const text = data?.getData(`text/plain`);\n if (text) {\n const htmlClipboardData = getClipboardFromHtml(text);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n return {\n text\n };\n};\n","import {\n buildPlaitHtml,\n getClipboardFromHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n stripHtml\n} from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setNavigatorClipboard = async (type: WritableClipboardType, data: WritableClipboardData, text: string = '') => {\n let textClipboard = text;\n if (getProbablySupportsClipboardWrite()) {\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([buildPlaitHtml(type, data)], {\n type: 'text/html'\n }),\n 'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })\n })\n ]);\n }\n};\n\nexport const getNavigatorClipboard = async (): Promise<ClipboardData> => {\n if (!getProbablySupportsClipboardRead()) {\n return {};\n }\n const clipboardItems = await navigator.clipboard.read();\n let clipboardData: ClipboardData = {};\n\n if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {\n for (const item of clipboardItems) {\n if (isFile(item)) {\n const clipboardFiles = item.types.filter(type => type.match(/^image\\//));\n const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)!));\n const urls = (fileBlobs.filter(Boolean) as (File | Blob)[]).map(blob => URL.createObjectURL(blob));\n const files = await Promise.all(\n urls.map(async url => {\n const blob = await (await fetch(url)).blob();\n return new File([blob], 'plait-file', { type: blob.type });\n })\n );\n return {\n files\n };\n }\n if (item.types.includes('text/html')) {\n const htmlContent = await blobAsString(await item.getType('text/html'));\n const htmlClipboardData = getClipboardFromHtml(htmlContent);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n if (htmlContent && htmlContent.trim()) {\n clipboardData = { text: stripHtml(htmlContent) };\n }\n }\n if (item.types.includes('text/plain')) {\n const textContent = await blobAsString(await item.getType('text/plain'));\n clipboardData = {\n text: stripHtml(textContent)\n };\n }\n }\n }\n return clipboardData;\n};\n\nconst isFile = (item: ClipboardItem) => {\n return item.types.find(i => i.match(/^image\\//));\n};\n\nconst blobAsString = (blob: Blob) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', () => {\n const text = reader.result;\n resolve(text as string);\n });\n reader.addEventListener('error', () => {\n reject(reader.error);\n });\n reader.readAsText(blob);\n });\n};\n","import {\n buildPlaitHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n getProbablySupportsClipboardWriteText\n} from './common';\nimport {\n getDataTransferClipboard,\n getDataTransferClipboardText,\n setDataTransferClipboard,\n setDataTransferClipboardText\n} from './data-transfer';\nimport { getNavigatorClipboard, setNavigatorClipboard } from './navigator-clipboard';\nimport { ClipboardData, WritableClipboardContext } from './types';\n\nexport const getClipboardData = async (dataTransfer: DataTransfer | null): Promise<ClipboardData> => {\n let clipboardData = {};\n if (dataTransfer) {\n if (dataTransfer.files.length) {\n return { files: Array.from(dataTransfer.files) };\n }\n clipboardData = getDataTransferClipboard(dataTransfer);\n if (Object.keys(clipboardData).length === 0) {\n clipboardData = getDataTransferClipboardText(dataTransfer);\n }\n return clipboardData;\n }\n if (getProbablySupportsClipboardRead()) {\n return await getNavigatorClipboard();\n }\n return clipboardData;\n};\n\nexport const setClipboardData = async (dataTransfer: DataTransfer | null, clipboardContext: WritableClipboardContext | null) => {\n if (!clipboardContext) {\n return;\n }\n const { type, data, text } = clipboardContext;\n\n if (getProbablySupportsClipboardWrite()) {\n return await setNavigatorClipboard(type, data, text);\n }\n\n if (dataTransfer) {\n setDataTransferClipboard(dataTransfer, type, data);\n setDataTransferClipboardText(dataTransfer, text);\n return;\n }\n\n // Compatible with situations where navigator.clipboard.write is not supported and dataTransfer is empty\n // Such as contextmenu copy in Firefox.\n if (getProbablySupportsClipboardWriteText()) {\n return await navigator.clipboard.writeText(buildPlaitHtml(type, data));\n }\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { createG } from './dom/common';\n\nexport interface TouchRef {\n target?: SVGElement;\n state: boolean;\n host?: SVGGElement;\n}\n\nexport const BOARD_TO_TOUCH_REF = new WeakMap<PlaitBoard, TouchRef>();\n\nexport const isPreventTouchMove = (board: PlaitBoard) => {\n return !!BOARD_TO_TOUCH_REF.get(board);\n};\n\nexport const preventTouchMove = (board: PlaitBoard, event: PointerEvent, state: boolean) => {\n if (state && (event.target instanceof HTMLElement || event.target instanceof SVGElement)) {\n BOARD_TO_TOUCH_REF.set(board, { state, target: event.target instanceof SVGElement ? event.target : undefined });\n } else {\n const ref = BOARD_TO_TOUCH_REF.get(board);\n if (ref) {\n BOARD_TO_TOUCH_REF.delete(board);\n ref.host?.remove();\n }\n }\n};\n\n/**\n * some intersection maybe cause target is removed from current browser window,\n * after it was removed touch move event will not be fired\n * so scroll behavior will can not be prevented in mobile browser device\n * this function will prevent target element being remove.\n */\nexport const handleTouchTarget = (board: PlaitBoard) => {\n const touchRef = BOARD_TO_TOUCH_REF.get(board);\n if (touchRef && touchRef.target && !touchRef.target.contains(PlaitBoard.getElementActiveHost(board))) {\n touchRef.target.style.opacity = '0';\n const host = createG();\n host.appendChild(touchRef.target);\n touchRef.host = host;\n host.classList.add('touch-target');\n PlaitBoard.getElementActiveHost(board).append(host);\n }\n};\n","import { PlaitElement } from \"./element\";\n\nexport interface PlaitGroup extends PlaitElement {\n type: 'group';\n}\n\nexport const PlaitGroupElement = {\n isGroup: (value: any): value is PlaitGroup => {\n return value.type === 'group';\n }\n}","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\nimport { Point } from './point';\n\nexport interface BaseViewport {\n [key: string]: any;\n zoom: number;\n origination?: Point;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return !isNullOrUndefined(value.zoom) && !isNullOrUndefined(value.viewBackgroundColor);\n }\n};\n\nexport interface FitViewportOptions {\n maxWidth?: number;\n limitHeight: number;\n autoFitPadding: number;\n containerClass: string;\n}\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport interface PathLevelsOptions {\n reverse?: boolean;\n}\n\nexport type Path = number[];\n\nexport const Path = {\n /**\n * Get a list of ancestor paths for a given path.\n *\n * The paths are sorted from shallowest to deepest ancestor. However, if the\n * `reverse: true` option is passed, they are reversed.\n */\n ancestors(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n let paths = Path.levels(path, options);\n\n if (reverse) {\n paths = paths.slice(1);\n } else {\n paths = paths.slice(0, -1);\n }\n\n return paths;\n },\n /**\n * Get a list of paths at every level down to a path. Note: this is the same\n * as `Path.ancestors`, but including the path itself.\n *\n * The paths are sorted from shallowest to deepest. However, if the `reverse:\n * true` option is passed, they are reversed.\n */\n levels(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n const list: Path[] = [];\n\n for (let i = 0; i <= path.length; i++) {\n list.push(path.slice(0, i));\n }\n\n if (reverse) {\n list.reverse();\n }\n\n return list;\n },\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n hasPrevious(path: Path): boolean {\n return path[path.length - 1] > 0;\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no previous index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last - 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return p;\n });\n }\n};\n","import { PlaitElement } from './element';\nimport { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport type PlaitNode = PlaitElement;\n\nexport type Ancestor = PlaitBoard | PlaitElement;\n\nexport interface NodeParentsOptions {\n reverse?: boolean;\n}\n\nexport const PlaitNode = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n /**\n * Return a generator of all the ancestor nodes above a specific path.\n *\n * By default the order is top-down, from highest to lowest ancestor in\n * the tree, but you can pass the `reverse: true` option to go bottom-up.\n */\n *parents(root: PlaitBoard, path: Path, options: NodeParentsOptions = {}): Generator<PlaitNode, void, undefined> {\n for (const p of Path.ancestors(path, options)) {\n const n = PlaitNode.get(root, p);\n yield n;\n }\n },\n get<T extends PlaitNode = PlaitNode>(root: PlaitBoard, path: Path): T {\n let node: Ancestor = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node as T;\n },\n last(board: PlaitBoard, path: Path) {\n let n = PlaitNode.get(board, path);\n while (n && n.children && n.children.length > 0) {\n const i = n.children.length - 1;\n n = n.children[i];\n }\n return n;\n }\n};\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\nimport { PlaitTheme } from '../interfaces/theme';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, theme: PlaitTheme, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection = newProperties;\n }\n }\n break;\n }\n case 'set_theme': {\n const { newProperties } = op;\n theme = newProperties as PlaitTheme;\n break;\n }\n }\n return { selection, viewport, theme };\n};\n\nexport const GeneralTransforms: GeneralTransforms = {\n /**\n * Transform the board by an operation.\n */\n transform(board: PlaitBoard, op: PlaitOperation): void {\n board.children = createDraft(board.children);\n let viewport = board.viewport && createDraft(board.viewport);\n let selection = board.selection && createDraft(board.selection);\n let theme = board.theme && createDraft(board.theme);\n\n try {\n const state = applyToDraft(board, selection, viewport, theme, op);\n viewport = state.viewport;\n selection = state.selection;\n theme = state.theme;\n } finally {\n board.children = finishDraft(board.children);\n\n if (selection) {\n board.selection = isDraft(selection) ? (finishDraft(selection) as Selection) : selection;\n } else {\n board.selection = null;\n }\n\n board.viewport = isDraft(viewport) ? (finishDraft(viewport) as Viewport) : viewport;\n board.theme = isDraft(theme) ? finishDraft(theme) : theme;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\nimport { BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { PlaitElement } from '../interfaces/element';\nimport { getTemporaryRef } from '../utils';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n addSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n addSelectionWithTemporaryElements\n};\n\nexport function addSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n const timeoutId = setTimeout(() => {\n setSelection(board, { anchor: [0, 0], focus: [0, 0] });\n }, 0);\n let ref = getTemporaryRef(board);\n if (ref) {\n clearTimeout(ref.timeoutId);\n const currentElements = ref.elements;\n ref.elements.push(...elements.filter(element => !currentElements.includes(element)));\n ref.timeoutId = timeoutId;\n } else {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, { timeoutId, elements });\n }\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { removeSelectedElement } from '../utils/selected-element';\nimport { removeNode } from './node';\n\nexport const removeElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n elements\n .map(element => {\n const path = PlaitBoard.findPath(board, element);\n const ref = board.pathRef(path);\n return () => {\n removeNode(board, ref.current!);\n ref.unref();\n removeSelectedElement(board, element, true);\n };\n })\n .forEach(action => {\n action();\n });\n};\n\nexport const CoreTransforms = {\n removeElements\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport { BoardTransforms } from './board';\nexport { CoreTransforms } from './element';\n\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { getSelectedElements } from '.';\nimport { ACTIVE_STROKE_WIDTH, SELECTION_RECTANGLE_CLASS_NAME } from '../constants';\nimport { PlaitBoard, PlaitPluginKey, PlaitPointerType, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { PlaitOptionsBoard, WithPluginOptions, drawRectangle } from '../public-api';\nimport { setDragging } from './dnd';\nimport { getRectangleByElements } from './element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from './weak-maps';\n\nexport function isSelectionMoving(board: PlaitBoard) {\n return !!BOARD_TO_IS_SELECTION_MOVING.get(board);\n}\n\nexport function setSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardContainer(board).classList.add('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.set(board, true);\n setDragging(board, true);\n}\n\nexport function clearSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardContainer(board).classList.remove('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.delete(board);\n setDragging(board, false);\n}\n\nexport function isHandleSelection(board: PlaitBoard) {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n return board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect && !PlaitBoard.isReadonly(board);\n}\n\nexport function isSetSelectionOperation(board: PlaitBoard) {\n return !!board.operations.find(value => value.type === 'set_selection');\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n const ref = BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n if (ref) {\n return ref.elements;\n } else {\n return undefined;\n }\n}\n\nexport function getTemporaryRef(board: PlaitBoard) {\n return BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n}\n\nexport function deleteTemporaryElements(board: PlaitBoard) {\n BOARD_TO_TEMPORARY_ELEMENTS.delete(board);\n}\n\nexport function createSelectionRectangleG(board: PlaitBoard) {\n const elements = getSelectedElements(board);\n const rectangle = getRectangleByElements(board, elements, false);\n if (rectangle.width > 0 && rectangle.height > 0 && elements.length > 1) {\n const selectionRectangleG = drawRectangle(board, RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fillStyle: 'solid'\n });\n selectionRectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n PlaitBoard.getElementActiveHost(board).append(selectionRectangleG);\n return selectionRectangleG;\n }\n return null;\n}\n","import { ACTIVE_STROKE_WIDTH } from '../constants';\nimport { PlaitBoard, PlaitElement, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { PlaitGroup, PlaitGroupElement } from '../interfaces/group';\nimport { Transforms } from '../transforms';\nimport { createG } from './dom';\nimport { drawRectangle } from './drawing/rectangle';\nimport { findElements, getRectangleByElements } from './element';\nimport { idCreator } from './id-creator';\nimport { getSelectedElements } from './selected-element';\nimport { isSelectionMoving } from './selection';\n\nexport const getElementsInGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => {\n let result: PlaitElement[] = [];\n const elements = board.children.filter(value => (value as PlaitElement).groupId === group.id) as PlaitElement[];\n if (recursion) {\n elements.forEach(item => {\n if (PlaitGroupElement.isGroup(item)) {\n if (includeGroup) {\n result.push(item);\n }\n result.push(...getElementsInGroup(board, item, recursion));\n } else {\n result.push(item);\n }\n });\n } else {\n result = includeGroup ? elements : (elements.filter(item => !PlaitGroupElement.isGroup(item)) as PlaitElement[]);\n }\n return result;\n};\n\nexport const getRectangleByGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean) => {\n const elementsInGroup = getElementsInGroup(board, group, recursion) as PlaitElement[];\n return getRectangleByElements(board, elementsInGroup, false);\n};\n\nexport const getGroupByElement = (board: PlaitBoard, element: PlaitElement, recursion?: boolean): PlaitGroup | PlaitGroup[] | null => {\n const group = board.children.find(item => item.id === element?.groupId);\n if (!group) {\n return recursion ? [] : null;\n }\n if (recursion) {\n const groups = [group];\n const grandGroups = getGroupByElement(board, group, recursion) as PlaitGroup[];\n if (grandGroups.length) {\n groups.push(...grandGroups);\n }\n return groups as PlaitGroup[];\n } else {\n return group as PlaitGroup;\n }\n};\n\nexport const getHighestGroup = (board: PlaitBoard, element: PlaitElement) => {\n const groups = getGroupByElement(board, element, true) as PlaitGroup[];\n if (groups.length) {\n return groups[groups.length - 1];\n }\n return null;\n};\n\nexport const getElementsInGroupByElement = (board: PlaitBoard, element: PlaitElement) => {\n const highestGroup = getHighestGroup(board, element);\n if (highestGroup) {\n return getElementsInGroup(board, highestGroup, true) as PlaitGroup[];\n } else {\n return [element];\n }\n};\n\nexport const isSelectedElementOrGroup = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n if (PlaitGroupElement.isGroup(element)) {\n return isSelectedAllElementsInGroup(board, element);\n }\n return selectedElements.includes(element);\n};\n\nexport const isSelectedAllElementsInGroup = (board: PlaitBoard, group: PlaitGroup) => {\n const selectedElements = getSelectedElements(board);\n const elementsInGroup = getElementsInGroup(board, group, true);\n return elementsInGroup.every(item => selectedElements.includes(item));\n};\n\nexport const getSelectedGroups = (board: PlaitBoard, groups: PlaitGroup[]): PlaitGroup[] => {\n const selectedGroups: PlaitGroup[] = [];\n groups.forEach(item => {\n if (isSelectedElementOrGroup(board, item)) {\n selectedGroups.push(item);\n }\n });\n return selectedGroups;\n};\n\nexport const getHighestSelectedGroup = (board: PlaitBoard, element: PlaitElement): PlaitGroup | null => {\n const groups = getGroupByElement(board, element, true) as PlaitGroup[];\n const selectedGroups = getSelectedGroups(board, groups);\n if (selectedGroups.length) {\n return selectedGroups[selectedGroups.length - 1];\n }\n return null;\n};\n\nexport const getHighestSelectedGroups = (board: PlaitBoard): PlaitGroup[] => {\n let result: PlaitGroup[] = [];\n const selectedElements = getSelectedElements(board);\n selectedElements.forEach(item => {\n if (item.groupId) {\n const group = getHighestSelectedGroup(board, item);\n if (group && !result.includes(group)) {\n result.push(group);\n }\n }\n });\n return result;\n};\n\nexport const getSelectedIsolatedElements = (board: PlaitBoard) => {\n let result: PlaitElement[] = [];\n const selectedElements = getSelectedElements(board);\n selectedElements.forEach(item => {\n if (!item.groupId) {\n result.push(item);\n } else {\n const group = getHighestSelectedGroup(board, item);\n if (!group) {\n result.push(item);\n }\n }\n });\n return result;\n};\n\nexport const getHighestSelectedElements = (board: PlaitBoard) => {\n return [...getHighestSelectedGroups(board), ...getSelectedIsolatedElements(board)];\n};\n\nexport const createGroupRectangleG = (board: PlaitBoard, elements: PlaitElement[]): SVGGElement | null => {\n const selectedElements = getSelectedElements(board);\n const groupRectangleG: SVGGElement = createG();\n const isMoving = isSelectionMoving(board);\n\n elements.forEach(item => {\n const isRender = (!selectedElements.includes(item) && !isMoving) || isMoving;\n if (item.groupId && isRender) {\n const elements = getElementsInGroupByElement(board, item);\n const rectangle = getRectangleByElements(board, elements, false);\n groupRectangleG.append(\n drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n })\n );\n }\n });\n return groupRectangleG;\n};\n\nexport const createGroup = (): PlaitGroup => {\n return {\n id: idCreator(),\n type: 'group'\n };\n};\n\nexport const nonGroupInHighestSelectedElements = (elements: PlaitElement[]) => {\n return elements.every(item => !item.groupId);\n};\n\nexport const hasSelectedElementsInSameGroup = (elements: PlaitElement[]) => {\n return elements.every(item => item.groupId && item.groupId === elements[0].groupId);\n};\n\nexport const canAddGroup = (highestSelectedElements: PlaitElement[]) => {\n if (highestSelectedElements.length > 1) {\n return nonGroupInHighestSelectedElements(highestSelectedElements) || hasSelectedElementsInSameGroup(highestSelectedElements);\n }\n return false;\n};\n\nexport const addGroup = (board: PlaitBoard) => {\n const selectedGroups = getHighestSelectedGroups(board);\n const selectedIsolatedElements = getSelectedIsolatedElements(board);\n const highestSelectedElements = [...selectedGroups, ...selectedIsolatedElements];\n const group = createGroup();\n if (canAddGroup(highestSelectedElements)) {\n highestSelectedElements.forEach(item => {\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { groupId: group.id }, path);\n });\n if (hasSelectedElementsInSameGroup(highestSelectedElements)) {\n const newGroupId = selectedIsolatedElements[0].groupId;\n Transforms.insertNode(\n board,\n {\n ...group,\n groupId: newGroupId\n },\n [board.children.length]\n );\n } else {\n Transforms.insertNode(board, group, [board.children.length]);\n }\n }\n};\n\nexport const canRemoveGroup = (board: PlaitBoard, selectedGroups: PlaitGroup[]) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements.length > 0 && selectedGroups.length > 0;\n};\n\nexport const removeGroup = (board: PlaitBoard) => {\n const selectedGroups = getHighestSelectedGroups(board);\n if (canRemoveGroup(board, selectedGroups)) {\n selectedGroups.map(group => {\n const elementsInGroup = findElements(board, {\n match: item => item.groupId === group.id,\n recursion: () => false\n });\n elementsInGroup.forEach(item => {\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { groupId: group.groupId || undefined }, path);\n });\n const groupPath = PlaitBoard.findPath(board, group);\n Transforms.removeNode(board, groupPath);\n });\n }\n};\n","import { ELEMENT_TO_COMPONENT, PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport { NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n groupId?: string;\n}\n\nexport const PlaitElement = {\n isRootElement(value: PlaitElement) {\n const parent = NODE_TO_PARENT.get(value);\n if (parent && PlaitBoard.isBoard(parent)) {\n return true;\n } else {\n return false;\n }\n },\n getComponent(value: PlaitElement) {\n return ELEMENT_TO_COMPONENT.get(value) as PlaitPluginElementComponent;\n }\n};\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n\nexport interface ImageEntry {\n url: string;\n file: File;\n}\n","import { PlaitNode } from './node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { PlaitTheme } from './theme';\nimport { Viewport } from './viewport';\n\nexport type InsertNodeOperation = {\n type: 'insert_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type RemoveNodeOperation = {\n type: 'remove_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type MoveNodeOperation = {\n type: 'move_node';\n path: Path;\n newPath: Path;\n};\n\nexport type SetThemeOperation = {\n type: 'set_theme';\n properties: Partial<PlaitTheme>;\n newProperties: Partial<PlaitTheme>;\n};\n\nexport type SetViewportOperation = {\n type: 'set_viewport';\n properties: Partial<Viewport>;\n newProperties: Partial<Viewport>;\n};\n\nexport type SetSelectionOperation = {\n type: 'set_selection';\n properties: Selection | null;\n newProperties: Selection | null;\n};\n\nexport type SetNodeOperation = {\n type: 'set_node';\n path: Path;\n properties: Partial<PlaitNode>;\n newProperties: Partial<PlaitNode>;\n};\n\nexport type PlaitOperation =\n | InsertNodeOperation\n | SetViewportOperation\n | SetSelectionOperation\n | SetNodeOperation\n | RemoveNodeOperation\n | MoveNodeOperation\n | SetThemeOperation;\n\nexport interface PlaitOperationInterface {\n inverse: (op: PlaitOperation) => PlaitOperation;\n isSetViewportOperation: (value: any) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const inverse = (op: PlaitOperation): PlaitOperation => {\n switch (op.type) {\n case 'insert_node': {\n return { ...op, type: 'remove_node' };\n }\n\n case 'remove_node': {\n return { ...op, type: 'insert_node' };\n }\n\n case 'move_node': {\n const { newPath, path } = op;\n\n // PERF: in this case the move operation is a no-op anyways.\n if (Path.equals(newPath, path)) {\n return op;\n }\n\n // when operation path is [0,0] -> [0,2], should exec Path.transform to get [0,1] -> [0,0]\n // shoud not return [0,2] -> [0,0] #WIK-8981\n // if (Path.isSibling(path, newPath)) {\n // return { ...op, path: newPath, newPath: path };\n // }\n\n // If the move does not happen within a single parent it is possible\n // for the move to impact the true path to the location where the node\n // was removed from and where it was inserted. We have to adjust for this\n // and find the original path. We can accomplish this (only in non-sibling)\n // moves by looking at the impact of the move operation on the node\n // after the original move path.\n const inversePath = Path.transform(path, op)!;\n const inverseNewPath = Path.transform(Path.next(path), op)!;\n return { ...op, path: inversePath, newPath: inverseNewPath };\n }\n\n case 'set_node': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n\n case 'set_selection': {\n const { properties, newProperties } = op;\n\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: null\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: null,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_viewport': {\n const { properties, newProperties } = op;\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: newProperties\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: properties,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_theme': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export type Point = [number, number];\n\nexport interface XYPosition {\n x: number;\n y: number;\n}\n\nexport const Point = {\n isEquals(point?: Point, otherPoint?: Point) {\n return point && otherPoint && point[0] === otherPoint[0] && point[1] === otherPoint[1];\n },\n isHorizontal(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverHorizontal([point, otherPoint], tolerance);\n },\n isOverHorizontal(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[1] - points[0][1]) <= tolerance);\n },\n isVertical(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverVertical([point, otherPoint], tolerance);\n },\n isOverVertical(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[0] - points[0][0]) <= tolerance);\n },\n isAlign(points: Point[], tolerance: number = 0) {\n return Point.isOverHorizontal(points, tolerance) || Point.isOverVertical(points, tolerance);\n },\n getOffsetX(point1: Point, point2: Point) {\n return point2[0] - point1[0];\n },\n getOffsetY(point1: Point, point2: Point) {\n return point2[1] - point1[1];\n }\n};\n","import { PlaitBoard } from './board';\nimport { PlaitOperation } from './operation';\n\nexport interface PlaitHistory {\n redos: PlaitOperation[][];\n undos: PlaitOperation[][];\n}\n\nexport const SAVING = new WeakMap<PlaitBoard, boolean | undefined>();\nexport const MERGING = new WeakMap<PlaitBoard, boolean | undefined>();\n","export interface PlaitTheme {\n themeColorMode: ThemeColorMode;\n}\n\nexport interface ThemeColor {\n mode: ThemeColorMode | string;\n boardBackground?: string;\n textColor: string;\n}\n\nexport enum ThemeColorMode {\n 'default' = 'default',\n 'colorful' = 'colorful',\n 'soft' = 'soft',\n 'retro' = 'retro',\n 'dark' = 'dark',\n 'starry' = 'starry'\n}\n\nexport const DefaultThemeColor: ThemeColor = {\n mode: ThemeColorMode.default,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const ColorfulThemeColor: ThemeColor = {\n mode: ThemeColorMode.colorful,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const SoftThemeColor: ThemeColor = {\n mode: ThemeColorMode.soft,\n boardBackground: '#f5f5f5',\n textColor: '#333333'\n};\n\nexport const RetroThemeColor: ThemeColor = {\n mode: ThemeColorMode.retro,\n boardBackground: '#f9f8ed',\n textColor: '#333333'\n};\n\nexport const DarkThemeColor: ThemeColor = {\n mode: ThemeColorMode.dark,\n boardBackground: '#141414',\n textColor: '#FFFFFF'\n};\n\nexport const StarryThemeColor: ThemeColor = {\n mode: ThemeColorMode.starry,\n boardBackground: '#0d2537',\n textColor: '#FFFFFF'\n};\n\nexport const ThemeColors: ThemeColor[] = [\n DefaultThemeColor,\n ColorfulThemeColor,\n SoftThemeColor,\n RetroThemeColor,\n DarkThemeColor,\n StarryThemeColor\n];\n","export enum Direction {\n left = 'left',\n top = 'top',\n right = 'right',\n bottom = 'bottom'\n}\n\nexport type Vector = [number, number];\n\nexport type DirectionFactor = -1 | 0 | 1;\n\nexport type DirectionFactors = [DirectionFactor, DirectionFactor];\n","import { Ancestor, PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const rectangles: RectangleClient[] = [];\n const callback = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n rectangles.push(nodeRectangle);\n } else {\n console.error(`can not get rectangle of element:`, node);\n }\n };\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => callback(node),\n node => board.isRecursion(node)\n );\n } else {\n callback(element);\n }\n });\n if (rectangles.length > 0) {\n return RectangleClient.getBoundingRectangle(rectangles);\n } else {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n\nexport function getElementById<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n id: string,\n dataSource?: PlaitElement[]\n): T | undefined {\n if (!dataSource) {\n dataSource = findElements(board, { match: element => true, recursion: element => true });\n }\n let element = dataSource.find(element => element.id === id) as T;\n return element;\n}\n\nexport function findElements<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n options: {\n match: (element: PlaitElement) => boolean;\n recursion: (element: PlaitElement) => boolean;\n isReverse?: boolean;\n }\n): T[] {\n let elements: T[] = [];\n const isReverse = options.isReverse ?? true;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (!PlaitBoard.isBoard(node) && options.match(node)) {\n elements.push(node as T);\n }\n },\n (value: Ancestor) => {\n if (PlaitBoard.isBoard(value)) {\n return true;\n } else {\n return getIsRecursionFunc(board)(value) && options.recursion(value);\n }\n },\n isReverse\n );\n return elements;\n}\n","import { PlaitPointerType } from './pointer';\nimport { ComponentType, PlaitElement } from './element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitHistory } from './history';\nimport { PlaitOperation } from './operation';\nimport { Selection } from './selection';\nimport { Viewport } from './viewport';\nimport { PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport {\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_CACHE,\n IS_TEXT_EDITABLE,\n NODE_TO_INDEX,\n NODE_TO_PARENT\n} from '../utils/weak-maps';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { Point } from './point';\nimport { RectangleClient } from './rectangle-client';\nimport { getRectangleByElements } from '../utils/element';\nimport { PathRef, PathRefOptions } from './path-ref';\nimport { Ancestor, PlaitNode } from './node';\nimport { Path } from './path';\nimport { PlaitTheme, ThemeColor, ThemeColors } from './theme';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport { ClipboardData, WritableClipboardContext } from '../utils';\n\nexport interface PlaitBoard {\n viewport: Viewport;\n children: PlaitElement[];\n theme: PlaitTheme;\n operations: PlaitOperation[];\n // record pointer selection or drag selection\n // it will be dirty when board viewport change\n selection: Selection | null;\n pointer: PlaitPointerType | string;\n history: PlaitHistory;\n options: PlaitBoardOptions;\n undo: () => void;\n redo: () => void;\n apply: (operation: PlaitOperation) => void;\n onChange: () => void;\n afterChange: () => void;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n mouseleave: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keyDown: (event: KeyboardEvent) => void;\n globalKeyDown: (event: KeyboardEvent) => void;\n keyUp: (event: KeyboardEvent) => void;\n setFragment: (\n data: DataTransfer | null,\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n type: 'copy' | 'cut'\n ) => void;\n insertFragment: (data: DataTransfer | null, clipboardData: ClipboardData | null, targetPoint: Point) => void;\n deleteFragment: (data: DataTransfer | null) => void;\n getDeletedFragment: (data: PlaitElement[]) => PlaitElement[];\n getRelatedFragment: (data: PlaitElement[]) => PlaitElement[];\n dblClick: (event: MouseEvent) => void;\n drawElement: (context: PlaitPluginElementContext) => SVGGElement[] | ComponentType<PlaitPluginElementComponent>;\n redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;\n destroyElement: (context: PlaitPluginElementContext) => void;\n isRectangleHit: (element: PlaitElement, range: Selection) => boolean;\n // When the element has no fill color, it is considered a hit only if it hits the border.\n isHit: (element: PlaitElement, point: Point) => boolean;\n isInsidePoint: (element: PlaitElement, point: Point) => boolean;\n isRecursion: (element: PlaitElement) => boolean;\n isMovable: (element: PlaitElement) => boolean;\n getRectangle: (element: PlaitElement) => RectangleClient | null;\n isWithinSelection: (element: PlaitElement) => boolean;\n pathRef: (path: Path, options?: PathRefOptions) => PathRef;\n pathRefs: () => Set<PathRef>;\n applyTheme: (element: PlaitElement) => void;\n isAlign: (element: PlaitElement) => boolean;\n isImageBindingAllowed: (element: PlaitElement) => boolean;\n\n // pointer hook\n pointerDown: (pointer: PointerEvent) => void;\n pointerMove: (pointer: PointerEvent) => void;\n pointerUp: (pointer: PointerEvent) => void;\n pointerCancel: (pointer: PointerEvent) => void;\n pointerOut: (pointer: PointerEvent) => void;\n pointerLeave: (pointer: PointerEvent) => void;\n globalPointerMove: (pointer: PointerEvent) => void;\n globalPointerUp: (pointer: PointerEvent) => void;\n}\n\nexport interface PlaitBoardChangeEvent {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n\nexport interface PlaitBoardOptions {\n readonly?: boolean;\n hideScrollbar?: boolean;\n disabledScrollOnNonFocus?: boolean;\n themeColors?: ThemeColor[];\n}\n\nexport interface PlaitBoardMove {\n x: number;\n y: number;\n}\n\nexport const PlaitBoard = {\n isBoard(value: any): value is PlaitBoard {\n const cachedIsBoard = IS_BOARD_CACHE.get(value);\n if (cachedIsBoard !== undefined) {\n return cachedIsBoard;\n }\n const isBoard = typeof value.onChange === 'function' && typeof value.apply === 'function';\n IS_BOARD_CACHE.set(value, isBoard);\n return isBoard;\n },\n findPath(board: PlaitBoard, node: PlaitNode): Path {\n const path: Path = [];\n let child: Ancestor = node;\n while (true) {\n const parent = NODE_TO_PARENT.get(child as PlaitElement);\n if (parent == null) {\n if (PlaitBoard.isBoard(child)) {\n return path;\n } else {\n break;\n }\n }\n const i = NODE_TO_INDEX.get(child as PlaitElement);\n if (i == null) {\n break;\n }\n path.unshift(i);\n child = parent;\n }\n throw new Error(`Unable to find the path for Plait node: ${JSON.stringify(node)}`);\n },\n getHost(board: PlaitBoard) {\n return BOARD_TO_HOST.get(board) as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.host as SVGSVGElement;\n },\n getElementUpperHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.upperHost as SVGSVGElement;\n },\n getElementActiveHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.activeHost as SVGSVGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getComponent(board: PlaitBoard) {\n return BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n },\n getBoardContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.container as HTMLElement;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.viewportContainer as HTMLElement;\n },\n isFocus(board: PlaitBoard) {\n return !!board.selection;\n },\n isReadonly(board: PlaitBoard) {\n return board.options.readonly;\n },\n hasBeenTextEditing(board: PlaitBoard) {\n return !!IS_TEXT_EDITABLE.get(board);\n },\n getPointer<T = PlaitPointerType>(board: PlaitBoard) {\n return board.pointer as T;\n },\n isPointer<T = PlaitPointerType>(board: PlaitBoard, pointer: T) {\n return board.pointer === pointer;\n },\n isInPointer<T = PlaitPointerType>(board: PlaitBoard, pointers: T[]) {\n const point = board.pointer as T;\n return pointers.includes(point);\n },\n getMovingPointInBoard(board: PlaitBoard) {\n return BOARD_TO_MOVING_POINT_IN_BOARD.get(board);\n },\n isMovingPointInBoard(board: PlaitBoard) {\n const point = BOARD_TO_MOVING_POINT.get(board);\n const rect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n if (point && distanceBetweenPointAndRectangle(point[0], point[1], rect) === 0) {\n return true;\n }\n return false;\n },\n getThemeColors<T extends ThemeColor = ThemeColor>(board: PlaitBoard) {\n return (board.options.themeColors || ThemeColors) as T[];\n }\n};\n","import { PlaitOperation } from './operation';\nimport { Path } from './path';\n\nexport interface PathRef {\n current: Path | null;\n affinity: 'forward' | 'backward' | null;\n unref(): Path | null;\n}\n\nexport interface PathRefOptions {\n affinity?: 'forward' | 'backward' | null;\n}\n\nexport const PathRef = {\n transform(ref: PathRef, op: PlaitOperation): void {\n const { current } = ref;\n\n if (current == null) {\n return;\n }\n\n const path = Path.transform(current, op);\n ref.current = path;\n\n if (path == null) {\n ref.unref();\n }\n }\n};\n","import { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { Transforms } from '../transforms';\nimport { FLUSHING, PATH_REFS } from '../utils/weak-maps';\nimport { PathRef, PathRefOptions } from '../interfaces/path-ref';\nimport { Path } from '../interfaces/path';\nimport { ThemeColorMode } from '../interfaces/theme';\nimport { CoreTransforms } from '../transforms/element';\nimport { WritableClipboardContext, setClipboardData } from '../utils';\n\nexport function createBoard(children: PlaitElement[], options?: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n viewport: {\n zoom: 1\n },\n children,\n theme: { themeColorMode: ThemeColorMode.default },\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n options: options || {\n readonly: false,\n hideScrollbar: false,\n disabledScrollOnNonFocus: false\n },\n pointer: options?.readonly ? PlaitPointerType.hand : PlaitPointerType.selection,\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n for (const ref of board.pathRefs()) {\n PathRef.transform(ref, operation);\n }\n\n board.operations.push(operation);\n\n Transforms.transform(board, operation);\n\n if (!FLUSHING.get(board)) {\n FLUSHING.set(board, true);\n\n Promise.resolve().then(() => {\n FLUSHING.set(board, false);\n board.onChange();\n board.afterChange();\n board.operations = [];\n });\n }\n },\n pathRef: (path: Path, options?: PathRefOptions) => {\n const affinity = options?.affinity || 'forward';\n const ref: PathRef = {\n current: path,\n affinity,\n unref() {\n const { current } = ref;\n const pathRefs = board.pathRefs();\n pathRefs.delete(ref);\n ref.current = null;\n return current;\n }\n };\n\n const refs = board.pathRefs();\n refs.add(ref);\n return ref;\n },\n pathRefs: () => {\n let refs = PATH_REFS.get(board);\n\n if (!refs) {\n refs = new Set();\n PATH_REFS.set(board, refs);\n }\n\n return refs;\n },\n onChange: () => {},\n afterChange: () => {},\n mousedown: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n mouseleave: (event: MouseEvent) => {},\n globalMousemove: (event: MouseEvent) => {},\n mouseup: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n keyDown: (event: KeyboardEvent) => {},\n globalKeyDown: (event: KeyboardEvent) => {},\n keyUp: (event: KeyboardEvent) => {},\n dblClick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null, clipboardContext: WritableClipboardContext | null) => {\n setClipboardData(data, clipboardContext);\n },\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {\n const elements = board.getDeletedFragment([]);\n CoreTransforms.removeElements(board, elements);\n },\n getDeletedFragment: (data: PlaitElement[]) => data,\n getRelatedFragment: (data: PlaitElement[]) => data,\n drawElement: (context: PlaitPluginElementContext) => [],\n redrawElement: (context: PlaitPluginElementContext, previousContext) => {},\n destroyElement: (context: PlaitPluginElementContext) => {},\n isWithinSelection: element => false,\n isRectangleHit: element => false,\n isHit: element => false,\n isInsidePoint: element => false,\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null,\n applyTheme: (element: PlaitElement) => {},\n isAlign: element => false,\n pointerDown: pointer => {},\n pointerMove: pointer => {},\n pointerUp: pointer => {},\n pointerCancel: pointer => {},\n pointerOut: pointer => {},\n pointerLeave: pointer => {},\n globalPointerMove: pointer => {},\n globalPointerUp: pointer => {},\n isImageBindingAllowed: (element: PlaitElement) => false\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE, BOARD_TO_AFTER_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange, afterChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n if (onContextChange) {\n onContextChange();\n }\n onChange();\n };\n\n board.afterChange = () => {\n const afterContextChange = BOARD_TO_AFTER_CHANGE.get(board);\n if (afterContextChange) {\n afterContextChange();\n }\n afterChange();\n }\n\n return board;\n}\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistory<T extends PlaitBoard>(board: T) {\n const { apply, keyDown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keyDown(event);\n };\n\n return board;\n}\n","import { PlaitPointerType, PlaitBoard, PlaitBoardMove } from '../interfaces';\nimport { BoardTransforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { updateViewportContainerScroll } from '../utils/viewport';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { pointerDown, pointerMove, globalPointerUp, keyDown, keyUp } = board;\n let isMoving: boolean = false;\n const plaitBoardMove: PlaitBoardMove = {\n x: 0,\n y: 0\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && isMainPointer(event)) {\n isMoving = true;\n PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && isMoving) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - plaitBoardMove.x);\n const top = viewportContainer.scrollTop - (event.y - plaitBoardMove.y);\n updateViewportContainerScroll(board, left, top, false);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (isMoving) {\n isMoving = false;\n PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');\n plaitBoardMove.x = 0;\n plaitBoardMove.y = 0;\n }\n globalPointerUp(event);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n if (!PlaitBoard.isPointer(board, PlaitPointerType.hand)) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.hand);\n }\n event.preventDefault();\n }\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n if (!board.options.readonly && event.code === 'Space') {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n keyUp(event);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport {\n cacheSelectedElements,\n clearSelectedElement,\n getHitElementByPoint,\n getHitElementsBySelection,\n getHitSelectedElements,\n getSelectedElements,\n removeSelectedElement\n} from '../utils/selected-element';\nimport { PlaitElement, PlaitGroup, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport {\n clearSelectionMoving,\n createSelectionRectangleG,\n deleteTemporaryElements,\n drawRectangle,\n getElementsInGroup,\n getElementsInGroupByElement,\n getGroupByElement,\n getSelectedGroups,\n getTemporaryElements,\n isDragging,\n isHandleSelection,\n isSelectionMoving,\n isSetSelectionOperation,\n preventTouchMove,\n setSelectionMoving,\n throttleRAF,\n toHostPoint,\n toViewBoxPoint\n} from '../utils';\nimport { PlaitOptionsBoard, PlaitPluginOptions } from './with-options';\nimport { PlaitPluginKey } from '../interfaces/plugin-key';\nimport { Selection } from '../interfaces/selection';\nimport { PRESS_AND_MOVE_BUFFER } from '../constants';\n\nexport interface WithPluginOptions extends PlaitPluginOptions {\n isMultiple: boolean;\n isDisabledSelect: boolean;\n}\n\nexport function withSelection(board: PlaitBoard) {\n const { pointerDown, pointerUp, pointerMove, globalPointerUp, onChange, afterChange } = board;\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionRectangleG: SVGGElement | null;\n let previousSelectedElements: PlaitElement[];\n let isShift = false;\n let isTextSelection = false;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!isShift && event.shiftKey) {\n isShift = true;\n }\n if (isShift && !event.shiftKey) {\n isShift = false;\n }\n const isHitText = !!(event.target instanceof Element && event.target.closest('.plait-richtext-container'));\n isTextSelection = isHitText && PlaitBoard.hasBeenTextEditing(board);\n\n // prevent text from being selected\n if (event.shiftKey && !isTextSelection) {\n event.preventDefault();\n }\n\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selectedElements = getSelectedElements(board);\n const hitElement = getHitElementByPoint(board, point);\n const hitSelectedElements = selectedElements.length > 1 ? getHitSelectedElements(board, point) : [];\n const isHitTarget = hitElement || hitSelectedElements.length > 0;\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && !isHitTarget && options.isMultiple && !options.isDisabledSelect) {\n preventTouchMove(board, event, true);\n // start rectangle selection\n start = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n }\n\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!isTextSelection) {\n // prevent text from being selected\n event.preventDefault();\n }\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && start) {\n const movedTarget = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const rectangle = RectangleClient.getRectangleByPoints([start, movedTarget]);\n selectionMovingG?.remove();\n if (Math.hypot(rectangle.width, rectangle.height) > PRESS_AND_MOVE_BUFFER || isSelectionMoving(board)) {\n end = movedTarget;\n throttleRAF(board, 'with-selection', () => {\n if (start && end) {\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n });\n setSelectionMoving(board);\n selectionMovingG = drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getElementActiveHost(board).append(selectionMovingG);\n }\n }\n pointerMove(event);\n };\n\n // handle the end of click select\n board.pointerUp = (event: PointerEvent) => {\n const isSetSelectionPointer =\n PlaitBoard.isPointer(board, PlaitPointerType.selection) || PlaitBoard.isPointer(board, PlaitPointerType.hand);\n const isSkip = !isMainPointer(event) || isDragging(board) || !isSetSelectionPointer;\n if (isSkip) {\n pointerUp(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selection = { anchor: point, focus: point };\n Transforms.setSelection(board, selection);\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardContainer(board).contains(event.target);\n const isInDocument = event.target instanceof Node && document.contains(event.target);\n const isAttachedElement = event.target instanceof Element && event.target.closest(`.${ATTACHED_ELEMENT_CLASS_NAME}`);\n // Clear selection when mouse board outside area\n // The framework needs to determine whether the board is focused through selection\n if (!isInBoard && !start && !isAttachedElement && isInDocument) {\n Transforms.setSelection(board, null);\n }\n }\n start = null;\n end = null;\n isTextSelection = false;\n preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n board.onChange = () => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n if (options.isDisabledSelect) {\n clearSelectedElement(board);\n }\n // remove selected element if include\n board.operations.forEach(op => {\n if (op.type === 'remove_node') {\n removeSelectedElement(board, op.node, true);\n }\n });\n if (isHandleSelection(board) && isSetSelectionOperation(board)) {\n try {\n if (!isShift) {\n selectionRectangleG?.remove();\n }\n const temporaryElements = getTemporaryElements(board);\n let elements = temporaryElements ? temporaryElements : getHitElementsBySelection(board);\n if (!options.isMultiple && elements.length > 1) {\n elements = [elements[0]];\n }\n const isHitElementWithGroup = elements.some(item => item.groupId);\n if (isShift) {\n const newSelectedElements = [...getSelectedElements(board)];\n if (board.selection && Selection.isCollapsed(board.selection)) {\n if (isHitElementWithGroup) {\n let pendingElements: PlaitElement[] = [...elements];\n const hitElement = elements[0];\n const groups = getGroupByElement(board, hitElement, true) as PlaitGroup[];\n const selectedGroups = getSelectedGroups(board, groups);\n const elementsInHighestGroup = getElementsInGroup(board, groups[groups.length - 1], true);\n if (selectedGroups.length > 0) {\n if (selectedGroups.length > 1) {\n pendingElements = getElementsInGroup(board, selectedGroups[selectedGroups.length - 2], true);\n }\n } else {\n if (!newSelectedElements.includes(hitElement)) {\n const selectedElementsInGroup = elementsInHighestGroup.filter(item =>\n newSelectedElements.includes(item)\n );\n // When partially selected elements belong to a group,\n // only select those elements along with the hit elements.\n if (selectedElementsInGroup.length) {\n pendingElements.push(...selectedElementsInGroup);\n } else {\n pendingElements = elementsInHighestGroup;\n }\n } else {\n pendingElements = [];\n }\n }\n elementsInHighestGroup.forEach(element => {\n if (newSelectedElements.includes(element)) {\n newSelectedElements.splice(newSelectedElements.indexOf(element), 1);\n }\n });\n if (pendingElements.length) {\n newSelectedElements.push(...pendingElements);\n }\n } else {\n elements.forEach(element => {\n if (newSelectedElements.includes(element)) {\n newSelectedElements.splice(newSelectedElements.indexOf(element), 1);\n } else {\n newSelectedElements.push(element);\n }\n });\n }\n cacheSelectedElements(board, newSelectedElements);\n } else {\n let newElements: PlaitElement[] = [...elements];\n if (isHitElementWithGroup) {\n elements.forEach(item => {\n if (!item.groupId) {\n newElements.push(item);\n } else {\n newElements.push(...getElementsInGroupByElement(board, item));\n }\n });\n }\n newElements.forEach(element => {\n if (!newSelectedElements.includes(element)) {\n newSelectedElements.push(element);\n }\n });\n cacheSelectedElements(board, newSelectedElements);\n }\n } else {\n let newSelectedElements = [...elements];\n if (isHitElementWithGroup) {\n const isCollapsed = Selection.isCollapsed(board.selection!);\n if (!isCollapsed) {\n newSelectedElements = [];\n elements.forEach(item => {\n if (!item.groupId) {\n newSelectedElements.push(item);\n } else {\n newSelectedElements.push(...getElementsInGroupByElement(board, item));\n }\n });\n } else {\n const hitElement = elements[0];\n const groups = getGroupByElement(board, hitElement, true) as PlaitGroup[];\n const selectedGroups = getSelectedGroups(board, groups);\n if (selectedGroups.length > 0) {\n if (selectedGroups.length > 1) {\n newSelectedElements = getElementsInGroup(board, selectedGroups[selectedGroups.length - 2], true);\n }\n } else {\n newSelectedElements = getElementsInGroup(board, groups[groups.length - 1], true);\n }\n }\n }\n cacheSelectedElements(board, newSelectedElements);\n }\n const newElements = getSelectedElements(board);\n previousSelectedElements = newElements;\n deleteTemporaryElements(board);\n if (!isSelectionMoving(board)) {\n selectionRectangleG?.remove();\n if (newElements.length > 1) {\n selectionRectangleG = createSelectionRectangleG(board);\n }\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n board.afterChange = () => {\n if (isHandleSelection(board) && !isSetSelectionOperation(board)) {\n try {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n if (\n previousSelectedElements &&\n (currentSelectedElements.length !== previousSelectedElements.length ||\n currentSelectedElements.some((c, index) => c !== previousSelectedElements[index]))\n ) {\n selectionRectangleG?.remove();\n selectionRectangleG = createSelectionRectangleG(board);\n previousSelectedElements = currentSelectedElements;\n }\n } else {\n selectionRectangleG?.remove();\n }\n } catch (error) {\n console.error(error);\n }\n }\n afterChange();\n };\n\n (board as PlaitOptionsBoard).setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, {\n isMultiple: true,\n isDisabledSelect: false\n });\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { debounce } from '../utils/common';\nimport { initializeViewBox, isFromScrolling, setIsFromScrolling, updateViewportOffset } from '../utils/viewport';\n\nexport function withViewport(board: PlaitBoard) {\n const { onChange } = board;\n\n const throttleUpdate = debounce(\n () => {\n initializeViewBox(board);\n updateViewportOffset(board);\n },\n 500,\n { leading: true }\n );\n\n board.onChange = () => {\n const isSetViewport = board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.every(op => op.type === 'set_selection');\n if (isOnlySetSelection) {\n return onChange();\n }\n if (isSetViewport && isFromScrolling(board)) {\n setIsFromScrolling(board, false);\n return onChange();\n }\n if (isSetViewport) {\n initializeViewBox(board);\n updateViewportOffset(board);\n } else {\n throttleUpdate();\n }\n onChange();\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { createG } from './dom/common';\nimport { PlaitElement } from '../interfaces/element';\nimport { Ancestor } from '../interfaces/node';\nimport { Point, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { depthFirstRecursion } from './tree';\n\nexport interface AlignRef {\n deltaX: number;\n deltaY: number;\n g: SVGGElement;\n}\n\nexport interface DistributeRef {\n before: { distance: number; index: number }[];\n after: { distance: number; index: number }[];\n}\n\nconst ALIGN_TOLERANCE = 2;\n\nexport class AlignReaction {\n alignRectangles: RectangleClient[];\n\n constructor(private board: PlaitBoard, private activeElements: PlaitElement[], private activeRectangle: RectangleClient) {\n this.alignRectangles = this.getAlignRectangle();\n }\n\n getAlignRectangle() {\n const result: RectangleClient[] = [];\n depthFirstRecursion<Ancestor>(\n this.board,\n node => {\n if (PlaitBoard.isBoard(node) || this.activeElements.some(element => node.id === element.id) || !this.board.isAlign(node)) {\n return;\n }\n const rectangle = this.board.getRectangle(node);\n rectangle && result.push(rectangle);\n },\n node => {\n if (node && (PlaitBoard.isBoard(node) || this.board.isRecursion(node))) {\n return true;\n } else {\n return false;\n }\n },\n true\n );\n return result;\n }\n\n handleAlign(): AlignRef {\n const alignRectangles = this.getAlignRectangle();\n const g = createG();\n let alignLines = [];\n\n const offset = 12;\n let deltaX = 0;\n let deltaY = 0;\n let isCorrectX = false;\n let isCorrectY = false;\n\n for (let alignRectangle of alignRectangles) {\n const closestDistances = this.calculateClosestDistances(this.activeRectangle, alignRectangle);\n let canDrawHorizontal = false;\n if (!isCorrectX && closestDistances.absXDistance < ALIGN_TOLERANCE) {\n deltaX = closestDistances.xDistance;\n this.activeRectangle.x -= deltaX;\n isCorrectX = true;\n canDrawHorizontal = true;\n }\n\n if (closestDistances.absXDistance === 0) {\n canDrawHorizontal = true;\n }\n\n if (canDrawHorizontal) {\n const verticalY = [\n alignRectangle.y,\n alignRectangle.y + alignRectangle.height,\n this.activeRectangle.y,\n this.activeRectangle.y + this.activeRectangle.height\n ];\n const lineTopY = Math.min(...verticalY) - offset;\n const lineBottomY = Math.max(...verticalY) + offset;\n const leftLine = [this.activeRectangle.x, lineTopY, this.activeRectangle.x, lineBottomY];\n const middleLine = [\n this.activeRectangle.x + this.activeRectangle.width / 2,\n lineTopY,\n this.activeRectangle.x + this.activeRectangle.width / 2,\n lineBottomY\n ];\n const rightLine = [\n this.activeRectangle.x + this.activeRectangle.width,\n lineTopY,\n this.activeRectangle.x + this.activeRectangle.width,\n lineBottomY\n ];\n\n const shouldDrawLeftLine =\n closestDistances.indexX === 0 ||\n closestDistances.indexX === 1 ||\n (closestDistances.indexX === 2 && this.activeRectangle.width === alignRectangle.width);\n if (shouldDrawLeftLine && !alignLines[0]) {\n alignLines[0] = leftLine;\n }\n\n const shouldDrawRightLine =\n closestDistances.indexX === 2 ||\n closestDistances.indexX === 3 ||\n (closestDistances.indexX === 0 && this.activeRectangle.width === alignRectangle.width);\n if (shouldDrawRightLine && !alignLines[2]) {\n alignLines[2] = rightLine;\n }\n\n const shouldDrawMiddleLine = closestDistances.indexX === 4 || (!shouldDrawLeftLine && !shouldDrawRightLine);\n if (shouldDrawMiddleLine && !alignLines[1]) {\n alignLines[1] = middleLine;\n }\n\n isCorrectX = true;\n }\n\n let canDrawVertical = false;\n if (!isCorrectY && closestDistances.absYDistance < ALIGN_TOLERANCE) {\n deltaY = closestDistances.yDistance;\n this.activeRectangle.y -= deltaY;\n isCorrectY = true;\n canDrawVertical = true;\n }\n if (closestDistances.absYDistance === 0) {\n canDrawVertical = true;\n }\n if (canDrawVertical) {\n const horizontalX = [\n alignRectangle.x,\n alignRectangle.x + alignRectangle.width,\n this.activeRectangle.x,\n this.activeRectangle.x + this.activeRectangle.width\n ];\n const lineLeftX = Math.min(...horizontalX) - offset;\n const lineRightX = Math.max(...horizontalX) + offset;\n const topLine = [lineLeftX, this.activeRectangle.y, lineRightX, this.activeRectangle.y];\n const horizontalMiddleLine = [\n lineLeftX,\n this.activeRectangle.y + this.activeRectangle.height / 2,\n lineRightX,\n this.activeRectangle.y + this.activeRectangle.height / 2\n ];\n const bottomLine = [\n lineLeftX,\n this.activeRectangle.y + this.activeRectangle.height,\n lineRightX,\n this.activeRectangle.y + this.activeRectangle.height\n ];\n\n const shouldDrawTopLine =\n closestDistances.indexY === 0 ||\n closestDistances.indexY === 1 ||\n (closestDistances.indexY === 2 && this.activeRectangle.height === alignRectangle.height);\n if (shouldDrawTopLine && !alignLines[3]) {\n alignLines[3] = topLine;\n }\n\n const shouldDrawBottomLine =\n closestDistances.indexY === 2 ||\n closestDistances.indexY === 3 ||\n (closestDistances.indexY === 0 && this.activeRectangle.width === alignRectangle.width);\n if (shouldDrawBottomLine && !alignLines[5]) {\n alignLines[5] = bottomLine;\n }\n\n const shouldDrawMiddleLine = closestDistances.indexY === 4 || (!shouldDrawTopLine && !shouldDrawBottomLine);\n if (shouldDrawMiddleLine && !alignLines[4]) {\n alignLines[4] = horizontalMiddleLine;\n }\n }\n }\n\n const alignDeltaX = deltaX;\n const alignDeltaY = deltaY;\n\n this.activeRectangle.x += deltaX;\n this.activeRectangle.y += deltaY;\n const distributeHorizontalResult = this.alignDistribute(alignRectangles, true);\n const distributeVerticalResult = this.alignDistribute(alignRectangles, false);\n const distributeLines: Point[][] = [...distributeHorizontalResult.distributeLines, ...distributeVerticalResult.distributeLines];\n if (distributeHorizontalResult.delta) {\n deltaX = distributeHorizontalResult.delta;\n if (alignDeltaX !== deltaX) {\n alignLines[0] = [];\n alignLines[1] = [];\n alignLines[2] = [];\n }\n }\n\n if (distributeVerticalResult.delta) {\n deltaY = distributeVerticalResult.delta;\n if (alignDeltaY !== deltaY) {\n alignLines[3] = [];\n alignLines[4] = [];\n alignLines[5] = [];\n }\n }\n\n if (alignLines.length) {\n this.drawAlignLines(alignLines, g);\n }\n\n if (distributeLines.length) {\n this.drawDistributeLines(distributeLines, g);\n }\n\n return { deltaX, deltaY, g };\n }\n\n calculateClosestDistances(activeRectangle: RectangleClient, alignRectangle: RectangleClient) {\n const activeRectangleCenter = [activeRectangle.x + activeRectangle.width / 2, activeRectangle.y + activeRectangle.height / 2];\n const alignRectangleCenter = [alignRectangle.x + alignRectangle.width / 2, alignRectangle.y + alignRectangle.height / 2];\n\n const centerXDistance = activeRectangleCenter[0] - alignRectangleCenter[0];\n const centerYDistance = activeRectangleCenter[1] - alignRectangleCenter[1];\n\n const leftToLeft = activeRectangle.x - alignRectangle.x;\n const leftToRight = activeRectangle.x - (alignRectangle.x + alignRectangle.width);\n const rightToRight = activeRectangle.x + activeRectangle.width - (alignRectangle.x + alignRectangle.width);\n const rightToLeft = activeRectangle.x + activeRectangle.width - alignRectangle.x;\n\n const topToTop = activeRectangle.y - alignRectangle.y;\n const topToBottom = activeRectangle.y - (alignRectangle.y + alignRectangle.height);\n const bottomToTop = activeRectangle.y + activeRectangle.height - alignRectangle.y;\n const bottomToBottom = activeRectangle.y + activeRectangle.height - (alignRectangle.y + alignRectangle.height);\n\n const xDistances = [leftToLeft, leftToRight, rightToRight, rightToLeft, centerXDistance];\n const yDistances = [topToTop, topToBottom, bottomToBottom, bottomToTop, centerYDistance];\n\n const xDistancesAbs = xDistances.map(distance => Math.abs(distance));\n const yDistancesAbs = yDistances.map(distance => Math.abs(distance));\n\n const indexX = xDistancesAbs.indexOf(Math.min(...xDistancesAbs));\n const indexY = yDistancesAbs.indexOf(Math.min(...yDistancesAbs));\n\n return {\n absXDistance: xDistancesAbs[indexX],\n xDistance: xDistances[indexX],\n absYDistance: yDistancesAbs[indexY],\n yDistance: yDistances[indexY],\n indexX,\n indexY\n };\n }\n\n alignDistribute(alignRectangles: RectangleClient[], isHorizontal: boolean) {\n let distributeLines: any[] = [];\n let delta = 0;\n let rectangles: RectangleClient[] = [];\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n\n const activeRectangleCenter = this.activeRectangle[axis] + this.activeRectangle[side] / 2;\n alignRectangles.forEach(rec => {\n const isCross = isHorizontal ? isHorizontalCross(rec, this.activeRectangle) : isVerticalCross(rec, this.activeRectangle);\n if (isCross && !RectangleClient.isHit(rec, this.activeRectangle)) {\n rectangles.push(rec);\n }\n });\n rectangles = [...rectangles, this.activeRectangle].sort((a, b) => a[axis] - b[axis]);\n\n const refArray: DistributeRef[] = [];\n let distributeDistance = 0;\n let beforeIndex = undefined;\n let afterIndex = undefined;\n\n for (let i = 0; i < rectangles.length; i++) {\n for (let j = i + 1; j < rectangles.length; j++) {\n const before = rectangles[i];\n const after = rectangles[j];\n const distance = after[axis] - (before[axis] + before[side]);\n let dif = Infinity;\n if (refArray[i]?.after) {\n refArray[i].after.push({ distance, index: j });\n } else {\n refArray[i] = { ...refArray[i], after: [{ distance, index: j }] };\n }\n\n if (refArray[j]?.before) {\n refArray[j].before.push({ distance, index: i });\n } else {\n refArray[j] = { ...refArray[j], before: [{ distance, index: i }] };\n }\n\n //middle\n let _center = (before[axis] + before[side] + after[axis]) / 2;\n dif = Math.abs(activeRectangleCenter - _center);\n if (dif < ALIGN_TOLERANCE) {\n distributeDistance = (after[axis] - (before[axis] + before[side]) - this.activeRectangle[side]) / 2;\n delta = activeRectangleCenter - _center;\n beforeIndex = i;\n afterIndex = j;\n }\n\n //after\n const distanceRight = after[axis] - (before[axis] + before[side]);\n _center = after[axis] + after[side] + distanceRight + this.activeRectangle[side] / 2;\n dif = Math.abs(activeRectangleCenter - _center);\n if (!distributeDistance && dif < ALIGN_TOLERANCE) {\n distributeDistance = distanceRight;\n beforeIndex = j;\n delta = activeRectangleCenter - _center;\n }\n\n //before\n const distanceBefore = after[axis] - (before[axis] + before[side]);\n _center = before[axis] - distanceBefore - this.activeRectangle[side] / 2;\n dif = Math.abs(activeRectangleCenter - _center);\n\n if (!distributeDistance && dif < ALIGN_TOLERANCE) {\n distributeDistance = distanceBefore;\n afterIndex = i;\n delta = activeRectangleCenter - _center;\n }\n }\n }\n\n const activeIndex = rectangles.indexOf(this.activeRectangle);\n let beforeIndexes: number[] = [];\n let afterIndexes: number[] = [];\n if (beforeIndex !== undefined) {\n beforeIndexes.push(beforeIndex);\n findRectangle(distributeDistance, refArray[beforeIndex], 'before', beforeIndexes);\n }\n\n if (afterIndex !== undefined) {\n afterIndexes.push(afterIndex);\n findRectangle(distributeDistance, refArray[afterIndex], 'after', afterIndexes);\n }\n\n if (beforeIndexes.length || afterIndexes.length) {\n const indexArr = [...beforeIndexes.reverse(), activeIndex, ...afterIndexes];\n this.activeRectangle[axis] -= delta;\n for (let i = 1; i < indexArr.length; i++) {\n distributeLines.push(getLinePoints(rectangles[indexArr[i - 1]], rectangles[indexArr[i]]));\n }\n }\n\n function findRectangle(distance: number, ref: DistributeRef, direction: string, rectangleIndexes: number[]) {\n const arr = ref[direction as keyof DistributeRef];\n const index = refArray.indexOf(ref);\n if ((index === 0 && direction === 'before') || (index === refArray.length - 1 && direction === 'after')) return;\n for (let i = 0; i < arr.length; i++) {\n if (Math.abs(arr[i].distance - distance) < 0.1) {\n rectangleIndexes.push(arr[i].index);\n findRectangle(distance, refArray[arr[i].index], direction, rectangleIndexes);\n return;\n }\n }\n }\n\n function getLinePoints(beforeRectangle: RectangleClient, afterRectangle: RectangleClient) {\n const oppositeAxis = axis === 'x' ? 'y' : 'x';\n const oppositeSide = side === 'width' ? 'height' : 'width';\n const align = [\n beforeRectangle[oppositeAxis],\n beforeRectangle[oppositeAxis] + beforeRectangle[oppositeSide],\n afterRectangle[oppositeAxis],\n afterRectangle[oppositeAxis] + afterRectangle[oppositeSide]\n ];\n const sortArr = align.sort((a, b) => a - b);\n const average = (sortArr[1] + sortArr[2]) / 2;\n const offset = 3;\n return isHorizontal\n ? [\n [beforeRectangle.x + beforeRectangle.width + offset, average],\n [afterRectangle.x - offset, average]\n ]\n : [\n [average, beforeRectangle.y + beforeRectangle.height + offset],\n [average, afterRectangle.y - offset]\n ];\n }\n return { delta, distributeLines };\n }\n\n drawAlignLines(lines: number[][], g: SVGGElement) {\n lines.forEach(points => {\n if (!points.length) return;\n const xAlign = PlaitBoard.getRoughSVG(this.board).line(points[0], points[1], points[2], points[3], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n strokeLineDash: [4, 4]\n });\n g.appendChild(xAlign);\n });\n }\n\n drawDistributeLines(lines: Point[][], g: SVGGElement) {\n lines.forEach(line => {\n if (!line.length) return;\n let isHorizontal = line[0][1] === line[1][1];\n const yAlign = PlaitBoard.getRoughSVG(this.board).line(line[0][0], line[0][1], line[1][0], line[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(yAlign);\n\n line.forEach(point => {\n const barPoint = getBarPoint(point, isHorizontal);\n const bar = PlaitBoard.getRoughSVG(this.board).line(barPoint[0][0], barPoint[0][1], barPoint[1][0], barPoint[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(bar);\n });\n });\n }\n}\n\nfunction isHorizontalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.y + rectangle.height < other.y || rectangle.y > other.y + other.height);\n}\n\nfunction isVerticalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.x + rectangle.width < other.x || rectangle.x > other.x + other.width);\n}\nfunction getBarPoint(point: Point, isHorizontal: boolean) {\n return isHorizontal\n ? [\n [point[0], point[1] - 4],\n [point[0], point[1] + 4]\n ]\n : [\n [point[0] - 4, point[1]],\n [point[0] + 4, point[1]]\n ];\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard } from '../utils/board';\nimport { isMainPointer } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getHitElementByPoint, getSelectedElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { cacheMovingElements, getMovingElements, isMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\nimport {\n isPreventTouchMove,\n preventTouchMove,\n handleTouchTarget,\n getRectangleByElements,\n distanceBetweenPointAndPoint,\n toHostPoint,\n toViewBoxPoint,\n hotkeys,\n getElementsInGroupByElement\n} from '../utils';\nimport { AlignReaction } from '../utils/reaction-manager';\nimport { PlaitPointerType, RectangleClient } from '../interfaces';\nimport { ACTIVE_MOVING_CLASS_NAME, PRESS_AND_MOVE_BUFFER } from '../constants';\nimport { addSelectionWithTemporaryElements } from '../transforms/selection';\n\nexport function withMoving(board: PlaitBoard) {\n const { pointerDown, pointerMove, globalPointerUp, globalPointerMove } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] = [];\n let alignG: SVGGElement | null = null;\n let activeElementsRectangle: RectangleClient | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (\n PlaitBoard.isReadonly(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.selection) ||\n isPreventTouchMove(board) ||\n !isMainPointer(event)\n ) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const targetElements = getTargetElements(board);\n const targetRectangle = targetElements.length > 0 && getRectangleByElements(board, targetElements, false);\n const isInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isInTargetRectangle) {\n startPoint = point;\n activeElements = targetElements;\n preventTouchMove(board, event, true);\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n } else {\n const targetElement = getHitElementByPoint(board, point, el => board.isMovable(el));\n if (targetElement) {\n startPoint = point;\n activeElements = getElementsInGroupByElement(board, targetElement);\n if (targetElements.length > 0) {\n addSelectionWithTemporaryElements(board, []);\n }\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n alignG?.remove();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n const distance = distanceBetweenPointAndPoint(...endPoint, ...startPoint);\n if (distance > PRESS_AND_MOVE_BUFFER || getMovingElements(board).length > 0) {\n throttleRAF(board, 'with-moving', () => {\n if (!activeElementsRectangle) {\n return;\n }\n const newRectangle = {\n ...activeElementsRectangle,\n x: activeElementsRectangle.x + offsetX,\n y: activeElementsRectangle.y + offsetY\n };\n const reactionManager = new AlignReaction(board, activeElements, newRectangle);\n const ref = reactionManager.handleAlign();\n offsetX -= ref.deltaX;\n offsetY -= ref.deltaY;\n alignG = ref.g;\n alignG.classList.add(ACTIVE_MOVING_CLASS_NAME);\n PlaitBoard.getElementActiveHost(board).append(alignG);\n handleTouchTarget(board);\n const currentElements = updatePoints(board, activeElements, offsetX, offsetY);\n PlaitBoard.getBoardContainer(board).classList.add('element-moving');\n cacheMovingElements(board, currentElements as PlaitElement[]);\n });\n }\n }\n if (isPreventDefault) {\n // Prevent canvas scrolling behavior from being triggered during move\n event.preventDefault();\n }\n pointerMove(event);\n };\n\n board.globalPointerMove = (event: PointerEvent) => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalPointerMove(event);\n };\n\n board.globalPointerUp = event => {\n isPreventDefault = false;\n if (startPoint) {\n cancelMove(board);\n }\n preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n alignG?.remove();\n startPoint = null;\n activeElementsRectangle = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n if (isMovingElements(board)) {\n removeMovingElements(board);\n }\n MERGING.set(board, false);\n PlaitBoard.getBoardContainer(board).classList.remove('element-moving');\n }\n\n return withArrowMoving(board);\n}\n\nexport function withArrowMoving(board: PlaitBoard) {\n const { keyDown, keyUp } = board;\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n if (!PlaitBoard.isReadonly(board) && selectedElements.length > 0 && (hotkeys.isArrow(event) || hotkeys.isExtendArrow(event))) {\n event.preventDefault();\n const isShift = event.shiftKey ? true : false;\n const offset = [0, 0];\n const buffer = isShift ? 10 : 1;\n switch (true) {\n case hotkeys.isMoveUp(event) || hotkeys.isExtendUp(event): {\n offset[1] = -buffer;\n break;\n }\n case hotkeys.isMoveDown(event) || hotkeys.isExtendDown(event): {\n offset[1] = buffer;\n break;\n }\n case hotkeys.isMoveBackward(event) || hotkeys.isExtendBackward(event): {\n offset[0] = -buffer;\n break;\n }\n case hotkeys.isMoveForward(event) || hotkeys.isExtendForward(event): {\n offset[0] = buffer;\n break;\n }\n }\n const targetElements = getTargetElements(board);\n throttleRAF(board, 'with-arrow-moving', () => {\n updatePoints(board, targetElements, offset[0], offset[1]);\n });\n }\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n MERGING.set(board, false);\n keyUp(event);\n };\n return board;\n}\n\nexport function getTargetElements(board: PlaitBoard) {\n const selectedElements = getSelectedElements(board);\n const movableElements = board.children.filter(item => board.isMovable(item));\n const targetElements = selectedElements.filter(element => {\n return movableElements.includes(element);\n });\n const relatedElements = board.getRelatedFragment([]);\n targetElements.push(...relatedElements);\n return targetElements;\n}\n\nexport function updatePoints(board: PlaitBoard, targetElements: PlaitElement[], offsetX: number, offsetY: number) {\n const validElements = targetElements.filter(element => board.children.findIndex(item => item.id === element.id) > -1);\n const currentElements = validElements.map(element => {\n const points = element.points || [];\n const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]) as Point[];\n const index = board.children.findIndex(item => item.id === element.id);\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n return currentElements;\n}\n","import { PlaitBoard } from '../interfaces/board';\n\nexport interface PlaitPluginOptions {\n disabled?: boolean;\n}\n\nexport interface PlaitOptionsBoard extends PlaitBoard {\n getPluginOptions: <K = PlaitPluginOptions>(key: string) => K;\n setPluginOptions: <K = PlaitPluginOptions>(key: string, value: Partial<K>) => void;\n}\n\nexport const withOptions = (board: PlaitBoard) => {\n const pluginOptions = new Map<string, any>();\n const newBoard = board as PlaitOptionsBoard;\n\n newBoard.getPluginOptions = key => {\n return pluginOptions.get(key);\n };\n\n newBoard.setPluginOptions = (key, options) => {\n const oldOptions = newBoard.getPluginOptions(key) || {};\n pluginOptions.set(key, { ...oldOptions, ...options });\n };\n\n return newBoard;\n};\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n }\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = PlaitBoard.getComponent(board);\n this.subscription = boardComponent.plaitChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { isHotkey } from 'is-hotkey';\nimport { Ancestor, PlaitBoard, PlaitElement, PlaitPluginKey } from '../interfaces';\nimport { BoardTransforms, Transforms } from '../transforms';\nimport { depthFirstRecursion, getSelectedElements, hotkeys } from '../utils';\nimport { PlaitOptionsBoard } from './with-options';\nimport { WithPluginOptions } from './with-selection';\n\nexport const withHotkey = (board: PlaitBoard) => {\n const { keyDown, keyUp, globalKeyDown } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n if (!PlaitBoard.isReadonly(board) && options.isMultiple && isHotkey('mod+a', event)) {\n event.preventDefault();\n let elements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (PlaitBoard.isBoard(node)) {\n return;\n }\n elements.push(node as PlaitElement);\n },\n node => {\n if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {\n return true;\n } else {\n return false;\n }\n },\n true\n );\n Transforms.addSelectionWithTemporaryElements(board, elements);\n return;\n }\n\n const selectedElements = getSelectedElements(board);\n if (\n !PlaitBoard.isReadonly(board) &&\n selectedElements.length > 0 &&\n (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))\n ) {\n event.preventDefault();\n board.deleteFragment(null);\n }\n\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n keyUp(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.getMovingPointInBoard(board) || PlaitBoard.isMovingPointInBoard(board)) {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom + 0.1, false);\n return;\n }\n if (isHotkey(['mod+shift+=', 'mod+shift++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.fitViewport(board);\n return;\n }\n if (isHotkey(['mod+-', 'mod+shift+-'])(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom - 0.1);\n return;\n }\n if (isHotkey(['mod+0', 'mod+shift+0'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, 1);\n return;\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { Injectable } from '@angular/core';\nimport { ImageEntry } from '../interfaces';\n\n@Injectable()\nexport class PlaitContextService {\n private uploadingFiles: ImageEntry[] = [];\n\n getUploadingFile(url: string) {\n return this.uploadingFiles.find(file => file.url === url);\n }\n\n setUploadingFile(file: ImageEntry) {\n return this.uploadingFiles.push(file);\n }\n\n removeUploadingFile(fileEntry: ImageEntry) {\n this.uploadingFiles = this.uploadingFiles.filter(file => file.url !== fileEntry.url);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitPluginElementContext } from './context';\nimport { PlaitPluginElementComponent } from './plugin-element';\nimport { PlaitEffect } from '../children/effect';\nimport { Ancestor, PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\nimport { addSelectedElement, isSelectedElement, removeSelectedElement } from '../../utils';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n instance?: PlaitPluginElementComponent<PlaitElement>;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() parent!: Ancestor;\n\n @Input() board!: PlaitBoard;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n this.initialized = true;\n }\n\n drawElement() {\n const context = this.getContext();\n const result = this.board.drawElement(context);\n if (Array.isArray(result)) {\n } else {\n const componentRef = this.viewContainerRef.createComponent(result);\n const instance = componentRef.instance;\n instance.context = context;\n this.insertG(instance.rootG ? instance.rootG : instance.g);\n this.instance = instance;\n }\n }\n\n insertG(g: SVGGElement) {\n if (PlaitBoard.isBoard(this.parent)) {\n this.parentG.append(g);\n } else {\n let siblingG = PlaitElement.getComponent(this.parent).g;\n if (this.index > 0) {\n const brotherElement = (this.parent.children as PlaitElement[])[this.index - 1];\n const lastElement = PlaitNode.last(this.board, PlaitBoard.findPath(this.board, brotherElement));\n let component = PlaitElement.getComponent(lastElement) || PlaitElement.getComponent(brotherElement);\n siblingG = component.g;\n }\n this.parentG.insertBefore(g, siblingG);\n }\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.initialized) {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n const elementChanged = simpleChanges['element'];\n const context = this.getContext();\n if (elementChanged && isSelectedElement(this.board, elementChanged.previousValue)) {\n context.selected = true;\n removeSelectedElement(this.board, elementChanged.previousValue);\n addSelectedElement(this.board, this.element);\n }\n if (this.instance) {\n this.instance.context = context;\n }\n }\n }\n\n getContext(): PlaitPluginElementContext {\n const isSelected = isSelectedElement(this.board, this.element);\n const context: PlaitPluginElementContext = {\n element: this.element,\n parent: this.parent,\n board: this.board,\n selected: isSelected,\n effect: this.effect\n };\n return context;\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement(this.getContext());\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitEffect } from './effect';\nimport { Ancestor } from '../../interfaces/node';\nimport { PlaitElementComponent } from '../element/element.component';\nimport { NgFor } from '@angular/common';\n\n@Component({\n selector: 'plait-children',\n template: `\n <plait-element\n *ngFor=\"let item of parent.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [parent]=\"parent\"\n [board]=\"board\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-element>\n `,\n standalone: true,\n imports: [NgFor, PlaitElementComponent]\n})\nexport class PlaitChildrenElementComponent implements OnInit {\n @Input() board!: PlaitBoard;\n\n @Input() parent!: Ancestor;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor() {}\n\n ngOnInit(): void {\n if (!this.parent) {\n this.parent = this.board;\n }\n if (!this.parentG) {\n this.parentG = PlaitBoard.getElementHost(this.board);\n }\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n}\n","import { PlaitBoard, Selection } from '../interfaces';\nimport {\n createGroupRectangleG,\n toViewBoxPoint,\n toHostPoint,\n getHitElementsBySelection\n} from '../utils';\n\nexport function withGroup(board: PlaitBoard) {\n const { pointerMove, globalPointerUp } = board;\n let groupRectangleG: SVGGElement | null;\n\n board.pointerMove = (event: PointerEvent) => {\n groupRectangleG?.remove();\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n let selection: Selection = { anchor: point, focus: point };\n if (board.selection && !Selection.isCollapsed(board.selection)) {\n selection = board.selection;\n }\n const hitElements = getHitElementsBySelection(board, selection);\n if (hitElements.length) {\n groupRectangleG = createGroupRectangleG(board, hitElements);\n groupRectangleG && PlaitBoard.getElementActiveHost(board).append(groupRectangleG);\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n groupRectangleG?.remove();\n groupRectangleG = null;\n globalPointerUp(event);\n };\n\n return board;\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistory } from '../plugins/with-history';\nimport { withHandPointer } from '../plugins/with-hand';\nimport { withSelection } from '../plugins/with-selection';\nimport {\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n getClipboardData,\n getRectangleByElements,\n getSelectedElements,\n toHostPoint,\n toViewBoxPoint\n} from '../utils';\nimport {\n BOARD_TO_ON_CHANGE,\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_AFTER_CHANGE\n} from '../utils/weak-maps';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n initializeViewportOffset,\n initializeViewBox,\n isFromViewportChange,\n setIsFromViewportChange,\n initializeViewportContainer,\n updateViewportOffset,\n updateViewportByScrolling\n} from '../utils/viewport';\nimport { withViewport } from '../plugins/with-viewport';\nimport { withMoving } from '../plugins/with-moving';\nimport { hasInputOrTextareaTarget } from '../utils/dom/common';\nimport { withOptions } from '../plugins/with-options';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../core/island/island-base.component';\nimport { BoardTransforms } from '../transforms/board';\nimport { PlaitTheme } from '../interfaces/theme';\nimport { withHotkey } from '../plugins/with-hotkey';\nimport { HOST_CLASS_NAME } from '../constants';\nimport { PlaitContextService } from '../services/image-context.service';\nimport { isPreventTouchMove } from '../utils/touch';\nimport { PlaitChildrenElementComponent } from '../core/children/children.component';\nimport { ZOOM_STEP } from '../constants/zoom';\nimport { withGroup } from '../plugins/with-group';\n\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementActiveHostClass = 'element-active-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-active-host\"></g>\n </svg>\n <plait-children [board]=\"board\" [effect]=\"effect\"></plait-children>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PlaitContextService],\n standalone: true,\n imports: [PlaitChildrenElementComponent]\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n effect = {};\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} pointer-${this.board.pointer} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementActiveHost = this.host.querySelector(`.${ElementActiveHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n host: elementHost,\n upperHost: elementUpperHost,\n activeHost: elementActiveHost,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.update();\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.plaitChange.emit(changeEvent);\n });\n });\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n update() {\n this.effect = {};\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) this.board.children = valueChange.currentValue;\n if (options) this.board.options = options.currentValue;\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withGroup(withMoving(withBoard(withViewport(withOptions(createBoard(this.plaitValue, this.plaitOptions))))))\n )\n )\n )\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap(event => {\n this.board.globalKeyDown(event);\n }),\n filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n const selectedElements = getSelectedElements(this.board);\n event.preventDefault();\n const rectangle = getRectangleByElements(this.board, selectedElements, false);\n this.board.setFragment(event.clipboardData, null, rectangle, 'copy');\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardEvent.clipboardData, clipboardData, targetPoint);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n const selectedElements = getSelectedElements(this.board);\n event.preventDefault();\n const rectangle = getRectangleByElements(this.board, selectedElements, false);\n this.board.setFragment(event.clipboardData, null, rectangle, 'cut');\n this.board.deleteFragment(event.clipboardData);\n });\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'touchmove', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: Event) => {\n if (isPreventTouchMove(this.board)) {\n event.preventDefault();\n }\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach(island => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach(island => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, false);\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitBoardOptions, PlaitElement, PlaitPlugin } from '../../interfaces';\nimport { createBoard } from '../../plugins/create-board';\n\n/**\n * 1.create board instance\n * 2.build fake node weak map\n */\nexport const createTestingBoard = (\n plugins: PlaitPlugin[],\n children: PlaitElement[],\n options: PlaitBoardOptions = { readonly: false, hideScrollbar: true, disabledScrollOnNonFocus: false }\n) => {\n let board = createBoard(children, options);\n plugins.forEach(plugin => {\n board = plugin(board);\n });\n return board;\n};\n","import { PlaitBoard } from '../../interfaces/board';\nimport { PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\n\nexport const fakeNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach((value, index: number) => {\n NODE_TO_PARENT.set(value, object);\n NODE_TO_INDEX.set(value, index);\n fakeNodeWeakMap(value);\n });\n};\n\nexport const clearNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach(value => {\n NODE_TO_PARENT.delete(value);\n NODE_TO_INDEX.delete(value);\n clearNodeWeakMap(value);\n });\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { IS_MAC } from '../../utils/dom/environment';\nimport { ModifierKeys } from '../test-element';\n\n/** Used to generate unique IDs for events. */\nlet uniqueIds = 0;\n\n/**\n * Creates a browser MouseEvent with the specified options.\n * @docs-private\n */\nexport function createMouseEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX = 1,\n offsetY = 1,\n button = 0,\n modifiers: ModifierKeys = {}\n) {\n // Note: We cannot determine the position of the mouse event based on the screen\n // because the dimensions and position of the browser window are not available\n // To provide reasonable `screenX` and `screenY` coordinates, we simply use the\n // client coordinates as if the browser is opened in fullscreen.\n const screenX = clientX;\n const screenY = clientY;\n\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n detail: 0,\n relatedTarget: null,\n screenX,\n screenY,\n clientX,\n clientY,\n ctrlKey: modifiers.control,\n altKey: modifiers.alt,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n button: button,\n buttons: 1\n });\n\n // The `MouseEvent` constructor doesn't allow us to pass these properties into the constructor.\n // Override them to `1`, because they're used for fake screen reader event detection.\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser `PointerEvent` with the specified options. Pointer events\n * by default will appear as if they are the primary pointer of their type.\n * https://www.w3.org/TR/pointerevents2/#dom-pointerevent-isprimary.\n *\n * For example, if pointer events for a multi-touch interaction are created, the non-primary\n * pointer touches would need to be represented by non-primary pointer events.\n *\n * @docs-private\n */\nexport function createPointerEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX?: number,\n offsetY?: number,\n options: PointerEventInit = { isPrimary: true }\n) {\n const event = new PointerEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n clientX,\n clientY,\n ...options\n });\n\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser TouchEvent with the specified pointer coordinates.\n * @docs-private\n */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0, clientX = 0, clientY = 0) {\n // We cannot use the `TouchEvent` or `Touch` because Firefox and Safari lack support.\n // TODO: Switch to the constructor API when it is available for Firefox and Safari.\n const event = document.createEvent('UIEvent');\n const touchDetails = { pageX, pageY, clientX, clientY, identifier: uniqueIds++ };\n\n // TS3.6 removes the initUIEvent method and suggests porting to \"new UIEvent()\".\n (event as any).initUIEvent(type, true, true, window, 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n defineReadonlyEventProperty(event, 'touches', [touchDetails]);\n defineReadonlyEventProperty(event, 'targetTouches', [touchDetails]);\n defineReadonlyEventProperty(event, 'changedTouches', [touchDetails]);\n\n return event;\n}\n\n/**\n * Creates a keyboard event with the specified key and modifiers.\n * @docs-private\n */\nexport function createKeyboardEvent(type: string, keyCode: number = 0, key: string = '', modifiers: ModifierKeys = {}) {\n return new KeyboardEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n keyCode: keyCode,\n key: key,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n altKey: modifiers.alt,\n ctrlKey: modifiers.control\n });\n}\n\n/**\n * Creates a fake event object with any desired event type.\n * @docs-private\n */\nexport function createFakeEvent(type: string, bubbles = false, cancelable = true, composed = true) {\n return new Event(type, { bubbles, cancelable, composed });\n}\n\n/**\n * Defines a readonly property on the given event object. Readonly properties on an event object\n * are always set as configurable as that matches default readonly properties for DOM event objects.\n */\nfunction defineReadonlyEventProperty(event: Event, propertyName: string, value: any) {\n Object.defineProperty(event, propertyName, { get: () => value, configurable: true });\n}\n\nexport function createModModifierKeys() {\n const modifiers = IS_MAC ? { meta: true } : { control: true };\n return modifiers;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './constants';\nexport * from './core/element/plugin-element';\nexport * from './core/element/element.component';\nexport * from './core/children/children.component';\nexport * from './core/element/context-change';\nexport * from './core/island/island-base.component';\nexport * from './interfaces';\nexport * from './transforms';\nexport * from './utils';\nexport * from './plugins/with-selection';\nexport * from './plugins/with-moving';\nexport * from './plugins/with-options';\nexport * from './testing';\nexport * from './services/image-context.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ViewportTransforms"],"mappings":"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"}
1
+ {"version":3,"file":"plait-core.mjs","sources":["../../../packages/core/src/utils/weak-maps.ts","../../../packages/core/src/interfaces/pointer.ts","../../../packages/core/src/interfaces/custom-types.ts","../../../packages/core/src/utils/tree.ts","../../../packages/core/src/interfaces/selection.ts","../../../packages/core/src/utils/position.ts","../../../packages/core/src/interfaces/rectangle-client.ts","../../../packages/core/src/interfaces/plugin-key.ts","../../../packages/core/src/utils/selected-element.ts","../../../packages/core/src/constants/keycodes.ts","../../../packages/core/src/constants/cursor.ts","../../../packages/core/src/constants/selection.ts","../../../packages/core/src/constants/index.ts","../../../packages/core/src/utils/dom/common.ts","../../../packages/core/src/core/element/context-change.ts","../../../packages/core/src/core/element/plugin-element.ts","../../../packages/core/src/utils/math.ts","../../../packages/core/src/utils/board.ts","../../../packages/core/src/utils/dom/foreign.ts","../../../packages/core/src/utils/dom/environment.ts","../../../packages/core/src/utils/environment.ts","../../../packages/core/src/utils/helper.ts","../../../packages/core/src/utils/history.ts","../../../packages/core/src/utils/hotkeys.ts","../../../packages/core/src/utils/id-creator.ts","../../../packages/core/src/utils/drawing/rectangle.ts","../../../packages/core/src/utils/drawing/arrow.ts","../../../packages/core/src/utils/drawing/circle.ts","../../../packages/core/src/utils/drawing/line.ts","../../../packages/core/src/constants/zoom.ts","../../../packages/core/src/transforms/viewport.ts","../../../packages/core/src/transforms/theme.ts","../../../packages/core/src/transforms/board.ts","../../../packages/core/src/utils/to-point.ts","../../../packages/core/src/utils/viewport.ts","../../../packages/core/src/utils/common.ts","../../../packages/core/src/utils/dnd.ts","../../../packages/core/src/utils/moving-element.ts","../../../packages/core/src/utils/to-image.ts","../../../packages/core/src/utils/clipboard/types.ts","../../../packages/core/src/utils/clipboard/common.ts","../../../packages/core/src/utils/clipboard/data-transfer.ts","../../../packages/core/src/utils/clipboard/navigator-clipboard.ts","../../../packages/core/src/utils/clipboard/clipboard.ts","../../../packages/core/src/utils/touch.ts","../../../packages/core/src/interfaces/group.ts","../../../packages/core/src/interfaces/viewport.ts","../../../packages/core/src/interfaces/path.ts","../../../packages/core/src/interfaces/node.ts","../../../packages/core/src/transforms/general.ts","../../../packages/core/src/transforms/node.ts","../../../packages/core/src/transforms/selection.ts","../../../packages/core/src/transforms/element.ts","../../../packages/core/src/transforms/index.ts","../../../packages/core/src/utils/selection.ts","../../../packages/core/src/utils/group.ts","../../../packages/core/src/utils/angle.ts","../../../packages/core/src/interfaces/element.ts","../../../packages/core/src/interfaces/operation.ts","../../../packages/core/src/interfaces/point.ts","../../../packages/core/src/interfaces/history.ts","../../../packages/core/src/interfaces/theme.ts","../../../packages/core/src/interfaces/direction.ts","../../../packages/core/src/utils/element.ts","../../../packages/core/src/interfaces/board.ts","../../../packages/core/src/interfaces/path-ref.ts","../../../packages/core/src/plugins/create-board.ts","../../../packages/core/src/plugins/with-board.ts","../../../packages/core/src/plugins/with-history.ts","../../../packages/core/src/plugins/with-hand.ts","../../../packages/core/src/plugins/with-selection.ts","../../../packages/core/src/plugins/with-viewport.ts","../../../packages/core/src/utils/reaction-manager.ts","../../../packages/core/src/plugins/with-moving.ts","../../../packages/core/src/plugins/with-options.ts","../../../packages/core/src/core/island/island-base.component.ts","../../../packages/core/src/plugins/with-hotkey.ts","../../../packages/core/src/services/image-context.service.ts","../../../packages/core/src/core/element/element.component.ts","../../../packages/core/src/core/children/children.component.ts","../../../packages/core/src/plugins/with-group.ts","../../../packages/core/src/board/board.component.ts","../../../packages/core/src/testing/core/create-board.ts","../../../packages/core/src/testing/core/fake-weak-map.ts","../../../packages/core/src/testing/fake-events/event-objects.ts","../../../packages/core/src/public-api.ts","../../../packages/core/src/plait-core.ts"],"sourcesContent":["import { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { PathRef } from '../interfaces/path-ref';\n\n// record richtext type status\nexport const IS_BOARD_CACHE = new WeakMap<Object, boolean>();\n\nexport const FLUSHING = new WeakMap<PlaitBoard, boolean>();\n\nexport const NODE_TO_INDEX = new WeakMap<PlaitNode, number>();\n\nexport const NODE_TO_PARENT = new WeakMap<PlaitNode, Ancestor>();\n\nexport const IS_TEXT_EDITABLE = new WeakMap<PlaitBoard, boolean>();\n\nexport const BOARD_TO_ON_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_AFTER_CHANGE = new WeakMap<PlaitBoard, () => void>();\n\nexport const BOARD_TO_COMPONENT = new WeakMap<PlaitBoard, BoardComponentInterface>();\n\nexport const BOARD_TO_ROUGH_SVG = new WeakMap<PlaitBoard, RoughSVG>();\n\nexport const BOARD_TO_HOST = new WeakMap<PlaitBoard, SVGSVGElement>();\n\nexport const BOARD_TO_ELEMENT_HOST = new WeakMap<\n PlaitBoard,\n {\n host: SVGGElement;\n upperHost: SVGGElement;\n activeHost: SVGGElement;\n container: HTMLElement;\n viewportContainer: HTMLElement;\n }\n>();\n\nexport const BOARD_TO_SELECTED_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const BOARD_TO_MOVING_POINT_IN_BOARD = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_MOVING_POINT = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_VIEWPORT_ORIGINATION = new WeakMap<PlaitBoard, Point>();\n\nexport const BOARD_TO_IS_SELECTION_MOVING = new WeakMap<PlaitBoard, boolean>();\n\n// save no standard selected elements\nexport const BOARD_TO_TEMPORARY_ELEMENTS = new WeakMap<PlaitBoard, { elements: PlaitElement[]; timeoutId: any }>();\n\nexport const BOARD_TO_MOVING_ELEMENT = new WeakMap<PlaitBoard, PlaitElement[]>();\n\nexport const PATH_REFS: WeakMap<PlaitBoard, Set<PathRef>> = new WeakMap();\n","export enum PlaitPointerType {\n 'hand' = 'hand',\n 'selection' = 'selection'\n}\n","/**\n * Extendable Custom Types Interface\n */\n\ntype ExtendableTypes = 'Viewport' | 'SetViewportOperation' | 'SetSelectionOperation';\n\nexport interface CustomTypes {\n [key: string]: unknown;\n}\n\nexport type ExtendedType<K extends ExtendableTypes, B> = unknown extends CustomTypes[K] ? B : CustomTypes[K];\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\n\nexport function depthFirstRecursion<T extends TreeNode = TreeNode>(\n node: T,\n callback: (node: T) => void,\n recursion?: (node: T) => boolean,\n isReverse?: boolean\n) {\n if (!recursion || recursion(node)) {\n let children: TreeNode[] = [];\n if (node.children) {\n children = [...node.children];\n }\n children = isReverse ? children.reverse() : children;\n children.forEach(child => {\n depthFirstRecursion(child as T, callback, recursion);\n });\n }\n callback(node);\n}\n\nexport const getIsRecursionFunc = (board: PlaitBoard) => {\n return (element: PlaitElement | PlaitBoard) => {\n if (PlaitBoard.isBoard(element) || board.isRecursion(element)) {\n return true;\n } else {\n return false;\n }\n };\n};\n\nexport interface TreeNode {\n children?: TreeNode[];\n}\n","import { Point } from './point';\n\nexport const SELECTION_BORDER_COLOR = '#6698FF';\nexport const SELECTION_FILL_COLOR = '#6698FF19'; // 主色 0.1 透明度\n\nexport interface Selection {\n anchor: Point;\n focus: Point;\n}\n\nexport const Selection = {\n isCollapsed(selection: Selection) {\n if (selection.anchor[0] == selection.focus[0] && selection.anchor[1] === selection.focus[1]) {\n return true;\n } else {\n return false;\n }\n }\n};\n","import { PlaitBoard, PlaitElement } from '../interfaces';\n\nexport const sortElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n return [...elements].sort((a: PlaitElement, b: PlaitElement) => {\n const pathA = PlaitBoard.findPath(board, a);\n const pathB = PlaitBoard.findPath(board, b);\n return pathA[0] - pathB[0];\n });\n};\n","import { rotate } from '../utils';\nimport { Point } from './point';\n\nexport interface RectangleClient {\n x: number;\n y: number;\n width: number;\n height: number;\n}\n\n/**\n * [x, y] x,y between 0 and 1\n * represents a point in the rectangle\n */\nexport type PointOfRectangle = [number, number];\n\nexport const RectangleClient = {\n isHit: (origin: RectangleClient, target: RectangleClient) => {\n return RectangleClient.isHitX(origin, target) && RectangleClient.isHitY(origin, target);\n },\n isHitX: (origin: RectangleClient, target: RectangleClient) => {\n const minX = origin.x < target.x ? origin.x : target.x;\n const maxX = origin.x + origin.width > target.x + target.width ? origin.x + origin.width : target.x + target.width;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxX - minX - origin.width - target.width) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n isHitY: (origin: RectangleClient, target: RectangleClient) => {\n const minY = origin.y < target.y ? origin.y : target.y;\n const maxY = origin.y + origin.height > target.y + target.height ? origin.y + origin.height : target.y + target.height;\n // float calculate error( eg: 1.4210854715202004e-14 > 0)\n if (Math.floor(maxY - minY - origin.height - target.height) <= 0) {\n return true;\n } else {\n return false;\n }\n },\n getPoints(rectangle: RectangleClient) {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height]\n ] as [Point, Point];\n },\n getRectangleByCenterPoint(point: Point, width: number, height: number) {\n return RectangleClient.getRectangleByPoint([point[0] - width / 2, point[1] - height / 2], width, height);\n },\n getRectangleByPoint(point: Point, width: number, height: number): RectangleClient {\n return {\n x: point[0],\n y: point[1],\n width,\n height\n };\n },\n getRectangleByPoints(points: Point[]): RectangleClient {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n const rect = { x: xMin, y: yMin, width: xMax - xMin, height: yMax - yMin };\n return rect;\n },\n getCornerPointsByPoints(points: Point[]) {\n const xArray = points.map(ele => ele[0]);\n const yArray = points.map(ele => ele[1]);\n const xMin = Math.min(...xArray);\n const xMax = Math.max(...xArray);\n const yMin = Math.min(...yArray);\n const yMax = Math.max(...yArray);\n return [\n [xMin, yMin],\n [xMax, yMin],\n [xMax, yMax],\n [xMin, yMax]\n ] as [Point, Point, Point, Point];\n },\n getOutlineRectangle: (rectangle: RectangleClient, offset: number) => {\n return {\n x: rectangle.x + offset,\n y: rectangle.y + offset,\n width: rectangle.width - offset * 2,\n height: rectangle.height - offset * 2\n };\n },\n inflate: (rectangle: RectangleClient, delta: number) => {\n const half = delta / 2;\n return {\n x: rectangle.x - half,\n y: rectangle.y - half,\n width: rectangle.width + half * 2,\n height: rectangle.height + half * 2\n };\n },\n isEqual: (rectangle: RectangleClient, otherRectangle: RectangleClient) => {\n return (\n rectangle.x === otherRectangle.x &&\n rectangle.y === otherRectangle.y &&\n rectangle.width === otherRectangle.width &&\n rectangle.height === otherRectangle.height\n );\n },\n getCornerPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height]\n ] as [Point, Point, Point, Point];\n },\n getCenterPoint: (rectangle: RectangleClient) => {\n return [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height / 2] as Point;\n },\n\n getEdgeCenterPoints: (rectangle: RectangleClient) => {\n return [\n [rectangle.x + rectangle.width / 2, rectangle.y],\n [rectangle.x + rectangle.width, rectangle.y + rectangle.height / 2],\n [rectangle.x + rectangle.width / 2, rectangle.y + rectangle.height],\n [rectangle.x, rectangle.y + rectangle.height / 2]\n ] as [Point, Point, Point, Point];\n },\n getConnectionPoint: (rectangle: RectangleClient, point: PointOfRectangle) => {\n return [rectangle.x + rectangle.width * point[0], rectangle.y + rectangle.height * point[1]] as Point;\n },\n expand(rectangle: RectangleClient, left: number, top: number = left, right: number = left, bottom: number = top) {\n return {\n x: rectangle.x - left,\n y: rectangle.y - top,\n width: rectangle.width + left + right,\n height: rectangle.height + top + bottom\n };\n },\n getGapCenter(rectangle1: RectangleClient, rectangle2: RectangleClient, isHorizontal: boolean) {\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n const align = [rectangle1[axis], rectangle1[axis] + rectangle1[side], rectangle2[axis], rectangle2[axis] + rectangle2[side]];\n const sortArr = align.sort((a, b) => a - b);\n return (sortArr[1] + sortArr[2]) / 2;\n },\n isPointInRectangle(rectangle: RectangleClient, point: Point) {\n const x = point[0],\n y = point[1];\n return x > rectangle.x && x < rectangle.x + rectangle.width && y > rectangle.y && y < rectangle.y + rectangle.height;\n },\n getBoundingRectangle(rectangles: RectangleClient[]): RectangleClient {\n if (rectangles.length === 0) {\n throw new Error('rectangles can not be empty array');\n }\n let minX = Number.MAX_VALUE;\n let minY = Number.MAX_VALUE;\n let maxX = Number.NEGATIVE_INFINITY;\n let maxY = Number.NEGATIVE_INFINITY;\n rectangles.forEach(rect => {\n minX = Math.min(minX, rect.x);\n minY = Math.min(minY, rect.y);\n maxX = Math.max(maxX, rect.x + rect.width);\n maxY = Math.max(maxY, rect.y + rect.height);\n });\n return {\n x: minX,\n y: minY,\n width: maxX - minX,\n height: maxY - minY\n };\n }\n};\n","export enum PlaitPluginKey {\n 'withSelection' = 'withSelection'\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Ancestor } from '../interfaces/node';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\nimport { BOARD_TO_SELECTED_ELEMENT } from './weak-maps';\nimport { Selection } from '../interfaces/selection';\nimport { PlaitElement } from '../interfaces/element';\nimport { Point } from '../interfaces/point';\nimport { sortElements } from './position';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport { getRectangleByElements } from './element';\nimport { PlaitOptionsBoard } from '../plugins/with-options';\nimport { PlaitPluginKey } from '../interfaces/plugin-key';\nimport { WithPluginOptions } from '../plugins/with-selection';\n\nexport const getHitElementsBySelection = (\n board: PlaitBoard,\n selection?: Selection,\n match: (element: PlaitElement) => boolean = () => true\n) => {\n const newSelection = selection || (board.selection as Selection);\n const rectangleHitElements: PlaitElement[] = [];\n if (!newSelection) {\n return [];\n }\n const isCollapsed = Selection.isCollapsed(newSelection);\n if (isCollapsed) {\n const hitElement = getHitElementByPoint(board, newSelection.anchor, match);\n if (hitElement) {\n return [hitElement];\n } else {\n return [];\n }\n }\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (!PlaitBoard.isBoard(node) && match(node) && board.isRectangleHit(node, newSelection)) {\n rectangleHitElements.push(node);\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return rectangleHitElements;\n};\n\nexport const getHitElementByPoint = (\n board: PlaitBoard,\n point: Point,\n match: (element: PlaitElement) => boolean = () => true\n): undefined | PlaitElement => {\n let hitElement: PlaitElement | undefined = undefined;\n let hitInsideElement: PlaitElement | undefined = undefined;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (hitElement) {\n return;\n }\n if (PlaitBoard.isBoard(node) || !match(node)) {\n return;\n }\n if (board.isHit(node, point)) {\n hitElement = node;\n return;\n }\n\n /**\n * 需要增加场景测试\n * hitInsideElement 存的是第一个符合 isInsidePoint 的元素\n * 当有元素符合 isHit 时结束遍历,并返回 hitElement\n * 当所有元素都不符合 isHit ,则返回第一个符合 isInsidePoint 的元素\n * 这样保证最上面的元素优先被探测到;\n */\n\n if (!hitInsideElement && board.isInsidePoint(node, point)) {\n hitInsideElement = node;\n }\n },\n getIsRecursionFunc(board),\n true\n );\n return hitElement || hitInsideElement;\n};\n\nexport const getHitSelectedElements = (board: PlaitBoard, point: Point) => {\n const selectedElements = getSelectedElements(board);\n const targetRectangle = selectedElements.length > 0 && getRectangleByElements(board, selectedElements, false);\n const isInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isInTargetRectangle) {\n return selectedElements;\n } else {\n return [];\n }\n};\n\nexport const cacheSelectedElements = (board: PlaitBoard, selectedElements: PlaitElement[]) => {\n const sortedElements = sortElements(board, selectedElements);\n BOARD_TO_SELECTED_ELEMENT.set(board, sortedElements);\n};\n\nexport const getSelectedElements = (board: PlaitBoard) => {\n return BOARD_TO_SELECTED_ELEMENT.get(board) || [];\n};\n\nexport const addSelectedElement = (board: PlaitBoard, element: PlaitElement | PlaitElement[]) => {\n let elements = [];\n if (Array.isArray(element)) {\n elements.push(...element);\n } else {\n elements.push(element);\n }\n const selectedElements = getSelectedElements(board);\n cacheSelectedElements(board, [...selectedElements, ...elements]);\n};\n\nexport const removeSelectedElement = (board: PlaitBoard, element: PlaitElement, isRemoveChildren = false) => {\n const selectedElements = getSelectedElements(board);\n if (selectedElements.includes(element)) {\n const targetElements: PlaitElement[] = [];\n if (board.isRecursion(element) && isRemoveChildren) {\n depthFirstRecursion(\n element,\n node => {\n targetElements.push(node);\n },\n node => board.isRecursion(node)\n );\n } else {\n targetElements.push(element);\n }\n const newSelectedElements = selectedElements.filter(value => !targetElements.includes(value));\n cacheSelectedElements(board, newSelectedElements);\n }\n};\n\nexport const clearSelectedElement = (board: PlaitBoard) => {\n cacheSelectedElements(board, []);\n};\n\nexport const isSelectedElement = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n return !!selectedElements.find(value => value === element);\n};\n\nexport const temporaryDisableSelection = (board: PlaitOptionsBoard) => {\n const currentOptions = board.getPluginOptions(PlaitPluginKey.withSelection);\n board.setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, {\n isDisabledSelect: true\n });\n setTimeout(() => {\n board.setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, { ...currentOptions });\n }, 0);\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nexport const MAC_ENTER = 3;\nexport const BACKSPACE = 8;\nexport const TAB = 9;\nexport const NUM_CENTER = 12;\nexport const ENTER = 13;\nexport const SHIFT = 16;\nexport const CONTROL = 17;\nexport const ALT = 18;\nexport const PAUSE = 19;\nexport const CAPS_LOCK = 20;\nexport const ESCAPE = 27;\nexport const SPACE = 32;\nexport const PAGE_UP = 33;\nexport const PAGE_DOWN = 34;\nexport const END = 35;\nexport const HOME = 36;\nexport const LEFT_ARROW = 37;\nexport const UP_ARROW = 38;\nexport const RIGHT_ARROW = 39;\nexport const DOWN_ARROW = 40;\nexport const PLUS_SIGN = 43;\nexport const PRINT_SCREEN = 44;\nexport const INSERT = 45;\nexport const DELETE = 46;\nexport const ZERO = 48;\nexport const ONE = 49;\nexport const TWO = 50;\nexport const THREE = 51;\nexport const FOUR = 52;\nexport const FIVE = 53;\nexport const SIX = 54;\nexport const SEVEN = 55;\nexport const EIGHT = 56;\nexport const NINE = 57;\nexport const FF_SEMICOLON = 59; // Firefox (Gecko) fires this for semicolon instead of 186\nexport const FF_EQUALS = 61; // Firefox (Gecko) fires this for equals instead of 187\nexport const QUESTION_MARK = 63;\nexport const AT_SIGN = 64;\nexport const A = 65;\nexport const B = 66;\nexport const C = 67;\nexport const D = 68;\nexport const E = 69;\nexport const F = 70;\nexport const G = 71;\nexport const H = 72;\nexport const I = 73;\nexport const J = 74;\nexport const K = 75;\nexport const L = 76;\nexport const M = 77;\nexport const N = 78;\nexport const O = 79;\nexport const P = 80;\nexport const Q = 81;\nexport const R = 82;\nexport const S = 83;\nexport const T = 84;\nexport const U = 85;\nexport const V = 86;\nexport const W = 87;\nexport const X = 88;\nexport const Y = 89;\nexport const Z = 90;\nexport const META = 91; // WIN_KEY_LEFT\nexport const MAC_WK_CMD_LEFT = 91;\nexport const MAC_WK_CMD_RIGHT = 93;\nexport const CONTEXT_MENU = 93;\nexport const NUMPAD_ZERO = 96;\nexport const NUMPAD_ONE = 97;\nexport const NUMPAD_TWO = 98;\nexport const NUMPAD_THREE = 99;\nexport const NUMPAD_FOUR = 100;\nexport const NUMPAD_FIVE = 101;\nexport const NUMPAD_SIX = 102;\nexport const NUMPAD_SEVEN = 103;\nexport const NUMPAD_EIGHT = 104;\nexport const NUMPAD_NINE = 105;\nexport const NUMPAD_MULTIPLY = 106;\nexport const NUMPAD_PLUS = 107;\nexport const NUMPAD_MINUS = 109;\nexport const NUMPAD_PERIOD = 110;\nexport const NUMPAD_DIVIDE = 111;\nexport const F1 = 112;\nexport const F2 = 113;\nexport const F3 = 114;\nexport const F4 = 115;\nexport const F5 = 116;\nexport const F6 = 117;\nexport const F7 = 118;\nexport const F8 = 119;\nexport const F9 = 120;\nexport const F10 = 121;\nexport const F11 = 122;\nexport const F12 = 123;\nexport const NUM_LOCK = 144;\nexport const SCROLL_LOCK = 145;\nexport const FIRST_MEDIA = 166;\nexport const FF_MINUS = 173;\nexport const MUTE = 173; // Firefox (Gecko) fires 181 for MUTE\nexport const VOLUME_DOWN = 174; // Firefox (Gecko) fires 182 for VOLUME_DOWN\nexport const VOLUME_UP = 175; // Firefox (Gecko) fires 183 for VOLUME_UP\nexport const FF_MUTE = 181;\nexport const FF_VOLUME_DOWN = 182;\nexport const LAST_MEDIA = 183;\nexport const FF_VOLUME_UP = 183;\nexport const SEMICOLON = 186; // Firefox (Gecko) fires 59 for SEMICOLON\nexport const EQUALS = 187; // Firefox (Gecko) fires 61 for EQUALS\nexport const COMMA = 188;\nexport const DASH = 189; // Firefox (Gecko) fires 173 for DASH/MINUS\nexport const PERIOD = 190;\nexport const SLASH = 191;\nexport const APOSTROPHE = 192;\nexport const TILDE = 192;\nexport const OPEN_SQUARE_BRACKET = 219;\nexport const BACKSLASH = 220;\nexport const CLOSE_SQUARE_BRACKET = 221;\nexport const SINGLE_QUOTE = 222;\nexport const MAC_META = 224;\n","export enum ResizeCursorClass {\n ew = 'ew-resize',\n ns = 'ns-resize',\n nesw = 'nesw-resize',\n nwse = 'nwse-resize'\n}\n\nexport enum CursorClass {\n crosshair = 'crosshair'\n}","export const ATTACHED_ELEMENT_CLASS_NAME = 'plait-board-attached';\n\nexport const ACTIVE_STROKE_WIDTH = 1;\n\nexport const SELECTION_RECTANGLE_CLASS_NAME = 'selection-rectangle';\n","export * from './keycodes';\nexport * from './cursor';\nexport * from './selection';\n\nexport const HOST_CLASS_NAME = 'plait-board-container';\n\nexport const ACTIVE_MOVING_CLASS_NAME = 'active-with-moving';\n\nexport const SCROLL_BAR_WIDTH = 20;\n\nexport const MAX_RADIUS = 16;\n\nexport const POINTER_BUTTON = {\n MAIN: 0,\n WHEEL: 1,\n SECONDARY: 2,\n TOUCH: -1\n} as const;\n\nexport const PRESS_AND_MOVE_BUFFER = 3;\n\nexport const HIT_DISTANCE_BUFFER = 5;\n","import { Options } from 'roughjs/bin/core';\nimport { POINTER_BUTTON } from '../../constants';\nimport { Point, RectangleClient } from '../../interfaces';\n\nexport const NS = 'http://www.w3.org/2000/svg';\n\nexport function createG() {\n const newG = document.createElementNS(NS, 'g');\n return newG;\n}\n\nexport function createPath() {\n const newG = document.createElementNS(NS, 'path');\n return newG;\n}\n\nexport function createRect(rectangle: RectangleClient, options?: Options) {\n const rect = document.createElementNS(NS, 'rect');\n rect.setAttribute('x', `${rectangle.x}`);\n rect.setAttribute('y', `${rectangle.y}`);\n rect.setAttribute('width', `${rectangle.width}`);\n rect.setAttribute('height', `${rectangle.height}`);\n for (let key in options) {\n const optionKey = key as keyof Options;\n rect.setAttribute(key, `${options[optionKey]}`);\n }\n return rect;\n}\n\nexport const setStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.setAttribute('stroke-linecap', value);\n};\n\nexport const setAngleForG = (g: SVGGElement, centerPoint: Point, angle: number) => {\n if (angle === 0) {\n g.removeAttribute('transform');\n return;\n }\n var centerX = centerPoint[0];\n var centerY = centerPoint[1];\n\n let cosTheta = Math.cos(angle);\n let sinTheta = Math.sin(angle);\n\n let transformMatrix = [\n cosTheta,\n sinTheta,\n -sinTheta,\n cosTheta,\n centerX * (1 - cosTheta) + centerY * sinTheta,\n centerY * (1 - cosTheta) - centerX * sinTheta\n ];\n\n let matrix = 'matrix(' + transformMatrix.join(',') + ')';\n g.setAttribute('transform', `${matrix}`);\n};\n\nexport const setPathStrokeLinecap = (g: SVGGElement, value: 'round' | 'square') => {\n g.querySelectorAll('path').forEach(path => {\n path.setAttribute('stroke-linecap', value);\n });\n};\n\nexport function createMask() {\n return document.createElementNS(NS, 'mask');\n}\n\nexport function createSVG() {\n const svg = document.createElementNS(NS, 'svg');\n return svg;\n}\n\nexport function createText(x: number, y: number, fill: string, textContent: string) {\n var text = document.createElementNS(NS, 'text');\n text.setAttribute('x', `${x}`);\n text.setAttribute('y', `${y}`);\n text.setAttribute('fill', fill);\n text.textContent = textContent;\n return text;\n}\n\n/**\n * Check if a DOM node is an element node.\n */\nexport const isDOMElement = (value: any): value is Element => {\n return isDOMNode(value) && value.nodeType === 1;\n};\n\n/**\n * Check if a value is a DOM node.\n */\nexport const isDOMNode = (value: any): value is Node => {\n return value instanceof window.Node;\n};\n\nexport const hasInputOrTextareaTarget = (target: EventTarget | null) => {\n if (isDOMElement(target)) {\n if (target.tagName === 'INPUT' || target.tagName === 'TEXTAREA') {\n return true;\n }\n }\n return false;\n};\n\nexport const isSecondaryPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.SECONDARY;\n};\n\nexport const isMainPointer = (event: MouseEvent) => {\n return event.button === POINTER_BUTTON.MAIN;\n};\n","import { PlaitBoard, PlaitElement } from '../../interfaces';\nimport { PlaitPluginElementContext } from './context';\n\nexport interface BeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n beforeContextChange: (value: PlaitPluginElementContext<T>) => void;\n}\n\nexport interface OnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard> {\n onContextChanged: (value: PlaitPluginElementContext<T, K>, previous: PlaitPluginElementContext<T, K>) => void;\n}\n\nexport function hasBeforeContextChange<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is BeforeContextChange<T, K> {\n if (value.beforeContextChange) {\n return true;\n }\n return false;\n}\n\nexport function hasOnContextChanged<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>(\n value: any\n): value is OnContextChanged<T, K> {\n if (value.onContextChanged) {\n return true;\n }\n return false;\n}\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard, PlaitElement, PlaitPluginElementContext } from '../../interfaces';\nimport { removeSelectedElement } from '../../utils/selected-element';\nimport { createG } from '../../utils/dom/common';\nimport { hasBeforeContextChange, hasOnContextChanged } from './context-change';\n\n@Directive()\nexport abstract class PlaitPluginElementComponent<T extends PlaitElement = PlaitElement, K extends PlaitBoard = PlaitBoard>\n implements OnInit, OnDestroy {\n g!: SVGGElement;\n\n rootG?: SVGGElement;\n\n initialized = false;\n\n protected _context!: PlaitPluginElementContext<T, K>;\n\n @Input()\n set context(value: PlaitPluginElementContext<T, K>) {\n if (hasBeforeContextChange<T, K>(this)) {\n this.beforeContextChange(value);\n }\n const previousContext = this._context;\n this._context = value;\n if (this.element) {\n ELEMENT_TO_COMPONENT.set(this.element, this);\n }\n if (this.initialized) {\n this.cdr.markForCheck();\n if (hasOnContextChanged<T>(this)) {\n this.onContextChanged(value, previousContext);\n }\n } else {\n if (PlaitElement.isRootElement(this.element) && this.element.children) {\n this.g = createG();\n this.rootG = createG();\n this.rootG.append(this.g);\n } else {\n this.g = createG();\n }\n }\n }\n\n get context() {\n return this._context;\n }\n\n get element() {\n return this.context && this.context.element;\n }\n\n get board() {\n return this.context && this.context.board;\n }\n\n get selected() {\n return this.context && this.context.selected;\n }\n\n get effect() {\n return this.context && this.context.effect;\n }\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n ngOnInit(): void {\n if (this.element.type) {\n (this.rootG || this.g).setAttribute(`plait-${this.element.type}`, 'true');\n }\n this.initialized = true;\n }\n\n ngOnDestroy(): void {\n if (ELEMENT_TO_COMPONENT.get(this.element) === this) {\n ELEMENT_TO_COMPONENT.delete(this.element);\n }\n removeSelectedElement(this.board, this.element);\n (this.rootG || this.g).remove();\n }\n}\n\nexport const ELEMENT_TO_COMPONENT = new WeakMap<PlaitElement, PlaitPluginElementComponent>();\n","import { Point } from '../interfaces';\nimport { RectangleClient } from '../interfaces/rectangle-client';\n\n// https://stackoverflow.com/a/6853926/232122\nexport function distanceBetweenPointAndSegment(x: number, y: number, x1: number, y1: number, x2: number, y2: number) {\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n const dx = x - xx;\n const dy = y - yy;\n return Math.hypot(dx, dy);\n}\n\nexport function getNearestPointBetweenPointAndSegment(point: Point, linePoints: [Point, Point]) {\n const x = point[0],\n y = point[1],\n x1 = linePoints[0][0],\n y1 = linePoints[0][1],\n x2 = linePoints[1][0],\n y2 = linePoints[1][1];\n const A = x - x1;\n const B = y - y1;\n const C = x2 - x1;\n const D = y2 - y1;\n\n const dot = A * C + B * D;\n const lenSquare = C * C + D * D;\n let param = -1;\n if (lenSquare !== 0) {\n // in case of 0 length line\n param = dot / lenSquare;\n }\n\n let xx, yy;\n if (param < 0) {\n xx = x1;\n yy = y1;\n } else if (param > 1) {\n xx = x2;\n yy = y2;\n } else {\n xx = x1 + param * C;\n yy = y1 + param * D;\n }\n\n return [xx, yy] as Point;\n}\n\nexport function distanceBetweenPointAndSegments(points: Point[], point: Point) {\n const len = points.length;\n let distance = Infinity;\n for (let i = 0; i < len - 1; i++) {\n const p = points[i];\n const p2 = points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n }\n }\n return distance;\n}\n\nexport function getNearestPointBetweenPointAndSegments(point: Point, points: Point[], isClose: Boolean = true) {\n const len = points.length;\n let distance = Infinity;\n let result: Point = point;\n\n for (let i = 0; i < len; i++) {\n const p = points[i];\n if (i === len - 1 && !isClose) continue;\n const p2 = i === len - 1 ? points[0] : points[i + 1];\n const currentDistance = distanceBetweenPointAndSegment(point[0], point[1], p[0], p[1], p2[0], p2[1]);\n if (currentDistance < distance) {\n distance = currentDistance;\n result = getNearestPointBetweenPointAndSegment(point, [p, p2]);\n }\n }\n return result;\n}\n\nexport function rotate(x1: number, y1: number, x2: number, y2: number, angle: number) {\n // 𝑎′𝑥=(𝑎𝑥−𝑐𝑥)cos𝜃−(𝑎𝑦−𝑐𝑦)sin𝜃+𝑐𝑥\n // 𝑎′𝑦=(𝑎𝑥−𝑐𝑥)sin𝜃+(𝑎𝑦−𝑐𝑦)cos𝜃+𝑐𝑦.\n // https://math.stackexchange.com/questions/2204520/how-do-i-rotate-a-line-segment-in-a-specific-point-on-the-line\n return [(x1 - x2) * Math.cos(angle) - (y1 - y2) * Math.sin(angle) + x2, (x1 - x2) * Math.sin(angle) + (y1 - y2) * Math.cos(angle) + y2];\n}\n\nexport function distanceBetweenPointAndPoint(x1: number, y1: number, x2: number, y2: number) {\n const dx = x1 - x2;\n const dy = y1 - y2;\n return Math.hypot(dx, dy);\n}\n\n// https://stackoverflow.com/questions/5254838/calculating-distance-between-a-point-and-a-rectangular-box-nearest-point\nexport function distanceBetweenPointAndRectangle(x: number, y: number, rect: RectangleClient) {\n var dx = Math.max(rect.x - x, 0, x - (rect.x + rect.width));\n var dy = Math.max(rect.y - y, 0, y - (rect.y + rect.height));\n return Math.sqrt(dx * dx + dy * dy);\n}\n\nexport const isLineHitLine = (a: Point, b: Point, c: Point, d: Point): boolean => {\n const crossProduct = (v1: Point, v2: Point) => v1[0] * v2[1] - v1[1] * v2[0];\n\n const ab: Point = [b[0] - a[0], b[1] - a[1]];\n const ac: Point = [c[0] - a[0], c[1] - a[1]];\n const ad: Point = [d[0] - a[0], d[1] - a[1]];\n\n const ca: Point = [a[0] - c[0], a[1] - c[1]];\n const cb: Point = [b[0] - c[0], b[1] - c[1]];\n const cd: Point = [d[0] - c[0], d[1] - c[1]];\n\n return crossProduct(ab, ac) * crossProduct(ab, ad) <= 0 && crossProduct(cd, ca) * crossProduct(cd, cb) <= 0;\n};\n\nexport const isPolylineHitRectangle = (points: Point[], rectangle: RectangleClient, isClose: boolean = true) => {\n const rectanglePoints = RectangleClient.getCornerPoints(rectangle);\n const len = points.length;\n for (let i = 0; i < len; i++) {\n if (i === len - 1 && !isClose) continue;\n const p1 = points[i];\n const p2 = points[(i + 1) % len];\n const isHit =\n isLineHitLine(p1, p2, rectanglePoints[0], rectanglePoints[1]) ||\n isLineHitLine(p1, p2, rectanglePoints[1], rectanglePoints[2]) ||\n isLineHitLine(p1, p2, rectanglePoints[2], rectanglePoints[3]) ||\n isLineHitLine(p1, p2, rectanglePoints[3], rectanglePoints[0]);\n if (isHit || isPointInPolygon(p1, rectanglePoints) || isPointInPolygon(p2, rectanglePoints)) {\n return true;\n }\n }\n\n return false;\n};\n\n//https://stackoverflow.com/questions/22521982/check-if-point-is-inside-a-polygon\nexport const isPointInPolygon = (point: Point, points: Point[]) => {\n // ray-casting algorithm based on\n // https://wrf.ecse.rpi.edu/Research/Short_Notes/pnpoly.html\n\n const x = point[0],\n y = point[1];\n\n let inside = false;\n for (var i = 0, j = points.length - 1; i < points.length; j = i++) {\n let xi = points[i][0],\n yi = points[i][1];\n let xj = points[j][0],\n yj = points[j][1];\n\n let intersect = yi > y != yj > y && x < ((xj - xi) * (y - yi)) / (yj - yi) + xi;\n if (intersect) inside = !inside;\n }\n return inside;\n};\n\nexport const isPointInEllipse = (point: Point, center: Point, rx: number, ry: number, angle = 0) => {\n const cosAngle = Math.cos(angle);\n const sinAngle = Math.sin(angle);\n const x1 = (point[0] - center[0]) * cosAngle + (point[1] - center[1]) * sinAngle;\n const y1 = (point[1] - center[1]) * cosAngle - (point[0] - center[0]) * sinAngle;\n\n return (x1 * x1) / (rx * rx) + (y1 * y1) / (ry * ry) <= 1;\n};\n\nexport const isPointInRoundRectangle = (point: Point, rectangle: RectangleClient, radius: number, angle = 0) => {\n const { x: rectX, y: rectY, width, height } = rectangle;\n const isInRectangle = point[0] >= rectX && point[0] <= rectX + width && point[1] >= rectY && point[1] <= rectY + height;\n const handleLeftTop =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + radius)) > radius;\n const handleLeftBottom =\n point[0] >= rectX &&\n point[0] <= rectX + radius &&\n point[1] >= rectY + height &&\n point[1] <= rectY + height - radius &&\n Math.hypot(point[0] - (rectX + radius), point[1] - (rectY + height - radius)) > radius;\n const handleRightTop =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY &&\n point[1] <= rectY + radius &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + radius)) > radius;\n const handleRightBottom =\n point[0] >= rectX + width - radius &&\n point[0] <= rectX + width &&\n point[1] >= rectY + height - radius &&\n point[1] <= rectY + height &&\n Math.hypot(point[0] - (rectX + width - radius), point[1] - (rectY + height - radius)) > radius;\n const isInCorner = handleLeftTop || handleLeftBottom || handleRightTop || handleRightBottom;\n\n return isInRectangle && !isInCorner;\n};\n\n// https://gist.github.com/nicholaswmin/c2661eb11cad5671d816\nexport const catmullRomFitting = function(points: Point[]) {\n const alpha = 0.5;\n let p0, p1, p2, p3, bp1, bp2, d1, d2, d3, A, B, N, M;\n var d3powA, d2powA, d3pow2A, d2pow2A, d1pow2A, d1powA;\n const result: Point[] = [];\n result.push([Math.round(points[0][0]), Math.round(points[0][1])]);\n var length = points.length;\n for (var i = 0; i < length - 1; i++) {\n p0 = i == 0 ? points[0] : points[i - 1];\n p1 = points[i];\n p2 = points[i + 1];\n p3 = i + 2 < length ? points[i + 2] : p2;\n\n d1 = Math.sqrt(Math.pow(p0[0] - p1[0], 2) + Math.pow(p0[1] - p1[1], 2));\n d2 = Math.sqrt(Math.pow(p1[0] - p2[0], 2) + Math.pow(p1[1] - p2[1], 2));\n d3 = Math.sqrt(Math.pow(p2[0] - p3[0], 2) + Math.pow(p2[1] - p3[1], 2));\n\n // Catmull-Rom to Cubic Bezier conversion matrix\n // A = 2d1^2a + 3d1^a * d2^a + d3^2a\n // B = 2d3^2a + 3d3^a * d2^a + d2^2a\n // [ 0 1 0 0 ]\n // [ -d2^2a /N A/N d1^2a /N 0 ]\n // [ 0 d3^2a /M B/M -d2^2a /M ]\n // [ 0 0 1 0 ]\n\n d3powA = Math.pow(d3, alpha);\n d3pow2A = Math.pow(d3, 2 * alpha);\n d2powA = Math.pow(d2, alpha);\n d2pow2A = Math.pow(d2, 2 * alpha);\n d1powA = Math.pow(d1, alpha);\n d1pow2A = Math.pow(d1, 2 * alpha);\n\n A = 2 * d1pow2A + 3 * d1powA * d2powA + d2pow2A;\n B = 2 * d3pow2A + 3 * d3powA * d2powA + d2pow2A;\n N = 3 * d1powA * (d1powA + d2powA);\n if (N > 0) {\n N = 1 / N;\n }\n M = 3 * d3powA * (d3powA + d2powA);\n if (M > 0) {\n M = 1 / M;\n }\n\n bp1 = [(-d2pow2A * p0[0] + A * p1[0] + d1pow2A * p2[0]) * N, (-d2pow2A * p0[1] + A * p1[1] + d1pow2A * p2[1]) * N];\n bp2 = [(d3pow2A * p1[0] + B * p2[0] - d2pow2A * p3[0]) * M, (d3pow2A * p1[1] + B * p2[1] - d2pow2A * p3[1]) * M];\n\n if (bp1[0] == 0 && bp1[1] == 0) {\n bp1 = p1;\n }\n if (bp2[0] == 0 && bp2[1] == 0) {\n bp2 = p2;\n }\n\n result.push(bp1 as Point, bp2 as Point, p2 as Point);\n }\n\n return result;\n};\n\n/**\n * the result of slope is based on Cartesian coordinate system\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getEllipseTangentSlope(x: number, y: number, a: number, b: number) {\n if (Math.abs(y) === 0) {\n return x > 0 ? -Infinity : Infinity;\n }\n const k = (-b * b * x) / (a * a * y);\n return k;\n}\n\n/**\n * x, y are based on the position in the Cartesian coordinate system\n */\nexport function getVectorFromPointAndSlope(x: number, y: number, slope: number) {\n if (slope === Infinity) {\n return [0, -1] as Point;\n } else if (slope === -Infinity) {\n return [0, 1] as Point;\n }\n let vector = [1, -slope] as Point;\n if (y < 0) {\n vector = [-vector[0], -vector[1]];\n }\n return vector as Point;\n}\n\n/**\n * The DOM likes values to be fixed to 3 decimal places\n */\nexport function toDomPrecision(v: number) {\n return +v.toFixed(4);\n}\n\nexport function toFixed(v: number) {\n return +v.toFixed(2);\n}\n\n/**\n * Whether two numbers numbers a and b are approximately equal.\n *\n * @param a - The first point.\n * @param b - The second point.\n * @public\n */\nexport function approximately(a: number, b: number, precision = 0.000001) {\n return Math.abs(a - b) <= precision;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { distanceBetweenPointAndRectangle } from './math';\n\nexport type ViewBox = {\n minX: number;\n minY: number;\n width: number;\n height: number;\n viewportWidth: number;\n viewportHeight: number;\n};\n\nexport function isInPlaitBoard(board: PlaitBoard, x: number, y: number) {\n const plaitBoardElement = PlaitBoard.getBoardContainer(board);\n const plaitBoardRect = plaitBoardElement.getBoundingClientRect();\n const distances = distanceBetweenPointAndRectangle(x, y, plaitBoardRect);\n return distances === 0;\n}\n\nexport function getRealScrollBarWidth(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n let scrollBarWidth = 0;\n if (!hideScrollbar) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n scrollBarWidth = viewportContainer.offsetWidth - viewportContainer.clientWidth;\n }\n return scrollBarWidth;\n}\n","import { NS } from './common';\n\nexport function createForeignObject(x: number, y: number, width: number, height: number) {\n var newForeignObject = document.createElementNS(NS, 'foreignObject');\n newForeignObject.setAttribute('x', `${x}`);\n newForeignObject.setAttribute('y', `${y}`);\n newForeignObject.setAttribute('width', `${width}`);\n newForeignObject.setAttribute('height', `${height}`);\n return newForeignObject;\n}\n\nexport function updateForeignObject(target: SVGForeignObjectElement | SVGGElement, width: number, height: number, x: number, y: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n foreignObject.setAttribute('height', `${height}`);\n foreignObject.setAttribute('x', `${x}`);\n foreignObject.setAttribute('y', `${y}`);\n }\n}\n\nexport function updateForeignObjectWidth(target: SVGForeignObjectElement | SVGGElement, width: number) {\n const foreignObject = target instanceof SVGForeignObjectElement ? target : target.querySelector('foreignObject');\n if (foreignObject) {\n foreignObject.setAttribute('width', `${width}`);\n }\n}\n","export const IS_MAC = typeof window != 'undefined' && /Mac|iPod|iPhone|iPad/.test(window.navigator.platform);\n","export const IS_IOS =\n typeof navigator !== 'undefined' &&\n typeof window !== 'undefined' &&\n /iPad|iPhone|iPod/.test(navigator.userAgent) &&\n !(window as any).MSStream;\n\nexport const IS_APPLE = typeof navigator !== 'undefined' && /Mac OS X/.test(navigator.userAgent);\n\nexport const IS_FIREFOX = typeof navigator !== 'undefined' && /^(?!.*Seamonkey)(?=.*Firefox).*/i.test(navigator.userAgent);\n\nexport const IS_SAFARI = typeof navigator !== 'undefined' && /Version\\/[\\d\\.]+.*Safari/.test(navigator.userAgent);\n\n// \"modern\" Edge was released at 79.x\nexport const IS_EDGE_LEGACY = typeof navigator !== 'undefined' && /Edge?\\/(?:[0-6][0-9]|[0-7][0-8])/i.test(navigator.userAgent);\n\nexport const IS_CHROME = typeof navigator !== 'undefined' && /Chrome/i.test(navigator.userAgent);\n\n// Native beforeInput events don't work well with react on Chrome 75 and older, Chrome 76+ can use beforeInput\nexport const IS_CHROME_LEGACY = typeof navigator !== 'undefined' && /Chrome?\\/(?:[0-7][0-5]|[0-6][0-9])/i.test(navigator.userAgent);\n","export function isNullOrUndefined(value: any) {\n return value === null || value === undefined;\n}\n\n/**\n * get {x,y} point\n * @param point\n * @returns point\n */\nexport function normalizePoint(point: number[]) {\n return Array.isArray(point)\n ? {\n x: point[0],\n y: point[1]\n }\n : point;\n}\n\nexport const RgbaToHEX = (Rgb: string, opacity: number) => {\n return Rgb + Math.floor(opacity * 255).toString(16);\n};\n\nexport function isContextmenu(event: MouseEvent) {\n return event.button === 2;\n}\n","import { MERGING, PlaitBoard, PlaitOperation, SAVING } from '../interfaces';\n\n/**\n * Check whether to merge an operation into the previous operation.\n */\n\nexport const shouldMerge = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_viewport' && op.type === prev?.type) {\n return true;\n }\n return false;\n};\n\n/**\n * Check whether an operation needs to be saved to the history.\n */\n\nexport const shouldSave = (op: PlaitOperation, prev: PlaitOperation | undefined): boolean => {\n if (op.type === 'set_selection' || op.type === 'set_viewport') {\n return false;\n }\n\n return true;\n};\n\n/**\n * Check whether an operation should clear the redos stack.\n */\n\nexport const shouldClear = (op: PlaitOperation): boolean => {\n if (op.type === 'set_selection') {\n return false;\n }\n\n return true;\n};\n\nexport const PlaitHistoryBoard = {\n /**\n * Get the saving flag's current value.\n */\n isSaving(board: PlaitBoard): boolean | undefined {\n return SAVING.get(board);\n },\n\n /**\n * Get the merge flag's current value.\n */\n\n isMerging(board: PlaitBoard): boolean | undefined {\n return MERGING.get(board);\n },\n\n /**\n * Apply a series of changes inside a synchronous `fn`, without merging any of\n * the new operations into previous save point in the history.\n */\n\n withoutMerging(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isMerging(board);\n MERGING.set(board, false);\n fn();\n MERGING.set(board, prev);\n },\n /**\n * Apply a series of changes inside a synchronous `fn`, without saving any of\n * their operations into the history.\n */\n\n withoutSaving(board: PlaitBoard, fn: () => void): void {\n const prev = PlaitHistoryBoard.isSaving(board);\n SAVING.set(board, false);\n fn();\n SAVING.set(board, prev);\n }\n};\n","import { isKeyHotkey } from 'is-hotkey';\nimport { IS_APPLE } from './environment';\n\n/**\n * Hotkey mappings for each platform.\n */\n\nconst HOTKEYS: any = {\n bold: 'mod+b',\n compose: ['down', 'left', 'right', 'up', 'backspace', 'enter'],\n arrow: ['down', 'left', 'right', 'up'],\n extendArrow: ['shift+down', 'shift+left', 'shift+right', 'shift+up'],\n moveBackward: 'left',\n moveForward: 'right',\n moveUp: 'up',\n moveDown: 'down',\n moveWordBackward: 'ctrl+left',\n moveWordForward: 'ctrl+right',\n deleteBackward: 'shift?+backspace',\n deleteForward: 'shift?+delete',\n extendBackward: 'shift+left',\n extendForward: 'shift+right',\n extendUp: 'shift+up',\n extendDown: 'shift+down',\n italic: 'mod+i',\n splitBlock: 'shift?+enter',\n undo: 'mod+z',\n shift: 'shift'\n};\n\nconst APPLE_HOTKEYS: any = {\n moveLineBackward: 'opt+up',\n moveLineForward: 'opt+down',\n moveWordBackward: 'opt+left',\n moveWordForward: 'opt+right',\n deleteBackward: ['ctrl+backspace', 'ctrl+h'],\n deleteForward: ['ctrl+delete', 'ctrl+d'],\n deleteLineBackward: 'cmd+shift?+backspace',\n deleteLineForward: ['cmd+shift?+delete', 'ctrl+k'],\n deleteWordBackward: 'opt+shift?+backspace',\n deleteWordForward: 'opt+shift?+delete',\n extendLineBackward: 'opt+shift+up',\n extendLineForward: 'opt+shift+down',\n redo: 'cmd+shift+z',\n transposeCharacter: 'ctrl+t'\n};\n\nconst WINDOWS_HOTKEYS: any = {\n deleteWordBackward: 'ctrl+shift?+backspace',\n deleteWordForward: 'ctrl+shift?+delete',\n redo: ['ctrl+y', 'ctrl+shift+z']\n};\n\n/**\n * Create a platform-aware hotkey checker.\n */\n\nconst create = (key: string) => {\n const generic = HOTKEYS[key];\n const apple = APPLE_HOTKEYS[key];\n const windows = WINDOWS_HOTKEYS[key];\n const isGeneric = generic && isKeyHotkey(generic);\n const isApple = apple && isKeyHotkey(apple);\n const isWindows = windows && isKeyHotkey(windows);\n\n return (event: KeyboardEvent) => {\n if (isGeneric && isGeneric(event)) {\n return true;\n }\n if (IS_APPLE && isApple && isApple(event)) {\n return true;\n }\n if (!IS_APPLE && isWindows && isWindows(event)) {\n return true;\n }\n return false;\n };\n};\n\n/**\n * Hotkeys.\n */\n\nconst hotkeys = {\n isBold: create('bold'),\n isCompose: create('compose'),\n isArrow: create('arrow'),\n isMoveBackward: create('moveBackward'),\n isMoveForward: create('moveForward'),\n isMoveUp: create('moveUp'),\n isMoveDown: create('moveDown'),\n isDeleteBackward: create('deleteBackward'),\n isDeleteForward: create('deleteForward'),\n isDeleteLineBackward: create('deleteLineBackward'),\n isDeleteLineForward: create('deleteLineForward'),\n isDeleteWordBackward: create('deleteWordBackward'),\n isDeleteWordForward: create('deleteWordForward'),\n isExtendBackward: create('extendBackward'),\n isExtendForward: create('extendForward'),\n isExtendUp: create('extendUp'),\n isExtendDown: create('extendDown'),\n isExtendArrow: create('extendArrow'),\n isExtendLineBackward: create('extendLineBackward'),\n isExtendLineForward: create('extendLineForward'),\n isItalic: create('italic'),\n isMoveLineBackward: create('moveLineBackward'),\n isMoveLineForward: create('moveLineForward'),\n isMoveWordBackward: create('moveWordBackward'),\n isMoveWordForward: create('moveWordForward'),\n isRedo: create('redo'),\n isSplitBlock: create('splitBlock'),\n isTransposeCharacter: create('transposeCharacter'),\n isUndo: create('undo'),\n isShift: create('shift')\n};\nexport default hotkeys;\nexport { hotkeys };\n","export function idCreator(length = 5) {\n // remove numeral\n const $chars = 'ABCDEFGHJKMNPQRSTWXYZabcdefhijkmnprstwxyz'; /**** Easily confusing characters are removed by default oOLl,9gq,Vv,Uu,I1****/\n const maxPosition = $chars.length;\n let key = '';\n for (let i = 0; i < length; i++) {\n key += $chars.charAt(Math.floor(Math.random() * maxPosition));\n }\n return key;\n}\n","import { Options } from 'roughjs/bin/core';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { MAX_RADIUS } from '../../constants';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { RectangleClient } from '../../interfaces/rectangle-client';\nimport { setStrokeLinecap } from '../dom/common';\n\n/**\n * drawRoundRectangle\n */\nexport function drawRoundRectangle(\n rs: RoughSVG,\n x1: number,\n y1: number,\n x2: number,\n y2: number,\n options: Options,\n outline = false,\n borderRadius?: number\n) {\n const width = Math.abs(x1 - x2);\n const height = Math.abs(y1 - y2);\n\n let radius = borderRadius || 0;\n if (radius === 0) {\n const defaultRadius = Math.min(width, height) / 8;\n let radius = defaultRadius;\n if (defaultRadius > MAX_RADIUS) {\n radius = outline ? MAX_RADIUS + 2 : MAX_RADIUS;\n }\n }\n\n const point1 = [x1 + radius, y1];\n const point2 = [x2 - radius, y1];\n const point3 = [x2, y1 + radius];\n const point4 = [x2, y2 - radius];\n const point5 = [x2 - radius, y2];\n const point6 = [x1 + radius, y2];\n const point7 = [x1, y2 - radius];\n const point8 = [x1, y1 + radius];\n\n return rs.path(\n `M${point2[0]} ${point2[1]} A ${radius} ${radius}, 0, 0, 1, ${point3[0]} ${point3[1]} L ${point4[0]} ${point4[1]} A ${radius} ${radius}, 0, 0, 1, ${point5[0]} ${point5[1]} L ${point6[0]} ${point6[1]} A ${radius} ${radius}, 0, 0, 1, ${point7[0]} ${point7[1]} L ${point8[0]} ${point8[1]} A ${radius} ${radius}, 0, 0, 1, ${point1[0]} ${point1[1]} Z`,\n options\n );\n}\n\nexport const drawRectangle = (board: PlaitBoard, rectangle: RectangleClient, options: Options) => {\n const roughSVG = PlaitBoard.getRoughSVG(board);\n const rectangleG = roughSVG.rectangle(rectangle.x, rectangle.y, rectangle.width, rectangle.height, options);\n setStrokeLinecap(rectangleG, 'round');\n return rectangleG;\n};\n","import { rotate } from '../math';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { Options } from 'roughjs/bin/core';\nimport { Point } from '../../interfaces';\n\nexport function arrowPoints(start: Point, end: Point, degree = 40) {\n const width = Math.abs(start[0] - end[0]);\n const height = Math.abs(start[1] - end[1]);\n let hypotenuse = Math.hypot(width, height); // 斜边\n const realRotateLine = hypotenuse / 2;\n const rotateWidth = (realRotateLine / hypotenuse) * width;\n const rotateHeight = (realRotateLine / hypotenuse) * height;\n const rotatePoint = [\n end[0] > start[0] ? end[0] - rotateWidth : end[0] + rotateWidth,\n end[1] > start[1] ? end[1] - rotateHeight : end[1] + rotateHeight\n ];\n const pointRight = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (degree * Math.PI) / 180) as Point;\n const pointLeft = rotate(rotatePoint[0], rotatePoint[1], end[0], end[1], (-degree * Math.PI) / 180) as Point;\n return { pointLeft, pointRight };\n}\n\nexport function drawArrow(rs: RoughSVG, start: Point, end: Point, options: Options, maxHypotenuseLength = 10, degree = 40): SVGGElement[] {\n const { pointLeft, pointRight } = arrowPoints(start, end, degree);\n const arrowLineLeft = rs.linearPath([pointLeft, end], options);\n const arrowLineRight = rs.linearPath([pointRight, end], options);\n return [arrowLineLeft, arrowLineRight];\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\n\nexport function drawCircle(roughSVG: RoughSVG, point: Point, diameter: number, options: Options): SVGGElement {\n return roughSVG.circle(point[0], point[1], diameter, options);\n}\n","import { RoughSVG } from 'roughjs/bin/svg';\nimport { Point } from '../../interfaces/point';\nimport { Options } from 'roughjs/bin/core';\nimport { createG, createPath } from '../dom/common';\n\nexport function drawLine(rs: RoughSVG, start: Point, end: Point, options: Options): SVGGElement {\n return rs.linearPath([start, end], options);\n}\n\nexport function drawLinearPath(points: Point[], options?: Options, closePath?: boolean) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n points.forEach((point, index) => {\n if (index === 0) {\n polylinePath += `M ${point[0]} ${point[1]} `;\n } else {\n polylinePath += `L ${point[0]} ${point[1]} `;\n }\n });\n\n if (closePath) {\n polylinePath += 'Z';\n }\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `${options?.fill || 'none'}`);\n options?.strokeLineDash && path.setAttribute('stroke-dasharray', `${options.strokeLineDash}`);\n g.appendChild(path);\n\n return g;\n}\n\nexport function drawBezierPath(points: Point[], options?: Options) {\n const g = createG();\n const path = createPath();\n\n let polylinePath = '';\n for (let i = 0; i < points.length - 3; i += 3) {\n if (i === 0) {\n polylinePath += `M ${points[0][0]} ${points[0][1]} `;\n } else {\n polylinePath += `C ${points[i + 1][0]} ${points[i + 1][1]}, ${points[i + 2][0]} ${points[i + 2][1]}, ${points[i + 3][0]} ${\n points[i + 3][1]\n }`;\n }\n }\n\n path.setAttribute('d', polylinePath);\n path.setAttribute('stroke', `${options?.stroke}`);\n path.setAttribute('stroke-width', `${options?.strokeWidth}`);\n path.setAttribute('fill', `none`);\n g.appendChild(path);\n\n return g;\n}\n","export const ZOOM_STEP = 0.1;\nexport const MIN_ZOOM = 0.1;\nexport const MAX_ZOOM = 4;\n","import { SetViewportOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Viewport } from '../interfaces/viewport';\n\nexport function setViewport(board: PlaitBoard, viewport: Viewport) {\n const operation: SetViewportOperation = { type: 'set_viewport', properties: board.viewport, newProperties: viewport };\n board.apply(operation);\n}\n\nexport interface ViewportTransforms {\n setViewport: (board: PlaitBoard, viewport: Viewport) => void;\n}\n\nexport const ViewportTransforms: ViewportTransforms = {\n setViewport\n};\n","import { SetThemeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitTheme } from '../interfaces';\n\nexport function setTheme(board: PlaitBoard, themeColorMode: PlaitTheme) {\n const operation: SetThemeOperation = { type: 'set_theme', properties: board.theme, newProperties: themeColorMode };\n board.apply(operation);\n}\n\nexport interface ThemeTransforms {\n setTheme: (board: PlaitBoard, themeColorMode: PlaitTheme) => void;\n}\n\nexport const ViewportTransforms: ThemeTransforms = {\n setTheme\n};\n","import { ThemeColorMode } from '../interfaces/theme';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { getRectangleByElements } from '../utils/element';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport {\n clampZoomLevel,\n clearViewportOrigination,\n getViewBoxCenterPoint,\n getViewportOrigination,\n initializeViewportContainer\n} from '../utils/viewport';\nimport { BOARD_TO_COMPONENT } from '../utils/weak-maps';\nimport { setViewport } from './viewport';\nimport { depthFirstRecursion, getRealScrollBarWidth } from '../utils';\nimport { PlaitElement } from '../interfaces/element';\nimport { setTheme } from './theme';\nimport { FitViewportOptions } from '../interfaces/viewport';\n\nfunction updateViewport(board: PlaitBoard, origination: Point, zoom?: number) {\n zoom = zoom ?? board.viewport.zoom;\n setViewport(board, {\n ...board.viewport,\n zoom,\n origination\n });\n clearViewportOrigination(board);\n}\n\nconst updatePointerType = <T extends string = PlaitPointerType>(board: PlaitBoard, pointer: T) => {\n if (board.pointer === pointer) return;\n board.pointer = pointer;\n const boardComponent = BOARD_TO_COMPONENT.get(board);\n boardComponent?.markForCheck();\n};\n\nfunction updateZoom(board: PlaitBoard, newZoom: number, isCenter = true) {\n newZoom = clampZoomLevel(newZoom);\n\n const movingPoint = PlaitBoard.getMovingPointInBoard(board);\n const nativeElement = PlaitBoard.getBoardContainer(board);\n const nativeElementRect = nativeElement.getBoundingClientRect();\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n let focusPoint = [boardContainerRect.width / 2, boardContainerRect.height / 2];\n\n if (!isCenter && movingPoint && distanceBetweenPointAndRectangle(movingPoint[0], movingPoint[1], nativeElementRect) === 0) {\n focusPoint = [movingPoint[0] - nativeElementRect.x, movingPoint[1] - nativeElementRect.y];\n }\n\n const zoom = board.viewport.zoom;\n const origination = getViewportOrigination(board);\n const centerX = origination![0] + focusPoint[0] / zoom;\n const centerY = origination![1] + focusPoint[1] / zoom;\n const newOrigination = [centerX - focusPoint[0] / newZoom, centerY - focusPoint[1] / newZoom] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\nfunction fitViewport(board: PlaitBoard) {\n let scrollBarWidth = getRealScrollBarWidth(board);\n\n const boardContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const zoom = board.viewport.zoom;\n const autoFitPadding = 16;\n const viewportWidth = boardContainerRect.width - 2 * autoFitPadding;\n const viewportHeight = boardContainerRect.height - 2 * autoFitPadding;\n\n let newZoom = zoom;\n if (viewportWidth < elementHostBox.width || viewportHeight < elementHostBox.height) {\n newZoom = Math.min(viewportWidth / elementHostBox.width, viewportHeight / elementHostBox.height);\n } else {\n newZoom = 1;\n }\n\n const centerPoint = getViewBoxCenterPoint(board);\n const newOrigination = [\n centerPoint[0] - boardContainerRect.width / 2 / newZoom + scrollBarWidth / 2 / zoom,\n centerPoint[1] - boardContainerRect.height / 2 / newZoom + scrollBarWidth / 2 / zoom\n ] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\nfunction fitViewportWidth(board: PlaitBoard, options: FitViewportOptions) {\n let scrollBarWidth = getRealScrollBarWidth(board);\n\n const boardContainer = PlaitBoard.getBoardContainer(board);\n const boardContainerRectangle = boardContainer.getBoundingClientRect();\n\n let finalWidth = 0;\n if (options.maxWidth) {\n finalWidth = options.maxWidth;\n } else {\n finalWidth = boardContainerRectangle.width;\n }\n\n const elementHostBox = getRectangleByElements(board, board.children, true);\n const contentWidth = finalWidth - 2 * options.autoFitPadding;\n let newZoom = 0;\n if (contentWidth < elementHostBox.width) {\n newZoom = Math.min(contentWidth / elementHostBox.width);\n } else {\n newZoom = 1;\n }\n\n let finalHeight = elementHostBox.height * newZoom + 2 * options.autoFitPadding;\n if (finalHeight > options.limitHeight) {\n const containerEl = boardContainer.closest(`.${options.containerClass}`) as HTMLElement;\n containerEl.style.height = `${finalHeight}px`;\n initializeViewportContainer(board);\n } else {\n finalHeight = options.limitHeight;\n }\n\n const centerX = elementHostBox.x + elementHostBox.width / 2;\n const centerY = elementHostBox.y + elementHostBox.height / 2;\n const newOrigination = [\n centerX - finalWidth / 2 / newZoom + scrollBarWidth / 2 / newZoom,\n centerY - finalHeight / 2 / newZoom + scrollBarWidth / 2 / newZoom\n ] as Point;\n updateViewport(board, newOrigination, newZoom);\n}\n\n/**\n * apply theme to every element (remove element custom properties)\n * invoke applyThemeColor\n */\nfunction updateThemeColor(board: PlaitBoard, mode: ThemeColorMode) {\n mode = mode ?? board.theme.themeColorMode;\n setTheme(board, { themeColorMode: mode });\n\n depthFirstRecursion((board as unknown) as PlaitElement, element => {\n board.applyTheme(element);\n });\n}\n\nexport const BoardTransforms = {\n updatePointerType,\n updateViewport,\n fitViewport,\n updateZoom,\n updateThemeColor,\n fitViewportWidth\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\n\nexport const getViewBox = (board: PlaitBoard) => {\n return PlaitBoard.getHost(board).viewBox.baseVal;\n};\n\n/**\n * Get the screen point starting from the upper left corner of the svg element (based on the svg screen coordinate system)\n */\nexport function toHostPoint(board: PlaitBoard, x: number, y: number): Point {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [x - rect.x, y - rect.y];\n}\n\n/**\n * Get the point in the coordinate system of the svg viewBox\n */\nexport function toViewBoxPoint(board: PlaitBoard, hostPoint: Point) {\n const viewBox = getViewBox(board);\n const { zoom } = board.viewport;\n const x = hostPoint[0] / zoom + viewBox.x;\n const y = hostPoint[1] / zoom + viewBox.y;\n const newPoint = [x, y] as Point;\n return newPoint;\n}\n\nexport function toViewBoxPoints(board: PlaitBoard, hostPoints: Point[]) {\n const newPoints = hostPoints.map(point => {\n return toViewBoxPoint(board, point);\n });\n return newPoints;\n}\n\n/**\n * `toHostPoint` reverse processing\n * Get the screen point starting from the upper left corner of the browser window or the viewport (based on the screen coordinate system)\n */\nexport function toScreenPointFromHostPoint(board: PlaitBoard, hostPoint: Point) {\n const host = PlaitBoard.getHost(board);\n const rect = host.getBoundingClientRect();\n return [hostPoint[0] + rect.x, hostPoint[1] + rect.y] as Point;\n}\n\n/**\n * `toViewBoxPoint` reverse processing\n */\nexport function toHostPointFromViewBoxPoint(board: PlaitBoard, viewBoxPoint: Point) {\n const { zoom } = board.viewport;\n const viewBox = getViewBox(board);\n const x = (viewBoxPoint[0] - viewBox.x) * zoom;\n const y = (viewBoxPoint[1] - viewBox.y) * zoom;\n return [x, y] as Point;\n}\n","import { SCROLL_BAR_WIDTH } from '../constants';\nimport { MAX_ZOOM, MIN_ZOOM } from '../constants/zoom';\nimport { PlaitBoard, Point, RectangleClient } from '../interfaces';\nimport { BoardTransforms } from '../transforms/board';\nimport { getRectangleByElements } from './element';\nimport { toHostPointFromViewBoxPoint, toViewBoxPoint } from './to-point';\nimport { BOARD_TO_VIEWPORT_ORIGINATION } from './weak-maps';\n\nconst IS_FROM_SCROLLING = new WeakMap<PlaitBoard, boolean>();\n\nconst IS_FROM_VIEWPORT_CHANGE = new WeakMap<PlaitBoard, boolean>();\n\nexport function getViewportContainerRect(board: PlaitBoard) {\n const { hideScrollbar } = board.options;\n const scrollBarWidth = hideScrollbar ? SCROLL_BAR_WIDTH : 0;\n const viewportRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n\n return {\n width: viewportRect.width + scrollBarWidth,\n height: viewportRect.height + scrollBarWidth\n };\n}\n\nexport function getElementHostBBox(board: PlaitBoard, zoom: number) {\n const childrenRect = getRectangleByElements(board, board.children, true);\n const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const containerWidth = viewportContainerRect.width / zoom;\n const containerHeight = viewportContainerRect.height / zoom;\n let left: number;\n let right: number;\n let top: number;\n let bottom: number;\n\n if (childrenRect.width < containerWidth) {\n const centerX = childrenRect.x + childrenRect.width / 2;\n const halfContainerWidth = containerWidth / 2;\n left = centerX - halfContainerWidth;\n right = centerX + halfContainerWidth;\n } else {\n left = childrenRect.x;\n right = childrenRect.x + childrenRect.width;\n }\n if (childrenRect.height < containerHeight) {\n const centerY = childrenRect.y + childrenRect.height / 2;\n const halfContainerHeight = containerHeight / 2;\n top = centerY - halfContainerHeight;\n bottom = centerY + halfContainerHeight;\n } else {\n top = childrenRect.y;\n bottom = childrenRect.y + childrenRect.height;\n }\n return {\n left,\n right,\n top,\n bottom\n };\n}\n\n/**\n * Normalize the scaling ratio, or return the corrected scaling ratio if the limit is exceeded\n */\nexport function clampZoomLevel(zoom: number, minZoom = MIN_ZOOM, maxZoom = MAX_ZOOM) {\n return zoom < minZoom ? minZoom : zoom > maxZoom ? maxZoom : zoom;\n}\n\nexport function calcNewViewBox(board: PlaitBoard, zoom: number) {\n const boardContainerRectangle = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const elementHostBBox = getElementHostBBox(board, zoom);\n const horizontalPadding = boardContainerRectangle.width / 2;\n const verticalPadding = boardContainerRectangle.height / 2;\n const viewBox = [\n elementHostBBox.left - horizontalPadding / zoom,\n elementHostBBox.top - verticalPadding / zoom,\n elementHostBBox.right - elementHostBBox.left + (horizontalPadding * 2) / zoom,\n elementHostBBox.bottom - elementHostBBox.top + (verticalPadding * 2) / zoom\n ];\n return viewBox;\n}\n\nexport function getViewBoxCenterPoint(board: PlaitBoard) {\n const childrenRectangle = getRectangleByElements(board, board.children, true);\n return [childrenRectangle.x + childrenRectangle.width / 2, childrenRectangle.y + childrenRectangle.height / 2] as Point;\n}\n\nexport function setSVGViewBox(board: PlaitBoard, viewBox: number[]) {\n const zoom = board.viewport.zoom;\n const hostElement = PlaitBoard.getHost(board);\n hostElement.style.display = 'block';\n hostElement.style.width = `${viewBox[2] * zoom}px`;\n hostElement.style.height = `${viewBox[3] * zoom}px`;\n\n if (viewBox && viewBox[2] > 0 && viewBox[3] > 0) {\n hostElement.setAttribute('viewBox', viewBox.join(' '));\n }\n}\n\nexport function updateViewportOffset(board: PlaitBoard) {\n const origination = getViewportOrigination(board);\n if (!origination) {\n return;\n }\n const [scrollLeft, scrollTop] = toHostPointFromViewBoxPoint(board, origination);\n updateViewportContainerScroll(board, scrollLeft, scrollTop);\n}\n\nexport function updateViewportContainerScroll(board: PlaitBoard, left: number, top: number, isFromViewportChange: boolean = true) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const previousScrollLeft = viewportContainer.scrollLeft;\n const previousScrollTop = viewportContainer.scrollTop;\n // scrollTop assign 11.8 will get 11.5 in chrome\n // scrollTop assign 11.8 will get 11 in firefox, safari\n // scrollTop assign 11.4 will get 11 in chrome, firefox, safari\n if (viewportContainer.scrollLeft !== Math.floor(left) || viewportContainer.scrollTop !== Math.floor(top)) {\n viewportContainer.scrollLeft = left;\n viewportContainer.scrollTop = top;\n const offsetWidth = viewportContainer.offsetWidth;\n const offsetHeight = viewportContainer.offsetHeight;\n if (previousScrollLeft === viewportContainer.scrollLeft && previousScrollTop === viewportContainer.scrollTop) {\n // The scroll event cannot be triggered, so the origination is modified directly based on the scroll distance.\n updateViewportByScrolling(board, previousScrollLeft, previousScrollTop);\n } else {\n const isValidLeftOrTop =\n left > 0 &&\n top > 0 &&\n left < viewportContainer.scrollWidth - offsetWidth &&\n top < viewportContainer.scrollHeight - offsetHeight;\n if (isFromViewportChange && isValidLeftOrTop) {\n setIsFromViewportChange(board, true);\n }\n }\n }\n}\n\nexport function updateViewportByScrolling(board: PlaitBoard, scrollLeft: number, scrollTop: number) {\n const origination = toViewBoxPoint(board, [scrollLeft, scrollTop]);\n if (Point.isEquals(origination, getViewportOrigination(board))) {\n return;\n }\n BoardTransforms.updateViewport(board, origination);\n setIsFromScrolling(board, true);\n}\n\nexport function initializeViewportContainer(board: PlaitBoard) {\n const { width, height } = getViewportContainerRect(board);\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n viewportContainer.style.width = `${width}px`;\n viewportContainer.style.height = `${height}px`;\n}\n\nexport function initializeViewBox(board: PlaitBoard) {\n const zoom = board.viewport.zoom;\n const viewBox = calcNewViewBox(board, zoom);\n setSVGViewBox(board, viewBox);\n}\n\nexport function initializeViewportOffset(board: PlaitBoard) {\n if (!board.viewport?.origination) {\n const zoom = board.viewport.zoom;\n const viewportContainerRect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n const viewBox = calcNewViewBox(board, zoom);\n const centerX = viewBox[0] + viewBox[2] / 2;\n const centerY = viewBox[1] + viewBox[3] / 2;\n const origination = [centerX - viewportContainerRect.width / 2 / zoom, centerY - viewportContainerRect.height / 2 / zoom] as Point;\n updateViewportOrigination(board, origination);\n updateViewportOffset(board);\n return;\n }\n updateViewportOffset(board);\n}\n\nexport const updateViewportOrigination = (board: PlaitBoard, origination: Point) => {\n BOARD_TO_VIEWPORT_ORIGINATION.set(board, origination);\n};\n\nexport const clearViewportOrigination = (board: PlaitBoard) => {\n BOARD_TO_VIEWPORT_ORIGINATION.delete(board);\n};\n\nexport const getViewportOrigination = (board: PlaitBoard) => {\n const origination = BOARD_TO_VIEWPORT_ORIGINATION.get(board);\n if (origination) {\n return origination;\n } else {\n return board.viewport.origination;\n }\n};\n\nexport const isFromScrolling = (board: PlaitBoard) => {\n return !!IS_FROM_SCROLLING.get(board);\n};\n\nexport const setIsFromScrolling = (board: PlaitBoard, state: boolean) => {\n IS_FROM_SCROLLING.set(board, state);\n};\n\nexport const isFromViewportChange = (board: PlaitBoard) => {\n return !!IS_FROM_VIEWPORT_CHANGE.get(board);\n};\n\nexport const setIsFromViewportChange = (board: PlaitBoard, state: boolean) => {\n IS_FROM_VIEWPORT_CHANGE.set(board, state);\n};\n\nexport function scrollToRectangle(board: PlaitBoard, client: RectangleClient) {}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Subscription, timer } from 'rxjs';\n\nconst BOARD_TO_RAF = new WeakMap<PlaitBoard, { [key: string]: number | null }>();\n\nconst getTimerId = (board: PlaitBoard, key: string) => {\n const state = getRAFState(board);\n return state[key] || null;\n};\n\nconst getRAFState = (board: PlaitBoard) => {\n return BOARD_TO_RAF.get(board) || {};\n};\n\nexport const throttleRAF = (board: PlaitBoard, key: string, fn: () => void) => {\n const scheduleFunc = () => {\n let timerId = requestAnimationFrame(() => {\n const value = BOARD_TO_RAF.get(board) || {};\n value[key] = null;\n BOARD_TO_RAF.set(board, value);\n fn();\n });\n const state = getRAFState(board);\n state[key] = timerId;\n BOARD_TO_RAF.set(board, state);\n };\n let timerId = getTimerId(board, key);\n if (timerId !== null) {\n cancelAnimationFrame(timerId);\n }\n scheduleFunc();\n};\n\nexport const debounce = (func: () => void, wait: number, options?: { leading: boolean }) => {\n let timerSubscription: Subscription | null = null;\n return () => {\n if (timerSubscription && !timerSubscription.closed) {\n timerSubscription.unsubscribe();\n timerSubscription = timer(wait).subscribe(() => {\n func();\n });\n } else {\n if (options?.leading) {\n timer(0).subscribe(() => {\n func();\n });\n }\n timerSubscription = timer(wait).subscribe();\n }\n };\n};\n","import { PlaitBoard } from \"../interfaces/board\";\n\nexport const IS_DRAGGING = new WeakMap<PlaitBoard, boolean>();\n\n\nexport const isDragging = (board: PlaitBoard) => {\n return !!IS_DRAGGING.get(board);\n};\n\nexport const setDragging = (board: PlaitBoard, state: boolean) => {\n IS_DRAGGING.set(board, state);\n}","import { PlaitBoard, PlaitElement } from '../interfaces';\nimport { setDragging } from './dnd';\nimport { BOARD_TO_MOVING_ELEMENT } from './weak-maps';\n\nexport const getMovingElements = (board: PlaitBoard) => {\n return BOARD_TO_MOVING_ELEMENT.get(board) || [];\n};\n\nexport const isMovingElements = (board: PlaitBoard) => {\n return (BOARD_TO_MOVING_ELEMENT.get(board) || []).length > 0;\n};\n\nexport const removeMovingElements = (board: PlaitBoard) => {\n BOARD_TO_MOVING_ELEMENT.delete(board);\n setDragging(board, false);\n};\n\nexport const cacheMovingElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n BOARD_TO_MOVING_ELEMENT.set(board, elements);\n setDragging(board, true);\n};\n","import { PlaitBoard, PlaitElement, RectangleClient } from '../interfaces';\nimport { findElements, getRectangleByElements } from './element';\n\nconst IMAGE_CONTAINER = 'plait-image-container';\n\nexport interface ToImageOptions {\n elements?: PlaitElement[];\n name?: string;\n ratio?: number;\n padding?: number;\n fillStyle?: string;\n // List of class names. The list must be in the form class1,class2,...\n inlineStyleClassNames?: string;\n}\n\n/**\n * Is element node\n * @param node\n * @returns\n */\nfunction isElementNode(node: Node): node is HTMLElement {\n return node.nodeType === Node.ELEMENT_NODE;\n}\n\n/**\n * load image resources\n * @param url image url\n * @returns image element\n */\nfunction loadImage(src: string): Promise<HTMLImageElement> {\n return new Promise((resolve, reject) => {\n const img = new Image();\n img.crossOrigin = 'Anonymous';\n img.onload = () => resolve(img);\n img.onerror = () => reject(new Error('Failed to load image'));\n img.src = src;\n });\n}\n\n/**\n * create and return canvas and context\n * @param width canvas width\n * @param height canvas height\n * @param fillStyle fill style\n * @returns canvas and context\n */\nfunction createCanvas(width: number, height: number, fillStyle = 'transparent') {\n const canvas = document.createElement('canvas');\n const ctx = canvas.getContext('2d')!;\n\n canvas.width = width;\n canvas.height = height;\n canvas.style.width = `${width}px`;\n canvas.style.height = `${height}px`;\n ctx.strokeStyle = '#ffffff';\n ctx.fillStyle = fillStyle;\n ctx.fillRect(0, 0, width, height);\n\n return {\n canvas,\n ctx\n };\n}\n\n/**\n * convert image to base64\n * @param url image url\n * @returns image base64\n */\nfunction convertImageToBase64(url: string) {\n return loadImage(url).then(img => {\n const { canvas, ctx } = createCanvas(img.width, img.height);\n ctx?.drawImage(img, 0, 0);\n return canvas.toDataURL('image/png');\n });\n}\n\n/**\n * clone node style\n * @param nativeNode source node\n * @param clonedNode clone node\n */\nfunction cloneCSSStyle<T extends HTMLElement>(nativeNode: T, clonedNode: T) {\n const targetStyle = clonedNode?.style;\n if (!targetStyle) {\n return;\n }\n\n const sourceStyle = window.getComputedStyle(nativeNode);\n if (sourceStyle.cssText) {\n targetStyle.cssText = sourceStyle.cssText;\n targetStyle.transformOrigin = sourceStyle.transformOrigin;\n } else {\n Array.from(sourceStyle).forEach(name => {\n let value = sourceStyle.getPropertyValue(name);\n targetStyle.setProperty(name, value, sourceStyle.getPropertyPriority(name));\n });\n }\n}\n\n/**\n * batch clone target styles\n * @param sourceNode\n * @param cloneNode\n * @param inlineStyleClassNames\n */\nfunction batchCloneCSSStyle(sourceNode: SVGGElement, cloneNode: SVGGElement, inlineStyleClassNames: string) {\n if (inlineStyleClassNames) {\n const classNames = inlineStyleClassNames + `,.${IMAGE_CONTAINER}`;\n const sourceNodes = Array.from(sourceNode.querySelectorAll(classNames));\n const cloneNodes = Array.from(cloneNode.querySelectorAll(classNames));\n\n sourceNodes.forEach((node, index) => {\n const childElements = Array.from(node.querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n const cloneChildElements = Array.from(cloneNodes[index].querySelectorAll('*')).filter(isElementNode) as HTMLElement[];\n sourceNodes.push(...childElements);\n cloneNodes.push(...cloneChildElements);\n });\n\n // processing styles\n sourceNodes.map((node, index) => {\n cloneCSSStyle(node as HTMLElement, cloneNodes[index] as HTMLElement);\n });\n }\n}\n\n/**\n * convert images in target nodes in batches\n * @param sourceNode\n * @param cloneNode\n */\nasync function batchConvertImage(sourceNode: SVGGElement, cloneNode: SVGGElement) {\n const sourceImageNodes = Array.from(sourceNode.querySelectorAll(`.${IMAGE_CONTAINER}`));\n const cloneImageNodes = Array.from(cloneNode.querySelectorAll(`.${IMAGE_CONTAINER}`));\n await Promise.all(\n sourceImageNodes.map((_, index) => {\n return new Promise(resolve => {\n const cloneImageNode = cloneImageNodes[index];\n // processing image\n const image = (cloneImageNode as HTMLElement).querySelector('img');\n const url = image?.getAttribute('src');\n if (!url) {\n return resolve(true);\n }\n convertImageToBase64(url).then(base64Image => {\n image?.setAttribute('src', base64Image);\n resolve(true);\n });\n });\n })\n );\n}\n\n/**\n * clone svg element\n * @param board board\n * @param options parameter configuration\n * @returns clone svg element\n */\nasync function cloneSvg(board: PlaitBoard, elements: PlaitElement[], rectangle: RectangleClient, options: ToImageOptions) {\n const { width, height, x, y } = rectangle;\n const { padding = 4, inlineStyleClassNames } = options;\n const sourceSvg = PlaitBoard.getHost(board);\n const selectedGElements = elements.map(value => PlaitElement.getComponent(value).g);\n const cloneSvgElement = sourceSvg.cloneNode() as SVGElement;\n const newHostElement = PlaitBoard.getElementHost(board).cloneNode() as SVGGElement;\n\n cloneSvgElement.style.width = `${width}px`;\n cloneSvgElement.style.height = `${height}px`;\n cloneSvgElement.style.backgroundColor = '';\n cloneSvgElement.setAttribute('width', `${width}`);\n cloneSvgElement.setAttribute('height', `${height}`);\n cloneSvgElement.setAttribute('viewBox', [x - padding, y - padding, width + 2 * padding, height + 2 * padding].join(','));\n\n await Promise.all(\n selectedGElements.map(async (child, i) => {\n const cloneChild = child.cloneNode(true) as SVGGElement;\n batchCloneCSSStyle(child, cloneChild, inlineStyleClassNames as string);\n\n await batchConvertImage(child, cloneChild);\n newHostElement.appendChild(cloneChild);\n })\n );\n cloneSvgElement.appendChild(newHostElement);\n return cloneSvgElement;\n}\n\n/**\n * current board transfer pictures\n * @param board board\n * @param options parameter configuration\n * @returns images in the specified format base64\n */\nexport async function toImage(board: PlaitBoard, options: ToImageOptions) {\n if (!board) {\n return undefined;\n }\n const elements = options.elements || findElements(board, { match: () => true, recursion: () => true, isReverse: false });\n const targetRectangle = getRectangleByElements(board, elements, false);\n const { ratio = 2, fillStyle = 'transparent' } = options;\n const { width, height } = targetRectangle;\n const ratioWidth = width * ratio;\n const ratioHeight = height * ratio;\n\n const cloneSvgElement = await cloneSvg(board, elements, targetRectangle, options);\n const { canvas, ctx } = createCanvas(ratioWidth, ratioHeight, fillStyle);\n\n const svgStr = new XMLSerializer().serializeToString(cloneSvgElement);\n const imgSrc = `data:image/svg+xml;charset=utf-8,${encodeURIComponent(svgStr)}`;\n\n try {\n const img = await loadImage(imgSrc);\n ctx.drawImage(img, 0, 0, ratioWidth, ratioHeight);\n return canvas.toDataURL('image/png');\n } catch (error) {\n console.error('Error converting SVG to image:', error);\n return undefined;\n }\n}\n\n/**\n * download the file with the specified name\n * @param url download url\n * @param name file name\n */\nexport function downloadImage(url: string, name: string) {\n const a = document.createElement('a');\n a.href = url;\n a.download = name;\n a.click();\n a.remove();\n}\n","import { PlaitElement } from '../../interfaces';\n\nexport enum WritableClipboardType {\n 'medias' = 'medias',\n 'elements' = 'elements'\n}\n\nexport type WritableClipboardData = PlaitElement[] | any[];\n\nexport interface WritableClipboardContext {\n text: string;\n type: WritableClipboardType;\n data: WritableClipboardData;\n}\n\nexport interface ClipboardData {\n files?: File[];\n elements?: PlaitElement[];\n medias?: any[];\n text?: string;\n}\n","import { ClipboardData, WritableClipboardContext, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const buildPlaitHtml = (type: WritableClipboardType, data: WritableClipboardData) => {\n const stringifiedClipboard = JSON.stringify({\n type,\n data\n });\n return `<plait>${stringifiedClipboard}</plait>`;\n};\n\nexport const getClipboardFromHtml = (html: string): ClipboardData | null => {\n const plaitString = html?.match(/<plait[^>]*>(.*)<\\/plait>/)?.[1];\n if (plaitString) {\n try {\n const plaitJson = JSON.parse(plaitString);\n if (plaitJson) {\n if (plaitJson.type === WritableClipboardType.elements) {\n return {\n elements: plaitJson.data\n };\n } else if (plaitJson.type === WritableClipboardType.medias) {\n return {\n medias: plaitJson.data\n };\n }\n }\n } catch (error) {\n console.error(error);\n return null;\n }\n }\n return null;\n};\n\nexport const stripHtml = (html: string) => {\n // See <https://github.com/developit/preact-markup/blob/4788b8d61b4e24f83688710746ee36e7464f7bbc/src/parse-markup.js#L60-L69>\n const doc = document.implementation.createHTMLDocument('');\n doc.documentElement.innerHTML = html.trim();\n return doc.body.textContent || doc.body.innerText || '';\n};\n\nexport const getProbablySupportsClipboardWrite = () => {\n return 'clipboard' in navigator && 'write' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardWriteText = () => {\n return 'clipboard' in navigator && 'writeText' in navigator.clipboard;\n};\n\nexport const getProbablySupportsClipboardRead = () => {\n return 'clipboard' in navigator && 'read' in navigator.clipboard;\n};\n\nexport const createClipboardContext = (\n type: WritableClipboardType,\n data: WritableClipboardData,\n text: string\n): WritableClipboardContext => {\n return {\n type,\n data,\n text\n };\n};\n\nexport const addClipboardContext = (\n clipboardContext: WritableClipboardContext,\n addition: WritableClipboardContext\n): WritableClipboardContext => {\n const { type, data, text } = clipboardContext;\n if (type === addition.type) {\n return {\n type,\n data: data.concat(addition.data),\n text: text + ' ' + addition.text\n };\n }\n return clipboardContext;\n};\n","import { buildPlaitHtml, getClipboardFromHtml } from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setDataTransferClipboard = (dataTransfer: DataTransfer | null, type: WritableClipboardType, data: WritableClipboardData) => {\n dataTransfer?.setData(`text/html`, buildPlaitHtml(type, data));\n};\n\nexport const setDataTransferClipboardText = (data: DataTransfer | null, text: string) => {\n data?.setData(`text/plain`, text);\n};\n\nexport const getDataTransferClipboard = (data: DataTransfer | null): ClipboardData => {\n const html = data?.getData(`text/html`);\n if (html) {\n const htmlClipboardData = getClipboardFromHtml(html);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n\n return {};\n};\n\nexport const getDataTransferClipboardText = (data: DataTransfer | null) => {\n if (!data) {\n return {};\n }\n const text = data?.getData(`text/plain`);\n if (text) {\n const htmlClipboardData = getClipboardFromHtml(text);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n }\n return {\n text\n };\n};\n","import {\n buildPlaitHtml,\n getClipboardFromHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n stripHtml\n} from './common';\nimport { ClipboardData, WritableClipboardData, WritableClipboardType } from './types';\n\nexport const setNavigatorClipboard = async (type: WritableClipboardType, data: WritableClipboardData, text: string = '') => {\n let textClipboard = text;\n if (getProbablySupportsClipboardWrite()) {\n await navigator.clipboard.write([\n new ClipboardItem({\n 'text/html': new Blob([buildPlaitHtml(type, data)], {\n type: 'text/html'\n }),\n 'text/plain': new Blob([JSON.stringify(textClipboard ?? data)], { type: 'text/plain' })\n })\n ]);\n }\n};\n\nexport const getNavigatorClipboard = async (): Promise<ClipboardData> => {\n if (!getProbablySupportsClipboardRead()) {\n return {};\n }\n const clipboardItems = await navigator.clipboard.read();\n let clipboardData: ClipboardData = {};\n\n if (Array.isArray(clipboardItems) && clipboardItems[0] instanceof ClipboardItem) {\n for (const item of clipboardItems) {\n if (isFile(item)) {\n const clipboardFiles = item.types.filter(type => type.match(/^image\\//));\n const fileBlobs = await Promise.all(clipboardFiles.map(type => item.getType(type)!));\n const urls = (fileBlobs.filter(Boolean) as (File | Blob)[]).map(blob => URL.createObjectURL(blob));\n const files = await Promise.all(\n urls.map(async url => {\n const blob = await (await fetch(url)).blob();\n return new File([blob], 'plait-file', { type: blob.type });\n })\n );\n return {\n files\n };\n }\n if (item.types.includes('text/html')) {\n const htmlContent = await blobAsString(await item.getType('text/html'));\n const htmlClipboardData = getClipboardFromHtml(htmlContent);\n if (htmlClipboardData) {\n return htmlClipboardData;\n }\n if (htmlContent && htmlContent.trim()) {\n clipboardData = { text: stripHtml(htmlContent) };\n }\n }\n if (item.types.includes('text/plain')) {\n const textContent = await blobAsString(await item.getType('text/plain'));\n clipboardData = {\n text: stripHtml(textContent)\n };\n }\n }\n }\n return clipboardData;\n};\n\nconst isFile = (item: ClipboardItem) => {\n return item.types.find(i => i.match(/^image\\//));\n};\n\nconst blobAsString = (blob: Blob) => {\n return new Promise<string>((resolve, reject) => {\n const reader = new FileReader();\n reader.addEventListener('loadend', () => {\n const text = reader.result;\n resolve(text as string);\n });\n reader.addEventListener('error', () => {\n reject(reader.error);\n });\n reader.readAsText(blob);\n });\n};\n","import {\n buildPlaitHtml,\n getProbablySupportsClipboardRead,\n getProbablySupportsClipboardWrite,\n getProbablySupportsClipboardWriteText\n} from './common';\nimport {\n getDataTransferClipboard,\n getDataTransferClipboardText,\n setDataTransferClipboard,\n setDataTransferClipboardText\n} from './data-transfer';\nimport { getNavigatorClipboard, setNavigatorClipboard } from './navigator-clipboard';\nimport { ClipboardData, WritableClipboardContext } from './types';\n\nexport const getClipboardData = async (dataTransfer: DataTransfer | null): Promise<ClipboardData> => {\n let clipboardData = {};\n if (dataTransfer) {\n if (dataTransfer.files.length) {\n return { files: Array.from(dataTransfer.files) };\n }\n clipboardData = getDataTransferClipboard(dataTransfer);\n if (Object.keys(clipboardData).length === 0) {\n clipboardData = getDataTransferClipboardText(dataTransfer);\n }\n return clipboardData;\n }\n if (getProbablySupportsClipboardRead()) {\n return await getNavigatorClipboard();\n }\n return clipboardData;\n};\n\nexport const setClipboardData = async (dataTransfer: DataTransfer | null, clipboardContext: WritableClipboardContext | null) => {\n if (!clipboardContext) {\n return;\n }\n const { type, data, text } = clipboardContext;\n\n if (getProbablySupportsClipboardWrite()) {\n return await setNavigatorClipboard(type, data, text);\n }\n\n if (dataTransfer) {\n setDataTransferClipboard(dataTransfer, type, data);\n setDataTransferClipboardText(dataTransfer, text);\n return;\n }\n\n // Compatible with situations where navigator.clipboard.write is not supported and dataTransfer is empty\n // Such as contextmenu copy in Firefox.\n if (getProbablySupportsClipboardWriteText()) {\n return await navigator.clipboard.writeText(buildPlaitHtml(type, data));\n }\n};\n","import { PlaitBoard } from '../interfaces/board';\nimport { createG } from './dom/common';\n\nexport interface TouchRef {\n target?: SVGElement;\n state: boolean;\n host?: SVGGElement;\n}\n\nexport const BOARD_TO_TOUCH_REF = new WeakMap<PlaitBoard, TouchRef>();\n\nexport const isPreventTouchMove = (board: PlaitBoard) => {\n return !!BOARD_TO_TOUCH_REF.get(board);\n};\n\nexport const preventTouchMove = (board: PlaitBoard, event: PointerEvent, state: boolean) => {\n if (state && (event.target instanceof HTMLElement || event.target instanceof SVGElement)) {\n BOARD_TO_TOUCH_REF.set(board, { state, target: event.target instanceof SVGElement ? event.target : undefined });\n } else {\n const ref = BOARD_TO_TOUCH_REF.get(board);\n if (ref) {\n BOARD_TO_TOUCH_REF.delete(board);\n ref.host?.remove();\n }\n }\n};\n\n/**\n * some intersection maybe cause target is removed from current browser window,\n * after it was removed touch move event will not be fired\n * so scroll behavior will can not be prevented in mobile browser device\n * this function will prevent target element being remove.\n */\nexport const handleTouchTarget = (board: PlaitBoard) => {\n const touchRef = BOARD_TO_TOUCH_REF.get(board);\n if (touchRef && touchRef.target && !touchRef.target.contains(PlaitBoard.getElementActiveHost(board))) {\n touchRef.target.style.opacity = '0';\n const host = createG();\n host.appendChild(touchRef.target);\n touchRef.host = host;\n host.classList.add('touch-target');\n PlaitBoard.getElementActiveHost(board).append(host);\n }\n};\n","import { PlaitElement } from \"./element\";\n\nexport interface PlaitGroup extends PlaitElement {\n type: 'group';\n}\n\nexport const PlaitGroupElement = {\n isGroup: (value: any): value is PlaitGroup => {\n return value.type === 'group';\n }\n}","import { isNullOrUndefined } from '../utils/helper';\nimport { ExtendedType } from './custom-types';\nimport { Point } from './point';\n\nexport interface BaseViewport {\n [key: string]: any;\n zoom: number;\n origination?: Point;\n}\n\nexport type Viewport = ExtendedType<'Viewport', BaseViewport>;\n\nexport interface ViewportInterface {\n isViewport: (value: any) => value is Viewport;\n}\n\nexport const Viewport: ViewportInterface = {\n isViewport: (value: any): value is Viewport => {\n return !isNullOrUndefined(value.zoom) && !isNullOrUndefined(value.viewBackgroundColor);\n }\n};\n\nexport interface FitViewportOptions {\n maxWidth?: number;\n limitHeight: number;\n autoFitPadding: number;\n containerClass: string;\n}\n","import produce from 'immer';\nimport { PlaitOperation } from './operation';\n\nexport interface PathLevelsOptions {\n reverse?: boolean;\n}\n\nexport type Path = number[];\n\nexport const Path = {\n /**\n * Get a list of ancestor paths for a given path.\n *\n * The paths are sorted from shallowest to deepest ancestor. However, if the\n * `reverse: true` option is passed, they are reversed.\n */\n ancestors(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n let paths = Path.levels(path, options);\n\n if (reverse) {\n paths = paths.slice(1);\n } else {\n paths = paths.slice(0, -1);\n }\n\n return paths;\n },\n /**\n * Get a list of paths at every level down to a path. Note: this is the same\n * as `Path.ancestors`, but including the path itself.\n *\n * The paths are sorted from shallowest to deepest. However, if the `reverse:\n * true` option is passed, they are reversed.\n */\n levels(path: Path, options: PathLevelsOptions = {}): Path[] {\n const { reverse = false } = options;\n const list: Path[] = [];\n\n for (let i = 0; i <= path.length; i++) {\n list.push(path.slice(0, i));\n }\n\n if (reverse) {\n list.reverse();\n }\n\n return list;\n },\n parent(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the parent path of the root path [${path}].`);\n }\n\n return path.slice(0, -1);\n },\n next(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no next index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last + 1);\n },\n hasPrevious(path: Path): boolean {\n return path[path.length - 1] > 0;\n },\n previous(path: Path): Path {\n if (path.length === 0) {\n throw new Error(`Cannot get the next path of a root path [${path}], because it has no previous index.`);\n }\n const last = path[path.length - 1];\n return path.slice(0, -1).concat(last - 1);\n },\n /**\n * Check if a path is an ancestor of another.\n */\n\n isAncestor(path: Path, another: Path): boolean {\n return path.length < another.length && Path.compare(path, another) === 0;\n },\n /**\n * Compare a path to another, returning an integer indicating whether the path\n * was before, at, or after the other.\n *\n * Note: Two paths of unequal length can still receive a `0` result if one is\n * directly above or below the other. If you want exact matching, use\n * [[Path.equals]] instead.\n */\n compare(path: Path, another: Path): -1 | 0 | 1 {\n const min = Math.min(path.length, another.length);\n\n for (let i = 0; i < min; i++) {\n if (path[i] < another[i]) return -1;\n if (path[i] > another[i]) return 1;\n }\n\n return 0;\n },\n\n /**\n * Check if a path is exactly equal to another.\n */\n\n equals(path: Path, another: Path): boolean {\n return path.length === another.length && path.every((n, i) => n === another[i]);\n },\n /**\n * Check if a path ends before one of the indexes in another.\n */\n\n endsBefore(path: Path, another: Path): boolean {\n const i = path.length - 1;\n const as = path.slice(0, i);\n const bs = another.slice(0, i);\n const av = path[i];\n const bv = another[i];\n return Path.equals(as, bs) && av < bv;\n },\n /**\n * Check if a path is a sibling of another.\n */\n isSibling(path: Path, another: Path): boolean {\n if (path.length !== another.length) {\n return false;\n }\n\n const as = path.slice(0, -1);\n const bs = another.slice(0, -1);\n const al = path[path.length - 1];\n const bl = another[another.length - 1];\n return al !== bl && Path.equals(as, bs);\n },\n transform(path: Path | null, operation: PlaitOperation): Path | null {\n return produce(path, p => {\n // PERF: Exit early if the operation is guaranteed not to have an effect.\n if (!path || path?.length === 0) {\n return;\n }\n\n if (p === null) {\n return null;\n }\n\n switch (operation.type) {\n case 'insert_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.endsBefore(op, p) || Path.isAncestor(op, p)) {\n p[op.length - 1] += 1;\n }\n\n break;\n }\n\n case 'remove_node': {\n const { path: op } = operation;\n\n if (Path.equals(op, p) || Path.isAncestor(op, p)) {\n return null;\n } else if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n\n case 'move_node': {\n const { path: op, newPath: onp } = operation;\n\n // If the old and new path are the same, it's a no-op.\n if (Path.equals(op, onp)) {\n return;\n }\n\n if (Path.isAncestor(op, p) || Path.equals(op, p)) {\n const copy = onp.slice();\n // op.length <= onp.length is different for slate\n // resolve drag from [0, 0] to [0, 3] issue\n if (Path.endsBefore(op, onp) && op.length <= onp.length) {\n copy[op.length - 1] -= 1;\n }\n\n return copy.concat(p.slice(op.length));\n } else if (Path.isSibling(op, onp) && (Path.isAncestor(onp, p) || Path.equals(onp, p))) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n } else {\n p[op.length - 1] += 1;\n }\n } else if (Path.endsBefore(onp, p) || Path.equals(onp, p) || Path.isAncestor(onp, p)) {\n if (Path.endsBefore(op, p)) {\n p[op.length - 1] -= 1;\n }\n\n p[onp.length - 1] += 1;\n } else if (Path.endsBefore(op, p)) {\n if (Path.equals(onp, p)) {\n p[onp.length - 1] += 1;\n }\n\n p[op.length - 1] -= 1;\n }\n\n break;\n }\n }\n return p;\n });\n }\n};\n","import { PlaitElement } from './element';\nimport { PlaitBoard } from './board';\nimport { Path } from './path';\n\nexport type PlaitNode = PlaitElement;\n\nexport type Ancestor = PlaitBoard | PlaitElement;\n\nexport interface NodeParentsOptions {\n reverse?: boolean;\n}\n\nexport const PlaitNode = {\n parent: (board: PlaitBoard, path: Path) => {\n const parentPath = Path.parent(path);\n const p = PlaitNode.get(board, parentPath);\n return p;\n },\n /**\n * Return a generator of all the ancestor nodes above a specific path.\n *\n * By default the order is top-down, from highest to lowest ancestor in\n * the tree, but you can pass the `reverse: true` option to go bottom-up.\n */\n *parents(root: PlaitBoard, path: Path, options: NodeParentsOptions = {}): Generator<PlaitNode, void, undefined> {\n for (const p of Path.ancestors(path, options)) {\n const n = PlaitNode.get(root, p);\n yield n;\n }\n },\n get<T extends PlaitNode = PlaitNode>(root: PlaitBoard, path: Path): T {\n let node: Ancestor = root;\n for (let i = 0; i < path.length; i++) {\n const p = path[i];\n if (!node || !node.children || !node.children[p]) {\n throw new Error(`Cannot find a descendant at path [${path}]`);\n }\n node = node.children[p];\n }\n return node as T;\n },\n last(board: PlaitBoard, path: Path) {\n let n = PlaitNode.get(board, path);\n while (n && n.children && n.children.length > 0) {\n const i = n.children.length - 1;\n n = n.children[i];\n }\n return n;\n }\n};\n","import { PlaitOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { createDraft, finishDraft, isDraft } from 'immer';\nimport { Viewport } from '../interfaces/viewport';\nimport { Selection } from '../interfaces/selection';\nimport { Ancestor, PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\nimport { PlaitTheme } from '../interfaces/theme';\n\nexport interface GeneralTransforms {\n transform: (board: PlaitBoard, op: PlaitOperation) => void;\n}\n\nconst applyToDraft = (board: PlaitBoard, selection: Selection | null, viewport: Viewport, theme: PlaitTheme, op: PlaitOperation) => {\n switch (op.type) {\n case 'insert_node': {\n const { path, node } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n\n parent.children.splice(index, 0, node);\n break;\n }\n case 'remove_node': {\n const { path } = op;\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n if (!parent.children || index > parent.children.length) {\n throw new Error(\n `Cannot apply an \"insert_node\" operation at path [${path}] because the destination is past the end of the node.`\n );\n }\n parent.children.splice(index, 1);\n break;\n }\n case 'move_node': {\n const { path, newPath } = op;\n\n if (Path.isAncestor(path, newPath)) {\n throw new Error(`Cannot move a path [${path}] to new path [${newPath}] because the destination is inside itself.`);\n }\n\n const node = PlaitNode.get(board, path);\n const parent = PlaitNode.parent(board, path);\n const index = path[path.length - 1];\n\n // This is tricky, but since the `path` and `newPath` both refer to\n // the same snapshot in time, there's a mismatch. After either\n // removing the original position, the second step's path can be out\n // of date. So instead of using the `op.newPath` directly, we\n // transform `op.path` to ascertain what the `newPath` would be after\n // the operation was applied.\n parent.children?.splice(index, 1);\n const truePath = Path.transform(path, op)!;\n const newParent = PlaitNode.get(board, Path.parent(truePath)) as Ancestor;\n const newIndex = truePath[truePath.length - 1];\n\n newParent.children?.splice(newIndex, 0, node);\n break;\n }\n case 'set_node': {\n const { path, properties, newProperties } = op;\n\n if (path.length === 0) {\n throw new Error(`Cannot set properties on the root node!`);\n }\n\n const node = PlaitNode.get(board, path);\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete node[key];\n } else {\n node[key] = value;\n }\n }\n\n // properties that were previously defined, but are now missing, must be deleted\n for (const key in properties) {\n if (!newProperties.hasOwnProperty(key)) {\n delete node[key];\n }\n }\n\n break;\n }\n case 'set_viewport': {\n const { newProperties } = op;\n if (newProperties == null) {\n viewport = newProperties;\n } else {\n if (viewport == null) {\n if (!Viewport.isViewport(newProperties)) {\n throw new Error(\n `Cannot apply an incomplete \"set_viewport\" operation properties ${JSON.stringify(\n newProperties\n )} when there is no current viewport.`\n );\n }\n viewport = { ...newProperties };\n }\n\n for (const key in newProperties) {\n const value = newProperties[key];\n\n if (value == null) {\n delete viewport[key];\n } else {\n viewport[key] = value;\n }\n }\n }\n break;\n }\n case 'set_selection': {\n const { newProperties } = op;\n if (newProperties == null) {\n selection = newProperties;\n } else {\n if (selection === null) {\n selection = op.newProperties;\n } else {\n selection = newProperties;\n }\n }\n break;\n }\n case 'set_theme': {\n const { newProperties } = op;\n theme = newProperties as PlaitTheme;\n break;\n }\n }\n return { selection, viewport, theme };\n};\n\nexport const GeneralTransforms: GeneralTransforms = {\n /**\n * Transform the board by an operation.\n */\n transform(board: PlaitBoard, op: PlaitOperation): void {\n board.children = createDraft(board.children);\n let viewport = board.viewport && createDraft(board.viewport);\n let selection = board.selection && createDraft(board.selection);\n let theme = board.theme && createDraft(board.theme);\n\n try {\n const state = applyToDraft(board, selection, viewport, theme, op);\n viewport = state.viewport;\n selection = state.selection;\n theme = state.theme;\n } finally {\n board.children = finishDraft(board.children);\n\n if (selection) {\n board.selection = isDraft(selection) ? (finishDraft(selection) as Selection) : selection;\n } else {\n board.selection = null;\n }\n\n board.viewport = isDraft(viewport) ? (finishDraft(viewport) as Viewport) : viewport;\n board.theme = isDraft(theme) ? finishDraft(theme) : theme;\n }\n }\n};\n","import { InsertNodeOperation, MoveNodeOperation, RemoveNodeOperation, SetNodeOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { PlaitNode } from '../interfaces/node';\nimport { Path } from '../interfaces/path';\n\nexport function insertNode(board: PlaitBoard, node: PlaitNode, path: Path) {\n const operation: InsertNodeOperation = { type: 'insert_node', node, path };\n board.apply(operation);\n}\n\nexport function setNode(board: PlaitBoard, props: Partial<PlaitNode>, path: Path) {\n const properties: Partial<PlaitNode> = {};\n const newProperties: Partial<PlaitNode> = {};\n const node = PlaitNode.get(board, path);\n for (const k in props) {\n if (node[k] !== props[k]) {\n if (node.hasOwnProperty(k)) {\n properties[k] = node[k];\n }\n if (props[k] != null) newProperties[k] = props[k];\n }\n }\n const operation: SetNodeOperation = { type: 'set_node', properties, newProperties, path };\n board.apply(operation);\n}\n\nexport function removeNode(board: PlaitBoard, path: Path) {\n const node = PlaitNode.get(board, path);\n const operation: RemoveNodeOperation = { type: 'remove_node', path, node };\n board.apply(operation);\n}\n\nexport function moveNode(board: PlaitBoard, path: Path, newPath: Path) {\n const operation: MoveNodeOperation = { type: 'move_node', path, newPath };\n board.apply(operation);\n}\n\nexport interface NodeTransforms {\n insertNode: (board: PlaitBoard, node: PlaitNode, path: Path) => void;\n setNode: (board: PlaitBoard, node: Partial<PlaitNode>, path: Path) => void;\n removeNode: (board: PlaitBoard, path: Path) => void;\n moveNode: (board: PlaitBoard, path: Path, newPath: Path) => void;\n}\n\nexport const NodeTransforms: NodeTransforms = {\n insertNode,\n setNode,\n removeNode,\n moveNode\n};\n","import { SetSelectionOperation } from '../interfaces/operation';\nimport { PlaitBoard } from '../interfaces/board';\nimport { Selection } from '../interfaces/selection';\nimport { BOARD_TO_TEMPORARY_ELEMENTS } from '../utils/weak-maps';\nimport { PlaitElement } from '../interfaces/element';\nimport { getTemporaryRef } from '../utils';\n\nexport function setSelection(board: PlaitBoard, selection: Selection | null) {\n const operation: SetSelectionOperation = { type: 'set_selection', properties: board.selection, newProperties: selection };\n board.apply(operation);\n}\n\nexport interface SelectionTransforms {\n setSelection: (board: PlaitBoard, selection: Selection | null) => void;\n addSelectionWithTemporaryElements: (board: PlaitBoard, elements: PlaitElement[]) => void;\n}\n\nexport const SelectionTransforms: SelectionTransforms = {\n setSelection,\n addSelectionWithTemporaryElements\n};\n\nexport function addSelectionWithTemporaryElements(board: PlaitBoard, elements: PlaitElement[]) {\n const timeoutId = setTimeout(() => {\n setSelection(board, { anchor: [0, 0], focus: [0, 0] });\n }, 0);\n let ref = getTemporaryRef(board);\n if (ref) {\n clearTimeout(ref.timeoutId);\n const currentElements = ref.elements;\n ref.elements.push(...elements.filter(element => !currentElements.includes(element)));\n ref.timeoutId = timeoutId;\n } else {\n BOARD_TO_TEMPORARY_ELEMENTS.set(board, { timeoutId, elements });\n }\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { removeSelectedElement } from '../utils/selected-element';\nimport { removeNode } from './node';\n\nexport const removeElements = (board: PlaitBoard, elements: PlaitElement[]) => {\n elements\n .map(element => {\n const path = PlaitBoard.findPath(board, element);\n const ref = board.pathRef(path);\n return () => {\n removeNode(board, ref.current!);\n ref.unref();\n removeSelectedElement(board, element, true);\n };\n })\n .forEach(action => {\n action();\n });\n};\n\nexport const CoreTransforms = {\n removeElements\n};\n","import { GeneralTransforms } from './general';\nimport { NodeTransforms } from './node';\nimport { SelectionTransforms } from './selection';\nimport { ViewportTransforms } from './viewport';\n\nexport { BoardTransforms } from './board';\nexport { CoreTransforms } from './element';\n\nexport const Transforms: GeneralTransforms & ViewportTransforms & SelectionTransforms & NodeTransforms = {\n ...GeneralTransforms,\n ...ViewportTransforms,\n ...SelectionTransforms,\n ...NodeTransforms\n};\n","import { getSelectedElements, getSelectionAngle, setAngleForG } from '.';\nimport { ACTIVE_STROKE_WIDTH, SELECTION_RECTANGLE_CLASS_NAME } from '../constants';\nimport { PlaitBoard, PlaitPluginKey, PlaitPointerType, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { PlaitOptionsBoard, WithPluginOptions, drawRectangle } from '../public-api';\nimport { setDragging } from './dnd';\nimport { getRectangleByElements } from './element';\nimport { BOARD_TO_IS_SELECTION_MOVING, BOARD_TO_TEMPORARY_ELEMENTS } from './weak-maps';\n\nexport function isSelectionMoving(board: PlaitBoard) {\n return !!BOARD_TO_IS_SELECTION_MOVING.get(board);\n}\n\nexport function setSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardContainer(board).classList.add('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.set(board, true);\n setDragging(board, true);\n}\n\nexport function clearSelectionMoving(board: PlaitBoard) {\n PlaitBoard.getBoardContainer(board).classList.remove('selection-moving');\n BOARD_TO_IS_SELECTION_MOVING.delete(board);\n setDragging(board, false);\n}\n\nexport function isHandleSelection(board: PlaitBoard) {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n return board.pointer !== PlaitPointerType.hand && !options.isDisabledSelect && !PlaitBoard.isReadonly(board);\n}\n\nexport function isSetSelectionOperation(board: PlaitBoard) {\n return !!board.operations.find(value => value.type === 'set_selection');\n}\n\nexport function getTemporaryElements(board: PlaitBoard) {\n const ref = BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n if (ref) {\n return ref.elements;\n } else {\n return undefined;\n }\n}\n\nexport function getTemporaryRef(board: PlaitBoard) {\n return BOARD_TO_TEMPORARY_ELEMENTS.get(board);\n}\n\nexport function deleteTemporaryElements(board: PlaitBoard) {\n BOARD_TO_TEMPORARY_ELEMENTS.delete(board);\n}\n\nexport function createSelectionRectangleG(board: PlaitBoard) {\n const elements = getSelectedElements(board);\n const rectangle = getRectangleByElements(board, elements, false);\n if (rectangle.width > 0 && rectangle.height > 0 && elements.length > 1) {\n const selectionRectangleG = drawRectangle(board, RectangleClient.inflate(rectangle, ACTIVE_STROKE_WIDTH), {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n fillStyle: 'solid'\n });\n selectionRectangleG.classList.add(SELECTION_RECTANGLE_CLASS_NAME);\n PlaitBoard.getElementActiveHost(board).append(selectionRectangleG);\n const angle = getSelectionAngle(elements);\n if (angle) {\n setAngleForG(selectionRectangleG, RectangleClient.getCenterPoint(rectangle), angle);\n }\n return selectionRectangleG;\n }\n return null;\n}\n","import { ACTIVE_STROKE_WIDTH } from '../constants';\nimport { PlaitBoard, PlaitElement, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { PlaitGroup, PlaitGroupElement } from '../interfaces/group';\nimport { Transforms } from '../transforms';\nimport { createG } from './dom';\nimport { drawRectangle } from './drawing/rectangle';\nimport { findElements, getRectangleByElements } from './element';\nimport { idCreator } from './id-creator';\nimport { getSelectedElements } from './selected-element';\nimport { isSelectionMoving } from './selection';\n\nexport const getElementsInGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean, includeGroup?: boolean) => {\n let result: PlaitElement[] = [];\n const elements = board.children.filter(value => (value as PlaitElement).groupId === group.id) as PlaitElement[];\n if (recursion) {\n elements.forEach(item => {\n if (PlaitGroupElement.isGroup(item)) {\n if (includeGroup) {\n result.push(item);\n }\n result.push(...getElementsInGroup(board, item, recursion));\n } else {\n result.push(item);\n }\n });\n } else {\n result = includeGroup ? elements : (elements.filter(item => !PlaitGroupElement.isGroup(item)) as PlaitElement[]);\n }\n return result;\n};\n\nexport const getRectangleByGroup = (board: PlaitBoard, group: PlaitGroup, recursion?: boolean) => {\n const elementsInGroup = getElementsInGroup(board, group, recursion) as PlaitElement[];\n return getRectangleByElements(board, elementsInGroup, false);\n};\n\nexport const getGroupByElement = (board: PlaitBoard, element: PlaitElement, recursion?: boolean): PlaitGroup | PlaitGroup[] | null => {\n const group = board.children.find(item => item.id === element?.groupId);\n if (!group) {\n return recursion ? [] : null;\n }\n if (recursion) {\n const groups = [group];\n const grandGroups = getGroupByElement(board, group, recursion) as PlaitGroup[];\n if (grandGroups.length) {\n groups.push(...grandGroups);\n }\n return groups as PlaitGroup[];\n } else {\n return group as PlaitGroup;\n }\n};\n\nexport const getHighestGroup = (board: PlaitBoard, element: PlaitElement) => {\n const groups = getGroupByElement(board, element, true) as PlaitGroup[];\n if (groups.length) {\n return groups[groups.length - 1];\n }\n return null;\n};\n\nexport const getElementsInGroupByElement = (board: PlaitBoard, element: PlaitElement) => {\n const highestGroup = getHighestGroup(board, element);\n if (highestGroup) {\n return getElementsInGroup(board, highestGroup, true) as PlaitGroup[];\n } else {\n return [element];\n }\n};\n\nexport const isSelectedElementOrGroup = (board: PlaitBoard, element: PlaitElement) => {\n const selectedElements = getSelectedElements(board);\n if (PlaitGroupElement.isGroup(element)) {\n return isSelectedAllElementsInGroup(board, element);\n }\n return selectedElements.includes(element);\n};\n\nexport const isSelectedAllElementsInGroup = (board: PlaitBoard, group: PlaitGroup) => {\n const selectedElements = getSelectedElements(board);\n const elementsInGroup = getElementsInGroup(board, group, true);\n return elementsInGroup.every(item => selectedElements.includes(item));\n};\n\nexport const getSelectedGroups = (board: PlaitBoard, groups: PlaitGroup[]): PlaitGroup[] => {\n const selectedGroups: PlaitGroup[] = [];\n groups.forEach(item => {\n if (isSelectedElementOrGroup(board, item)) {\n selectedGroups.push(item);\n }\n });\n return selectedGroups;\n};\n\nexport const getHighestSelectedGroup = (board: PlaitBoard, element: PlaitElement): PlaitGroup | null => {\n const groups = getGroupByElement(board, element, true) as PlaitGroup[];\n const selectedGroups = getSelectedGroups(board, groups);\n if (selectedGroups.length) {\n return selectedGroups[selectedGroups.length - 1];\n }\n return null;\n};\n\nexport const getHighestSelectedGroups = (board: PlaitBoard): PlaitGroup[] => {\n let result: PlaitGroup[] = [];\n const selectedElements = getSelectedElements(board);\n selectedElements.forEach(item => {\n if (item.groupId) {\n const group = getHighestSelectedGroup(board, item);\n if (group && !result.includes(group)) {\n result.push(group);\n }\n }\n });\n return result;\n};\n\nexport const getSelectedIsolatedElements = (board: PlaitBoard) => {\n let result: PlaitElement[] = [];\n const selectedElements = getSelectedElements(board);\n selectedElements.forEach(item => {\n if (!item.groupId) {\n result.push(item);\n } else {\n const group = getHighestSelectedGroup(board, item);\n if (!group) {\n result.push(item);\n }\n }\n });\n return result;\n};\n\nexport const getHighestSelectedElements = (board: PlaitBoard) => {\n return [...getHighestSelectedGroups(board), ...getSelectedIsolatedElements(board)];\n};\n\nexport const createGroupRectangleG = (board: PlaitBoard, elements: PlaitElement[]): SVGGElement | null => {\n const selectedElements = getSelectedElements(board);\n const groupRectangleG: SVGGElement = createG();\n const isMoving = isSelectionMoving(board);\n\n elements.forEach(item => {\n const isRender = (!selectedElements.includes(item) && !isMoving) || isMoving;\n if (item.groupId && isRender) {\n const elements = getElementsInGroupByElement(board, item);\n const rectangle = getRectangleByElements(board, elements, false);\n groupRectangleG.append(\n drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: ACTIVE_STROKE_WIDTH,\n strokeLineDash: [5]\n })\n );\n }\n });\n return groupRectangleG;\n};\n\nexport const createGroup = (): PlaitGroup => {\n return {\n id: idCreator(),\n type: 'group'\n };\n};\n\nexport const nonGroupInHighestSelectedElements = (elements: PlaitElement[]) => {\n return elements.every(item => !item.groupId);\n};\n\nexport const hasSelectedElementsInSameGroup = (elements: PlaitElement[]) => {\n return elements.every(item => item.groupId && item.groupId === elements[0].groupId);\n};\n\nexport const canAddGroup = (highestSelectedElements: PlaitElement[]) => {\n if (highestSelectedElements.length > 1) {\n return nonGroupInHighestSelectedElements(highestSelectedElements) || hasSelectedElementsInSameGroup(highestSelectedElements);\n }\n return false;\n};\n\nexport const addGroup = (board: PlaitBoard) => {\n const selectedGroups = getHighestSelectedGroups(board);\n const selectedIsolatedElements = getSelectedIsolatedElements(board);\n const highestSelectedElements = [...selectedGroups, ...selectedIsolatedElements];\n const group = createGroup();\n if (canAddGroup(highestSelectedElements)) {\n highestSelectedElements.forEach(item => {\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { groupId: group.id }, path);\n });\n if (hasSelectedElementsInSameGroup(highestSelectedElements)) {\n const newGroupId = selectedIsolatedElements[0].groupId;\n Transforms.insertNode(\n board,\n {\n ...group,\n groupId: newGroupId\n },\n [board.children.length]\n );\n } else {\n Transforms.insertNode(board, group, [board.children.length]);\n }\n }\n};\n\nexport const canRemoveGroup = (board: PlaitBoard, selectedGroups: PlaitGroup[]) => {\n const selectedElements = getSelectedElements(board);\n return selectedElements.length > 0 && selectedGroups.length > 0;\n};\n\nexport const removeGroup = (board: PlaitBoard) => {\n const selectedGroups = getHighestSelectedGroups(board);\n if (canRemoveGroup(board, selectedGroups)) {\n selectedGroups.map(group => {\n const elementsInGroup = findElements(board, {\n match: item => item.groupId === group.id,\n recursion: () => false\n });\n elementsInGroup.forEach(item => {\n const path = PlaitBoard.findPath(board, item);\n Transforms.setNode(board, { groupId: group.groupId || undefined }, path);\n });\n const groupPath = PlaitBoard.findPath(board, group);\n Transforms.removeNode(board, groupPath);\n });\n }\n};\n","import { PlaitElement, Point, RectangleClient } from '../interfaces';\nimport { approximately, rotate } from './math';\n\nexport const rotatePoints = (points: Point[], centerPoint: Point, angle: number) => {\n if (!angle) {\n angle = 0;\n }\n return points.map(point => {\n return rotate(point[0], point[1], centerPoint[0], centerPoint[1], angle) as Point;\n });\n};\n\nexport const getSelectionAngle = (elements: PlaitElement[]) => {\n let angle = elements[0].angle || 0;\n elements.forEach(item => {\n if (item.angle !== angle && !approximately((item.angle % (Math.PI / 2)) - (angle % (Math.PI / 2)), 0)) {\n angle = 0;\n }\n });\n return angle;\n};\n\nexport const hasSameAngle = (elements: PlaitElement[]) => {\n return !!getSelectionAngle(elements);\n};\n\nexport const getRotatedBoundingRectangle = (rectanglesCornerPoints: [Point, Point, Point, Point][], angle: number) => {\n let rectanglesFromOrigin: RectangleClient[] = [];\n for (let i = 0; i < rectanglesCornerPoints.length; i++) {\n const cornerPoints = rectanglesCornerPoints[i];\n const invertCornerPointsFromOrigin = rotatePoints(cornerPoints, [0, 0], -angle);\n rectanglesFromOrigin.push(RectangleClient.getRectangleByPoints(invertCornerPointsFromOrigin));\n }\n\n const selectionRectangleFromOrigin = RectangleClient.getBoundingRectangle(rectanglesFromOrigin);\n const selectionCornerPoints = RectangleClient.getCornerPoints(selectionRectangleFromOrigin);\n const cornerPointsFromOrigin = rotatePoints(selectionCornerPoints, [0, 0], angle);\n const centerPoint = RectangleClient.getCenterPoint(RectangleClient.getRectangleByPoints(cornerPointsFromOrigin));\n return RectangleClient.getRectangleByPoints(rotatePoints(cornerPointsFromOrigin, centerPoint, -angle));\n};\n","import { ELEMENT_TO_COMPONENT, PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport { NODE_TO_PARENT } from '../utils';\nimport { PlaitBoard } from './board';\nimport { Point } from './point';\n\nexport interface PlaitElement {\n [key: string]: any;\n id: string;\n children?: PlaitElement[];\n points?: Point[];\n type?: string;\n groupId?: string;\n}\n\nexport const PlaitElement = {\n isRootElement(value: PlaitElement) {\n const parent = NODE_TO_PARENT.get(value);\n if (parent && PlaitBoard.isBoard(parent)) {\n return true;\n } else {\n return false;\n }\n },\n getComponent(value: PlaitElement) {\n return ELEMENT_TO_COMPONENT.get(value) as PlaitPluginElementComponent;\n }\n};\n\nexport interface ComponentType<T> {\n new (...args: any[]): T;\n}\n\nexport interface ImageEntry {\n url: string;\n file: File;\n}\n","import { PlaitNode } from './node';\nimport { Path } from './path';\nimport { Selection } from './selection';\nimport { PlaitTheme } from './theme';\nimport { Viewport } from './viewport';\n\nexport type InsertNodeOperation = {\n type: 'insert_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type RemoveNodeOperation = {\n type: 'remove_node';\n path: Path;\n node: PlaitNode;\n};\n\nexport type MoveNodeOperation = {\n type: 'move_node';\n path: Path;\n newPath: Path;\n};\n\nexport type SetThemeOperation = {\n type: 'set_theme';\n properties: Partial<PlaitTheme>;\n newProperties: Partial<PlaitTheme>;\n};\n\nexport type SetViewportOperation = {\n type: 'set_viewport';\n properties: Partial<Viewport>;\n newProperties: Partial<Viewport>;\n};\n\nexport type SetSelectionOperation = {\n type: 'set_selection';\n properties: Selection | null;\n newProperties: Selection | null;\n};\n\nexport type SetNodeOperation = {\n type: 'set_node';\n path: Path;\n properties: Partial<PlaitNode>;\n newProperties: Partial<PlaitNode>;\n};\n\nexport type PlaitOperation =\n | InsertNodeOperation\n | SetViewportOperation\n | SetSelectionOperation\n | SetNodeOperation\n | RemoveNodeOperation\n | MoveNodeOperation\n | SetThemeOperation;\n\nexport interface PlaitOperationInterface {\n inverse: (op: PlaitOperation) => PlaitOperation;\n isSetViewportOperation: (value: any) => boolean;\n}\n\nexport const isSetViewportOperation = (value: any): value is SetViewportOperation => {\n return value.type === 'set_viewport';\n};\n\nexport const inverse = (op: PlaitOperation): PlaitOperation => {\n switch (op.type) {\n case 'insert_node': {\n return { ...op, type: 'remove_node' };\n }\n\n case 'remove_node': {\n return { ...op, type: 'insert_node' };\n }\n\n case 'move_node': {\n const { newPath, path } = op;\n\n // PERF: in this case the move operation is a no-op anyways.\n if (Path.equals(newPath, path)) {\n return op;\n }\n\n // when operation path is [0,0] -> [0,2], should exec Path.transform to get [0,1] -> [0,0]\n // shoud not return [0,2] -> [0,0] #WIK-8981\n // if (Path.isSibling(path, newPath)) {\n // return { ...op, path: newPath, newPath: path };\n // }\n\n // If the move does not happen within a single parent it is possible\n // for the move to impact the true path to the location where the node\n // was removed from and where it was inserted. We have to adjust for this\n // and find the original path. We can accomplish this (only in non-sibling)\n // moves by looking at the impact of the move operation on the node\n // after the original move path.\n const inversePath = Path.transform(path, op)!;\n const inverseNewPath = Path.transform(Path.next(path), op)!;\n return { ...op, path: inversePath, newPath: inverseNewPath };\n }\n\n case 'set_node': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n\n case 'set_selection': {\n const { properties, newProperties } = op;\n\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: null\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: null,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_viewport': {\n const { properties, newProperties } = op;\n if (properties == null) {\n return {\n ...op,\n properties: newProperties,\n newProperties: newProperties\n };\n } else if (newProperties == null) {\n return {\n ...op,\n properties: properties,\n newProperties: properties\n };\n } else {\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n\n case 'set_theme': {\n const { properties, newProperties } = op;\n return { ...op, properties: newProperties, newProperties: properties };\n }\n }\n};\n\nexport const PlaitOperation: PlaitOperationInterface = {\n isSetViewportOperation,\n inverse\n};\n","export type Point = [number, number];\n\nexport interface XYPosition {\n x: number;\n y: number;\n}\n\nexport const Point = {\n isEquals(point?: Point, otherPoint?: Point) {\n return point && otherPoint && point[0] === otherPoint[0] && point[1] === otherPoint[1];\n },\n isHorizontal(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverHorizontal([point, otherPoint], tolerance);\n },\n isOverHorizontal(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[1] - points[0][1]) <= tolerance);\n },\n isVertical(point?: Point, otherPoint?: Point, tolerance = 0) {\n return point && otherPoint && Point.isOverVertical([point, otherPoint], tolerance);\n },\n isOverVertical(points: Point[], tolerance: number = 0) {\n return points.every(point => Math.abs(point[0] - points[0][0]) <= tolerance);\n },\n isAlign(points: Point[], tolerance: number = 0) {\n return Point.isOverHorizontal(points, tolerance) || Point.isOverVertical(points, tolerance);\n },\n getOffsetX(point1: Point, point2: Point) {\n return point2[0] - point1[0];\n },\n getOffsetY(point1: Point, point2: Point) {\n return point2[1] - point1[1];\n }\n};\n","import { PlaitBoard } from './board';\nimport { PlaitOperation } from './operation';\n\nexport interface PlaitHistory {\n redos: PlaitOperation[][];\n undos: PlaitOperation[][];\n}\n\nexport const SAVING = new WeakMap<PlaitBoard, boolean | undefined>();\nexport const MERGING = new WeakMap<PlaitBoard, boolean | undefined>();\n","export interface PlaitTheme {\n themeColorMode: ThemeColorMode;\n}\n\nexport interface ThemeColor {\n mode: ThemeColorMode | string;\n boardBackground?: string;\n textColor: string;\n}\n\nexport enum ThemeColorMode {\n 'default' = 'default',\n 'colorful' = 'colorful',\n 'soft' = 'soft',\n 'retro' = 'retro',\n 'dark' = 'dark',\n 'starry' = 'starry'\n}\n\nexport const DefaultThemeColor: ThemeColor = {\n mode: ThemeColorMode.default,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const ColorfulThemeColor: ThemeColor = {\n mode: ThemeColorMode.colorful,\n boardBackground: '#ffffff',\n textColor: '#333333'\n};\n\nexport const SoftThemeColor: ThemeColor = {\n mode: ThemeColorMode.soft,\n boardBackground: '#f5f5f5',\n textColor: '#333333'\n};\n\nexport const RetroThemeColor: ThemeColor = {\n mode: ThemeColorMode.retro,\n boardBackground: '#f9f8ed',\n textColor: '#333333'\n};\n\nexport const DarkThemeColor: ThemeColor = {\n mode: ThemeColorMode.dark,\n boardBackground: '#141414',\n textColor: '#FFFFFF'\n};\n\nexport const StarryThemeColor: ThemeColor = {\n mode: ThemeColorMode.starry,\n boardBackground: '#0d2537',\n textColor: '#FFFFFF'\n};\n\nexport const ThemeColors: ThemeColor[] = [\n DefaultThemeColor,\n ColorfulThemeColor,\n SoftThemeColor,\n RetroThemeColor,\n DarkThemeColor,\n StarryThemeColor\n];\n","export enum Direction {\n left = 'left',\n top = 'top',\n right = 'right',\n bottom = 'bottom'\n}\n\nexport type Vector = [number, number];\n\nexport type DirectionFactor = -1 | 0 | 1;\n\nexport type DirectionFactors = [DirectionFactor, DirectionFactor];\n","import { Ancestor, PlaitBoard, PlaitElement, Point, RectangleClient } from '../interfaces';\nimport { getSelectionAngle, hasSameAngle, getRotatedBoundingRectangle, rotatePoints } from './angle';\nimport { depthFirstRecursion, getIsRecursionFunc } from './tree';\n\nexport function getRectangleByElements(board: PlaitBoard, elements: PlaitElement[], recursion: boolean): RectangleClient {\n const rectanglesCornerPoints: [Point, Point, Point, Point][] = [];\n const callback = (node: PlaitElement) => {\n const nodeRectangle = board.getRectangle(node);\n if (nodeRectangle) {\n const cornerPoints = RectangleClient.getCornerPoints(nodeRectangle);\n const rotatedCornerPoints = rotatePoints(cornerPoints, RectangleClient.getCenterPoint(nodeRectangle), node.angle || 0) as [\n Point,\n Point,\n Point,\n Point\n ];\n rectanglesCornerPoints.push(rotatedCornerPoints);\n } else {\n console.error(`can not get rectangle of element:`, node);\n }\n };\n elements.forEach(element => {\n if (recursion) {\n depthFirstRecursion(\n element,\n node => callback(node),\n node => board.isRecursion(node)\n );\n } else {\n callback(element);\n }\n });\n if (rectanglesCornerPoints.length > 0) {\n if (hasSameAngle(elements)) {\n const angle = getSelectionAngle(elements);\n return getRotatedBoundingRectangle(rectanglesCornerPoints, angle);\n } else {\n const flatCornerPoints: Point[] = rectanglesCornerPoints.reduce((acc: Point[], val) => {\n return acc.concat(val);\n }, []);\n return RectangleClient.getRectangleByPoints(flatCornerPoints);\n }\n } else {\n return {\n x: 0,\n y: 0,\n width: 0,\n height: 0\n };\n }\n}\n\nexport function getBoardRectangle(board: PlaitBoard): RectangleClient {\n return getRectangleByElements(board, board.children, true);\n}\n\nexport function getElementById<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n id: string,\n dataSource?: PlaitElement[]\n): T | undefined {\n if (!dataSource) {\n dataSource = findElements(board, { match: element => true, recursion: element => true });\n }\n let element = dataSource.find(element => element.id === id) as T;\n return element;\n}\n\nexport function findElements<T extends PlaitElement = PlaitElement>(\n board: PlaitBoard,\n options: {\n match: (element: PlaitElement) => boolean;\n recursion: (element: PlaitElement) => boolean;\n isReverse?: boolean;\n }\n): T[] {\n let elements: T[] = [];\n const isReverse = options.isReverse ?? true;\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (!PlaitBoard.isBoard(node) && options.match(node)) {\n elements.push(node as T);\n }\n },\n (value: Ancestor) => {\n if (PlaitBoard.isBoard(value)) {\n return true;\n } else {\n return getIsRecursionFunc(board)(value) && options.recursion(value);\n }\n },\n isReverse\n );\n return elements;\n}\n","import { PlaitPointerType } from './pointer';\nimport { ComponentType, PlaitElement } from './element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitHistory } from './history';\nimport { PlaitOperation } from './operation';\nimport { Selection } from './selection';\nimport { Viewport } from './viewport';\nimport { PlaitPluginElementComponent } from '../core/element/plugin-element';\nimport {\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_ROUGH_SVG,\n IS_BOARD_CACHE,\n IS_TEXT_EDITABLE,\n NODE_TO_INDEX,\n NODE_TO_PARENT\n} from '../utils/weak-maps';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { BoardComponentInterface } from '../board/board.component.interface';\nimport { Point } from './point';\nimport { RectangleClient } from './rectangle-client';\nimport { getRectangleByElements } from '../utils/element';\nimport { PathRef, PathRefOptions } from './path-ref';\nimport { Ancestor, PlaitNode } from './node';\nimport { Path } from './path';\nimport { PlaitTheme, ThemeColor, ThemeColors } from './theme';\nimport { distanceBetweenPointAndRectangle } from '../utils/math';\nimport { ClipboardData, WritableClipboardContext } from '../utils';\n\nexport interface PlaitBoard {\n viewport: Viewport;\n children: PlaitElement[];\n theme: PlaitTheme;\n operations: PlaitOperation[];\n // record pointer selection or drag selection\n // it will be dirty when board viewport change\n selection: Selection | null;\n pointer: PlaitPointerType | string;\n history: PlaitHistory;\n options: PlaitBoardOptions;\n undo: () => void;\n redo: () => void;\n apply: (operation: PlaitOperation) => void;\n onChange: () => void;\n afterChange: () => void;\n mousedown: (event: MouseEvent) => void;\n mousemove: (event: MouseEvent) => void;\n mouseleave: (event: MouseEvent) => void;\n mouseup: (event: MouseEvent) => void;\n globalMousemove: (event: MouseEvent) => void;\n globalMouseup: (event: MouseEvent) => void;\n keyDown: (event: KeyboardEvent) => void;\n globalKeyDown: (event: KeyboardEvent) => void;\n keyUp: (event: KeyboardEvent) => void;\n setFragment: (\n data: DataTransfer | null,\n clipboardContext: WritableClipboardContext | null,\n rectangle: RectangleClient | null,\n type: 'copy' | 'cut'\n ) => void;\n insertFragment: (data: DataTransfer | null, clipboardData: ClipboardData | null, targetPoint: Point) => void;\n deleteFragment: (data: DataTransfer | null) => void;\n getDeletedFragment: (data: PlaitElement[]) => PlaitElement[];\n getRelatedFragment: (data: PlaitElement[]) => PlaitElement[];\n dblClick: (event: MouseEvent) => void;\n drawElement: (context: PlaitPluginElementContext) => SVGGElement[] | ComponentType<PlaitPluginElementComponent>;\n redrawElement: (context: PlaitPluginElementContext, previousContext?: PlaitPluginElementContext) => SVGGElement[] | void;\n destroyElement: (context: PlaitPluginElementContext) => void;\n isRectangleHit: (element: PlaitElement, range: Selection) => boolean;\n // When the element has no fill color, it is considered a hit only if it hits the border.\n isHit: (element: PlaitElement, point: Point) => boolean;\n isInsidePoint: (element: PlaitElement, point: Point) => boolean;\n isRecursion: (element: PlaitElement) => boolean;\n isMovable: (element: PlaitElement) => boolean;\n getRectangle: (element: PlaitElement) => RectangleClient | null;\n isWithinSelection: (element: PlaitElement) => boolean;\n pathRef: (path: Path, options?: PathRefOptions) => PathRef;\n pathRefs: () => Set<PathRef>;\n applyTheme: (element: PlaitElement) => void;\n isAlign: (element: PlaitElement) => boolean;\n isImageBindingAllowed: (element: PlaitElement) => boolean;\n\n // pointer hook\n pointerDown: (pointer: PointerEvent) => void;\n pointerMove: (pointer: PointerEvent) => void;\n pointerUp: (pointer: PointerEvent) => void;\n pointerCancel: (pointer: PointerEvent) => void;\n pointerOut: (pointer: PointerEvent) => void;\n pointerLeave: (pointer: PointerEvent) => void;\n globalPointerMove: (pointer: PointerEvent) => void;\n globalPointerUp: (pointer: PointerEvent) => void;\n}\n\nexport interface PlaitBoardChangeEvent {\n children: PlaitElement[];\n operations: PlaitOperation[];\n viewport: Viewport;\n selection: Selection | null;\n theme: PlaitTheme;\n}\n\nexport interface PlaitBoardOptions {\n readonly?: boolean;\n hideScrollbar?: boolean;\n disabledScrollOnNonFocus?: boolean;\n themeColors?: ThemeColor[];\n}\n\nexport interface PlaitBoardMove {\n x: number;\n y: number;\n}\n\nexport const PlaitBoard = {\n isBoard(value: any): value is PlaitBoard {\n const cachedIsBoard = IS_BOARD_CACHE.get(value);\n if (cachedIsBoard !== undefined) {\n return cachedIsBoard;\n }\n const isBoard = typeof value.onChange === 'function' && typeof value.apply === 'function';\n IS_BOARD_CACHE.set(value, isBoard);\n return isBoard;\n },\n findPath(board: PlaitBoard, node: PlaitNode): Path {\n const path: Path = [];\n let child: Ancestor = node;\n while (true) {\n const parent = NODE_TO_PARENT.get(child as PlaitElement);\n if (parent == null) {\n if (PlaitBoard.isBoard(child)) {\n return path;\n } else {\n break;\n }\n }\n const i = NODE_TO_INDEX.get(child as PlaitElement);\n if (i == null) {\n break;\n }\n path.unshift(i);\n child = parent;\n }\n throw new Error(`Unable to find the path for Plait node: ${JSON.stringify(node)}`);\n },\n getHost(board: PlaitBoard) {\n return BOARD_TO_HOST.get(board) as SVGSVGElement;\n },\n getElementHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.host as SVGSVGElement;\n },\n getElementUpperHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.upperHost as SVGSVGElement;\n },\n getElementActiveHost(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.activeHost as SVGSVGElement;\n },\n getRoughSVG(board: PlaitBoard) {\n return BOARD_TO_ROUGH_SVG.get(board) as RoughSVG;\n },\n getComponent(board: PlaitBoard) {\n return BOARD_TO_COMPONENT.get(board) as BoardComponentInterface;\n },\n getBoardContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.container as HTMLElement;\n },\n getRectangle(board: PlaitBoard) {\n return getRectangleByElements(board, board.children, true);\n },\n getViewportContainer(board: PlaitBoard) {\n return BOARD_TO_ELEMENT_HOST.get(board)?.viewportContainer as HTMLElement;\n },\n isFocus(board: PlaitBoard) {\n return !!board.selection;\n },\n isReadonly(board: PlaitBoard) {\n return board.options.readonly;\n },\n hasBeenTextEditing(board: PlaitBoard) {\n return !!IS_TEXT_EDITABLE.get(board);\n },\n getPointer<T = PlaitPointerType>(board: PlaitBoard) {\n return board.pointer as T;\n },\n isPointer<T = PlaitPointerType>(board: PlaitBoard, pointer: T) {\n return board.pointer === pointer;\n },\n isInPointer<T = PlaitPointerType>(board: PlaitBoard, pointers: T[]) {\n const point = board.pointer as T;\n return pointers.includes(point);\n },\n getMovingPointInBoard(board: PlaitBoard) {\n return BOARD_TO_MOVING_POINT_IN_BOARD.get(board);\n },\n isMovingPointInBoard(board: PlaitBoard) {\n const point = BOARD_TO_MOVING_POINT.get(board);\n const rect = PlaitBoard.getBoardContainer(board).getBoundingClientRect();\n if (point && distanceBetweenPointAndRectangle(point[0], point[1], rect) === 0) {\n return true;\n }\n return false;\n },\n getThemeColors<T extends ThemeColor = ThemeColor>(board: PlaitBoard) {\n return (board.options.themeColors || ThemeColors) as T[];\n }\n};\n","import { PlaitOperation } from './operation';\nimport { Path } from './path';\n\nexport interface PathRef {\n current: Path | null;\n affinity: 'forward' | 'backward' | null;\n unref(): Path | null;\n}\n\nexport interface PathRefOptions {\n affinity?: 'forward' | 'backward' | null;\n}\n\nexport const PathRef = {\n transform(ref: PathRef, op: PlaitOperation): void {\n const { current } = ref;\n\n if (current == null) {\n return;\n }\n\n const path = Path.transform(current, op);\n ref.current = path;\n\n if (path == null) {\n ref.unref();\n }\n }\n};\n","import { PlaitBoard, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitPointerType } from '../interfaces/pointer';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPluginElementContext } from '../core/element/context';\nimport { PlaitOperation } from '../interfaces/operation';\nimport { Transforms } from '../transforms';\nimport { FLUSHING, PATH_REFS } from '../utils/weak-maps';\nimport { PathRef, PathRefOptions } from '../interfaces/path-ref';\nimport { Path } from '../interfaces/path';\nimport { ThemeColorMode } from '../interfaces/theme';\nimport { CoreTransforms } from '../transforms/element';\nimport { WritableClipboardContext, setClipboardData } from '../utils';\n\nexport function createBoard(children: PlaitElement[], options?: PlaitBoardOptions): PlaitBoard {\n const board: PlaitBoard = {\n viewport: {\n zoom: 1\n },\n children,\n theme: { themeColorMode: ThemeColorMode.default },\n operations: [],\n history: {\n redos: [],\n undos: []\n },\n selection: null,\n options: options || {\n readonly: false,\n hideScrollbar: false,\n disabledScrollOnNonFocus: false\n },\n pointer: options?.readonly ? PlaitPointerType.hand : PlaitPointerType.selection,\n undo: () => {},\n redo: () => {},\n apply: (operation: PlaitOperation) => {\n for (const ref of board.pathRefs()) {\n PathRef.transform(ref, operation);\n }\n\n board.operations.push(operation);\n\n Transforms.transform(board, operation);\n\n if (!FLUSHING.get(board)) {\n FLUSHING.set(board, true);\n\n Promise.resolve().then(() => {\n FLUSHING.set(board, false);\n board.onChange();\n board.afterChange();\n board.operations = [];\n });\n }\n },\n pathRef: (path: Path, options?: PathRefOptions) => {\n const affinity = options?.affinity || 'forward';\n const ref: PathRef = {\n current: path,\n affinity,\n unref() {\n const { current } = ref;\n const pathRefs = board.pathRefs();\n pathRefs.delete(ref);\n ref.current = null;\n return current;\n }\n };\n\n const refs = board.pathRefs();\n refs.add(ref);\n return ref;\n },\n pathRefs: () => {\n let refs = PATH_REFS.get(board);\n\n if (!refs) {\n refs = new Set();\n PATH_REFS.set(board, refs);\n }\n\n return refs;\n },\n onChange: () => {},\n afterChange: () => {},\n mousedown: (event: MouseEvent) => {},\n mousemove: (event: MouseEvent) => {},\n mouseleave: (event: MouseEvent) => {},\n globalMousemove: (event: MouseEvent) => {},\n mouseup: (event: MouseEvent) => {},\n globalMouseup: (event: MouseEvent) => {},\n keyDown: (event: KeyboardEvent) => {},\n globalKeyDown: (event: KeyboardEvent) => {},\n keyUp: (event: KeyboardEvent) => {},\n dblClick: (event: MouseEvent) => {},\n setFragment: (data: DataTransfer | null, clipboardContext: WritableClipboardContext | null) => {\n setClipboardData(data, clipboardContext);\n },\n insertFragment: (data: DataTransfer | null) => {},\n deleteFragment: (data: DataTransfer | null) => {\n const elements = board.getDeletedFragment([]);\n CoreTransforms.removeElements(board, elements);\n },\n getDeletedFragment: (data: PlaitElement[]) => data,\n getRelatedFragment: (data: PlaitElement[]) => data,\n drawElement: (context: PlaitPluginElementContext) => [],\n redrawElement: (context: PlaitPluginElementContext, previousContext) => {},\n destroyElement: (context: PlaitPluginElementContext) => {},\n isWithinSelection: element => false,\n isRectangleHit: element => false,\n isHit: element => false,\n isInsidePoint: element => false,\n isRecursion: element => true,\n isMovable: element => false,\n getRectangle: element => null,\n applyTheme: (element: PlaitElement) => {},\n isAlign: element => false,\n pointerDown: pointer => {},\n pointerMove: pointer => {},\n pointerUp: pointer => {},\n pointerCancel: pointer => {},\n pointerOut: pointer => {},\n pointerLeave: pointer => {},\n globalPointerMove: pointer => {},\n globalPointerUp: pointer => {},\n isImageBindingAllowed: (element: PlaitElement) => false\n };\n return board;\n}\n","import { BOARD_TO_ON_CHANGE, BOARD_TO_AFTER_CHANGE } from '../utils/weak-maps';\nimport { PlaitBoard } from '../interfaces/board';\n\nexport function withBoard(board: PlaitBoard) {\n const { onChange, afterChange } = board;\n\n board.onChange = () => {\n const onContextChange = BOARD_TO_ON_CHANGE.get(board);\n if (onContextChange) {\n onContextChange();\n }\n onChange();\n };\n\n board.afterChange = () => {\n const afterContextChange = BOARD_TO_AFTER_CHANGE.get(board);\n if (afterContextChange) {\n afterContextChange();\n }\n afterChange();\n }\n\n return board;\n}\n","import { PlaitBoard, PlaitOperation } from '../interfaces';\nimport { isHotkey } from 'is-hotkey';\nimport { PlaitHistoryBoard, shouldClear, shouldMerge, shouldSave } from '../utils';\n\nexport function withHistory<T extends PlaitBoard>(board: T) {\n const { apply, keyDown } = board;\n board.history = { undos: [], redos: [] };\n\n board.redo = () => {\n const { history } = board;\n const { redos } = history;\n\n if (redos.length > 0) {\n const batch = redos[redos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n for (const op of batch) {\n board.apply(op);\n }\n });\n\n history.redos.pop();\n history.undos.push(batch);\n }\n };\n\n board.undo = () => {\n const { history } = board;\n const { undos } = history;\n\n if (undos.length > 0) {\n const batch = undos[undos.length - 1];\n\n PlaitHistoryBoard.withoutSaving(board, () => {\n const inverseOps = batch.map(PlaitOperation.inverse).reverse();\n for (const op of inverseOps) {\n board.apply(op);\n }\n });\n\n history.redos.push(batch);\n history.undos.pop();\n }\n };\n\n board.apply = (op: PlaitOperation) => {\n const { operations, history } = board;\n const { undos } = history;\n const lastBatch = undos[undos.length - 1];\n const lastOp = lastBatch && lastBatch[lastBatch.length - 1];\n let save = PlaitHistoryBoard.isSaving(board);\n let merge = PlaitHistoryBoard.isMerging(board);\n\n if (save == null) {\n save = shouldSave(op, lastOp);\n }\n\n if (save) {\n if (!merge) {\n if (lastBatch == null) {\n merge = false;\n } else if (operations.length !== 0) {\n merge = true;\n } else {\n merge = shouldMerge(op, lastOp);\n }\n }\n\n if (lastBatch && merge) {\n lastBatch.push(op);\n } else {\n const batch = [op];\n undos.push(batch);\n }\n\n while (undos.length > 100) {\n undos.shift();\n }\n\n if (shouldClear(op)) {\n history.redos = [];\n }\n }\n apply(op);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (isHotkey('mod+z', event)) {\n board.undo();\n return;\n }\n if (isHotkey('mod+shift+z', event)) {\n board.redo();\n return;\n }\n keyDown(event);\n };\n\n return board;\n}\n","import { PlaitPointerType, PlaitBoard, PlaitBoardMove } from '../interfaces';\nimport { BoardTransforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { updateViewportContainerScroll } from '../utils/viewport';\n\nexport function withHandPointer<T extends PlaitBoard>(board: T) {\n const { pointerDown, pointerMove, globalPointerUp, keyDown, keyUp } = board;\n let isMoving: boolean = false;\n const plaitBoardMove: PlaitBoardMove = {\n x: 0,\n y: 0\n };\n\n board.pointerDown = (event: PointerEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && isMainPointer(event)) {\n isMoving = true;\n PlaitBoard.getBoardContainer(board).classList.add('viewport-moving');\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (PlaitBoard.isPointer(board, PlaitPointerType.hand) && isMoving) {\n const viewportContainer = PlaitBoard.getViewportContainer(board);\n const left = viewportContainer.scrollLeft - (event.x - plaitBoardMove.x);\n const top = viewportContainer.scrollTop - (event.y - plaitBoardMove.y);\n updateViewportContainerScroll(board, left, top, false);\n plaitBoardMove.x = event.x;\n plaitBoardMove.y = event.y;\n }\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (isMoving) {\n isMoving = false;\n PlaitBoard.getBoardContainer(board).classList.remove('viewport-moving');\n plaitBoardMove.x = 0;\n plaitBoardMove.y = 0;\n }\n globalPointerUp(event);\n };\n\n board.keyDown = (event: KeyboardEvent) => {\n if (event.code === 'Space') {\n if (!PlaitBoard.isPointer(board, PlaitPointerType.hand)) {\n BoardTransforms.updatePointerType(board, PlaitPointerType.hand);\n }\n event.preventDefault();\n }\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n if (!board.options.readonly && event.code === 'Space') {\n BoardTransforms.updatePointerType(board, PlaitPointerType.selection);\n }\n keyUp(event);\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { isMainPointer } from '../utils/dom/common';\nimport { RectangleClient } from '../interfaces/rectangle-client';\nimport {\n cacheSelectedElements,\n clearSelectedElement,\n getHitElementByPoint,\n getHitElementsBySelection,\n getHitSelectedElements,\n getSelectedElements,\n removeSelectedElement\n} from '../utils/selected-element';\nimport { PlaitElement, PlaitGroup, PlaitPointerType, SELECTION_BORDER_COLOR, SELECTION_FILL_COLOR } from '../interfaces';\nimport { ATTACHED_ELEMENT_CLASS_NAME } from '../constants/selection';\nimport {\n clearSelectionMoving,\n createSelectionRectangleG,\n deleteTemporaryElements,\n drawRectangle,\n getElementsInGroup,\n getElementsInGroupByElement,\n getGroupByElement,\n getSelectedGroups,\n getTemporaryElements,\n isDragging,\n isHandleSelection,\n isSelectionMoving,\n isSetSelectionOperation,\n preventTouchMove,\n setSelectionMoving,\n throttleRAF,\n toHostPoint,\n toViewBoxPoint\n} from '../utils';\nimport { PlaitOptionsBoard, PlaitPluginOptions } from './with-options';\nimport { PlaitPluginKey } from '../interfaces/plugin-key';\nimport { Selection } from '../interfaces/selection';\nimport { PRESS_AND_MOVE_BUFFER } from '../constants';\n\nexport interface WithPluginOptions extends PlaitPluginOptions {\n isMultiple: boolean;\n isDisabledSelect: boolean;\n}\n\nexport function withSelection(board: PlaitBoard) {\n const { pointerDown, pointerUp, pointerMove, globalPointerUp, onChange, afterChange } = board;\n let start: Point | null = null;\n let end: Point | null = null;\n let selectionMovingG: SVGGElement;\n let selectionRectangleG: SVGGElement | null;\n let previousSelectedElements: PlaitElement[];\n let isShift = false;\n let isTextSelection = false;\n\n board.pointerDown = (event: PointerEvent) => {\n if (!isShift && event.shiftKey) {\n isShift = true;\n }\n if (isShift && !event.shiftKey) {\n isShift = false;\n }\n const isHitText = !!(event.target instanceof Element && event.target.closest('.plait-richtext-container'));\n isTextSelection = isHitText && PlaitBoard.hasBeenTextEditing(board);\n\n // prevent text from being selected\n if (event.shiftKey && !isTextSelection) {\n event.preventDefault();\n }\n\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selectedElements = getSelectedElements(board);\n const hitElement = getHitElementByPoint(board, point);\n const hitSelectedElements = selectedElements.length > 1 ? getHitSelectedElements(board, point) : [];\n const isHitTarget = hitElement || hitSelectedElements.length > 0;\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && !isHitTarget && options.isMultiple && !options.isDisabledSelect) {\n preventTouchMove(board, event, true);\n // start rectangle selection\n start = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n }\n\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (!isTextSelection) {\n // prevent text from being selected\n event.preventDefault();\n }\n if (PlaitBoard.isPointer(board, PlaitPointerType.selection) && start) {\n const movedTarget = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const rectangle = RectangleClient.getRectangleByPoints([start, movedTarget]);\n selectionMovingG?.remove();\n if (Math.hypot(rectangle.width, rectangle.height) > PRESS_AND_MOVE_BUFFER || isSelectionMoving(board)) {\n end = movedTarget;\n throttleRAF(board, 'with-selection', () => {\n if (start && end) {\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n });\n setSelectionMoving(board);\n selectionMovingG = drawRectangle(board, rectangle, {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n fill: SELECTION_FILL_COLOR,\n fillStyle: 'solid'\n });\n PlaitBoard.getElementActiveHost(board).append(selectionMovingG);\n }\n }\n pointerMove(event);\n };\n\n // handle the end of click select\n board.pointerUp = (event: PointerEvent) => {\n const isSetSelectionPointer =\n PlaitBoard.isPointer(board, PlaitPointerType.selection) || PlaitBoard.isPointer(board, PlaitPointerType.hand);\n const isSkip = !isMainPointer(event) || isDragging(board) || !isSetSelectionPointer;\n if (isSkip) {\n pointerUp(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const selection = { anchor: point, focus: point };\n Transforms.setSelection(board, selection);\n pointerUp(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n if (start && end) {\n selectionMovingG?.remove();\n clearSelectionMoving(board);\n Transforms.setSelection(board, { anchor: start, focus: end });\n }\n\n if (PlaitBoard.isFocus(board)) {\n const isInBoard = event.target instanceof Node && PlaitBoard.getBoardContainer(board).contains(event.target);\n const isInDocument = event.target instanceof Node && document.contains(event.target);\n const isAttachedElement = event.target instanceof Element && event.target.closest(`.${ATTACHED_ELEMENT_CLASS_NAME}`);\n // Clear selection when mouse board outside area\n // The framework needs to determine whether the board is focused through selection\n if (!isInBoard && !start && !isAttachedElement && isInDocument) {\n Transforms.setSelection(board, null);\n }\n }\n start = null;\n end = null;\n isTextSelection = false;\n preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n board.onChange = () => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n if (options.isDisabledSelect) {\n clearSelectedElement(board);\n }\n // remove selected element if include\n board.operations.forEach(op => {\n if (op.type === 'remove_node') {\n removeSelectedElement(board, op.node, true);\n }\n });\n if (isHandleSelection(board) && isSetSelectionOperation(board)) {\n try {\n if (!isShift) {\n selectionRectangleG?.remove();\n }\n const temporaryElements = getTemporaryElements(board);\n let elements = temporaryElements ? temporaryElements : getHitElementsBySelection(board);\n if (!options.isMultiple && elements.length > 1) {\n elements = [elements[0]];\n }\n const isHitElementWithGroup = elements.some(item => item.groupId);\n if (isShift) {\n const newSelectedElements = [...getSelectedElements(board)];\n if (board.selection && Selection.isCollapsed(board.selection)) {\n if (isHitElementWithGroup) {\n let pendingElements: PlaitElement[] = [...elements];\n const hitElement = elements[0];\n const groups = getGroupByElement(board, hitElement, true) as PlaitGroup[];\n const selectedGroups = getSelectedGroups(board, groups);\n const elementsInHighestGroup = getElementsInGroup(board, groups[groups.length - 1], true);\n if (selectedGroups.length > 0) {\n if (selectedGroups.length > 1) {\n pendingElements = getElementsInGroup(board, selectedGroups[selectedGroups.length - 2], true);\n }\n } else {\n if (!newSelectedElements.includes(hitElement)) {\n const selectedElementsInGroup = elementsInHighestGroup.filter(item =>\n newSelectedElements.includes(item)\n );\n // When partially selected elements belong to a group,\n // only select those elements along with the hit elements.\n if (selectedElementsInGroup.length) {\n pendingElements.push(...selectedElementsInGroup);\n } else {\n pendingElements = elementsInHighestGroup;\n }\n } else {\n pendingElements = [];\n }\n }\n elementsInHighestGroup.forEach(element => {\n if (newSelectedElements.includes(element)) {\n newSelectedElements.splice(newSelectedElements.indexOf(element), 1);\n }\n });\n if (pendingElements.length) {\n newSelectedElements.push(...pendingElements);\n }\n } else {\n elements.forEach(element => {\n if (newSelectedElements.includes(element)) {\n newSelectedElements.splice(newSelectedElements.indexOf(element), 1);\n } else {\n newSelectedElements.push(element);\n }\n });\n }\n cacheSelectedElements(board, newSelectedElements);\n } else {\n let newElements: PlaitElement[] = [...elements];\n if (isHitElementWithGroup) {\n elements.forEach(item => {\n if (!item.groupId) {\n newElements.push(item);\n } else {\n newElements.push(...getElementsInGroupByElement(board, item));\n }\n });\n }\n newElements.forEach(element => {\n if (!newSelectedElements.includes(element)) {\n newSelectedElements.push(element);\n }\n });\n cacheSelectedElements(board, newSelectedElements);\n }\n } else {\n let newSelectedElements = [...elements];\n if (isHitElementWithGroup) {\n const isCollapsed = Selection.isCollapsed(board.selection!);\n if (!isCollapsed) {\n newSelectedElements = [];\n elements.forEach(item => {\n if (!item.groupId) {\n newSelectedElements.push(item);\n } else {\n newSelectedElements.push(...getElementsInGroupByElement(board, item));\n }\n });\n } else {\n const hitElement = elements[0];\n const groups = getGroupByElement(board, hitElement, true) as PlaitGroup[];\n const selectedGroups = getSelectedGroups(board, groups);\n if (selectedGroups.length > 0) {\n if (selectedGroups.length > 1) {\n newSelectedElements = getElementsInGroup(board, selectedGroups[selectedGroups.length - 2], true);\n }\n } else {\n newSelectedElements = getElementsInGroup(board, groups[groups.length - 1], true);\n }\n }\n }\n cacheSelectedElements(board, newSelectedElements);\n }\n const newElements = getSelectedElements(board);\n previousSelectedElements = newElements;\n deleteTemporaryElements(board);\n if (!isSelectionMoving(board)) {\n selectionRectangleG?.remove();\n if (newElements.length > 1) {\n selectionRectangleG = createSelectionRectangleG(board);\n }\n }\n } catch (error) {\n console.error(error);\n }\n }\n onChange();\n };\n\n board.afterChange = () => {\n if (isHandleSelection(board) && !isSetSelectionOperation(board)) {\n try {\n const currentSelectedElements = getSelectedElements(board);\n if (currentSelectedElements.length && currentSelectedElements.length > 1) {\n if (\n previousSelectedElements &&\n (currentSelectedElements.length !== previousSelectedElements.length ||\n currentSelectedElements.some((c, index) => c !== previousSelectedElements[index]))\n ) {\n selectionRectangleG?.remove();\n selectionRectangleG = createSelectionRectangleG(board);\n previousSelectedElements = currentSelectedElements;\n }\n } else {\n selectionRectangleG?.remove();\n }\n } catch (error) {\n console.error(error);\n }\n }\n afterChange();\n };\n\n (board as PlaitOptionsBoard).setPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection, {\n isMultiple: true,\n isDisabledSelect: false\n });\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { debounce } from '../utils/common';\nimport { initializeViewBox, isFromScrolling, setIsFromScrolling, updateViewportOffset } from '../utils/viewport';\n\nexport function withViewport(board: PlaitBoard) {\n const { onChange } = board;\n\n const throttleUpdate = debounce(\n () => {\n initializeViewBox(board);\n updateViewportOffset(board);\n },\n 500,\n { leading: true }\n );\n\n board.onChange = () => {\n const isSetViewport = board.operations.some(op => op.type === 'set_viewport');\n const isOnlySetSelection = board.operations.every(op => op.type === 'set_selection');\n if (isOnlySetSelection) {\n return onChange();\n }\n if (isSetViewport && isFromScrolling(board)) {\n setIsFromScrolling(board, false);\n return onChange();\n }\n if (isSetViewport) {\n initializeViewBox(board);\n updateViewportOffset(board);\n } else {\n throttleUpdate();\n }\n onChange();\n };\n\n return board;\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { createG } from './dom/common';\nimport { PlaitElement } from '../interfaces/element';\nimport { Ancestor } from '../interfaces/node';\nimport { Point, RectangleClient, SELECTION_BORDER_COLOR } from '../interfaces';\nimport { depthFirstRecursion } from './tree';\n\nexport interface AlignRef {\n deltaX: number;\n deltaY: number;\n g: SVGGElement;\n}\n\nexport interface DistributeRef {\n before: { distance: number; index: number }[];\n after: { distance: number; index: number }[];\n}\n\nconst ALIGN_TOLERANCE = 2;\n\nexport class AlignReaction {\n alignRectangles: RectangleClient[];\n\n constructor(private board: PlaitBoard, private activeElements: PlaitElement[], private activeRectangle: RectangleClient) {\n this.alignRectangles = this.getAlignRectangle();\n }\n\n getAlignRectangle() {\n const result: RectangleClient[] = [];\n depthFirstRecursion<Ancestor>(\n this.board,\n node => {\n if (PlaitBoard.isBoard(node) || this.activeElements.some(element => node.id === element.id) || !this.board.isAlign(node)) {\n return;\n }\n const rectangle = this.board.getRectangle(node);\n rectangle && result.push(rectangle);\n },\n node => {\n if (node && (PlaitBoard.isBoard(node) || this.board.isRecursion(node))) {\n return true;\n } else {\n return false;\n }\n },\n true\n );\n return result;\n }\n\n handleAlign(): AlignRef {\n const alignRectangles = this.getAlignRectangle();\n const g = createG();\n let alignLines = [];\n\n const offset = 12;\n let deltaX = 0;\n let deltaY = 0;\n let isCorrectX = false;\n let isCorrectY = false;\n\n for (let alignRectangle of alignRectangles) {\n const closestDistances = this.calculateClosestDistances(this.activeRectangle, alignRectangle);\n let canDrawHorizontal = false;\n if (!isCorrectX && closestDistances.absXDistance < ALIGN_TOLERANCE) {\n deltaX = closestDistances.xDistance;\n this.activeRectangle.x -= deltaX;\n isCorrectX = true;\n canDrawHorizontal = true;\n }\n\n if (closestDistances.absXDistance === 0) {\n canDrawHorizontal = true;\n }\n\n if (canDrawHorizontal) {\n const verticalY = [\n alignRectangle.y,\n alignRectangle.y + alignRectangle.height,\n this.activeRectangle.y,\n this.activeRectangle.y + this.activeRectangle.height\n ];\n const lineTopY = Math.min(...verticalY) - offset;\n const lineBottomY = Math.max(...verticalY) + offset;\n const leftLine = [this.activeRectangle.x, lineTopY, this.activeRectangle.x, lineBottomY];\n const middleLine = [\n this.activeRectangle.x + this.activeRectangle.width / 2,\n lineTopY,\n this.activeRectangle.x + this.activeRectangle.width / 2,\n lineBottomY\n ];\n const rightLine = [\n this.activeRectangle.x + this.activeRectangle.width,\n lineTopY,\n this.activeRectangle.x + this.activeRectangle.width,\n lineBottomY\n ];\n\n const shouldDrawLeftLine =\n closestDistances.indexX === 0 ||\n closestDistances.indexX === 1 ||\n (closestDistances.indexX === 2 && this.activeRectangle.width === alignRectangle.width);\n if (shouldDrawLeftLine && !alignLines[0]) {\n alignLines[0] = leftLine;\n }\n\n const shouldDrawRightLine =\n closestDistances.indexX === 2 ||\n closestDistances.indexX === 3 ||\n (closestDistances.indexX === 0 && this.activeRectangle.width === alignRectangle.width);\n if (shouldDrawRightLine && !alignLines[2]) {\n alignLines[2] = rightLine;\n }\n\n const shouldDrawMiddleLine = closestDistances.indexX === 4 || (!shouldDrawLeftLine && !shouldDrawRightLine);\n if (shouldDrawMiddleLine && !alignLines[1]) {\n alignLines[1] = middleLine;\n }\n\n isCorrectX = true;\n }\n\n let canDrawVertical = false;\n if (!isCorrectY && closestDistances.absYDistance < ALIGN_TOLERANCE) {\n deltaY = closestDistances.yDistance;\n this.activeRectangle.y -= deltaY;\n isCorrectY = true;\n canDrawVertical = true;\n }\n if (closestDistances.absYDistance === 0) {\n canDrawVertical = true;\n }\n if (canDrawVertical) {\n const horizontalX = [\n alignRectangle.x,\n alignRectangle.x + alignRectangle.width,\n this.activeRectangle.x,\n this.activeRectangle.x + this.activeRectangle.width\n ];\n const lineLeftX = Math.min(...horizontalX) - offset;\n const lineRightX = Math.max(...horizontalX) + offset;\n const topLine = [lineLeftX, this.activeRectangle.y, lineRightX, this.activeRectangle.y];\n const horizontalMiddleLine = [\n lineLeftX,\n this.activeRectangle.y + this.activeRectangle.height / 2,\n lineRightX,\n this.activeRectangle.y + this.activeRectangle.height / 2\n ];\n const bottomLine = [\n lineLeftX,\n this.activeRectangle.y + this.activeRectangle.height,\n lineRightX,\n this.activeRectangle.y + this.activeRectangle.height\n ];\n\n const shouldDrawTopLine =\n closestDistances.indexY === 0 ||\n closestDistances.indexY === 1 ||\n (closestDistances.indexY === 2 && this.activeRectangle.height === alignRectangle.height);\n if (shouldDrawTopLine && !alignLines[3]) {\n alignLines[3] = topLine;\n }\n\n const shouldDrawBottomLine =\n closestDistances.indexY === 2 ||\n closestDistances.indexY === 3 ||\n (closestDistances.indexY === 0 && this.activeRectangle.width === alignRectangle.width);\n if (shouldDrawBottomLine && !alignLines[5]) {\n alignLines[5] = bottomLine;\n }\n\n const shouldDrawMiddleLine = closestDistances.indexY === 4 || (!shouldDrawTopLine && !shouldDrawBottomLine);\n if (shouldDrawMiddleLine && !alignLines[4]) {\n alignLines[4] = horizontalMiddleLine;\n }\n }\n }\n\n const alignDeltaX = deltaX;\n const alignDeltaY = deltaY;\n\n this.activeRectangle.x += deltaX;\n this.activeRectangle.y += deltaY;\n const distributeHorizontalResult = this.alignDistribute(alignRectangles, true);\n const distributeVerticalResult = this.alignDistribute(alignRectangles, false);\n const distributeLines: Point[][] = [...distributeHorizontalResult.distributeLines, ...distributeVerticalResult.distributeLines];\n if (distributeHorizontalResult.delta) {\n deltaX = distributeHorizontalResult.delta;\n if (alignDeltaX !== deltaX) {\n alignLines[0] = [];\n alignLines[1] = [];\n alignLines[2] = [];\n }\n }\n\n if (distributeVerticalResult.delta) {\n deltaY = distributeVerticalResult.delta;\n if (alignDeltaY !== deltaY) {\n alignLines[3] = [];\n alignLines[4] = [];\n alignLines[5] = [];\n }\n }\n\n if (alignLines.length) {\n this.drawAlignLines(alignLines, g);\n }\n\n if (distributeLines.length) {\n this.drawDistributeLines(distributeLines, g);\n }\n\n return { deltaX, deltaY, g };\n }\n\n calculateClosestDistances(activeRectangle: RectangleClient, alignRectangle: RectangleClient) {\n const activeRectangleCenter = [activeRectangle.x + activeRectangle.width / 2, activeRectangle.y + activeRectangle.height / 2];\n const alignRectangleCenter = [alignRectangle.x + alignRectangle.width / 2, alignRectangle.y + alignRectangle.height / 2];\n\n const centerXDistance = activeRectangleCenter[0] - alignRectangleCenter[0];\n const centerYDistance = activeRectangleCenter[1] - alignRectangleCenter[1];\n\n const leftToLeft = activeRectangle.x - alignRectangle.x;\n const leftToRight = activeRectangle.x - (alignRectangle.x + alignRectangle.width);\n const rightToRight = activeRectangle.x + activeRectangle.width - (alignRectangle.x + alignRectangle.width);\n const rightToLeft = activeRectangle.x + activeRectangle.width - alignRectangle.x;\n\n const topToTop = activeRectangle.y - alignRectangle.y;\n const topToBottom = activeRectangle.y - (alignRectangle.y + alignRectangle.height);\n const bottomToTop = activeRectangle.y + activeRectangle.height - alignRectangle.y;\n const bottomToBottom = activeRectangle.y + activeRectangle.height - (alignRectangle.y + alignRectangle.height);\n\n const xDistances = [leftToLeft, leftToRight, rightToRight, rightToLeft, centerXDistance];\n const yDistances = [topToTop, topToBottom, bottomToBottom, bottomToTop, centerYDistance];\n\n const xDistancesAbs = xDistances.map(distance => Math.abs(distance));\n const yDistancesAbs = yDistances.map(distance => Math.abs(distance));\n\n const indexX = xDistancesAbs.indexOf(Math.min(...xDistancesAbs));\n const indexY = yDistancesAbs.indexOf(Math.min(...yDistancesAbs));\n\n return {\n absXDistance: xDistancesAbs[indexX],\n xDistance: xDistances[indexX],\n absYDistance: yDistancesAbs[indexY],\n yDistance: yDistances[indexY],\n indexX,\n indexY\n };\n }\n\n alignDistribute(alignRectangles: RectangleClient[], isHorizontal: boolean) {\n let distributeLines: any[] = [];\n let delta = 0;\n let rectangles: RectangleClient[] = [];\n const axis = isHorizontal ? 'x' : 'y';\n const side = isHorizontal ? 'width' : 'height';\n\n const activeRectangleCenter = this.activeRectangle[axis] + this.activeRectangle[side] / 2;\n alignRectangles.forEach(rec => {\n const isCross = isHorizontal ? isHorizontalCross(rec, this.activeRectangle) : isVerticalCross(rec, this.activeRectangle);\n if (isCross && !RectangleClient.isHit(rec, this.activeRectangle)) {\n rectangles.push(rec);\n }\n });\n rectangles = [...rectangles, this.activeRectangle].sort((a, b) => a[axis] - b[axis]);\n\n const refArray: DistributeRef[] = [];\n let distributeDistance = 0;\n let beforeIndex = undefined;\n let afterIndex = undefined;\n\n for (let i = 0; i < rectangles.length; i++) {\n for (let j = i + 1; j < rectangles.length; j++) {\n const before = rectangles[i];\n const after = rectangles[j];\n const distance = after[axis] - (before[axis] + before[side]);\n let dif = Infinity;\n if (refArray[i]?.after) {\n refArray[i].after.push({ distance, index: j });\n } else {\n refArray[i] = { ...refArray[i], after: [{ distance, index: j }] };\n }\n\n if (refArray[j]?.before) {\n refArray[j].before.push({ distance, index: i });\n } else {\n refArray[j] = { ...refArray[j], before: [{ distance, index: i }] };\n }\n\n //middle\n let _center = (before[axis] + before[side] + after[axis]) / 2;\n dif = Math.abs(activeRectangleCenter - _center);\n if (dif < ALIGN_TOLERANCE) {\n distributeDistance = (after[axis] - (before[axis] + before[side]) - this.activeRectangle[side]) / 2;\n delta = activeRectangleCenter - _center;\n beforeIndex = i;\n afterIndex = j;\n }\n\n //after\n const distanceRight = after[axis] - (before[axis] + before[side]);\n _center = after[axis] + after[side] + distanceRight + this.activeRectangle[side] / 2;\n dif = Math.abs(activeRectangleCenter - _center);\n if (!distributeDistance && dif < ALIGN_TOLERANCE) {\n distributeDistance = distanceRight;\n beforeIndex = j;\n delta = activeRectangleCenter - _center;\n }\n\n //before\n const distanceBefore = after[axis] - (before[axis] + before[side]);\n _center = before[axis] - distanceBefore - this.activeRectangle[side] / 2;\n dif = Math.abs(activeRectangleCenter - _center);\n\n if (!distributeDistance && dif < ALIGN_TOLERANCE) {\n distributeDistance = distanceBefore;\n afterIndex = i;\n delta = activeRectangleCenter - _center;\n }\n }\n }\n\n const activeIndex = rectangles.indexOf(this.activeRectangle);\n let beforeIndexes: number[] = [];\n let afterIndexes: number[] = [];\n if (beforeIndex !== undefined) {\n beforeIndexes.push(beforeIndex);\n findRectangle(distributeDistance, refArray[beforeIndex], 'before', beforeIndexes);\n }\n\n if (afterIndex !== undefined) {\n afterIndexes.push(afterIndex);\n findRectangle(distributeDistance, refArray[afterIndex], 'after', afterIndexes);\n }\n\n if (beforeIndexes.length || afterIndexes.length) {\n const indexArr = [...beforeIndexes.reverse(), activeIndex, ...afterIndexes];\n this.activeRectangle[axis] -= delta;\n for (let i = 1; i < indexArr.length; i++) {\n distributeLines.push(getLinePoints(rectangles[indexArr[i - 1]], rectangles[indexArr[i]]));\n }\n }\n\n function findRectangle(distance: number, ref: DistributeRef, direction: string, rectangleIndexes: number[]) {\n const arr = ref[direction as keyof DistributeRef];\n const index = refArray.indexOf(ref);\n if ((index === 0 && direction === 'before') || (index === refArray.length - 1 && direction === 'after')) return;\n for (let i = 0; i < arr.length; i++) {\n if (Math.abs(arr[i].distance - distance) < 0.1) {\n rectangleIndexes.push(arr[i].index);\n findRectangle(distance, refArray[arr[i].index], direction, rectangleIndexes);\n return;\n }\n }\n }\n\n function getLinePoints(beforeRectangle: RectangleClient, afterRectangle: RectangleClient) {\n const oppositeAxis = axis === 'x' ? 'y' : 'x';\n const oppositeSide = side === 'width' ? 'height' : 'width';\n const align = [\n beforeRectangle[oppositeAxis],\n beforeRectangle[oppositeAxis] + beforeRectangle[oppositeSide],\n afterRectangle[oppositeAxis],\n afterRectangle[oppositeAxis] + afterRectangle[oppositeSide]\n ];\n const sortArr = align.sort((a, b) => a - b);\n const average = (sortArr[1] + sortArr[2]) / 2;\n const offset = 3;\n return isHorizontal\n ? [\n [beforeRectangle.x + beforeRectangle.width + offset, average],\n [afterRectangle.x - offset, average]\n ]\n : [\n [average, beforeRectangle.y + beforeRectangle.height + offset],\n [average, afterRectangle.y - offset]\n ];\n }\n return { delta, distributeLines };\n }\n\n drawAlignLines(lines: number[][], g: SVGGElement) {\n lines.forEach(points => {\n if (!points.length) return;\n const xAlign = PlaitBoard.getRoughSVG(this.board).line(points[0], points[1], points[2], points[3], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1,\n strokeLineDash: [4, 4]\n });\n g.appendChild(xAlign);\n });\n }\n\n drawDistributeLines(lines: Point[][], g: SVGGElement) {\n lines.forEach(line => {\n if (!line.length) return;\n let isHorizontal = line[0][1] === line[1][1];\n const yAlign = PlaitBoard.getRoughSVG(this.board).line(line[0][0], line[0][1], line[1][0], line[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(yAlign);\n\n line.forEach(point => {\n const barPoint = getBarPoint(point, isHorizontal);\n const bar = PlaitBoard.getRoughSVG(this.board).line(barPoint[0][0], barPoint[0][1], barPoint[1][0], barPoint[1][1], {\n stroke: SELECTION_BORDER_COLOR,\n strokeWidth: 1\n });\n g.appendChild(bar);\n });\n });\n }\n}\n\nfunction isHorizontalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.y + rectangle.height < other.y || rectangle.y > other.y + other.height);\n}\n\nfunction isVerticalCross(rectangle: RectangleClient, other: RectangleClient) {\n return !(rectangle.x + rectangle.width < other.x || rectangle.x > other.x + other.width);\n}\nfunction getBarPoint(point: Point, isHorizontal: boolean) {\n return isHorizontal\n ? [\n [point[0], point[1] - 4],\n [point[0], point[1] + 4]\n ]\n : [\n [point[0] - 4, point[1]],\n [point[0] + 4, point[1]]\n ];\n}\n","import { PlaitBoard } from '../interfaces/board';\nimport { isInPlaitBoard } from '../utils/board';\nimport { isMainPointer } from '../utils/dom/common';\nimport { Point } from '../interfaces/point';\nimport { Transforms } from '../transforms';\nimport { PlaitElement } from '../interfaces/element';\nimport { getHitElementByPoint, getSelectedElements } from '../utils/selected-element';\nimport { PlaitNode } from '../interfaces/node';\nimport { throttleRAF } from '../utils/common';\nimport { cacheMovingElements, getMovingElements, isMovingElements, removeMovingElements } from '../utils/moving-element';\nimport { MERGING } from '../interfaces/history';\nimport {\n isPreventTouchMove,\n preventTouchMove,\n handleTouchTarget,\n getRectangleByElements,\n distanceBetweenPointAndPoint,\n toHostPoint,\n toViewBoxPoint,\n hotkeys,\n getElementsInGroupByElement\n} from '../utils';\nimport { AlignReaction } from '../utils/reaction-manager';\nimport { PlaitPointerType, RectangleClient } from '../interfaces';\nimport { ACTIVE_MOVING_CLASS_NAME, PRESS_AND_MOVE_BUFFER } from '../constants';\nimport { addSelectionWithTemporaryElements } from '../transforms/selection';\n\nexport function withMoving(board: PlaitBoard) {\n const { pointerDown, pointerMove, globalPointerUp, globalPointerMove } = board;\n\n let offsetX = 0;\n let offsetY = 0;\n let isPreventDefault = false;\n let startPoint: Point | null;\n let activeElements: PlaitElement[] = [];\n let alignG: SVGGElement | null = null;\n let activeElementsRectangle: RectangleClient | null = null;\n\n board.pointerDown = (event: PointerEvent) => {\n if (\n PlaitBoard.isReadonly(board) ||\n !PlaitBoard.isPointer(board, PlaitPointerType.selection) ||\n isPreventTouchMove(board) ||\n !isMainPointer(event)\n ) {\n pointerDown(event);\n return;\n }\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n const targetElements = getTargetElements(board);\n const targetRectangle = targetElements.length > 0 && getRectangleByElements(board, targetElements, false);\n const isInTargetRectangle = targetRectangle && RectangleClient.isPointInRectangle(targetRectangle, point);\n if (isInTargetRectangle) {\n startPoint = point;\n activeElements = targetElements;\n preventTouchMove(board, event, true);\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n } else {\n const targetElement = getHitElementByPoint(board, point, el => board.isMovable(el));\n if (targetElement) {\n startPoint = point;\n activeElements = getElementsInGroupByElement(board, targetElement);\n if (targetElements.length > 0) {\n addSelectionWithTemporaryElements(board, []);\n }\n activeElementsRectangle = getRectangleByElements(board, activeElements, true);\n }\n }\n pointerDown(event);\n };\n\n board.pointerMove = (event: PointerEvent) => {\n if (startPoint && activeElements.length && !PlaitBoard.hasBeenTextEditing(board)) {\n if (!isPreventDefault) {\n isPreventDefault = true;\n }\n alignG?.remove();\n const endPoint = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n offsetX = endPoint[0] - startPoint[0];\n offsetY = endPoint[1] - startPoint[1];\n const distance = distanceBetweenPointAndPoint(...endPoint, ...startPoint);\n if (distance > PRESS_AND_MOVE_BUFFER || getMovingElements(board).length > 0) {\n throttleRAF(board, 'with-moving', () => {\n if (!activeElementsRectangle) {\n return;\n }\n const newRectangle = {\n ...activeElementsRectangle,\n x: activeElementsRectangle.x + offsetX,\n y: activeElementsRectangle.y + offsetY\n };\n const reactionManager = new AlignReaction(board, activeElements, newRectangle);\n const ref = reactionManager.handleAlign();\n offsetX -= ref.deltaX;\n offsetY -= ref.deltaY;\n alignG = ref.g;\n alignG.classList.add(ACTIVE_MOVING_CLASS_NAME);\n PlaitBoard.getElementActiveHost(board).append(alignG);\n handleTouchTarget(board);\n const currentElements = updatePoints(board, activeElements, offsetX, offsetY);\n PlaitBoard.getBoardContainer(board).classList.add('element-moving');\n cacheMovingElements(board, currentElements as PlaitElement[]);\n });\n }\n }\n if (isPreventDefault) {\n // Prevent canvas scrolling behavior from being triggered during move\n event.preventDefault();\n }\n pointerMove(event);\n };\n\n board.globalPointerMove = (event: PointerEvent) => {\n if (startPoint) {\n const inPlaitBoardElement = isInPlaitBoard(board, event.x, event.y);\n if (!inPlaitBoardElement) {\n cancelMove(board);\n }\n }\n globalPointerMove(event);\n };\n\n board.globalPointerUp = event => {\n isPreventDefault = false;\n if (startPoint) {\n cancelMove(board);\n }\n preventTouchMove(board, event, false);\n globalPointerUp(event);\n };\n\n function cancelMove(board: PlaitBoard) {\n alignG?.remove();\n startPoint = null;\n activeElementsRectangle = null;\n offsetX = 0;\n offsetY = 0;\n activeElements = [];\n if (isMovingElements(board)) {\n removeMovingElements(board);\n }\n MERGING.set(board, false);\n PlaitBoard.getBoardContainer(board).classList.remove('element-moving');\n }\n\n return withArrowMoving(board);\n}\n\nexport function withArrowMoving(board: PlaitBoard) {\n const { keyDown, keyUp } = board;\n board.keyDown = (event: KeyboardEvent) => {\n const selectedElements = getSelectedElements(board);\n if (!PlaitBoard.isReadonly(board) && selectedElements.length > 0 && (hotkeys.isArrow(event) || hotkeys.isExtendArrow(event))) {\n event.preventDefault();\n const isShift = event.shiftKey ? true : false;\n const offset = [0, 0];\n const buffer = isShift ? 10 : 1;\n switch (true) {\n case hotkeys.isMoveUp(event) || hotkeys.isExtendUp(event): {\n offset[1] = -buffer;\n break;\n }\n case hotkeys.isMoveDown(event) || hotkeys.isExtendDown(event): {\n offset[1] = buffer;\n break;\n }\n case hotkeys.isMoveBackward(event) || hotkeys.isExtendBackward(event): {\n offset[0] = -buffer;\n break;\n }\n case hotkeys.isMoveForward(event) || hotkeys.isExtendForward(event): {\n offset[0] = buffer;\n break;\n }\n }\n const targetElements = getTargetElements(board);\n throttleRAF(board, 'with-arrow-moving', () => {\n updatePoints(board, targetElements, offset[0], offset[1]);\n });\n }\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n MERGING.set(board, false);\n keyUp(event);\n };\n return board;\n}\n\nexport function getTargetElements(board: PlaitBoard) {\n const selectedElements = getSelectedElements(board);\n const movableElements = board.children.filter(item => board.isMovable(item));\n const targetElements = selectedElements.filter(element => {\n return movableElements.includes(element);\n });\n const relatedElements = board.getRelatedFragment([]);\n targetElements.push(...relatedElements);\n return targetElements;\n}\n\nexport function updatePoints(board: PlaitBoard, targetElements: PlaitElement[], offsetX: number, offsetY: number) {\n const validElements = targetElements.filter(element => board.children.findIndex(item => item.id === element.id) > -1);\n const currentElements = validElements.map(element => {\n const points = element.points || [];\n const newPoints = points.map(p => [p[0] + offsetX, p[1] + offsetY]) as Point[];\n const index = board.children.findIndex(item => item.id === element.id);\n Transforms.setNode(\n board,\n {\n points: newPoints\n },\n [index]\n );\n MERGING.set(board, true);\n return PlaitNode.get(board, [index]);\n });\n return currentElements;\n}\n","import { PlaitBoard } from '../interfaces/board';\n\nexport interface PlaitPluginOptions {\n disabled?: boolean;\n}\n\nexport interface PlaitOptionsBoard extends PlaitBoard {\n getPluginOptions: <K = PlaitPluginOptions>(key: string) => K;\n setPluginOptions: <K = PlaitPluginOptions>(key: string, value: Partial<K>) => void;\n}\n\nexport const withOptions = (board: PlaitBoard) => {\n const pluginOptions = new Map<string, any>();\n const newBoard = board as PlaitOptionsBoard;\n\n newBoard.getPluginOptions = key => {\n return pluginOptions.get(key);\n };\n\n newBoard.setPluginOptions = (key, options) => {\n const oldOptions = newBoard.getPluginOptions(key) || {};\n pluginOptions.set(key, { ...oldOptions, ...options });\n };\n\n return newBoard;\n};\n","import { ChangeDetectorRef, Directive, Input, OnDestroy, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces';\nimport { Subscription } from 'rxjs';\n\n@Directive({\n host: {\n class: 'plait-island-container'\n }\n})\nexport abstract class PlaitIslandBaseComponent {\n board!: PlaitBoard;\n\n constructor(protected cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n this.markForCheck();\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n }\n}\n\n@Directive({\n host: {\n class: 'plait-island-popover-container'\n }\n})\nexport abstract class PlaitIslandPopoverBaseComponent implements OnInit, OnDestroy {\n @Input() board!: PlaitBoard;\n\n private subscription?: Subscription;\n\n constructor(public cdr: ChangeDetectorRef) {}\n\n initialize(board: PlaitBoard) {\n this.board = board;\n const boardComponent = PlaitBoard.getComponent(board);\n this.subscription = boardComponent.plaitChange.subscribe(() => {\n if (hasOnBoardChange(this)) {\n this.onBoardChange();\n }\n this.cdr.markForCheck();\n });\n }\n\n ngOnInit(): void {\n if (!this.board) {\n throw new Error('can not find board instance');\n }\n this.initialize(this.board);\n this.islandOnInit();\n }\n\n ngOnDestroy(): void {\n this.subscription?.unsubscribe();\n this.islandOnDestroy();\n }\n\n /**\n * use islandOnInit replace ngOnInit to avoid ngOnInit being overridden\n */\n abstract islandOnInit(): void;\n\n /**\n * use islandOnDestroy replace ngOnDestroy to avoid ngOnDestroy being overridden\n */\n abstract islandOnDestroy(): void;\n}\n\nexport interface OnBoardChange {\n onBoardChange: () => void;\n}\n\nexport const hasOnBoardChange = (value: any): value is OnBoardChange => {\n if (value.onBoardChange) {\n return true;\n } else {\n return false;\n }\n};\n","import { isHotkey } from 'is-hotkey';\nimport { Ancestor, PlaitBoard, PlaitElement, PlaitPluginKey } from '../interfaces';\nimport { BoardTransforms, Transforms } from '../transforms';\nimport { depthFirstRecursion, getSelectedElements, hotkeys } from '../utils';\nimport { PlaitOptionsBoard } from './with-options';\nimport { WithPluginOptions } from './with-selection';\n\nexport const withHotkey = (board: PlaitBoard) => {\n const { keyDown, keyUp, globalKeyDown } = board;\n\n board.keyDown = (event: KeyboardEvent) => {\n const options = (board as PlaitOptionsBoard).getPluginOptions<WithPluginOptions>(PlaitPluginKey.withSelection);\n if (!PlaitBoard.isReadonly(board) && options.isMultiple && isHotkey('mod+a', event)) {\n event.preventDefault();\n let elements: PlaitElement[] = [];\n depthFirstRecursion<Ancestor>(\n board,\n node => {\n if (PlaitBoard.isBoard(node)) {\n return;\n }\n elements.push(node as PlaitElement);\n },\n node => {\n if (PlaitBoard.isBoard(node) || board.isRecursion(node)) {\n return true;\n } else {\n return false;\n }\n },\n true\n );\n Transforms.addSelectionWithTemporaryElements(board, elements);\n return;\n }\n\n const selectedElements = getSelectedElements(board);\n if (\n !PlaitBoard.isReadonly(board) &&\n selectedElements.length > 0 &&\n (hotkeys.isDeleteBackward(event) || hotkeys.isDeleteForward(event))\n ) {\n event.preventDefault();\n board.deleteFragment(null);\n }\n\n keyDown(event);\n };\n\n board.keyUp = (event: KeyboardEvent) => {\n keyUp(event);\n };\n\n board.globalKeyDown = (event: KeyboardEvent) => {\n if (PlaitBoard.getMovingPointInBoard(board) || PlaitBoard.isMovingPointInBoard(board)) {\n if (isHotkey(['mod+=', 'mod++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom + 0.1, false);\n return;\n }\n if (isHotkey(['mod+shift+=', 'mod+shift++'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.fitViewport(board);\n return;\n }\n if (isHotkey(['mod+-', 'mod+shift+-'])(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, board.viewport.zoom - 0.1);\n return;\n }\n if (isHotkey(['mod+0', 'mod+shift+0'], { byKey: true })(event)) {\n event.preventDefault();\n BoardTransforms.updateZoom(board, 1);\n return;\n }\n }\n globalKeyDown(event);\n };\n\n return board;\n};\n","import { Injectable } from '@angular/core';\nimport { ImageEntry } from '../interfaces';\n\n@Injectable()\nexport class PlaitContextService {\n private uploadingFiles: ImageEntry[] = [];\n\n getUploadingFile(url: string) {\n return this.uploadingFiles.find(file => file.url === url);\n }\n\n setUploadingFile(file: ImageEntry) {\n return this.uploadingFiles.push(file);\n }\n\n removeUploadingFile(fileEntry: ImageEntry) {\n this.uploadingFiles = this.uploadingFiles.filter(file => file.url !== fileEntry.url);\n }\n}\n","import {\n ChangeDetectionStrategy,\n Component,\n Input,\n OnChanges,\n OnDestroy,\n OnInit,\n Renderer2,\n SimpleChanges,\n ViewContainerRef\n} from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitPluginElementContext } from './context';\nimport { PlaitPluginElementComponent } from './plugin-element';\nimport { PlaitEffect } from '../children/effect';\nimport { Ancestor, PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\nimport { addSelectedElement, isSelectedElement, removeSelectedElement } from '../../utils';\n\n@Component({\n selector: 'plait-element',\n template: '',\n changeDetection: ChangeDetectionStrategy.OnPush,\n standalone: true\n})\nexport class PlaitElementComponent implements OnInit, OnChanges, OnDestroy {\n initialized = false;\n\n instance?: PlaitPluginElementComponent<PlaitElement>;\n\n @Input() index!: number;\n\n @Input() element!: PlaitElement;\n\n @Input() parent!: Ancestor;\n\n @Input() board!: PlaitBoard;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor(public renderer2: Renderer2, public viewContainerRef: ViewContainerRef) {}\n\n ngOnInit(): void {\n this.initialize();\n this.drawElement();\n }\n\n initialize() {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n this.initialized = true;\n }\n\n drawElement() {\n const context = this.getContext();\n const result = this.board.drawElement(context);\n if (Array.isArray(result)) {\n } else {\n const componentRef = this.viewContainerRef.createComponent(result);\n const instance = componentRef.instance;\n instance.context = context;\n this.insertG(instance.rootG ? instance.rootG : instance.g);\n this.instance = instance;\n }\n }\n\n insertG(g: SVGGElement) {\n if (PlaitBoard.isBoard(this.parent)) {\n this.parentG.append(g);\n } else {\n let siblingG = PlaitElement.getComponent(this.parent).g;\n if (this.index > 0) {\n const brotherElement = (this.parent.children as PlaitElement[])[this.index - 1];\n const lastElement = PlaitNode.last(this.board, PlaitBoard.findPath(this.board, brotherElement));\n let component = PlaitElement.getComponent(lastElement) || PlaitElement.getComponent(brotherElement);\n siblingG = component.g;\n }\n this.parentG.insertBefore(g, siblingG);\n }\n }\n\n ngOnChanges(simpleChanges: SimpleChanges) {\n if (this.initialized) {\n NODE_TO_INDEX.set(this.element, this.index);\n NODE_TO_PARENT.set(this.element, this.parent);\n const elementChanged = simpleChanges['element'];\n const context = this.getContext();\n if (elementChanged && isSelectedElement(this.board, elementChanged.previousValue)) {\n context.selected = true;\n removeSelectedElement(this.board, elementChanged.previousValue);\n addSelectedElement(this.board, this.element);\n }\n if (this.instance) {\n this.instance.context = context;\n }\n }\n }\n\n getContext(): PlaitPluginElementContext {\n const isSelected = isSelectedElement(this.board, this.element);\n const context: PlaitPluginElementContext = {\n element: this.element,\n parent: this.parent,\n board: this.board,\n selected: isSelected,\n effect: this.effect\n };\n return context;\n }\n\n ngOnDestroy(): void {\n this.board.destroyElement(this.getContext());\n }\n}\n","import { Component, Input, OnInit } from '@angular/core';\nimport { PlaitBoard } from '../../interfaces/board';\nimport { PlaitElement } from '../../interfaces/element';\nimport { PlaitEffect } from './effect';\nimport { Ancestor } from '../../interfaces/node';\nimport { PlaitElementComponent } from '../element/element.component';\nimport { NgFor } from '@angular/common';\n\n@Component({\n selector: 'plait-children',\n template: `\n <plait-element\n *ngFor=\"let item of parent.children; let index = index; trackBy: trackBy\"\n [index]=\"index\"\n [element]=\"item\"\n [parent]=\"parent\"\n [board]=\"board\"\n [effect]=\"effect\"\n [parentG]=\"parentG\"\n ></plait-element>\n `,\n standalone: true,\n imports: [NgFor, PlaitElementComponent]\n})\nexport class PlaitChildrenElementComponent implements OnInit {\n @Input() board!: PlaitBoard;\n\n @Input() parent!: Ancestor;\n\n @Input() effect?: PlaitEffect;\n\n @Input() parentG!: SVGGElement;\n\n constructor() {}\n\n ngOnInit(): void {\n if (!this.parent) {\n this.parent = this.board;\n }\n if (!this.parentG) {\n this.parentG = PlaitBoard.getElementHost(this.board);\n }\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n}\n","import { PlaitBoard, Selection } from '../interfaces';\nimport {\n createGroupRectangleG,\n toViewBoxPoint,\n toHostPoint,\n getHitElementsBySelection\n} from '../utils';\n\nexport function withGroup(board: PlaitBoard) {\n const { pointerMove, globalPointerUp } = board;\n let groupRectangleG: SVGGElement | null;\n\n board.pointerMove = (event: PointerEvent) => {\n groupRectangleG?.remove();\n const point = toViewBoxPoint(board, toHostPoint(board, event.x, event.y));\n let selection: Selection = { anchor: point, focus: point };\n if (board.selection && !Selection.isCollapsed(board.selection)) {\n selection = board.selection;\n }\n const hitElements = getHitElementsBySelection(board, selection);\n if (hitElements.length) {\n groupRectangleG = createGroupRectangleG(board, hitElements);\n groupRectangleG && PlaitBoard.getElementActiveHost(board).append(groupRectangleG);\n }\n\n pointerMove(event);\n };\n\n board.globalPointerUp = (event: PointerEvent) => {\n groupRectangleG?.remove();\n groupRectangleG = null;\n globalPointerUp(event);\n };\n\n return board;\n}\n","import {\n AfterContentInit,\n AfterViewInit,\n ChangeDetectionStrategy,\n ChangeDetectorRef,\n Component,\n ContentChildren,\n ElementRef,\n EventEmitter,\n HostBinding,\n Input,\n NgZone,\n OnChanges,\n OnDestroy,\n OnInit,\n Output,\n QueryList,\n SimpleChanges,\n ViewChild,\n ViewContainerRef\n} from '@angular/core';\nimport rough from 'roughjs/bin/rough';\nimport { RoughSVG } from 'roughjs/bin/svg';\nimport { fromEvent, Subject } from 'rxjs';\nimport { filter, takeUntil, tap } from 'rxjs/operators';\nimport { PlaitBoard, PlaitBoardChangeEvent, PlaitBoardOptions } from '../interfaces/board';\nimport { PlaitElement } from '../interfaces/element';\nimport { PlaitPlugin } from '../interfaces/plugin';\nimport { Viewport } from '../interfaces/viewport';\nimport { createBoard } from '../plugins/create-board';\nimport { withBoard } from '../plugins/with-board';\nimport { withHistory } from '../plugins/with-history';\nimport { withHandPointer } from '../plugins/with-hand';\nimport { withSelection } from '../plugins/with-selection';\nimport {\n IS_CHROME,\n IS_FIREFOX,\n IS_SAFARI,\n getClipboardData,\n getRectangleByElements,\n getSelectedElements,\n toHostPoint,\n toViewBoxPoint\n} from '../utils';\nimport {\n BOARD_TO_ON_CHANGE,\n BOARD_TO_COMPONENT,\n BOARD_TO_ELEMENT_HOST,\n BOARD_TO_HOST,\n BOARD_TO_ROUGH_SVG,\n BOARD_TO_MOVING_POINT_IN_BOARD,\n BOARD_TO_MOVING_POINT,\n BOARD_TO_AFTER_CHANGE\n} from '../utils/weak-maps';\nimport { BoardComponentInterface } from './board.component.interface';\nimport {\n initializeViewportOffset,\n initializeViewBox,\n isFromViewportChange,\n setIsFromViewportChange,\n initializeViewportContainer,\n updateViewportOffset,\n updateViewportByScrolling\n} from '../utils/viewport';\nimport { withViewport } from '../plugins/with-viewport';\nimport { withMoving } from '../plugins/with-moving';\nimport { hasInputOrTextareaTarget } from '../utils/dom/common';\nimport { withOptions } from '../plugins/with-options';\nimport { PlaitIslandBaseComponent, hasOnBoardChange } from '../core/island/island-base.component';\nimport { BoardTransforms } from '../transforms/board';\nimport { PlaitTheme } from '../interfaces/theme';\nimport { withHotkey } from '../plugins/with-hotkey';\nimport { HOST_CLASS_NAME } from '../constants';\nimport { PlaitContextService } from '../services/image-context.service';\nimport { isPreventTouchMove } from '../utils/touch';\nimport { PlaitChildrenElementComponent } from '../core/children/children.component';\nimport { ZOOM_STEP } from '../constants/zoom';\nimport { withGroup } from '../plugins/with-group';\n\nconst ElementHostClass = 'element-host';\nconst ElementUpperHostClass = 'element-upper-host';\nconst ElementActiveHostClass = 'element-active-host';\n\n@Component({\n selector: 'plait-board',\n template: `\n <div class=\"viewport-container\" #viewportContainer>\n <svg #svg width=\"100%\" height=\"100%\" style=\"position: relative;\" class=\"board-host-svg\">\n <g class=\"element-host\"></g>\n <g class=\"element-upper-host\"></g>\n <g class=\"element-active-host\"></g>\n </svg>\n <plait-children [board]=\"board\" [effect]=\"effect\"></plait-children>\n </div>\n <ng-content></ng-content>\n `,\n changeDetection: ChangeDetectionStrategy.OnPush,\n providers: [PlaitContextService],\n standalone: true,\n imports: [PlaitChildrenElementComponent]\n})\nexport class PlaitBoardComponent implements BoardComponentInterface, OnInit, OnChanges, AfterViewInit, AfterContentInit, OnDestroy {\n hasInitialized = false;\n\n effect = {};\n\n board!: PlaitBoard;\n\n roughSVG!: RoughSVG;\n\n destroy$ = new Subject<void>();\n\n private resizeObserver!: ResizeObserver;\n\n @Input() plaitValue: PlaitElement[] = [];\n\n @Input() plaitViewport!: Viewport;\n\n @Input() plaitPlugins: PlaitPlugin[] = [];\n\n @Input() plaitOptions?: PlaitBoardOptions;\n\n @Input() plaitTheme?: PlaitTheme;\n\n @Output() plaitChange: EventEmitter<PlaitBoardChangeEvent> = new EventEmitter();\n\n @Output() plaitBoardInitialized: EventEmitter<PlaitBoard> = new EventEmitter();\n\n get host(): SVGSVGElement {\n return this.svg.nativeElement;\n }\n\n @HostBinding('class')\n get hostClass() {\n return `${HOST_CLASS_NAME} pointer-${this.board.pointer} theme-${this.board.theme.themeColorMode} ${this.getBrowserClassName()}`;\n }\n\n getBrowserClassName() {\n if (IS_SAFARI) {\n return 'safari';\n }\n if (IS_CHROME) {\n return 'chrome';\n }\n if (IS_FIREFOX) {\n return 'firefox';\n }\n return '';\n }\n\n @HostBinding('class.readonly')\n get readonly() {\n return this.board.options.readonly;\n }\n\n @HostBinding('class.focused')\n get isFocused() {\n return PlaitBoard.isFocus(this.board);\n }\n\n @HostBinding('class.disabled-scroll')\n get disabledScrollOnNonFocus() {\n return this.board.options.disabledScrollOnNonFocus && !PlaitBoard.isFocus(this.board);\n }\n\n get nativeElement(): HTMLElement {\n return this.elementRef.nativeElement;\n }\n\n @ViewChild('svg', { static: true })\n svg!: ElementRef;\n\n @ViewChild('viewportContainer', { read: ElementRef, static: true })\n viewportContainer!: ElementRef;\n\n @ContentChildren(PlaitIslandBaseComponent, { descendants: true }) islands?: QueryList<PlaitIslandBaseComponent>;\n\n constructor(\n public cdr: ChangeDetectorRef,\n public viewContainerRef: ViewContainerRef,\n private elementRef: ElementRef<HTMLElement>,\n private ngZone: NgZone\n ) {}\n\n ngOnInit(): void {\n const elementHost = this.host.querySelector(`.${ElementHostClass}`) as SVGGElement;\n const elementUpperHost = this.host.querySelector(`.${ElementUpperHostClass}`) as SVGGElement;\n const elementActiveHost = this.host.querySelector(`.${ElementActiveHostClass}`) as SVGGElement;\n const roughSVG = rough.svg(this.host as SVGSVGElement, {\n options: { roughness: 0, strokeWidth: 1 }\n });\n this.roughSVG = roughSVG;\n this.initializePlugins();\n this.ngZone.runOutsideAngular(() => {\n this.initializeHookListener();\n this.viewportScrollListener();\n this.wheelZoomListener();\n this.elementResizeListener();\n fromEvent<MouseEvent>(document, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.delete(this.board);\n });\n });\n BOARD_TO_COMPONENT.set(this.board, this);\n BOARD_TO_ROUGH_SVG.set(this.board, roughSVG);\n BOARD_TO_HOST.set(this.board, this.host);\n BOARD_TO_ELEMENT_HOST.set(this.board, {\n host: elementHost,\n upperHost: elementUpperHost,\n activeHost: elementActiveHost,\n container: this.elementRef.nativeElement,\n viewportContainer: this.viewportContainer.nativeElement\n });\n BOARD_TO_ON_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n this.update();\n });\n });\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {\n this.ngZone.run(() => {\n const changeEvent: PlaitBoardChangeEvent = {\n children: this.board.children,\n operations: this.board.operations,\n viewport: this.board.viewport,\n selection: this.board.selection,\n theme: this.board.theme\n };\n this.updateIslands();\n this.plaitChange.emit(changeEvent);\n });\n });\n this.hasInitialized = true;\n }\n\n ngAfterContentInit(): void {\n this.initializeIslands();\n }\n\n update() {\n this.effect = {};\n this.cdr.detectChanges();\n }\n\n ngOnChanges(changes: SimpleChanges) {\n if (this.hasInitialized) {\n const valueChange = changes['plaitValue'];\n const options = changes['plaitOptions'];\n\n if (valueChange) this.board.children = valueChange.currentValue;\n if (options) this.board.options = options.currentValue;\n this.cdr.markForCheck();\n }\n }\n\n ngAfterViewInit(): void {\n this.plaitBoardInitialized.emit(this.board);\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n initializeViewportOffset(this.board);\n }\n\n private initializePlugins() {\n let board = withHotkey(\n withHandPointer(\n withHistory(\n withSelection(\n withGroup(withMoving(withBoard(withViewport(withOptions(createBoard(this.plaitValue, this.plaitOptions))))))\n )\n )\n )\n );\n this.plaitPlugins.forEach(plugin => {\n board = plugin(board);\n });\n this.board = board;\n\n if (this.plaitViewport) {\n this.board.viewport = this.plaitViewport;\n }\n\n if (this.plaitTheme) {\n this.board.theme = this.plaitTheme;\n }\n }\n\n private initializeHookListener() {\n fromEvent<MouseEvent>(this.host, 'mousedown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mousedown(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerdown')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerDown(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.mousemove(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.set(this.board, [event.x, event.y]);\n this.board.pointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.mouseleave(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerleave')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT_IN_BOARD.delete(this.board);\n this.board.pointerLeave(event);\n });\n\n fromEvent<MouseEvent>(document, 'mousemove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalMousemove(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointermove')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n BOARD_TO_MOVING_POINT.set(this.board, [event.x, event.y]);\n this.board.globalPointerMove(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.mouseup(event);\n });\n\n fromEvent<PointerEvent>(this.host, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.pointerUp(event);\n });\n\n fromEvent<MouseEvent>(document, 'mouseup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: MouseEvent) => {\n this.board.globalMouseup(event);\n });\n\n fromEvent<PointerEvent>(document, 'pointerup')\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: PointerEvent) => {\n this.board.globalPointerUp(event);\n });\n\n fromEvent<MouseEvent>(this.host, 'dblclick')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: MouseEvent) => {\n this.board.dblClick(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keydown')\n .pipe(\n takeUntil(this.destroy$),\n tap(event => {\n this.board.globalKeyDown(event);\n }),\n filter(event => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board) && !hasInputOrTextareaTarget(event.target))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board.keyDown(event);\n });\n\n fromEvent<KeyboardEvent>(document, 'keyup')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: KeyboardEvent) => {\n this.board?.keyUp(event);\n });\n\n fromEvent<ClipboardEvent>(document, 'copy')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n const selectedElements = getSelectedElements(this.board);\n event.preventDefault();\n const rectangle = getRectangleByElements(this.board, selectedElements, false);\n this.board.setFragment(event.clipboardData, null, rectangle, 'copy');\n });\n\n fromEvent<ClipboardEvent>(document, 'paste')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe(async (clipboardEvent: ClipboardEvent) => {\n const mousePoint = PlaitBoard.getMovingPointInBoard(this.board);\n if (mousePoint) {\n const targetPoint = toViewBoxPoint(this.board, toHostPoint(this.board, mousePoint[0], mousePoint[1]));\n const clipboardData = await getClipboardData(clipboardEvent.clipboardData);\n this.board.insertFragment(clipboardEvent.clipboardData, clipboardData, targetPoint);\n }\n });\n\n fromEvent<ClipboardEvent>(document, 'cut')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => this.isFocused && !PlaitBoard.isReadonly(this.board) && !PlaitBoard.hasBeenTextEditing(this.board))\n )\n .subscribe((event: ClipboardEvent) => {\n const selectedElements = getSelectedElements(this.board);\n event.preventDefault();\n const rectangle = getRectangleByElements(this.board, selectedElements, false);\n this.board.setFragment(event.clipboardData, null, rectangle, 'cut');\n this.board.deleteFragment(event.clipboardData);\n });\n }\n\n private viewportScrollListener() {\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'scroll')\n .pipe(\n takeUntil(this.destroy$),\n filter(() => {\n if (isFromViewportChange(this.board)) {\n setIsFromViewportChange(this.board, false);\n return false;\n }\n return true;\n })\n )\n .subscribe((event: Event) => {\n const { scrollLeft, scrollTop } = event.target as HTMLElement;\n updateViewportByScrolling(this.board, scrollLeft, scrollTop);\n });\n fromEvent<MouseEvent>(this.viewportContainer.nativeElement, 'touchmove', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: Event) => {\n if (isPreventTouchMove(this.board)) {\n event.preventDefault();\n }\n });\n }\n\n private elementResizeListener() {\n this.resizeObserver = new ResizeObserver(() => {\n initializeViewportContainer(this.board);\n initializeViewBox(this.board);\n updateViewportOffset(this.board);\n });\n this.resizeObserver.observe(this.nativeElement);\n }\n\n private initializeIslands() {\n this.islands?.forEach(island => {\n island.initialize(this.board);\n });\n }\n\n private updateIslands() {\n this.islands?.forEach(island => {\n if (hasOnBoardChange(island)) {\n island.onBoardChange();\n }\n island.markForCheck();\n });\n }\n\n private wheelZoomListener() {\n fromEvent<WheelEvent>(this.host, 'wheel', { passive: false })\n .pipe(takeUntil(this.destroy$))\n .subscribe((event: WheelEvent) => {\n // Credits to excalidraw\n // https://github.com/excalidraw/excalidraw/blob/b7d7ccc929696cc17b4cc34452e4afd846d59f4f/src/components/App.tsx#L9060\n if (event.metaKey || event.ctrlKey) {\n event.preventDefault();\n const { deltaX, deltaY } = event;\n const zoom = this.board.viewport.zoom;\n const sign = Math.sign(deltaY);\n const MAX_STEP = ZOOM_STEP * 100;\n const absDelta = Math.abs(deltaY);\n let delta = deltaY;\n if (absDelta > MAX_STEP) {\n delta = MAX_STEP * sign;\n }\n let newZoom = zoom - delta / 100;\n // increase zoom steps the more zoomed-in we are (applies to >100% only)\n newZoom +=\n Math.log10(Math.max(1, zoom)) *\n -sign *\n // reduced amplification for small deltas (small movements on a trackpad)\n Math.min(1, absDelta / 20);\n BoardTransforms.updateZoom(this.board, newZoom, false);\n }\n });\n }\n\n trackBy = (index: number, element: PlaitElement) => {\n return element.id;\n };\n\n ngOnDestroy(): void {\n this.destroy$.next();\n this.destroy$.complete();\n this.resizeObserver && this.resizeObserver?.disconnect();\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_COMPONENT.delete(this.board);\n BOARD_TO_ROUGH_SVG.delete(this.board);\n BOARD_TO_HOST.delete(this.board);\n BOARD_TO_ELEMENT_HOST.delete(this.board);\n BOARD_TO_ON_CHANGE.delete(this.board);\n BOARD_TO_AFTER_CHANGE.set(this.board, () => {});\n }\n\n markForCheck() {\n this.cdr.markForCheck();\n this.ngZone.run(() => {\n this.updateIslands();\n });\n }\n}\n","import { PlaitBoardOptions, PlaitElement, PlaitPlugin } from '../../interfaces';\nimport { createBoard } from '../../plugins/create-board';\n\n/**\n * 1.create board instance\n * 2.build fake node weak map\n */\nexport const createTestingBoard = (\n plugins: PlaitPlugin[],\n children: PlaitElement[],\n options: PlaitBoardOptions = { readonly: false, hideScrollbar: true, disabledScrollOnNonFocus: false }\n) => {\n let board = createBoard(children, options);\n plugins.forEach(plugin => {\n board = plugin(board);\n });\n return board;\n};\n","import { PlaitBoard } from '../../interfaces/board';\nimport { PlaitNode } from '../../interfaces/node';\nimport { NODE_TO_INDEX, NODE_TO_PARENT } from '../../utils/weak-maps';\n\nexport const fakeNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach((value, index: number) => {\n NODE_TO_PARENT.set(value, object);\n NODE_TO_INDEX.set(value, index);\n fakeNodeWeakMap(value);\n });\n};\n\nexport const clearNodeWeakMap = (object: PlaitNode | PlaitBoard) => {\n const children = object.children || [];\n children.forEach(value => {\n NODE_TO_PARENT.delete(value);\n NODE_TO_INDEX.delete(value);\n clearNodeWeakMap(value);\n });\n};\n","/**\n * @license\n * Copyright Google LLC All Rights Reserved.\n *\n * Use of this source code is governed by an MIT-style license that can be\n * found in the LICENSE file at https://angular.io/license\n */\n\nimport { IS_MAC } from '../../utils/dom/environment';\nimport { ModifierKeys } from '../test-element';\n\n/** Used to generate unique IDs for events. */\nlet uniqueIds = 0;\n\n/**\n * Creates a browser MouseEvent with the specified options.\n * @docs-private\n */\nexport function createMouseEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX = 1,\n offsetY = 1,\n button = 0,\n modifiers: ModifierKeys = {}\n) {\n // Note: We cannot determine the position of the mouse event based on the screen\n // because the dimensions and position of the browser window are not available\n // To provide reasonable `screenX` and `screenY` coordinates, we simply use the\n // client coordinates as if the browser is opened in fullscreen.\n const screenX = clientX;\n const screenY = clientY;\n\n const event = new MouseEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n detail: 0,\n relatedTarget: null,\n screenX,\n screenY,\n clientX,\n clientY,\n ctrlKey: modifiers.control,\n altKey: modifiers.alt,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n button: button,\n buttons: 1\n });\n\n // The `MouseEvent` constructor doesn't allow us to pass these properties into the constructor.\n // Override them to `1`, because they're used for fake screen reader event detection.\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser `PointerEvent` with the specified options. Pointer events\n * by default will appear as if they are the primary pointer of their type.\n * https://www.w3.org/TR/pointerevents2/#dom-pointerevent-isprimary.\n *\n * For example, if pointer events for a multi-touch interaction are created, the non-primary\n * pointer touches would need to be represented by non-primary pointer events.\n *\n * @docs-private\n */\nexport function createPointerEvent(\n type: string,\n clientX = 0,\n clientY = 0,\n offsetX?: number,\n offsetY?: number,\n options: PointerEventInit = { isPrimary: true }\n) {\n const event = new PointerEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n clientX,\n clientY,\n ...options\n });\n\n if (offsetX != null) {\n defineReadonlyEventProperty(event, 'offsetX', offsetX);\n }\n\n if (offsetY != null) {\n defineReadonlyEventProperty(event, 'offsetY', offsetY);\n }\n\n return event;\n}\n\n/**\n * Creates a browser TouchEvent with the specified pointer coordinates.\n * @docs-private\n */\nexport function createTouchEvent(type: string, pageX = 0, pageY = 0, clientX = 0, clientY = 0) {\n // We cannot use the `TouchEvent` or `Touch` because Firefox and Safari lack support.\n // TODO: Switch to the constructor API when it is available for Firefox and Safari.\n const event = document.createEvent('UIEvent');\n const touchDetails = { pageX, pageY, clientX, clientY, identifier: uniqueIds++ };\n\n // TS3.6 removes the initUIEvent method and suggests porting to \"new UIEvent()\".\n (event as any).initUIEvent(type, true, true, window, 0);\n\n // Most of the browsers don't have a \"initTouchEvent\" method that can be used to define\n // the touch details.\n defineReadonlyEventProperty(event, 'touches', [touchDetails]);\n defineReadonlyEventProperty(event, 'targetTouches', [touchDetails]);\n defineReadonlyEventProperty(event, 'changedTouches', [touchDetails]);\n\n return event;\n}\n\n/**\n * Creates a keyboard event with the specified key and modifiers.\n * @docs-private\n */\nexport function createKeyboardEvent(type: string, keyCode: number = 0, key: string = '', modifiers: ModifierKeys = {}) {\n return new KeyboardEvent(type, {\n bubbles: true,\n cancelable: true,\n composed: true, // Required for shadow DOM events.\n view: window,\n keyCode: keyCode,\n key: key,\n shiftKey: modifiers.shift,\n metaKey: modifiers.meta,\n altKey: modifiers.alt,\n ctrlKey: modifiers.control\n });\n}\n\n/**\n * Creates a fake event object with any desired event type.\n * @docs-private\n */\nexport function createFakeEvent(type: string, bubbles = false, cancelable = true, composed = true) {\n return new Event(type, { bubbles, cancelable, composed });\n}\n\n/**\n * Defines a readonly property on the given event object. Readonly properties on an event object\n * are always set as configurable as that matches default readonly properties for DOM event objects.\n */\nfunction defineReadonlyEventProperty(event: Event, propertyName: string, value: any) {\n Object.defineProperty(event, propertyName, { get: () => value, configurable: true });\n}\n\nexport function createModModifierKeys() {\n const modifiers = IS_MAC ? { meta: true } : { control: true };\n return modifiers;\n}\n","/*\n * Public API Surface of plait\n */\n\nexport * from './board/board.component';\nexport * from './constants';\nexport * from './core/element/plugin-element';\nexport * from './core/element/element.component';\nexport * from './core/children/children.component';\nexport * from './core/element/context-change';\nexport * from './core/island/island-base.component';\nexport * from './interfaces';\nexport * from './transforms';\nexport * from './utils';\nexport * from './plugins/with-selection';\nexport * from './plugins/with-moving';\nexport * from './plugins/with-options';\nexport * from './testing';\nexport * from './services/image-context.service';\n","/**\n * Generated bundle index. Do not edit.\n */\n\nexport * from './public-api';\n"],"names":["ViewportTransforms"],"mappings":";;;;;;;;;AAQA;AACa,MAAA,cAAc,GAAG,IAAI,OAAO,GAAoB;AAEhD,MAAA,QAAQ,GAAG,IAAI,OAAO,GAAwB;AAE9C,MAAA,aAAa,GAAG,IAAI,OAAO,GAAsB;AAEjD,MAAA,cAAc,GAAG,IAAI,OAAO,GAAwB;AAEpD,MAAA,gBAAgB,GAAG,IAAI,OAAO,GAAwB;AAEtD,MAAA,kBAAkB,GAAG,IAAI,OAAO,GAA2B;AAE3D,MAAA,qBAAqB,GAAG,IAAI,OAAO,GAA2B;AAE9D,MAAA,kBAAkB,GAAG,IAAI,OAAO,GAAwC;AAExE,MAAA,kBAAkB,GAAG,IAAI,OAAO,GAAyB;AAEzD,MAAA,aAAa,GAAG,IAAI,OAAO,GAA8B;AAEzD,MAAA,qBAAqB,GAAG,IAAI,OAAO,GAS5C;AAES,MAAA,yBAAyB,GAAG,IAAI,OAAO,GAA+B;AAEtE,MAAA,8BAA8B,GAAG,IAAI,OAAO,GAAsB;AAElE,MAAA,qBAAqB,GAAG,IAAI,OAAO,GAAsB;AAEzD,MAAA,6BAA6B,GAAG,IAAI,OAAO,GAAsB;AAEjE,MAAA,4BAA4B,GAAG,IAAI,OAAO,GAAwB;AAE/E;AACa,MAAA,2BAA2B,GAAG,IAAI,OAAO,GAA6D;AAEtG,MAAA,uBAAuB,GAAG,IAAI,OAAO,GAA+B;AAEpE,MAAA,SAAS,GAAsC,IAAI,OAAO;;ICvD3D,iBAGX;AAHD,CAAA,UAAY,gBAAgB,EAAA;AACxB,IAAA,gBAAA,CAAA,MAAA,CAAA,GAAA,MAAe,CAAA;AACf,IAAA,gBAAA,CAAA,WAAA,CAAA,GAAA,WAAyB,CAAA;AAC7B,CAAC,EAHW,gBAAgB,KAAhB,gBAAgB,GAG3B,EAAA,CAAA,CAAA;;ACHD;;AAEG;;ACCG,SAAU,mBAAmB,CAC/B,IAAO,EACP,QAA2B,EAC3B,SAAgC,EAChC,SAAmB,EAAA;IAEnB,IAAI,CAAC,SAAS,IAAI,SAAS,CAAC,IAAI,CAAC,EAAE;QAC/B,IAAI,QAAQ,GAAe,EAAE,CAAC;AAC9B,QAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,YAAA,QAAQ,GAAG,CAAC,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;SACjC;AACD,QAAA,QAAQ,GAAG,SAAS,GAAG,QAAQ,CAAC,OAAO,EAAE,GAAG,QAAQ,CAAC;AACrD,QAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AACrB,YAAA,mBAAmB,CAAC,KAAU,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;AACzD,SAAC,CAAC,CAAC;KACN;IACD,QAAQ,CAAC,IAAI,CAAC,CAAC;AACnB,CAAC;AAEY,MAAA,kBAAkB,GAAG,CAAC,KAAiB,KAAI;IACpD,OAAO,CAAC,OAAkC,KAAI;AAC1C,QAAA,IAAI,UAAU,CAAC,OAAO,CAAC,OAAO,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,EAAE;AAC3D,YAAA,OAAO,IAAI,CAAC;SACf;aAAM;AACH,YAAA,OAAO,KAAK,CAAC;SAChB;AACL,KAAC,CAAC;AACN;;AC5BO,MAAM,sBAAsB,GAAG,UAAU;AACnC,MAAA,oBAAoB,GAAG,YAAY;AAOnC,MAAA,SAAS,GAAG;AACrB,IAAA,WAAW,CAAC,SAAoB,EAAA;AAC5B,QAAA,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,SAAS,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE;AACzF,YAAA,OAAO,IAAI,CAAC;SACf;aAAM;AACH,YAAA,OAAO,KAAK,CAAC;SAChB;KACJ;;;ACfE,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,QAAwB,KAAI;AACxE,IAAA,OAAO,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,CAAe,EAAE,CAAe,KAAI;QAC3D,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5C,MAAM,KAAK,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;QAC5C,OAAO,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AAC/B,KAAC,CAAC,CAAC;AACP,CAAC;;ACQY,MAAA,eAAe,GAAG;AAC3B,IAAA,KAAK,EAAE,CAAC,MAAuB,EAAE,MAAuB,KAAI;AACxD,QAAA,OAAO,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,IAAI,eAAe,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;KAC3F;AACD,IAAA,MAAM,EAAE,CAAC,MAAuB,EAAE,MAAuB,KAAI;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,KAAK,CAAC;;AAEnH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAC5D,YAAA,OAAO,IAAI,CAAC;SACf;aAAM;AACH,YAAA,OAAO,KAAK,CAAC;SAChB;KACJ;AACD,IAAA,MAAM,EAAE,CAAC,MAAuB,EAAE,MAAuB,KAAI;QACzD,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC;AACvD,QAAA,MAAM,IAAI,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC,MAAM,CAAC;;AAEvH,QAAA,IAAI,IAAI,CAAC,KAAK,CAAC,IAAI,GAAG,IAAI,GAAG,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE;AAC9D,YAAA,OAAO,IAAI,CAAC;SACf;aAAM;AACH,YAAA,OAAO,KAAK,CAAC;SAChB;KACJ;AACD,IAAA,SAAS,CAAC,SAA0B,EAAA;QAChC,OAAO;AACH,YAAA,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAC1B,YAAA,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;SAChD,CAAC;KACvB;AACD,IAAA,yBAAyB,CAAC,KAAY,EAAE,KAAa,EAAE,MAAc,EAAA;AACjE,QAAA,OAAO,eAAe,CAAC,mBAAmB,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,KAAK,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,GAAG,CAAC,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;KAC5G;AACD,IAAA,mBAAmB,CAAC,KAAY,EAAE,KAAa,EAAE,MAAc,EAAA;QAC3D,OAAO;AACH,YAAA,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACX,YAAA,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;YACX,KAAK;YACL,MAAM;SACT,CAAC;KACL;AACD,IAAA,oBAAoB,CAAC,MAAe,EAAA;AAChC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,EAAE,CAAC,EAAE,IAAI,EAAE,CAAC,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,GAAG,IAAI,EAAE,MAAM,EAAE,IAAI,GAAG,IAAI,EAAE,CAAC;AAC3E,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,uBAAuB,CAAC,MAAe,EAAA;AACnC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AACzC,QAAA,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;QACzC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC;QACjC,OAAO;YACH,CAAC,IAAI,EAAE,IAAI,CAAC;YACZ,CAAC,IAAI,EAAE,IAAI,CAAC;YACZ,CAAC,IAAI,EAAE,IAAI,CAAC;YACZ,CAAC,IAAI,EAAE,IAAI,CAAC;SACiB,CAAC;KACrC;AACD,IAAA,mBAAmB,EAAE,CAAC,SAA0B,EAAE,MAAc,KAAI;QAChE,OAAO;AACH,YAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,MAAM;AACvB,YAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,MAAM;AACvB,YAAA,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,MAAM,GAAG,CAAC;AACnC,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,MAAM,GAAG,CAAC;SACxC,CAAC;KACL;AACD,IAAA,OAAO,EAAE,CAAC,SAA0B,EAAE,KAAa,KAAI;AACnD,QAAA,MAAM,IAAI,GAAG,KAAK,GAAG,CAAC,CAAC;QACvB,OAAO;AACH,YAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI;AACrB,YAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI;AACrB,YAAA,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,GAAG,CAAC;AACjC,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,IAAI,GAAG,CAAC;SACtC,CAAC;KACL;AACD,IAAA,OAAO,EAAE,CAAC,SAA0B,EAAE,cAA+B,KAAI;AACrE,QAAA,QACI,SAAS,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;AAChC,YAAA,SAAS,CAAC,CAAC,KAAK,cAAc,CAAC,CAAC;AAChC,YAAA,SAAS,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK;AACxC,YAAA,SAAS,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,EAC5C;KACL;AACD,IAAA,eAAe,EAAE,CAAC,SAA0B,KAAI;QAC5C,OAAO;AACH,YAAA,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;YAC1B,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,CAAC;AAC5C,YAAA,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;YAC/D,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;SAChB,CAAC;KACrC;AACD,IAAA,cAAc,EAAE,CAAC,SAA0B,KAAI;QAC3C,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAU,CAAC;KAC3F;AAED,IAAA,mBAAmB,EAAE,CAAC,SAA0B,KAAI;QAChD,OAAO;AACH,YAAA,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC;AAChD,YAAA,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;AACnE,YAAA,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;AACnE,YAAA,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC;SACpB,CAAC;KACrC;AACD,IAAA,kBAAkB,EAAE,CAAC,SAA0B,EAAE,KAAuB,KAAI;QACxE,OAAO,CAAC,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,CAAC,CAAU,CAAC;KACzG;AACD,IAAA,MAAM,CAAC,SAA0B,EAAE,IAAY,EAAE,GAAA,GAAc,IAAI,EAAE,KAAgB,GAAA,IAAI,EAAE,MAAA,GAAiB,GAAG,EAAA;QAC3G,OAAO;AACH,YAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,IAAI;AACrB,YAAA,CAAC,EAAE,SAAS,CAAC,CAAC,GAAG,GAAG;AACpB,YAAA,KAAK,EAAE,SAAS,CAAC,KAAK,GAAG,IAAI,GAAG,KAAK;AACrC,YAAA,MAAM,EAAE,SAAS,CAAC,MAAM,GAAG,GAAG,GAAG,MAAM;SAC1C,CAAC;KACL;AACD,IAAA,YAAY,CAAC,UAA2B,EAAE,UAA2B,EAAE,YAAqB,EAAA;QACxF,MAAM,IAAI,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC;QACtC,MAAM,IAAI,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAC/C,QAAA,MAAM,KAAK,GAAG,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,EAAE,UAAU,CAAC,IAAI,CAAC,GAAG,UAAU,CAAC,IAAI,CAAC,CAAC,CAAC;AAC7H,QAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C,QAAA,OAAO,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;KACxC;IACD,kBAAkB,CAAC,SAA0B,EAAE,KAAY,EAAA;AACvD,QAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EACd,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;AACjB,QAAA,OAAO,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,IAAI,CAAC,GAAG,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,CAAC;KACxH;AACD,IAAA,oBAAoB,CAAC,UAA6B,EAAA;AAC9C,QAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;AACzB,YAAA,MAAM,IAAI,KAAK,CAAC,mCAAmC,CAAC,CAAC;SACxD;AACD,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,SAAS,CAAC;AAC5B,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpC,QAAA,IAAI,IAAI,GAAG,MAAM,CAAC,iBAAiB,CAAC;AACpC,QAAA,UAAU,CAAC,OAAO,CAAC,IAAI,IAAG;YACtB,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC;AAC9B,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;AAC3C,YAAA,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;AAChD,SAAC,CAAC,CAAC;QACH,OAAO;AACH,YAAA,CAAC,EAAE,IAAI;AACP,YAAA,CAAC,EAAE,IAAI;YACP,KAAK,EAAE,IAAI,GAAG,IAAI;YAClB,MAAM,EAAE,IAAI,GAAG,IAAI;SACtB,CAAC;KACL;;;ICzKO,eAEX;AAFD,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,eAAA,CAAA,GAAA,eAAiC,CAAA;AACrC,CAAC,EAFW,cAAc,KAAd,cAAc,GAEzB,EAAA,CAAA,CAAA;;ACYM,MAAM,yBAAyB,GAAG,CACrC,KAAiB,EACjB,SAAqB,EACrB,QAA4C,MAAM,IAAI,KACtD;AACA,IAAA,MAAM,YAAY,GAAG,SAAS,IAAK,KAAK,CAAC,SAAuB,CAAC;IACjE,MAAM,oBAAoB,GAAmB,EAAE,CAAC;IAChD,IAAI,CAAC,YAAY,EAAE;AACf,QAAA,OAAO,EAAE,CAAC;KACb;IACD,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,YAAY,CAAC,CAAC;IACxD,IAAI,WAAW,EAAE;AACb,QAAA,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,YAAY,CAAC,MAAM,EAAE,KAAK,CAAC,CAAC;QAC3E,IAAI,UAAU,EAAE;YACZ,OAAO,CAAC,UAAU,CAAC,CAAC;SACvB;aAAM;AACH,YAAA,OAAO,EAAE,CAAC;SACb;KACJ;AACD,IAAA,mBAAmB,CACf,KAAK,EACL,IAAI,IAAG;QACH,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,IAAI,EAAE,YAAY,CAAC,EAAE;AACtF,YAAA,oBAAoB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACnC;KACJ,EACD,kBAAkB,CAAC,KAAK,CAAC,EACzB,IAAI,CACP,CAAC;AACF,IAAA,OAAO,oBAAoB,CAAC;AAChC,EAAE;AAEK,MAAM,oBAAoB,GAAG,CAChC,KAAiB,EACjB,KAAY,EACZ,QAA4C,MAAM,IAAI,KAC5B;IAC1B,IAAI,UAAU,GAA6B,SAAS,CAAC;IACrD,IAAI,gBAAgB,GAA6B,SAAS,CAAC;AAC3D,IAAA,mBAAmB,CACf,KAAK,EACL,IAAI,IAAG;QACH,IAAI,UAAU,EAAE;YACZ,OAAO;SACV;AACD,QAAA,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;YAC1C,OAAO;SACV;QACD,IAAI,KAAK,CAAC,KAAK,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YAC1B,UAAU,GAAG,IAAI,CAAC;YAClB,OAAO;SACV;AAED;;;;;;AAMG;AAEH,QAAA,IAAI,CAAC,gBAAgB,IAAI,KAAK,CAAC,aAAa,CAAC,IAAI,EAAE,KAAK,CAAC,EAAE;YACvD,gBAAgB,GAAG,IAAI,CAAC;SAC3B;KACJ,EACD,kBAAkB,CAAC,KAAK,CAAC,EACzB,IAAI,CACP,CAAC;IACF,OAAO,UAAU,IAAI,gBAAgB,CAAC;AAC1C,EAAE;MAEW,sBAAsB,GAAG,CAAC,KAAiB,EAAE,KAAY,KAAI;AACtE,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,MAAM,eAAe,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,sBAAsB,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC9G,IAAA,MAAM,mBAAmB,GAAG,eAAe,IAAI,eAAe,CAAC,kBAAkB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;IAC1G,IAAI,mBAAmB,EAAE;AACrB,QAAA,OAAO,gBAAgB,CAAC;KAC3B;SAAM;AACH,QAAA,OAAO,EAAE,CAAC;KACb;AACL,EAAE;MAEW,qBAAqB,GAAG,CAAC,KAAiB,EAAE,gBAAgC,KAAI;IACzF,MAAM,cAAc,GAAG,YAAY,CAAC,KAAK,EAAE,gBAAgB,CAAC,CAAC;AAC7D,IAAA,yBAAyB,CAAC,GAAG,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC;AACzD,EAAE;AAEW,MAAA,mBAAmB,GAAG,CAAC,KAAiB,KAAI;IACrD,OAAO,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACtD,EAAE;MAEW,kBAAkB,GAAG,CAAC,KAAiB,EAAE,OAAsC,KAAI;IAC5F,IAAI,QAAQ,GAAG,EAAE,CAAC;AAClB,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACxB,QAAA,QAAQ,CAAC,IAAI,CAAC,GAAG,OAAO,CAAC,CAAC;KAC7B;SAAM;AACH,QAAA,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;KAC1B;AACD,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,qBAAqB,CAAC,KAAK,EAAE,CAAC,GAAG,gBAAgB,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC;AACrE,EAAE;AAEK,MAAM,qBAAqB,GAAG,CAAC,KAAiB,EAAE,OAAqB,EAAE,gBAAgB,GAAG,KAAK,KAAI;AACxG,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,IAAI,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;QACpC,MAAM,cAAc,GAAmB,EAAE,CAAC;QAC1C,IAAI,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,IAAI,gBAAgB,EAAE;AAChD,YAAA,mBAAmB,CACf,OAAO,EACP,IAAI,IAAG;AACH,gBAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC9B,aAAC,EACD,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAClC,CAAC;SACL;aAAM;AACH,YAAA,cAAc,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAChC;AACD,QAAA,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,CAAC,KAAK,IAAI,CAAC,cAAc,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,CAAC;AAC9F,QAAA,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;KACrD;AACL,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,KAAiB,KAAI;AACtD,IAAA,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;AACrC,EAAE;MAEW,iBAAiB,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;AAC1E,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,OAAO,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,KAAK,OAAO,CAAC,CAAC;AAC/D,EAAE;AAEW,MAAA,yBAAyB,GAAG,CAAC,KAAwB,KAAI;IAClE,MAAM,cAAc,GAAG,KAAK,CAAC,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAC5E,IAAA,KAAK,CAAC,gBAAgB,CAAoB,cAAc,CAAC,aAAa,EAAE;AACpE,QAAA,gBAAgB,EAAE,IAAI;AACzB,KAAA,CAAC,CAAC;IACH,UAAU,CAAC,MAAK;AACZ,QAAA,KAAK,CAAC,gBAAgB,CAAoB,cAAc,CAAC,aAAa,EAAE,EAAE,GAAG,cAAc,EAAE,CAAC,CAAC;KAClG,EAAE,CAAC,CAAC,CAAC;AACV;;ACzJA;;;;;;AAMG;AAEI,MAAM,SAAS,GAAG,EAAE;AACpB,MAAM,SAAS,GAAG,EAAE;AACpB,MAAM,GAAG,GAAG,EAAE;AACd,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,KAAK,GAAG,GAAG;AACjB,MAAM,KAAK,GAAG,GAAG;AACjB,MAAM,OAAO,GAAG,GAAG;AACnB,MAAM,GAAG,GAAG,GAAG;AACf,MAAM,KAAK,GAAG,GAAG;AACjB,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,MAAM,GAAG,GAAG;AAClB,MAAM,KAAK,GAAG,GAAG;AACjB,MAAM,OAAO,GAAG,GAAG;AACnB,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,GAAG,GAAG,GAAG;AACf,MAAM,IAAI,GAAG,GAAG;AAChB,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,QAAQ,GAAG,GAAG;AACpB,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,SAAS,GAAG,GAAG;AACrB,MAAM,YAAY,GAAG,GAAG;AACxB,MAAM,MAAM,GAAG,GAAG;AAClB,MAAM,MAAM,GAAG,GAAG;AAClB,MAAM,IAAI,GAAG,GAAG;AAChB,MAAM,GAAG,GAAG,GAAG;AACf,MAAM,GAAG,GAAG,GAAG;AACf,MAAM,KAAK,GAAG,GAAG;AACjB,MAAM,IAAI,GAAG,GAAG;AAChB,MAAM,IAAI,GAAG,GAAG;AAChB,MAAM,GAAG,GAAG,GAAG;AACf,MAAM,KAAK,GAAG,GAAG;AACjB,MAAM,KAAK,GAAG,GAAG;AACjB,MAAM,IAAI,GAAG,GAAG;AACV,MAAA,YAAY,GAAG,GAAG;AAClB,MAAA,SAAS,GAAG,GAAG;AACrB,MAAM,aAAa,GAAG,GAAG;AACzB,MAAM,OAAO,GAAG,GAAG;AACnB,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACb,MAAM,CAAC,GAAG,GAAG;AACP,MAAA,IAAI,GAAG,GAAG;AAChB,MAAM,eAAe,GAAG,GAAG;AAC3B,MAAM,gBAAgB,GAAG,GAAG;AAC5B,MAAM,YAAY,GAAG,GAAG;AACxB,MAAM,WAAW,GAAG,GAAG;AACvB,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,UAAU,GAAG,GAAG;AACtB,MAAM,YAAY,GAAG,GAAG;AACxB,MAAM,WAAW,GAAG,IAAI;AACxB,MAAM,WAAW,GAAG,IAAI;AACxB,MAAM,UAAU,GAAG,IAAI;AACvB,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,WAAW,GAAG,IAAI;AACxB,MAAM,eAAe,GAAG,IAAI;AAC5B,MAAM,WAAW,GAAG,IAAI;AACxB,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,aAAa,GAAG,IAAI;AAC1B,MAAM,aAAa,GAAG,IAAI;AAC1B,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,EAAE,GAAG,IAAI;AACf,MAAM,GAAG,GAAG,IAAI;AAChB,MAAM,GAAG,GAAG,IAAI;AAChB,MAAM,GAAG,GAAG,IAAI;AAChB,MAAM,QAAQ,GAAG,IAAI;AACrB,MAAM,WAAW,GAAG,IAAI;AACxB,MAAM,WAAW,GAAG,IAAI;AACxB,MAAM,QAAQ,GAAG,IAAI;AACf,MAAA,IAAI,GAAG,IAAI;AACX,MAAA,WAAW,GAAG,IAAI;AAClB,MAAA,SAAS,GAAG,IAAI;AACtB,MAAM,OAAO,GAAG,IAAI;AACpB,MAAM,cAAc,GAAG,IAAI;AAC3B,MAAM,UAAU,GAAG,IAAI;AACvB,MAAM,YAAY,GAAG,IAAI;AACnB,MAAA,SAAS,GAAG,IAAI;AAChB,MAAA,MAAM,GAAG,IAAI;AACnB,MAAM,KAAK,GAAG,IAAI;AACZ,MAAA,IAAI,GAAG,IAAI;AACjB,MAAM,MAAM,GAAG,IAAI;AACnB,MAAM,KAAK,GAAG,IAAI;AAClB,MAAM,UAAU,GAAG,IAAI;AACvB,MAAM,KAAK,GAAG,IAAI;AAClB,MAAM,mBAAmB,GAAG,IAAI;AAChC,MAAM,SAAS,GAAG,IAAI;AACtB,MAAM,oBAAoB,GAAG,IAAI;AACjC,MAAM,YAAY,GAAG,IAAI;AACzB,MAAM,QAAQ,GAAG;;IC9HZ,kBAKX;AALD,CAAA,UAAY,iBAAiB,EAAA;AACzB,IAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,WAAgB,CAAA;AAChB,IAAA,iBAAA,CAAA,IAAA,CAAA,GAAA,WAAgB,CAAA;AAChB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,aAAoB,CAAA;AACpB,IAAA,iBAAA,CAAA,MAAA,CAAA,GAAA,aAAoB,CAAA;AACxB,CAAC,EALW,iBAAiB,KAAjB,iBAAiB,GAK5B,EAAA,CAAA,CAAA,CAAA;IAEW,YAEX;AAFD,CAAA,UAAY,WAAW,EAAA;AACnB,IAAA,WAAA,CAAA,WAAA,CAAA,GAAA,WAAuB,CAAA;AAC3B,CAAC,EAFW,WAAW,KAAX,WAAW,GAEtB,EAAA,CAAA,CAAA;;ACTM,MAAM,2BAA2B,GAAG,uBAAuB;AAE3D,MAAM,mBAAmB,GAAG,EAAE;AAE9B,MAAM,8BAA8B,GAAG;;ACAvC,MAAM,eAAe,GAAG,wBAAwB;AAEhD,MAAM,wBAAwB,GAAG,qBAAqB;AAEtD,MAAM,gBAAgB,GAAG,GAAG;AAE5B,MAAM,UAAU,GAAG,GAAG;AAEhB,MAAA,cAAc,GAAG;AAC1B,IAAA,IAAI,EAAE,CAAC;AACP,IAAA,KAAK,EAAE,CAAC;AACR,IAAA,SAAS,EAAE,CAAC;IACZ,KAAK,EAAE,CAAC,CAAC;EACF;AAEJ,MAAM,qBAAqB,GAAG,EAAE;AAEhC,MAAM,mBAAmB,GAAG;;ACjB5B,MAAM,EAAE,GAAG,6BAA6B;SAE/B,OAAO,GAAA;IACnB,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,GAAG,CAAC,CAAC;AAC/C,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;SAEe,UAAU,GAAA;IACtB,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAClD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAEe,SAAA,UAAU,CAAC,SAA0B,EAAE,OAAiB,EAAA;IACpE,MAAM,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,SAAS,CAAC,CAAC,CAAE,CAAA,CAAC,CAAC;IACzC,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,SAAS,CAAC,CAAC,CAAE,CAAA,CAAC,CAAC;IACzC,IAAI,CAAC,YAAY,CAAC,OAAO,EAAE,CAAG,EAAA,SAAS,CAAC,KAAK,CAAE,CAAA,CAAC,CAAC;IACjD,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAG,EAAA,SAAS,CAAC,MAAM,CAAE,CAAA,CAAC,CAAC;AACnD,IAAA,KAAK,IAAI,GAAG,IAAI,OAAO,EAAE;QACrB,MAAM,SAAS,GAAG,GAAoB,CAAC;AACvC,QAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAA,EAAG,OAAO,CAAC,SAAS,CAAC,CAAE,CAAA,CAAC,CAAC;KACnD;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;MAEY,gBAAgB,GAAG,CAAC,CAAc,EAAE,KAAyB,KAAI;AAC1E,IAAA,CAAC,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC5C,EAAE;AAEW,MAAA,YAAY,GAAG,CAAC,CAAc,EAAE,WAAkB,EAAE,KAAa,KAAI;AAC9E,IAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,QAAA,CAAC,CAAC,eAAe,CAAC,WAAW,CAAC,CAAC;QAC/B,OAAO;KACV;AACD,IAAA,IAAI,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;AAC7B,IAAA,IAAI,OAAO,GAAG,WAAW,CAAC,CAAC,CAAC,CAAC;IAE7B,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/B,IAAI,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAE/B,IAAA,IAAI,eAAe,GAAG;QAClB,QAAQ;QACR,QAAQ;AACR,QAAA,CAAC,QAAQ;QACT,QAAQ;QACR,OAAO,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,OAAO,GAAG,QAAQ;QAC7C,OAAO,IAAI,CAAC,GAAG,QAAQ,CAAC,GAAG,OAAO,GAAG,QAAQ;KAChD,CAAC;AAEF,IAAA,IAAI,MAAM,GAAG,SAAS,GAAG,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,GAAG,CAAC;IACzD,CAAC,CAAC,YAAY,CAAC,WAAW,EAAE,CAAG,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;AAC7C,EAAE;MAEW,oBAAoB,GAAG,CAAC,CAAc,EAAE,KAAyB,KAAI;IAC9E,CAAC,CAAC,gBAAgB,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;AACtC,QAAA,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC/C,KAAC,CAAC,CAAC;AACP,EAAE;SAEc,UAAU,GAAA;IACtB,OAAO,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;AAChD,CAAC;SAEe,SAAS,GAAA;IACrB,MAAM,GAAG,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;AAChD,IAAA,OAAO,GAAG,CAAC;AACf,CAAC;AAEK,SAAU,UAAU,CAAC,CAAS,EAAE,CAAS,EAAE,IAAY,EAAE,WAAmB,EAAA;IAC9E,IAAI,IAAI,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAChD,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;IAC/B,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;AAC/B,IAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AAChC,IAAA,IAAI,CAAC,WAAW,GAAG,WAAW,CAAC;AAC/B,IAAA,OAAO,IAAI,CAAC;AAChB,CAAC;AAED;;AAEG;AACU,MAAA,YAAY,GAAG,CAAC,KAAU,KAAsB;IACzD,OAAO,SAAS,CAAC,KAAK,CAAC,IAAI,KAAK,CAAC,QAAQ,KAAK,CAAC,CAAC;AACpD,EAAE;AAEF;;AAEG;AACU,MAAA,SAAS,GAAG,CAAC,KAAU,KAAmB;AACnD,IAAA,OAAO,KAAK,YAAY,MAAM,CAAC,IAAI,CAAC;AACxC,EAAE;AAEW,MAAA,wBAAwB,GAAG,CAAC,MAA0B,KAAI;AACnE,IAAA,IAAI,YAAY,CAAC,MAAM,CAAC,EAAE;AACtB,QAAA,IAAI,MAAM,CAAC,OAAO,KAAK,OAAO,IAAI,MAAM,CAAC,OAAO,KAAK,UAAU,EAAE;AAC7D,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEW,MAAA,kBAAkB,GAAG,CAAC,KAAiB,KAAI;AACpD,IAAA,OAAO,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,SAAS,CAAC;AACrD,EAAE;AAEW,MAAA,aAAa,GAAG,CAAC,KAAiB,KAAI;AAC/C,IAAA,OAAO,KAAK,CAAC,MAAM,KAAK,cAAc,CAAC,IAAI,CAAC;AAChD;;ACnGM,SAAU,sBAAsB,CAClC,KAAU,EAAA;AAEV,IAAA,IAAI,KAAK,CAAC,mBAAmB,EAAE;AAC3B,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAEK,SAAU,mBAAmB,CAC/B,KAAU,EAAA;AAEV,IAAA,IAAI,KAAK,CAAC,gBAAgB,EAAE;AACxB,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,KAAK,CAAC;AACjB;;MCpBsB,2BAA2B,CAAA;IAU7C,IACI,OAAO,CAAC,KAAsC,EAAA;AAC9C,QAAA,IAAI,sBAAsB,CAAO,IAAI,CAAC,EAAE;AACpC,YAAA,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,CAAC;SACnC;AACD,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,QAAQ,CAAC;AACtC,QAAA,IAAI,CAAC,QAAQ,GAAG,KAAK,CAAC;AACtB,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC;SAChD;AACD,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;AAClB,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACxB,YAAA,IAAI,mBAAmB,CAAI,IAAI,CAAC,EAAE;AAC9B,gBAAA,IAAI,CAAC,gBAAgB,CAAC,KAAK,EAAE,eAAe,CAAC,CAAC;aACjD;SACJ;aAAM;AACH,YAAA,IAAI,YAAY,CAAC,aAAa,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,EAAE;AACnE,gBAAA,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;AACnB,gBAAA,IAAI,CAAC,KAAK,GAAG,OAAO,EAAE,CAAC;gBACvB,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;aAC7B;iBAAM;AACH,gBAAA,IAAI,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC;aACtB;SACJ;KACJ;AAED,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,QAAQ,CAAC;KACxB;AAED,IAAA,IAAI,OAAO,GAAA;QACP,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC;KAC/C;AAED,IAAA,IAAI,KAAK,GAAA;QACL,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,KAAK,CAAC;KAC7C;AAED,IAAA,IAAI,QAAQ,GAAA;QACR,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC;KAChD;AAED,IAAA,IAAI,MAAM,GAAA;QACN,OAAO,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC;KAC9C;AAED,IAAA,WAAA,CAAsB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QAlD5C,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;KAkD4B;IAEhD,QAAQ,GAAA;AACJ,QAAA,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE;YACnB,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,YAAY,CAAC,CAAS,MAAA,EAAA,IAAI,CAAC,OAAO,CAAC,IAAI,CAAE,CAAA,EAAE,MAAM,CAAC,CAAC;SAC7E;AACD,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;IAED,WAAW,GAAA;QACP,IAAI,oBAAoB,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,KAAK,IAAI,EAAE;AACjD,YAAA,oBAAoB,CAAC,MAAM,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;SAC7C;QACD,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;QAChD,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC;KACnC;8GAvEiB,2BAA2B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA3B,2BAA2B,EAAA,MAAA,EAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAA3B,2BAA2B,EAAA,UAAA,EAAA,CAAA;kBADhD,SAAS;sFAYF,OAAO,EAAA,CAAA;sBADV,KAAK;;AAgEG,MAAA,oBAAoB,GAAG,IAAI,OAAO;;AC9E/C;AACgB,SAAA,8BAA8B,CAAC,CAAS,EAAE,CAAS,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AAC/G,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjB,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAClB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAElB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,IAAA,IAAI,SAAS,KAAK,CAAC,EAAE;;AAEjB,QAAA,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC;KAC3B;IAED,IAAI,EAAE,EAAE,EAAE,CAAC;AACX,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QACX,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;KACX;AAAM,SAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QAClB,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;KACX;SAAM;AACH,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AACpB,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;KACvB;AAED,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;AAClB,IAAA,MAAM,EAAE,GAAG,CAAC,GAAG,EAAE,CAAC;IAClB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAEe,SAAA,qCAAqC,CAAC,KAAY,EAAE,UAA0B,EAAA;IAC1F,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EACd,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EACZ,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrB,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrB,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACrB,EAAE,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1B,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjB,IAAA,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC;AACjB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;AAClB,IAAA,MAAM,CAAC,GAAG,EAAE,GAAG,EAAE,CAAC;IAElB,MAAM,GAAG,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IAC1B,MAAM,SAAS,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChC,IAAA,IAAI,KAAK,GAAG,CAAC,CAAC,CAAC;AACf,IAAA,IAAI,SAAS,KAAK,CAAC,EAAE;;AAEjB,QAAA,KAAK,GAAG,GAAG,GAAG,SAAS,CAAC;KAC3B;IAED,IAAI,EAAE,EAAE,EAAE,CAAC;AACX,IAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QACX,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;KACX;AAAM,SAAA,IAAI,KAAK,GAAG,CAAC,EAAE;QAClB,EAAE,GAAG,EAAE,CAAC;QACR,EAAE,GAAG,EAAE,CAAC;KACX;SAAM;AACH,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;AACpB,QAAA,EAAE,GAAG,EAAE,GAAG,KAAK,GAAG,CAAC,CAAC;KACvB;AAED,IAAA,OAAO,CAAC,EAAE,EAAE,EAAE,CAAU,CAAC;AAC7B,CAAC;AAEe,SAAA,+BAA+B,CAAC,MAAe,EAAE,KAAY,EAAA;AACzE,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,QAAQ,GAAG,QAAQ,CAAC;AACxB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;AAC9B,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;QACpB,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACzB,QAAA,MAAM,eAAe,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrG,QAAA,IAAI,eAAe,GAAG,QAAQ,EAAE;YAC5B,QAAQ,GAAG,eAAe,CAAC;SAC9B;KACJ;AACD,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAEK,SAAU,sCAAsC,CAAC,KAAY,EAAE,MAAe,EAAE,UAAmB,IAAI,EAAA;AACzG,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;IAC1B,IAAI,QAAQ,GAAG,QAAQ,CAAC;IACxB,IAAI,MAAM,GAAU,KAAK,CAAC;AAE1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACpB,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO;YAAE,SAAS;QACxC,MAAM,EAAE,GAAG,CAAC,KAAK,GAAG,GAAG,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACrD,QAAA,MAAM,eAAe,GAAG,8BAA8B,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrG,QAAA,IAAI,eAAe,GAAG,QAAQ,EAAE;YAC5B,QAAQ,GAAG,eAAe,CAAC;YAC3B,MAAM,GAAG,qCAAqC,CAAC,KAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;SAClE;KACJ;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,CAAC;AAEK,SAAU,MAAM,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,KAAa,EAAA;;;;IAIhF,OAAO,CAAC,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,EAAE,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC,CAAC;AAC5I,CAAC;AAEK,SAAU,4BAA4B,CAAC,EAAU,EAAE,EAAU,EAAE,EAAU,EAAE,EAAU,EAAA;AACvF,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;AACnB,IAAA,MAAM,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC;IACnB,OAAO,IAAI,CAAC,KAAK,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;AAC9B,CAAC;AAED;SACgB,gCAAgC,CAAC,CAAS,EAAE,CAAS,EAAE,IAAqB,EAAA;IACxF,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IAC5D,IAAI,EAAE,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;AAC7D,IAAA,OAAO,IAAI,CAAC,IAAI,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,EAAE,CAAC,CAAC;AACxC,CAAC;AAEM,MAAM,aAAa,GAAG,CAAC,CAAQ,EAAE,CAAQ,EAAE,CAAQ,EAAE,CAAQ,KAAa;AAC7E,IAAA,MAAM,YAAY,GAAG,CAAC,EAAS,EAAE,EAAS,KAAK,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,CAAC;IAE7E,MAAM,EAAE,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAE7C,MAAM,EAAE,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7C,MAAM,EAAE,GAAU,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAE7C,IAAA,OAAO,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,GAAG,YAAY,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,CAAC,CAAC;AAChH,EAAE;AAEK,MAAM,sBAAsB,GAAG,CAAC,MAAe,EAAE,SAA0B,EAAE,OAAA,GAAmB,IAAI,KAAI;IAC3G,MAAM,eAAe,GAAG,eAAe,CAAC,eAAe,CAAC,SAAS,CAAC,CAAC;AACnE,IAAA,MAAM,GAAG,GAAG,MAAM,CAAC,MAAM,CAAC;AAC1B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;AAC1B,QAAA,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO;YAAE,SAAS;AACxC,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACrB,QAAA,MAAM,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,GAAG,CAAC,CAAC;AACjC,QAAA,MAAM,KAAK,GACP,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC;AAC7D,YAAA,aAAa,CAAC,EAAE,EAAE,EAAE,EAAE,eAAe,CAAC,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,QAAA,IAAI,KAAK,IAAI,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,IAAI,gBAAgB,CAAC,EAAE,EAAE,eAAe,CAAC,EAAE;AACzF,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;AAED,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEF;MACa,gBAAgB,GAAG,CAAC,KAAY,EAAE,MAAe,KAAI;;;AAI9D,IAAA,MAAM,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,EACd,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;IAEjB,IAAI,MAAM,GAAG,KAAK,CAAC;IACnB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,GAAG,CAAC,EAAE,EAAE;AAC/D,QAAA,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AACtB,QAAA,IAAI,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EACjB,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAEtB,QAAA,IAAI,SAAS,GAAG,EAAE,GAAG,CAAC,IAAI,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,EAAE,CAAC;AAChF,QAAA,IAAI,SAAS;YAAE,MAAM,GAAG,CAAC,MAAM,CAAC;KACnC;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEW,MAAA,gBAAgB,GAAG,CAAC,KAAY,EAAE,MAAa,EAAE,EAAU,EAAE,EAAU,EAAE,KAAK,GAAG,CAAC,KAAI;IAC/F,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACjC,IAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;AACjF,IAAA,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,IAAI,QAAQ,CAAC;IAEjF,OAAO,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,IAAI,CAAC,CAAC;AAC9D,EAAE;AAEK,MAAM,uBAAuB,GAAG,CAAC,KAAY,EAAE,SAA0B,EAAE,MAAc,EAAE,KAAK,GAAG,CAAC,KAAI;AAC3G,IAAA,MAAM,EAAE,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,SAAS,CAAC;AACxD,IAAA,MAAM,aAAa,GAAG,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC;AACxH,IAAA,MAAM,aAAa,GACf,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;AACjB,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM;AAC1B,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;AACjB,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM;QAC1B,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;AAClF,IAAA,MAAM,gBAAgB,GAClB,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;AACjB,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM;AAC1B,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM;QAC1B,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;IAC3F,MAAM,cAAc,GAChB,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,MAAM;AAClC,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK;AACzB,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK;AACjB,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;IAC1F,MAAM,iBAAiB,GACnB,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,MAAM;AAClC,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK;QACzB,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM;AACnC,QAAA,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM;AAC1B,QAAA,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,KAAK,GAAG,MAAM,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,IAAI,KAAK,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,MAAM,CAAC;IACnG,MAAM,UAAU,GAAG,aAAa,IAAI,gBAAgB,IAAI,cAAc,IAAI,iBAAiB,CAAC;AAE5F,IAAA,OAAO,aAAa,IAAI,CAAC,UAAU,CAAC;AACxC,EAAE;AAEF;AACO,MAAM,iBAAiB,GAAG,UAAS,MAAe,EAAA;IACrD,MAAM,KAAK,GAAG,GAAG,CAAC;IAClB,IAAI,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,CAAC;IACrD,IAAI,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,EAAE,MAAM,CAAC;IACtD,MAAM,MAAM,GAAY,EAAE,CAAC;AAC3B,IAAA,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAClE,IAAA,IAAI,MAAM,GAAG,MAAM,CAAC,MAAM,CAAC;AAC3B,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,GAAG,CAAC,EAAE,CAAC,EAAE,EAAE;QACjC,EAAE,GAAG,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACxC,QAAA,EAAE,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;AACf,QAAA,EAAE,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC;AACnB,QAAA,EAAE,GAAG,CAAC,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,CAAC;AAEzC,QAAA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,QAAA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;AACxE,QAAA,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;;;;;;;;QAUxE,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QAClC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;QAClC,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;QAC7B,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,GAAG,KAAK,CAAC,CAAC;AAElC,QAAA,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;AAChD,QAAA,CAAC,GAAG,CAAC,GAAG,OAAO,GAAG,CAAC,GAAG,MAAM,GAAG,MAAM,GAAG,OAAO,CAAC;QAChD,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACb;QACD,CAAC,GAAG,CAAC,GAAG,MAAM,IAAI,MAAM,GAAG,MAAM,CAAC,CAAC;AACnC,QAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,YAAA,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;SACb;QAED,GAAG,GAAG,CAAC,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QACnH,GAAG,GAAG,CAAC,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,GAAG,OAAO,GAAG,EAAE,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;AAEjH,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAC5B,GAAG,GAAG,EAAE,CAAC;SACZ;AACD,QAAA,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE;YAC5B,GAAG,GAAG,EAAE,CAAC;SACZ;QAED,MAAM,CAAC,IAAI,CAAC,GAAY,EAAE,GAAY,EAAE,EAAW,CAAC,CAAC;KACxD;AAED,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEF;;;AAGG;AACG,SAAU,sBAAsB,CAAC,CAAS,EAAE,CAAS,EAAE,CAAS,EAAE,CAAS,EAAA;IAC7E,IAAI,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;AACnB,QAAA,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,QAAQ,GAAG,QAAQ,CAAC;KACvC;AACD,IAAA,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC;AACrC,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;AAED;;AAEG;SACa,0BAA0B,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAA;AAC1E,IAAA,IAAI,KAAK,KAAK,QAAQ,EAAE;AACpB,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAC,CAAU,CAAC;KAC3B;AAAM,SAAA,IAAI,KAAK,KAAK,CAAC,QAAQ,EAAE;AAC5B,QAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAU,CAAC;KAC1B;IACD,IAAI,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,KAAK,CAAU,CAAC;AAClC,IAAA,IAAI,CAAC,GAAG,CAAC,EAAE;AACP,QAAA,MAAM,GAAG,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;KACrC;AACD,IAAA,OAAO,MAAe,CAAC;AAC3B,CAAC;AAED;;AAEG;AACG,SAAU,cAAc,CAAC,CAAS,EAAA;AACpC,IAAA,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAEK,SAAU,OAAO,CAAC,CAAS,EAAA;AAC7B,IAAA,OAAO,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACzB,CAAC;AAED;;;;;;AAMG;AACG,SAAU,aAAa,CAAC,CAAS,EAAE,CAAS,EAAE,SAAS,GAAG,QAAQ,EAAA;IACpE,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,SAAS,CAAC;AACxC;;SC1TgB,cAAc,CAAC,KAAiB,EAAE,CAAS,EAAE,CAAS,EAAA;IAClE,MAAM,iBAAiB,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC9D,IAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,qBAAqB,EAAE,CAAC;IACjE,MAAM,SAAS,GAAG,gCAAgC,CAAC,CAAC,EAAE,CAAC,EAAE,cAAc,CAAC,CAAC;IACzE,OAAO,SAAS,KAAK,CAAC,CAAC;AAC3B,CAAC;AAEK,SAAU,qBAAqB,CAAC,KAAiB,EAAA;AACnD,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACxC,IAAI,cAAc,GAAG,CAAC,CAAC;IACvB,IAAI,CAAC,aAAa,EAAE;QAChB,MAAM,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;QACjE,cAAc,GAAG,iBAAiB,CAAC,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC;KAClF;AACD,IAAA,OAAO,cAAc,CAAC;AAC1B;;ACzBM,SAAU,mBAAmB,CAAC,CAAS,EAAE,CAAS,EAAE,KAAa,EAAE,MAAc,EAAA;IACnF,IAAI,gBAAgB,GAAG,QAAQ,CAAC,eAAe,CAAC,EAAE,EAAE,eAAe,CAAC,CAAC;IACrE,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;IAC3C,gBAAgB,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;IAC3C,gBAAgB,CAAC,YAAY,CAAC,OAAO,EAAE,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;IACnD,gBAAgB,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAG,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;AACrD,IAAA,OAAO,gBAAgB,CAAC;AAC5B,CAAC;AAEK,SAAU,mBAAmB,CAAC,MAA6C,EAAE,KAAa,EAAE,MAAc,EAAE,CAAS,EAAE,CAAS,EAAA;AAClI,IAAA,MAAM,aAAa,GAAG,MAAM,YAAY,uBAAuB,GAAG,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IACjH,IAAI,aAAa,EAAE;QACf,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;QAChD,aAAa,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAG,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;QAClD,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;QACxC,aAAa,CAAC,YAAY,CAAC,GAAG,EAAE,CAAG,EAAA,CAAC,CAAE,CAAA,CAAC,CAAC;KAC3C;AACL,CAAC;AAEe,SAAA,wBAAwB,CAAC,MAA6C,EAAE,KAAa,EAAA;AACjG,IAAA,MAAM,aAAa,GAAG,MAAM,YAAY,uBAAuB,GAAG,MAAM,GAAG,MAAM,CAAC,aAAa,CAAC,eAAe,CAAC,CAAC;IACjH,IAAI,aAAa,EAAE;QACf,aAAa,CAAC,YAAY,CAAC,OAAO,EAAE,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;KACnD;AACL;;AC1Ba,MAAA,MAAM,GAAG,OAAO,MAAM,IAAI,WAAW,IAAI,sBAAsB,CAAC,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,QAAQ;;ACA9F,MAAA,MAAM,GACf,OAAO,SAAS,KAAK,WAAW;IAChC,OAAO,MAAM,KAAK,WAAW;AAC7B,IAAA,kBAAkB,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,CAAC;IAC5C,CAAE,MAAc,CAAC,SAAS;AAEjB,MAAA,QAAQ,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAEpF,MAAA,UAAU,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,kCAAkC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAE9G,MAAA,SAAS,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,0BAA0B,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAElH;AACa,MAAA,cAAc,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,mCAAmC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAEnH,MAAA,SAAS,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,SAAS,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS,EAAE;AAEjG;AACa,MAAA,gBAAgB,GAAG,OAAO,SAAS,KAAK,WAAW,IAAI,qCAAqC,CAAC,IAAI,CAAC,SAAS,CAAC,SAAS;;AClB5H,SAAU,iBAAiB,CAAC,KAAU,EAAA;AACxC,IAAA,OAAO,KAAK,KAAK,IAAI,IAAI,KAAK,KAAK,SAAS,CAAC;AACjD,CAAC;AAED;;;;AAIG;AACG,SAAU,cAAc,CAAC,KAAe,EAAA;AAC1C,IAAA,OAAO,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC;AACvB,UAAE;AACI,YAAA,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACX,YAAA,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC;AACd,SAAA;UACD,KAAK,CAAC;AAChB,CAAC;MAEY,SAAS,GAAG,CAAC,GAAW,EAAE,OAAe,KAAI;AACtD,IAAA,OAAO,GAAG,GAAG,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC;AACxD,EAAE;AAEI,SAAU,aAAa,CAAC,KAAiB,EAAA;AAC3C,IAAA,OAAO,KAAK,CAAC,MAAM,KAAK,CAAC,CAAC;AAC9B;;ACtBA;;AAEG;MAEU,WAAW,GAAG,CAAC,EAAkB,EAAE,IAAgC,KAAa;AACzF,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,IAAI,EAAE,CAAC,IAAI,KAAK,IAAI,EAAE,IAAI,EAAE;AACtD,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEF;;AAEG;MAEU,UAAU,GAAG,CAAC,EAAkB,EAAE,IAAgC,KAAa;AACxF,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,EAAE;AAC3D,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEF;;AAEG;AAEU,MAAA,WAAW,GAAG,CAAC,EAAkB,KAAa;AACvD,IAAA,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,EAAE;AAC7B,QAAA,OAAO,KAAK,CAAC;KAChB;AAED,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEW,MAAA,iBAAiB,GAAG;AAC7B;;AAEG;AACH,IAAA,QAAQ,CAAC,KAAiB,EAAA;AACtB,QAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC5B;AAED;;AAEG;AAEH,IAAA,SAAS,CAAC,KAAiB,EAAA;AACvB,QAAA,OAAO,OAAO,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KAC7B;AAED;;;AAGG;IAEH,cAAc,CAAC,KAAiB,EAAE,EAAc,EAAA;QAC5C,MAAM,IAAI,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1B,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC5B;AACD;;;AAGG;IAEH,aAAa,CAAC,KAAiB,EAAE,EAAc,EAAA;QAC3C,MAAM,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/C,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACzB,QAAA,EAAE,EAAE,CAAC;AACL,QAAA,MAAM,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;KAC3B;;;ACvEL;;AAEG;AAEH,MAAM,OAAO,GAAQ;AACjB,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,OAAO,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,CAAC;IAC9D,KAAK,EAAE,CAAC,MAAM,EAAE,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;IACtC,WAAW,EAAE,CAAC,YAAY,EAAE,YAAY,EAAE,aAAa,EAAE,UAAU,CAAC;AACpE,IAAA,YAAY,EAAE,MAAM;AACpB,IAAA,WAAW,EAAE,OAAO;AACpB,IAAA,MAAM,EAAE,IAAI;AACZ,IAAA,QAAQ,EAAE,MAAM;AAChB,IAAA,gBAAgB,EAAE,WAAW;AAC7B,IAAA,eAAe,EAAE,YAAY;AAC7B,IAAA,cAAc,EAAE,kBAAkB;AAClC,IAAA,aAAa,EAAE,eAAe;AAC9B,IAAA,cAAc,EAAE,YAAY;AAC5B,IAAA,aAAa,EAAE,aAAa;AAC5B,IAAA,QAAQ,EAAE,UAAU;AACpB,IAAA,UAAU,EAAE,YAAY;AACxB,IAAA,MAAM,EAAE,OAAO;AACf,IAAA,UAAU,EAAE,cAAc;AAC1B,IAAA,IAAI,EAAE,OAAO;AACb,IAAA,KAAK,EAAE,OAAO;CACjB,CAAC;AAEF,MAAM,aAAa,GAAQ;AACvB,IAAA,gBAAgB,EAAE,QAAQ;AAC1B,IAAA,eAAe,EAAE,UAAU;AAC3B,IAAA,gBAAgB,EAAE,UAAU;AAC5B,IAAA,eAAe,EAAE,WAAW;AAC5B,IAAA,cAAc,EAAE,CAAC,gBAAgB,EAAE,QAAQ,CAAC;AAC5C,IAAA,aAAa,EAAE,CAAC,aAAa,EAAE,QAAQ,CAAC;AACxC,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,iBAAiB,EAAE,CAAC,mBAAmB,EAAE,QAAQ,CAAC;AAClD,IAAA,kBAAkB,EAAE,sBAAsB;AAC1C,IAAA,iBAAiB,EAAE,mBAAmB;AACtC,IAAA,kBAAkB,EAAE,cAAc;AAClC,IAAA,iBAAiB,EAAE,gBAAgB;AACnC,IAAA,IAAI,EAAE,aAAa;AACnB,IAAA,kBAAkB,EAAE,QAAQ;CAC/B,CAAC;AAEF,MAAM,eAAe,GAAQ;AACzB,IAAA,kBAAkB,EAAE,uBAAuB;AAC3C,IAAA,iBAAiB,EAAE,oBAAoB;AACvC,IAAA,IAAI,EAAE,CAAC,QAAQ,EAAE,cAAc,CAAC;CACnC,CAAC;AAEF;;AAEG;AAEH,MAAM,MAAM,GAAG,CAAC,GAAW,KAAI;AAC3B,IAAA,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC;AAC7B,IAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AACjC,IAAA,MAAM,OAAO,GAAG,eAAe,CAAC,GAAG,CAAC,CAAC;IACrC,MAAM,SAAS,GAAG,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAClD,MAAM,OAAO,GAAG,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,OAAO,IAAI,WAAW,CAAC,OAAO,CAAC,CAAC;IAElD,OAAO,CAAC,KAAoB,KAAI;AAC5B,QAAA,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AAC/B,YAAA,OAAO,IAAI,CAAC;SACf;QACD,IAAI,QAAQ,IAAI,OAAO,IAAI,OAAO,CAAC,KAAK,CAAC,EAAE;AACvC,YAAA,OAAO,IAAI,CAAC;SACf;QACD,IAAI,CAAC,QAAQ,IAAI,SAAS,IAAI,SAAS,CAAC,KAAK,CAAC,EAAE;AAC5C,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,OAAO,KAAK,CAAC;AACjB,KAAC,CAAC;AACN,CAAC,CAAC;AAEF;;AAEG;AAEH,MAAM,OAAO,GAAG;AACZ,IAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;AACtB,IAAA,SAAS,EAAE,MAAM,CAAC,SAAS,CAAC;AAC5B,IAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;AACxB,IAAA,cAAc,EAAE,MAAM,CAAC,cAAc,CAAC;AACtC,IAAA,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;AACpC,IAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAC1B,IAAA,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;AAC9B,IAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;AAC1C,IAAA,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;AACxC,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC;AAChD,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC;AAChD,IAAA,gBAAgB,EAAE,MAAM,CAAC,gBAAgB,CAAC;AAC1C,IAAA,eAAe,EAAE,MAAM,CAAC,eAAe,CAAC;AACxC,IAAA,UAAU,EAAE,MAAM,CAAC,UAAU,CAAC;AAC9B,IAAA,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;AAClC,IAAA,aAAa,EAAE,MAAM,CAAC,aAAa,CAAC;AACpC,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,mBAAmB,EAAE,MAAM,CAAC,mBAAmB,CAAC;AAChD,IAAA,QAAQ,EAAE,MAAM,CAAC,QAAQ,CAAC;AAC1B,IAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC;AAC9C,IAAA,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC;AAC5C,IAAA,kBAAkB,EAAE,MAAM,CAAC,kBAAkB,CAAC;AAC9C,IAAA,iBAAiB,EAAE,MAAM,CAAC,iBAAiB,CAAC;AAC5C,IAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;AACtB,IAAA,YAAY,EAAE,MAAM,CAAC,YAAY,CAAC;AAClC,IAAA,oBAAoB,EAAE,MAAM,CAAC,oBAAoB,CAAC;AAClD,IAAA,MAAM,EAAE,MAAM,CAAC,MAAM,CAAC;AACtB,IAAA,OAAO,EAAE,MAAM,CAAC,OAAO,CAAC;;;ACjHZ,SAAA,SAAS,CAAC,MAAM,GAAG,CAAC,EAAA;;AAEhC,IAAA,MAAM,MAAM,GAAG,2CAA2C,CAAC;AAC3D,IAAA,MAAM,WAAW,GAAG,MAAM,CAAC,MAAM,CAAC;IAClC,IAAI,GAAG,GAAG,EAAE,CAAC;AACb,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,EAAE,CAAC,EAAE,EAAE;AAC7B,QAAA,GAAG,IAAI,MAAM,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,WAAW,CAAC,CAAC,CAAC;KACjE;AACD,IAAA,OAAO,GAAG,CAAC;AACf;;ACFA;;AAEG;SACa,kBAAkB,CAC9B,EAAY,EACZ,EAAU,EACV,EAAU,EACV,EAAU,EACV,EAAU,EACV,OAAgB,EAChB,OAAO,GAAG,KAAK,EACf,YAAqB,EAAA;IAErB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;IAChC,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,EAAE,GAAG,EAAE,CAAC,CAAC;AAEjC,IAAA,IAAI,MAAM,GAAG,YAAY,IAAI,CAAC,CAAC;AAC/B,IAAA,IAAI,MAAM,KAAK,CAAC,EAAE;AACd,QAAA,MAAM,aAAa,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,GAAG,CAAC,CAAC;QAClD,IAAI,MAAM,GAAG,aAAa,CAAC;AAC3B,QAAA,IAAI,aAAa,GAAG,UAAU,EAAE;AAC5B,YAAA,MAAM,GAAG,OAAO,GAAG,UAAU,GAAG,CAAC,GAAG,UAAU,CAAC;SAClD;KACJ;IAED,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,EAAE,GAAG,MAAM,EAAE,EAAE,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;IACjC,MAAM,MAAM,GAAG,CAAC,EAAE,EAAE,EAAE,GAAG,MAAM,CAAC,CAAC;IAEjC,OAAO,EAAE,CAAC,IAAI,CACV,IAAI,MAAM,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAM,GAAA,EAAA,MAAM,CAAI,CAAA,EAAA,MAAM,cAAc,MAAM,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAA,CAAA,EAAI,MAAM,CAAA,WAAA,EAAc,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,MAAM,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,MAAM,CAAA,CAAA,EAAI,MAAM,CAAc,WAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAA,GAAA,EAAM,MAAM,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,CAAC,CAAM,GAAA,EAAA,MAAM,CAAI,CAAA,EAAA,MAAM,CAAc,WAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAI,EAAA,CAAA,EAC1V,OAAO,CACV,CAAC;AACN,CAAC;AAEY,MAAA,aAAa,GAAG,CAAC,KAAiB,EAAE,SAA0B,EAAE,OAAgB,KAAI;IAC7F,MAAM,QAAQ,GAAG,UAAU,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;IAC/C,MAAM,UAAU,GAAG,QAAQ,CAAC,SAAS,CAAC,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,EAAE,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;AAC5G,IAAA,gBAAgB,CAAC,UAAU,EAAE,OAAO,CAAC,CAAC;AACtC,IAAA,OAAO,UAAU,CAAC;AACtB;;AC/CM,SAAU,WAAW,CAAC,KAAY,EAAE,GAAU,EAAE,MAAM,GAAG,EAAE,EAAA;AAC7D,IAAA,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1C,IAAA,MAAM,MAAM,GAAG,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC;AAC3C,IAAA,IAAI,UAAU,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAC3C,IAAA,MAAM,cAAc,GAAG,UAAU,GAAG,CAAC,CAAC;IACtC,MAAM,WAAW,GAAG,CAAC,cAAc,GAAG,UAAU,IAAI,KAAK,CAAC;IAC1D,MAAM,YAAY,GAAG,CAAC,cAAc,GAAG,UAAU,IAAI,MAAM,CAAC;AAC5D,IAAA,MAAM,WAAW,GAAG;QAChB,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,WAAW;QAC/D,GAAG,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY,GAAG,GAAG,CAAC,CAAC,CAAC,GAAG,YAAY;KACpE,CAAC;AACF,IAAA,MAAM,UAAU,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,CAAU,CAAC;AAC7G,IAAA,MAAM,SAAS,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,MAAM,GAAG,IAAI,CAAC,EAAE,IAAI,GAAG,CAAU,CAAC;AAC7G,IAAA,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,CAAC;AACrC,CAAC;SAEe,SAAS,CAAC,EAAY,EAAE,KAAY,EAAE,GAAU,EAAE,OAAgB,EAAE,mBAAmB,GAAG,EAAE,EAAE,MAAM,GAAG,EAAE,EAAA;AACrH,IAAA,MAAM,EAAE,SAAS,EAAE,UAAU,EAAE,GAAG,WAAW,CAAC,KAAK,EAAE,GAAG,EAAE,MAAM,CAAC,CAAC;AAClE,IAAA,MAAM,aAAa,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,SAAS,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAC/D,IAAA,MAAM,cAAc,GAAG,EAAE,CAAC,UAAU,CAAC,CAAC,UAAU,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AACjE,IAAA,OAAO,CAAC,aAAa,EAAE,cAAc,CAAC,CAAC;AAC3C;;ACtBM,SAAU,UAAU,CAAC,QAAkB,EAAE,KAAY,EAAE,QAAgB,EAAE,OAAgB,EAAA;AAC3F,IAAA,OAAO,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;AAClE;;ACDM,SAAU,QAAQ,CAAC,EAAY,EAAE,KAAY,EAAE,GAAU,EAAE,OAAgB,EAAA;AAC7E,IAAA,OAAO,EAAE,CAAC,UAAU,CAAC,CAAC,KAAK,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC;SAEe,cAAc,CAAC,MAAe,EAAE,OAAiB,EAAE,SAAmB,EAAA;AAClF,IAAA,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;AACpB,IAAA,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,IAAI,YAAY,GAAG,EAAE,CAAC;IACtB,MAAM,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAK,KAAI;AAC5B,QAAA,IAAI,KAAK,KAAK,CAAC,EAAE;AACb,YAAA,YAAY,IAAI,CAAA,EAAA,EAAK,KAAK,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;SAChD;aAAM;AACH,YAAA,YAAY,IAAI,CAAA,EAAA,EAAK,KAAK,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,KAAK,CAAC,CAAC,CAAC,CAAA,CAAA,CAAG,CAAC;SAChD;AACL,KAAC,CAAC,CAAC;IAEH,IAAI,SAAS,EAAE;QACX,YAAY,IAAI,GAAG,CAAC;KACvB;AAED,IAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAG,EAAA,OAAO,EAAE,MAAM,CAAE,CAAA,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAG,EAAA,OAAO,EAAE,WAAW,CAAE,CAAA,CAAC,CAAC;AAC7D,IAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA,EAAG,OAAO,EAAE,IAAI,IAAI,MAAM,CAAA,CAAE,CAAC,CAAC;AACxD,IAAA,OAAO,EAAE,cAAc,IAAI,IAAI,CAAC,YAAY,CAAC,kBAAkB,EAAE,GAAG,OAAO,CAAC,cAAc,CAAA,CAAE,CAAC,CAAC;AAC9F,IAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAEpB,IAAA,OAAO,CAAC,CAAC;AACb,CAAC;AAEe,SAAA,cAAc,CAAC,MAAe,EAAE,OAAiB,EAAA;AAC7D,IAAA,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;AACpB,IAAA,MAAM,IAAI,GAAG,UAAU,EAAE,CAAC;IAE1B,IAAI,YAAY,GAAG,EAAE,CAAC;AACtB,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE;AAC3C,QAAA,IAAI,CAAC,KAAK,CAAC,EAAE;AACT,YAAA,YAAY,IAAI,CAAK,EAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC;SACxD;aAAM;AACH,YAAA,YAAY,IAAI,CAAA,EAAA,EAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,CAAA,EAAI,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA,EAAA,EAAK,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAI,CAAA,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAK,EAAA,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CACnH,CAAA,EAAA,MAAM,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CACnB,EAAE,CAAC;SACN;KACJ;AAED,IAAA,IAAI,CAAC,YAAY,CAAC,GAAG,EAAE,YAAY,CAAC,CAAC;IACrC,IAAI,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAG,EAAA,OAAO,EAAE,MAAM,CAAE,CAAA,CAAC,CAAC;IAClD,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAG,EAAA,OAAO,EAAE,WAAW,CAAE,CAAA,CAAC,CAAC;AAC7D,IAAA,IAAI,CAAC,YAAY,CAAC,MAAM,EAAE,CAAA,IAAA,CAAM,CAAC,CAAC;AAClC,IAAA,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC;AAEpB,IAAA,OAAO,CAAC,CAAC;AACb;;AC1DO,MAAM,SAAS,GAAG,GAAG,CAAC;AACtB,MAAM,QAAQ,GAAG,GAAG,CAAC;AACrB,MAAM,QAAQ,GAAG,CAAC;;ACET,SAAA,WAAW,CAAC,KAAiB,EAAE,QAAkB,EAAA;AAC7D,IAAA,MAAM,SAAS,GAAyB,EAAE,IAAI,EAAE,cAAc,EAAE,UAAU,EAAE,KAAK,CAAC,QAAQ,EAAE,aAAa,EAAE,QAAQ,EAAE,CAAC;AACtH,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAMM,MAAMA,oBAAkB,GAAuB;IAClD,WAAW;CACd;;ACXe,SAAA,QAAQ,CAAC,KAAiB,EAAE,cAA0B,EAAA;AAClE,IAAA,MAAM,SAAS,GAAsB,EAAE,IAAI,EAAE,WAAW,EAAE,UAAU,EAAE,KAAK,CAAC,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,CAAC;AACnH,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAMM,MAAM,kBAAkB,GAAoB;IAC/C,QAAQ;CACX;;ACKD,SAAS,cAAc,CAAC,KAAiB,EAAE,WAAkB,EAAE,IAAa,EAAA;IACxE,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACnC,WAAW,CAAC,KAAK,EAAE;QACf,GAAG,KAAK,CAAC,QAAQ;QACjB,IAAI;QACJ,WAAW;AACd,KAAA,CAAC,CAAC;IACH,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACpC,CAAC;AAED,MAAM,iBAAiB,GAAG,CAAsC,KAAiB,EAAE,OAAU,KAAI;AAC7F,IAAA,IAAI,KAAK,CAAC,OAAO,KAAK,OAAO;QAAE,OAAO;AACtC,IAAA,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;IACxB,MAAM,cAAc,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACrD,cAAc,EAAE,YAAY,EAAE,CAAC;AACnC,CAAC,CAAC;AAEF,SAAS,UAAU,CAAC,KAAiB,EAAE,OAAe,EAAE,QAAQ,GAAG,IAAI,EAAA;AACnE,IAAA,OAAO,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC;IAElC,MAAM,WAAW,GAAG,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAC5D,MAAM,aAAa,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC1D,IAAA,MAAM,iBAAiB,GAAG,aAAa,CAAC,qBAAqB,EAAE,CAAC;IAChE,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;AACvF,IAAA,IAAI,UAAU,GAAG,CAAC,kBAAkB,CAAC,KAAK,GAAG,CAAC,EAAE,kBAAkB,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;IAE/E,IAAI,CAAC,QAAQ,IAAI,WAAW,IAAI,gCAAgC,CAAC,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,iBAAiB,CAAC,KAAK,CAAC,EAAE;QACvH,UAAU,GAAG,CAAC,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,GAAG,iBAAiB,CAAC,CAAC,CAAC,CAAC;KAC7F;AAED,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;AACjC,IAAA,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;AAClD,IAAA,MAAM,OAAO,GAAG,WAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;AACvD,IAAA,MAAM,OAAO,GAAG,WAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC;IACvD,MAAM,cAAc,GAAG,CAAC,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,OAAO,GAAG,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAU,CAAC;AACvG,IAAA,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,WAAW,CAAC,KAAiB,EAAA;AAClC,IAAA,IAAI,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,kBAAkB,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;AACvF,IAAA,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC3E,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjC,MAAM,cAAc,GAAG,EAAE,CAAC;IAC1B,MAAM,aAAa,GAAG,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAG,cAAc,CAAC;IACpE,MAAM,cAAc,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,cAAc,CAAC;IAEtE,IAAI,OAAO,GAAG,IAAI,CAAC;AACnB,IAAA,IAAI,aAAa,GAAG,cAAc,CAAC,KAAK,IAAI,cAAc,GAAG,cAAc,CAAC,MAAM,EAAE;AAChF,QAAA,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,aAAa,GAAG,cAAc,CAAC,KAAK,EAAE,cAAc,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;KACpG;SAAM;QACH,OAAO,GAAG,CAAC,CAAC;KACf;AAED,IAAA,MAAM,WAAW,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;AACjD,IAAA,MAAM,cAAc,GAAG;AACnB,QAAA,WAAW,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,KAAK,GAAG,CAAC,GAAG,OAAO,GAAG,cAAc,GAAG,CAAC,GAAG,IAAI;AACnF,QAAA,WAAW,CAAC,CAAC,CAAC,GAAG,kBAAkB,CAAC,MAAM,GAAG,CAAC,GAAG,OAAO,GAAG,cAAc,GAAG,CAAC,GAAG,IAAI;KAC9E,CAAC;AACX,IAAA,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED,SAAS,gBAAgB,CAAC,KAAiB,EAAE,OAA2B,EAAA;AACpE,IAAA,IAAI,cAAc,GAAG,qBAAqB,CAAC,KAAK,CAAC,CAAC;IAElD,MAAM,cAAc,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC3D,IAAA,MAAM,uBAAuB,GAAG,cAAc,CAAC,qBAAqB,EAAE,CAAC;IAEvE,IAAI,UAAU,GAAG,CAAC,CAAC;AACnB,IAAA,IAAI,OAAO,CAAC,QAAQ,EAAE;AAClB,QAAA,UAAU,GAAG,OAAO,CAAC,QAAQ,CAAC;KACjC;SAAM;AACH,QAAA,UAAU,GAAG,uBAAuB,CAAC,KAAK,CAAC;KAC9C;AAED,IAAA,MAAM,cAAc,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC3E,MAAM,YAAY,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;IAC7D,IAAI,OAAO,GAAG,CAAC,CAAC;AAChB,IAAA,IAAI,YAAY,GAAG,cAAc,CAAC,KAAK,EAAE;QACrC,OAAO,GAAG,IAAI,CAAC,GAAG,CAAC,YAAY,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;KAC3D;SAAM;QACH,OAAO,GAAG,CAAC,CAAC;KACf;AAED,IAAA,IAAI,WAAW,GAAG,cAAc,CAAC,MAAM,GAAG,OAAO,GAAG,CAAC,GAAG,OAAO,CAAC,cAAc,CAAC;AAC/E,IAAA,IAAI,WAAW,GAAG,OAAO,CAAC,WAAW,EAAE;AACnC,QAAA,MAAM,WAAW,GAAG,cAAc,CAAC,OAAO,CAAC,CAAI,CAAA,EAAA,OAAO,CAAC,cAAc,CAAE,CAAA,CAAgB,CAAC;QACxF,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,WAAW,IAAI,CAAC;QAC9C,2BAA2B,CAAC,KAAK,CAAC,CAAC;KACtC;SAAM;AACH,QAAA,WAAW,GAAG,OAAO,CAAC,WAAW,CAAC;KACrC;IAED,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,CAAC;IAC5D,MAAM,OAAO,GAAG,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AAC7D,IAAA,MAAM,cAAc,GAAG;QACnB,OAAO,GAAG,UAAU,GAAG,CAAC,GAAG,OAAO,GAAG,cAAc,GAAG,CAAC,GAAG,OAAO;QACjE,OAAO,GAAG,WAAW,GAAG,CAAC,GAAG,OAAO,GAAG,cAAc,GAAG,CAAC,GAAG,OAAO;KAC5D,CAAC;AACX,IAAA,cAAc,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,CAAC,CAAC;AACnD,CAAC;AAED;;;AAGG;AACH,SAAS,gBAAgB,CAAC,KAAiB,EAAE,IAAoB,EAAA;IAC7D,IAAI,GAAG,IAAI,IAAI,KAAK,CAAC,KAAK,CAAC,cAAc,CAAC;IAC1C,QAAQ,CAAC,KAAK,EAAE,EAAE,cAAc,EAAE,IAAI,EAAE,CAAC,CAAC;AAE1C,IAAA,mBAAmB,CAAE,KAAiC,EAAE,OAAO,IAAG;AAC9D,QAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;AAC9B,KAAC,CAAC,CAAC;AACP,CAAC;AAEY,MAAA,eAAe,GAAG;IAC3B,iBAAiB;IACjB,cAAc;IACd,WAAW;IACX,UAAU;IACV,gBAAgB;IAChB,gBAAgB;;;AC3IP,MAAA,UAAU,GAAG,CAAC,KAAiB,KAAI;IAC5C,OAAO,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,OAAO,CAAC;AACrD,EAAE;AAEF;;AAEG;SACa,WAAW,CAAC,KAAiB,EAAE,CAAS,EAAE,CAAS,EAAA;IAC/D,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC1C,IAAA,OAAO,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACpC,CAAC;AAED;;AAEG;AACa,SAAA,cAAc,CAAC,KAAiB,EAAE,SAAgB,EAAA;AAC9D,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;AAChC,IAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;AAC1C,IAAA,MAAM,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,GAAG,OAAO,CAAC,CAAC,CAAC;AAC1C,IAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,EAAE,CAAC,CAAU,CAAC;AACjC,IAAA,OAAO,QAAQ,CAAC;AACpB,CAAC;AAEe,SAAA,eAAe,CAAC,KAAiB,EAAE,UAAmB,EAAA;IAClE,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,KAAK,IAAG;AACrC,QAAA,OAAO,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,SAAS,CAAC;AACrB,CAAC;AAED;;;AAGG;AACa,SAAA,0BAA0B,CAAC,KAAiB,EAAE,SAAgB,EAAA;IAC1E,MAAM,IAAI,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AACvC,IAAA,MAAM,IAAI,GAAG,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC1C,IAAA,OAAO,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,EAAE,SAAS,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAU,CAAC;AACnE,CAAC;AAED;;AAEG;AACa,SAAA,2BAA2B,CAAC,KAAiB,EAAE,YAAmB,EAAA;AAC9E,IAAA,MAAM,EAAE,IAAI,EAAE,GAAG,KAAK,CAAC,QAAQ,CAAC;AAChC,IAAA,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,CAAC;AAClC,IAAA,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/C,IAAA,MAAM,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,IAAI,CAAC;AAC/C,IAAA,OAAO,CAAC,CAAC,EAAE,CAAC,CAAU,CAAC;AAC3B;;AC9CA,MAAM,iBAAiB,GAAG,IAAI,OAAO,EAAuB,CAAC;AAE7D,MAAM,uBAAuB,GAAG,IAAI,OAAO,EAAuB,CAAC;AAE7D,SAAU,wBAAwB,CAAC,KAAiB,EAAA;AACtD,IAAA,MAAM,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC,OAAO,CAAC;IACxC,MAAM,cAAc,GAAG,aAAa,GAAG,gBAAgB,GAAG,CAAC,CAAC;IAC5D,MAAM,YAAY,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;IAEjF,OAAO;AACH,QAAA,KAAK,EAAE,YAAY,CAAC,KAAK,GAAG,cAAc;AAC1C,QAAA,MAAM,EAAE,YAAY,CAAC,MAAM,GAAG,cAAc;KAC/C,CAAC;AACN,CAAC;AAEe,SAAA,kBAAkB,CAAC,KAAiB,EAAE,IAAY,EAAA;AAC9D,IAAA,MAAM,YAAY,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IACzE,MAAM,qBAAqB,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;AAC1F,IAAA,MAAM,cAAc,GAAG,qBAAqB,CAAC,KAAK,GAAG,IAAI,CAAC;AAC1D,IAAA,MAAM,eAAe,GAAG,qBAAqB,CAAC,MAAM,GAAG,IAAI,CAAC;AAC5D,IAAA,IAAI,IAAY,CAAC;AACjB,IAAA,IAAI,KAAa,CAAC;AAClB,IAAA,IAAI,GAAW,CAAC;AAChB,IAAA,IAAI,MAAc,CAAC;AAEnB,IAAA,IAAI,YAAY,CAAC,KAAK,GAAG,cAAc,EAAE;QACrC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,GAAG,CAAC,CAAC;AACxD,QAAA,MAAM,kBAAkB,GAAG,cAAc,GAAG,CAAC,CAAC;AAC9C,QAAA,IAAI,GAAG,OAAO,GAAG,kBAAkB,CAAC;AACpC,QAAA,KAAK,GAAG,OAAO,GAAG,kBAAkB,CAAC;KACxC;SAAM;AACH,QAAA,IAAI,GAAG,YAAY,CAAC,CAAC,CAAC;QACtB,KAAK,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,KAAK,CAAC;KAC/C;AACD,IAAA,IAAI,YAAY,CAAC,MAAM,GAAG,eAAe,EAAE;QACvC,MAAM,OAAO,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,GAAG,CAAC,CAAC;AACzD,QAAA,MAAM,mBAAmB,GAAG,eAAe,GAAG,CAAC,CAAC;AAChD,QAAA,GAAG,GAAG,OAAO,GAAG,mBAAmB,CAAC;AACpC,QAAA,MAAM,GAAG,OAAO,GAAG,mBAAmB,CAAC;KAC1C;SAAM;AACH,QAAA,GAAG,GAAG,YAAY,CAAC,CAAC,CAAC;QACrB,MAAM,GAAG,YAAY,CAAC,CAAC,GAAG,YAAY,CAAC,MAAM,CAAC;KACjD;IACD,OAAO;QACH,IAAI;QACJ,KAAK;QACL,GAAG;QACH,MAAM;KACT,CAAC;AACN,CAAC;AAED;;AAEG;AACG,SAAU,cAAc,CAAC,IAAY,EAAE,OAAO,GAAG,QAAQ,EAAE,OAAO,GAAG,QAAQ,EAAA;IAC/E,OAAO,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,GAAG,OAAO,GAAG,IAAI,CAAC;AACtE,CAAC;AAEe,SAAA,cAAc,CAAC,KAAiB,EAAE,IAAY,EAAA;IAC1D,MAAM,uBAAuB,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;IAC5F,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxD,IAAA,MAAM,iBAAiB,GAAG,uBAAuB,CAAC,KAAK,GAAG,CAAC,CAAC;AAC5D,IAAA,MAAM,eAAe,GAAG,uBAAuB,CAAC,MAAM,GAAG,CAAC,CAAC;AAC3D,IAAA,MAAM,OAAO,GAAG;AACZ,QAAA,eAAe,CAAC,IAAI,GAAG,iBAAiB,GAAG,IAAI;AAC/C,QAAA,eAAe,CAAC,GAAG,GAAG,eAAe,GAAG,IAAI;AAC5C,QAAA,eAAe,CAAC,KAAK,GAAG,eAAe,CAAC,IAAI,GAAG,CAAC,iBAAiB,GAAG,CAAC,IAAI,IAAI;AAC7E,QAAA,eAAe,CAAC,MAAM,GAAG,eAAe,CAAC,GAAG,GAAG,CAAC,eAAe,GAAG,CAAC,IAAI,IAAI;KAC9E,CAAC;AACF,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAEK,SAAU,qBAAqB,CAAC,KAAiB,EAAA;AACnD,IAAA,MAAM,iBAAiB,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;IAC9E,OAAO,CAAC,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,KAAK,GAAG,CAAC,EAAE,iBAAiB,CAAC,CAAC,GAAG,iBAAiB,CAAC,MAAM,GAAG,CAAC,CAAU,CAAC;AAC5H,CAAC;AAEe,SAAA,aAAa,CAAC,KAAiB,EAAE,OAAiB,EAAA;AAC9D,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjC,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9C,IAAA,WAAW,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC;AACpC,IAAA,WAAW,CAAC,KAAK,CAAC,KAAK,GAAG,CAAA,EAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;AACnD,IAAA,WAAW,CAAC,KAAK,CAAC,MAAM,GAAG,CAAA,EAAG,OAAO,CAAC,CAAC,CAAC,GAAG,IAAI,IAAI,CAAC;AAEpD,IAAA,IAAI,OAAO,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE;AAC7C,QAAA,WAAW,CAAC,YAAY,CAAC,SAAS,EAAE,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;KAC1D;AACL,CAAC;AAEK,SAAU,oBAAoB,CAAC,KAAiB,EAAA;AAClD,IAAA,MAAM,WAAW,GAAG,sBAAsB,CAAC,KAAK,CAAC,CAAC;IAClD,IAAI,CAAC,WAAW,EAAE;QACd,OAAO;KACV;AACD,IAAA,MAAM,CAAC,UAAU,EAAE,SAAS,CAAC,GAAG,2BAA2B,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAChF,IAAA,6BAA6B,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AAChE,CAAC;AAEK,SAAU,6BAA6B,CAAC,KAAiB,EAAE,IAAY,EAAE,GAAW,EAAE,oBAAA,GAAgC,IAAI,EAAA;IAC5H,MAAM,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACjE,IAAA,MAAM,kBAAkB,GAAG,iBAAiB,CAAC,UAAU,CAAC;AACxD,IAAA,MAAM,iBAAiB,GAAG,iBAAiB,CAAC,SAAS,CAAC;;;;IAItD,IAAI,iBAAiB,CAAC,UAAU,KAAK,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,iBAAiB,CAAC,SAAS,KAAK,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE;AACtG,QAAA,iBAAiB,CAAC,UAAU,GAAG,IAAI,CAAC;AACpC,QAAA,iBAAiB,CAAC,SAAS,GAAG,GAAG,CAAC;AAClC,QAAA,MAAM,WAAW,GAAG,iBAAiB,CAAC,WAAW,CAAC;AAClD,QAAA,MAAM,YAAY,GAAG,iBAAiB,CAAC,YAAY,CAAC;AACpD,QAAA,IAAI,kBAAkB,KAAK,iBAAiB,CAAC,UAAU,IAAI,iBAAiB,KAAK,iBAAiB,CAAC,SAAS,EAAE;;AAE1G,YAAA,yBAAyB,CAAC,KAAK,EAAE,kBAAkB,EAAE,iBAAiB,CAAC,CAAC;SAC3E;aAAM;AACH,YAAA,MAAM,gBAAgB,GAClB,IAAI,GAAG,CAAC;AACR,gBAAA,GAAG,GAAG,CAAC;AACP,gBAAA,IAAI,GAAG,iBAAiB,CAAC,WAAW,GAAG,WAAW;AAClD,gBAAA,GAAG,GAAG,iBAAiB,CAAC,YAAY,GAAG,YAAY,CAAC;AACxD,YAAA,IAAI,oBAAoB,IAAI,gBAAgB,EAAE;AAC1C,gBAAA,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aACxC;SACJ;KACJ;AACL,CAAC;SAEe,yBAAyB,CAAC,KAAiB,EAAE,UAAkB,EAAE,SAAiB,EAAA;AAC9F,IAAA,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,CAAC,UAAU,EAAE,SAAS,CAAC,CAAC,CAAC;AACnE,IAAA,IAAI,KAAK,CAAC,QAAQ,CAAC,WAAW,EAAE,sBAAsB,CAAC,KAAK,CAAC,CAAC,EAAE;QAC5D,OAAO;KACV;AACD,IAAA,eAAe,CAAC,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AACnD,IAAA,kBAAkB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACpC,CAAC;AAEK,SAAU,2BAA2B,CAAC,KAAiB,EAAA;IACzD,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;IAC1D,MAAM,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;IACjE,iBAAiB,CAAC,KAAK,CAAC,KAAK,GAAG,CAAG,EAAA,KAAK,IAAI,CAAC;IAC7C,iBAAiB,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,MAAM,IAAI,CAAC;AACnD,CAAC;AAEK,SAAU,iBAAiB,CAAC,KAAiB,EAAA;AAC/C,IAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;IACjC,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5C,IAAA,aAAa,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AAClC,CAAC;AAEK,SAAU,wBAAwB,CAAC,KAAiB,EAAA;AACtD,IAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,WAAW,EAAE;AAC9B,QAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;QACjC,MAAM,qBAAqB,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;QAC1F,MAAM,OAAO,GAAG,cAAc,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC5C,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC5C,QAAA,MAAM,OAAO,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;QAC5C,MAAM,WAAW,GAAG,CAAC,OAAO,GAAG,qBAAqB,CAAC,KAAK,GAAG,CAAC,GAAG,IAAI,EAAE,OAAO,GAAG,qBAAqB,CAAC,MAAM,GAAG,CAAC,GAAG,IAAI,CAAU,CAAC;AACnI,QAAA,yBAAyB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;QAC9C,oBAAoB,CAAC,KAAK,CAAC,CAAC;QAC5B,OAAO;KACV;IACD,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAChC,CAAC;MAEY,yBAAyB,GAAG,CAAC,KAAiB,EAAE,WAAkB,KAAI;AAC/E,IAAA,6BAA6B,CAAC,GAAG,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC1D,EAAE;AAEW,MAAA,wBAAwB,GAAG,CAAC,KAAiB,KAAI;AAC1D,IAAA,6BAA6B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAChD,EAAE;AAEW,MAAA,sBAAsB,GAAG,CAAC,KAAiB,KAAI;IACxD,MAAM,WAAW,GAAG,6BAA6B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC7D,IAAI,WAAW,EAAE;AACb,QAAA,OAAO,WAAW,CAAC;KACtB;SAAM;AACH,QAAA,OAAO,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC;KACrC;AACL,EAAE;AAEW,MAAA,eAAe,GAAG,CAAC,KAAiB,KAAI;IACjD,OAAO,CAAC,CAAC,iBAAiB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC1C,EAAE;MAEW,kBAAkB,GAAG,CAAC,KAAiB,EAAE,KAAc,KAAI;AACpE,IAAA,iBAAiB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACxC,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,KAAiB,KAAI;IACtD,OAAO,CAAC,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChD,EAAE;MAEW,uBAAuB,GAAG,CAAC,KAAiB,EAAE,KAAc,KAAI;AACzE,IAAA,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9C,EAAE;SAEc,iBAAiB,CAAC,KAAiB,EAAE,MAAuB;;ACzM5E,MAAM,YAAY,GAAG,IAAI,OAAO,EAAgD,CAAC;AAEjF,MAAM,UAAU,GAAG,CAAC,KAAiB,EAAE,GAAW,KAAI;AAClD,IAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;AACjC,IAAA,OAAO,KAAK,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC;AAC9B,CAAC,CAAC;AAEF,MAAM,WAAW,GAAG,CAAC,KAAiB,KAAI;IACtC,OAAO,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACzC,CAAC,CAAC;AAEW,MAAA,WAAW,GAAG,CAAC,KAAiB,EAAE,GAAW,EAAE,EAAc,KAAI;IAC1E,MAAM,YAAY,GAAG,MAAK;AACtB,QAAA,IAAI,OAAO,GAAG,qBAAqB,CAAC,MAAK;YACrC,MAAM,KAAK,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AAC5C,YAAA,KAAK,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC;AAClB,YAAA,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC/B,YAAA,EAAE,EAAE,CAAC;AACT,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,KAAK,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,KAAK,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC;AACrB,QAAA,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACnC,KAAC,CAAC;IACF,IAAI,OAAO,GAAG,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC;AACrC,IAAA,IAAI,OAAO,KAAK,IAAI,EAAE;QAClB,oBAAoB,CAAC,OAAO,CAAC,CAAC;KACjC;AACD,IAAA,YAAY,EAAE,CAAC;AACnB,EAAE;AAEW,MAAA,QAAQ,GAAG,CAAC,IAAgB,EAAE,IAAY,EAAE,OAA8B,KAAI;IACvF,IAAI,iBAAiB,GAAwB,IAAI,CAAC;AAClD,IAAA,OAAO,MAAK;AACR,QAAA,IAAI,iBAAiB,IAAI,CAAC,iBAAiB,CAAC,MAAM,EAAE;YAChD,iBAAiB,CAAC,WAAW,EAAE,CAAC;YAChC,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,CAAC,MAAK;AAC3C,gBAAA,IAAI,EAAE,CAAC;AACX,aAAC,CAAC,CAAC;SACN;aAAM;AACH,YAAA,IAAI,OAAO,EAAE,OAAO,EAAE;AAClB,gBAAA,KAAK,CAAC,CAAC,CAAC,CAAC,SAAS,CAAC,MAAK;AACpB,oBAAA,IAAI,EAAE,CAAC;AACX,iBAAC,CAAC,CAAC;aACN;YACD,iBAAiB,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,SAAS,EAAE,CAAC;SAC/C;AACL,KAAC,CAAC;AACN;;AChDa,MAAA,WAAW,GAAG,IAAI,OAAO,GAAwB;AAGjD,MAAA,UAAU,GAAG,CAAC,KAAiB,KAAI;IAC5C,OAAO,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACpC,EAAE;MAEW,WAAW,GAAG,CAAC,KAAiB,EAAE,KAAc,KAAI;AAC7D,IAAA,WAAW,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAClC;;ACPa,MAAA,iBAAiB,GAAG,CAAC,KAAiB,KAAI;IACnD,OAAO,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,CAAC;AACpD,EAAE;AAEW,MAAA,gBAAgB,GAAG,CAAC,KAAiB,KAAI;AAClD,IAAA,OAAO,CAAC,uBAAuB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,EAAE,EAAE,MAAM,GAAG,CAAC,CAAC;AACjE,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,KAAiB,KAAI;AACtD,IAAA,uBAAuB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACtC,IAAA,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9B,EAAE;MAEW,mBAAmB,GAAG,CAAC,KAAiB,EAAE,QAAwB,KAAI;AAC/E,IAAA,uBAAuB,CAAC,GAAG,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;AAC7C,IAAA,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7B;;ACjBA,MAAM,eAAe,GAAG,uBAAuB,CAAC;AAYhD;;;;AAIG;AACH,SAAS,aAAa,CAAC,IAAU,EAAA;AAC7B,IAAA,OAAO,IAAI,CAAC,QAAQ,KAAK,IAAI,CAAC,YAAY,CAAC;AAC/C,CAAC;AAED;;;;AAIG;AACH,SAAS,SAAS,CAAC,GAAW,EAAA;IAC1B,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAI;AACnC,QAAA,MAAM,GAAG,GAAG,IAAI,KAAK,EAAE,CAAC;AACxB,QAAA,GAAG,CAAC,WAAW,GAAG,WAAW,CAAC;QAC9B,GAAG,CAAC,MAAM,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,CAAC;AAChC,QAAA,GAAG,CAAC,OAAO,GAAG,MAAM,MAAM,CAAC,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,CAAC;AAC9D,QAAA,GAAG,CAAC,GAAG,GAAG,GAAG,CAAC;AAClB,KAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;;;AAMG;AACH,SAAS,YAAY,CAAC,KAAa,EAAE,MAAc,EAAE,SAAS,GAAG,aAAa,EAAA;IAC1E,MAAM,MAAM,GAAG,QAAQ,CAAC,aAAa,CAAC,QAAQ,CAAC,CAAC;IAChD,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC,IAAI,CAAE,CAAC;AAErC,IAAA,MAAM,CAAC,KAAK,GAAG,KAAK,CAAC;AACrB,IAAA,MAAM,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,MAAM,CAAC,KAAK,CAAC,KAAK,GAAG,CAAG,EAAA,KAAK,IAAI,CAAC;IAClC,MAAM,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,MAAM,IAAI,CAAC;AACpC,IAAA,GAAG,CAAC,WAAW,GAAG,SAAS,CAAC;AAC5B,IAAA,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;IAC1B,GAAG,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,KAAK,EAAE,MAAM,CAAC,CAAC;IAElC,OAAO;QACH,MAAM;QACN,GAAG;KACN,CAAC;AACN,CAAC;AAED;;;;AAIG;AACH,SAAS,oBAAoB,CAAC,GAAW,EAAA;IACrC,OAAO,SAAS,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,IAAG;AAC7B,QAAA,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,GAAG,CAAC,KAAK,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;QAC5D,GAAG,EAAE,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;AAC1B,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;AACzC,KAAC,CAAC,CAAC;AACP,CAAC;AAED;;;;AAIG;AACH,SAAS,aAAa,CAAwB,UAAa,EAAE,UAAa,EAAA;AACtE,IAAA,MAAM,WAAW,GAAG,UAAU,EAAE,KAAK,CAAC;IACtC,IAAI,CAAC,WAAW,EAAE;QACd,OAAO;KACV;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC;AACxD,IAAA,IAAI,WAAW,CAAC,OAAO,EAAE;AACrB,QAAA,WAAW,CAAC,OAAO,GAAG,WAAW,CAAC,OAAO,CAAC;AAC1C,QAAA,WAAW,CAAC,eAAe,GAAG,WAAW,CAAC,eAAe,CAAC;KAC7D;SAAM;QACH,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC,OAAO,CAAC,IAAI,IAAG;YACnC,IAAI,KAAK,GAAG,WAAW,CAAC,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAC/C,YAAA,WAAW,CAAC,WAAW,CAAC,IAAI,EAAE,KAAK,EAAE,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAC;AAChF,SAAC,CAAC,CAAC;KACN;AACL,CAAC;AAED;;;;;AAKG;AACH,SAAS,kBAAkB,CAAC,UAAuB,EAAE,SAAsB,EAAE,qBAA6B,EAAA;IACtG,IAAI,qBAAqB,EAAE;AACvB,QAAA,MAAM,UAAU,GAAG,qBAAqB,GAAG,CAAK,EAAA,EAAA,eAAe,EAAE,CAAC;AAClE,QAAA,MAAM,WAAW,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;AACxE,QAAA,MAAM,UAAU,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,UAAU,CAAC,CAAC,CAAC;QAEtE,WAAW,CAAC,OAAO,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;AAChC,YAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAkB,CAAC;YACpG,MAAM,kBAAkB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,MAAM,CAAC,aAAa,CAAkB,CAAC;AACtH,YAAA,WAAW,CAAC,IAAI,CAAC,GAAG,aAAa,CAAC,CAAC;AACnC,YAAA,UAAU,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,CAAC;AAC3C,SAAC,CAAC,CAAC;;QAGH,WAAW,CAAC,GAAG,CAAC,CAAC,IAAI,EAAE,KAAK,KAAI;YAC5B,aAAa,CAAC,IAAmB,EAAE,UAAU,CAAC,KAAK,CAAgB,CAAC,CAAC;AACzE,SAAC,CAAC,CAAC;KACN;AACL,CAAC;AAED;;;;AAIG;AACH,eAAe,iBAAiB,CAAC,UAAuB,EAAE,SAAsB,EAAA;AAC5E,IAAA,MAAM,gBAAgB,GAAG,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,gBAAgB,CAAC,CAAI,CAAA,EAAA,eAAe,CAAE,CAAA,CAAC,CAAC,CAAC;AACxF,IAAA,MAAM,eAAe,GAAG,KAAK,CAAC,IAAI,CAAC,SAAS,CAAC,gBAAgB,CAAC,CAAI,CAAA,EAAA,eAAe,CAAE,CAAA,CAAC,CAAC,CAAC;AACtF,IAAA,MAAM,OAAO,CAAC,GAAG,CACb,gBAAgB,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,KAAK,KAAI;AAC9B,QAAA,OAAO,IAAI,OAAO,CAAC,OAAO,IAAG;AACzB,YAAA,MAAM,cAAc,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;;YAE9C,MAAM,KAAK,GAAI,cAA8B,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;YACnE,MAAM,GAAG,GAAG,KAAK,EAAE,YAAY,CAAC,KAAK,CAAC,CAAC;YACvC,IAAI,CAAC,GAAG,EAAE;AACN,gBAAA,OAAO,OAAO,CAAC,IAAI,CAAC,CAAC;aACxB;YACD,oBAAoB,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,IAAG;AACzC,gBAAA,KAAK,EAAE,YAAY,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;gBACxC,OAAO,CAAC,IAAI,CAAC,CAAC;AAClB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN,CAAC,CACL,CAAC;AACN,CAAC;AAED;;;;;AAKG;AACH,eAAe,QAAQ,CAAC,KAAiB,EAAE,QAAwB,EAAE,SAA0B,EAAE,OAAuB,EAAA;IACpH,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,SAAS,CAAC;IAC1C,MAAM,EAAE,OAAO,GAAG,CAAC,EAAE,qBAAqB,EAAE,GAAG,OAAO,CAAC;IACvD,MAAM,SAAS,GAAG,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC5C,IAAA,MAAM,iBAAiB,GAAG,QAAQ,CAAC,GAAG,CAAC,KAAK,IAAI,YAAY,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACpF,IAAA,MAAM,eAAe,GAAG,SAAS,CAAC,SAAS,EAAgB,CAAC;IAC5D,MAAM,cAAc,GAAG,UAAU,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,SAAS,EAAiB,CAAC;IAEnF,eAAe,CAAC,KAAK,CAAC,KAAK,GAAG,CAAG,EAAA,KAAK,IAAI,CAAC;IAC3C,eAAe,CAAC,KAAK,CAAC,MAAM,GAAG,CAAG,EAAA,MAAM,IAAI,CAAC;AAC7C,IAAA,eAAe,CAAC,KAAK,CAAC,eAAe,GAAG,EAAE,CAAC;IAC3C,eAAe,CAAC,YAAY,CAAC,OAAO,EAAE,CAAG,EAAA,KAAK,CAAE,CAAA,CAAC,CAAC;IAClD,eAAe,CAAC,YAAY,CAAC,QAAQ,EAAE,CAAG,EAAA,MAAM,CAAE,CAAA,CAAC,CAAC;AACpD,IAAA,eAAe,CAAC,YAAY,CAAC,SAAS,EAAE,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,GAAG,OAAO,EAAE,KAAK,GAAG,CAAC,GAAG,OAAO,EAAE,MAAM,GAAG,CAAC,GAAG,OAAO,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC;AAEzH,IAAA,MAAM,OAAO,CAAC,GAAG,CACb,iBAAiB,CAAC,GAAG,CAAC,OAAO,KAAK,EAAE,CAAC,KAAI;QACrC,MAAM,UAAU,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,CAAgB,CAAC;AACxD,QAAA,kBAAkB,CAAC,KAAK,EAAE,UAAU,EAAE,qBAA+B,CAAC,CAAC;AAEvE,QAAA,MAAM,iBAAiB,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC3C,QAAA,cAAc,CAAC,WAAW,CAAC,UAAU,CAAC,CAAC;KAC1C,CAAC,CACL,CAAC;AACF,IAAA,eAAe,CAAC,WAAW,CAAC,cAAc,CAAC,CAAC;AAC5C,IAAA,OAAO,eAAe,CAAC;AAC3B,CAAC;AAED;;;;;AAKG;AACI,eAAe,OAAO,CAAC,KAAiB,EAAE,OAAuB,EAAA;IACpE,IAAI,CAAC,KAAK,EAAE;AACR,QAAA,OAAO,SAAS,CAAC;KACpB;AACD,IAAA,MAAM,QAAQ,GAAG,OAAO,CAAC,QAAQ,IAAI,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,IAAI,EAAE,SAAS,EAAE,MAAM,IAAI,EAAE,SAAS,EAAE,KAAK,EAAE,CAAC,CAAC;IACzH,MAAM,eAAe,GAAG,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;IACvE,MAAM,EAAE,KAAK,GAAG,CAAC,EAAE,SAAS,GAAG,aAAa,EAAE,GAAG,OAAO,CAAC;AACzD,IAAA,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,GAAG,eAAe,CAAC;AAC1C,IAAA,MAAM,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;AACjC,IAAA,MAAM,WAAW,GAAG,MAAM,GAAG,KAAK,CAAC;AAEnC,IAAA,MAAM,eAAe,GAAG,MAAM,QAAQ,CAAC,KAAK,EAAE,QAAQ,EAAE,eAAe,EAAE,OAAO,CAAC,CAAC;AAClF,IAAA,MAAM,EAAE,MAAM,EAAE,GAAG,EAAE,GAAG,YAAY,CAAC,UAAU,EAAE,WAAW,EAAE,SAAS,CAAC,CAAC;IAEzE,MAAM,MAAM,GAAG,IAAI,aAAa,EAAE,CAAC,iBAAiB,CAAC,eAAe,CAAC,CAAC;IACtE,MAAM,MAAM,GAAG,CAAoC,iCAAA,EAAA,kBAAkB,CAAC,MAAM,CAAC,EAAE,CAAC;AAEhF,IAAA,IAAI;AACA,QAAA,MAAM,GAAG,GAAG,MAAM,SAAS,CAAC,MAAM,CAAC,CAAC;AACpC,QAAA,GAAG,CAAC,SAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,EAAE,UAAU,EAAE,WAAW,CAAC,CAAC;AAClD,QAAA,OAAO,MAAM,CAAC,SAAS,CAAC,WAAW,CAAC,CAAC;KACxC;IAAC,OAAO,KAAK,EAAE;AACZ,QAAA,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,KAAK,CAAC,CAAC;AACvD,QAAA,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAED;;;;AAIG;AACa,SAAA,aAAa,CAAC,GAAW,EAAE,IAAY,EAAA;IACnD,MAAM,CAAC,GAAG,QAAQ,CAAC,aAAa,CAAC,GAAG,CAAC,CAAC;AACtC,IAAA,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC;AACb,IAAA,CAAC,CAAC,QAAQ,GAAG,IAAI,CAAC;IAClB,CAAC,CAAC,KAAK,EAAE,CAAC;IACV,CAAC,CAAC,MAAM,EAAE,CAAC;AACf;;ICrOY,sBAGX;AAHD,CAAA,UAAY,qBAAqB,EAAA;AAC7B,IAAA,qBAAA,CAAA,QAAA,CAAA,GAAA,QAAmB,CAAA;AACnB,IAAA,qBAAA,CAAA,UAAA,CAAA,GAAA,UAAuB,CAAA;AAC3B,CAAC,EAHW,qBAAqB,KAArB,qBAAqB,GAGhC,EAAA,CAAA,CAAA;;MCHY,cAAc,GAAG,CAAC,IAA2B,EAAE,IAA2B,KAAI;AACvF,IAAA,MAAM,oBAAoB,GAAG,IAAI,CAAC,SAAS,CAAC;QACxC,IAAI;QACJ,IAAI;AACP,KAAA,CAAC,CAAC;IACH,OAAO,CAAA,OAAA,EAAU,oBAAoB,CAAA,QAAA,CAAU,CAAC;AACpD,EAAE;AAEW,MAAA,oBAAoB,GAAG,CAAC,IAAY,KAA0B;AACvE,IAAA,MAAM,WAAW,GAAG,IAAI,EAAE,KAAK,CAAC,2BAA2B,CAAC,GAAG,CAAC,CAAC,CAAC;IAClE,IAAI,WAAW,EAAE;AACb,QAAA,IAAI;YACA,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,CAAC;YAC1C,IAAI,SAAS,EAAE;gBACX,IAAI,SAAS,CAAC,IAAI,KAAK,qBAAqB,CAAC,QAAQ,EAAE;oBACnD,OAAO;wBACH,QAAQ,EAAE,SAAS,CAAC,IAAI;qBAC3B,CAAC;iBACL;qBAAM,IAAI,SAAS,CAAC,IAAI,KAAK,qBAAqB,CAAC,MAAM,EAAE;oBACxD,OAAO;wBACH,MAAM,EAAE,SAAS,CAAC,IAAI;qBACzB,CAAC;iBACL;aACJ;SACJ;QAAC,OAAO,KAAK,EAAE;AACZ,YAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AACrB,YAAA,OAAO,IAAI,CAAC;SACf;KACJ;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEW,MAAA,SAAS,GAAG,CAAC,IAAY,KAAI;;IAEtC,MAAM,GAAG,GAAG,QAAQ,CAAC,cAAc,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;IAC3D,GAAG,CAAC,eAAe,CAAC,SAAS,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;AAC5C,IAAA,OAAO,GAAG,CAAC,IAAI,CAAC,WAAW,IAAI,GAAG,CAAC,IAAI,CAAC,SAAS,IAAI,EAAE,CAAC;AAC5D,EAAE;AAEK,MAAM,iCAAiC,GAAG,MAAK;IAClD,OAAO,WAAW,IAAI,SAAS,IAAI,OAAO,IAAI,SAAS,CAAC,SAAS,CAAC;AACtE,EAAE;AAEK,MAAM,qCAAqC,GAAG,MAAK;IACtD,OAAO,WAAW,IAAI,SAAS,IAAI,WAAW,IAAI,SAAS,CAAC,SAAS,CAAC;AAC1E,EAAE;AAEK,MAAM,gCAAgC,GAAG,MAAK;IACjD,OAAO,WAAW,IAAI,SAAS,IAAI,MAAM,IAAI,SAAS,CAAC,SAAS,CAAC;AACrE,EAAE;AAEW,MAAA,sBAAsB,GAAG,CAClC,IAA2B,EAC3B,IAA2B,EAC3B,IAAY,KACc;IAC1B,OAAO;QACH,IAAI;QACJ,IAAI;QACJ,IAAI;KACP,CAAC;AACN,EAAE;MAEW,mBAAmB,GAAG,CAC/B,gBAA0C,EAC1C,QAAkC,KACR;IAC1B,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC;AAC9C,IAAA,IAAI,IAAI,KAAK,QAAQ,CAAC,IAAI,EAAE;QACxB,OAAO;YACH,IAAI;YACJ,IAAI,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,IAAI,CAAC;AAChC,YAAA,IAAI,EAAE,IAAI,GAAG,GAAG,GAAG,QAAQ,CAAC,IAAI;SACnC,CAAC;KACL;AACD,IAAA,OAAO,gBAAgB,CAAC;AAC5B;;AC3Ea,MAAA,wBAAwB,GAAG,CAAC,YAAiC,EAAE,IAA2B,EAAE,IAA2B,KAAI;AACpI,IAAA,YAAY,EAAE,OAAO,CAAC,CAAA,SAAA,CAAW,EAAE,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;AACnE,EAAE;MAEW,4BAA4B,GAAG,CAAC,IAAyB,EAAE,IAAY,KAAI;AACpF,IAAA,IAAI,EAAE,OAAO,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;AACtC,EAAE;AAEW,MAAA,wBAAwB,GAAG,CAAC,IAAyB,KAAmB;IACjF,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA,SAAA,CAAW,CAAC,CAAC;IACxC,IAAI,IAAI,EAAE;AACN,QAAA,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,iBAAiB,EAAE;AACnB,YAAA,OAAO,iBAAiB,CAAC;SAC5B;KACJ;AAED,IAAA,OAAO,EAAE,CAAC;AACd,EAAE;AAEW,MAAA,4BAA4B,GAAG,CAAC,IAAyB,KAAI;IACtE,IAAI,CAAC,IAAI,EAAE;AACP,QAAA,OAAO,EAAE,CAAC;KACb;IACD,MAAM,IAAI,GAAG,IAAI,EAAE,OAAO,CAAC,CAAA,UAAA,CAAY,CAAC,CAAC;IACzC,IAAI,IAAI,EAAE;AACN,QAAA,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,IAAI,CAAC,CAAC;QACrD,IAAI,iBAAiB,EAAE;AACnB,YAAA,OAAO,iBAAiB,CAAC;SAC5B;KACJ;IACD,OAAO;QACH,IAAI;KACP,CAAC;AACN;;AC5BO,MAAM,qBAAqB,GAAG,OAAO,IAA2B,EAAE,IAA2B,EAAE,IAAe,GAAA,EAAE,KAAI;IACvH,IAAI,aAAa,GAAG,IAAI,CAAC;IACzB,IAAI,iCAAiC,EAAE,EAAE;AACrC,QAAA,MAAM,SAAS,CAAC,SAAS,CAAC,KAAK,CAAC;AAC5B,YAAA,IAAI,aAAa,CAAC;AACd,gBAAA,WAAW,EAAE,IAAI,IAAI,CAAC,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,EAAE;AAChD,oBAAA,IAAI,EAAE,WAAW;iBACpB,CAAC;gBACF,YAAY,EAAE,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,aAAa,IAAI,IAAI,CAAC,CAAC,EAAE,EAAE,IAAI,EAAE,YAAY,EAAE,CAAC;aAC1F,CAAC;AACL,SAAA,CAAC,CAAC;KACN;AACL,CAAC,CAAC;AAEK,MAAM,qBAAqB,GAAG,YAAmC;AACpE,IAAA,IAAI,CAAC,gCAAgC,EAAE,EAAE;AACrC,QAAA,OAAO,EAAE,CAAC;KACb;IACD,MAAM,cAAc,GAAG,MAAM,SAAS,CAAC,SAAS,CAAC,IAAI,EAAE,CAAC;IACxD,IAAI,aAAa,GAAkB,EAAE,CAAC;AAEtC,IAAA,IAAI,KAAK,CAAC,OAAO,CAAC,cAAc,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,YAAY,aAAa,EAAE;AAC7E,QAAA,KAAK,MAAM,IAAI,IAAI,cAAc,EAAE;AAC/B,YAAA,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;AACd,gBAAA,MAAM,cAAc,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;gBACzE,MAAM,SAAS,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC,cAAc,CAAC,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,CAAE,CAAC,CAAC,CAAC;gBACrF,MAAM,IAAI,GAAI,SAAS,CAAC,MAAM,CAAC,OAAO,CAAqB,CAAC,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC;AACnG,gBAAA,MAAM,KAAK,GAAG,MAAM,OAAO,CAAC,GAAG,CAC3B,IAAI,CAAC,GAAG,CAAC,OAAM,GAAG,KAAG;AACjB,oBAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,KAAK,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,CAAC;AAC7C,oBAAA,OAAO,IAAI,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,YAAY,EAAE,EAAE,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,CAAC,CAAC;iBAC9D,CAAC,CACL,CAAC;gBACF,OAAO;oBACH,KAAK;iBACR,CAAC;aACL;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,WAAW,CAAC,EAAE;AAClC,gBAAA,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC;AACxE,gBAAA,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,WAAW,CAAC,CAAC;gBAC5D,IAAI,iBAAiB,EAAE;AACnB,oBAAA,OAAO,iBAAiB,CAAC;iBAC5B;AACD,gBAAA,IAAI,WAAW,IAAI,WAAW,CAAC,IAAI,EAAE,EAAE;oBACnC,aAAa,GAAG,EAAE,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC,EAAE,CAAC;iBACpD;aACJ;YACD,IAAI,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,YAAY,CAAC,EAAE;AACnC,gBAAA,MAAM,WAAW,GAAG,MAAM,YAAY,CAAC,MAAM,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,CAAC;AACzE,gBAAA,aAAa,GAAG;AACZ,oBAAA,IAAI,EAAE,SAAS,CAAC,WAAW,CAAC;iBAC/B,CAAC;aACL;SACJ;KACJ;AACD,IAAA,OAAO,aAAa,CAAC;AACzB,CAAC,CAAC;AAEF,MAAM,MAAM,GAAG,CAAC,IAAmB,KAAI;AACnC,IAAA,OAAO,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC,CAAC;AACrD,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CAAC,IAAU,KAAI;IAChC,OAAO,IAAI,OAAO,CAAS,CAAC,OAAO,EAAE,MAAM,KAAI;AAC3C,QAAA,MAAM,MAAM,GAAG,IAAI,UAAU,EAAE,CAAC;AAChC,QAAA,MAAM,CAAC,gBAAgB,CAAC,SAAS,EAAE,MAAK;AACpC,YAAA,MAAM,IAAI,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3B,OAAO,CAAC,IAAc,CAAC,CAAC;AAC5B,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,gBAAgB,CAAC,OAAO,EAAE,MAAK;AAClC,YAAA,MAAM,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACzB,SAAC,CAAC,CAAC;AACH,QAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,CAAC;AAC5B,KAAC,CAAC,CAAC;AACP,CAAC;;MCpEY,gBAAgB,GAAG,OAAO,YAAiC,KAA4B;IAChG,IAAI,aAAa,GAAG,EAAE,CAAC;IACvB,IAAI,YAAY,EAAE;AACd,QAAA,IAAI,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE;AAC3B,YAAA,OAAO,EAAE,KAAK,EAAE,KAAK,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE,CAAC;SACpD;AACD,QAAA,aAAa,GAAG,wBAAwB,CAAC,YAAY,CAAC,CAAC;QACvD,IAAI,MAAM,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC,MAAM,KAAK,CAAC,EAAE;AACzC,YAAA,aAAa,GAAG,4BAA4B,CAAC,YAAY,CAAC,CAAC;SAC9D;AACD,QAAA,OAAO,aAAa,CAAC;KACxB;IACD,IAAI,gCAAgC,EAAE,EAAE;QACpC,OAAO,MAAM,qBAAqB,EAAE,CAAC;KACxC;AACD,IAAA,OAAO,aAAa,CAAC;AACzB,EAAE;AAEW,MAAA,gBAAgB,GAAG,OAAO,YAAiC,EAAE,gBAAiD,KAAI;IAC3H,IAAI,CAAC,gBAAgB,EAAE;QACnB,OAAO;KACV;IACD,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,gBAAgB,CAAC;IAE9C,IAAI,iCAAiC,EAAE,EAAE;QACrC,OAAO,MAAM,qBAAqB,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;KACxD;IAED,IAAI,YAAY,EAAE;AACd,QAAA,wBAAwB,CAAC,YAAY,EAAE,IAAI,EAAE,IAAI,CAAC,CAAC;AACnD,QAAA,4BAA4B,CAAC,YAAY,EAAE,IAAI,CAAC,CAAC;QACjD,OAAO;KACV;;;IAID,IAAI,qCAAqC,EAAE,EAAE;AACzC,QAAA,OAAO,MAAM,SAAS,CAAC,SAAS,CAAC,SAAS,CAAC,cAAc,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;KAC1E;AACL;;AC7Ca,MAAA,kBAAkB,GAAG,IAAI,OAAO,GAAyB;AAEzD,MAAA,kBAAkB,GAAG,CAAC,KAAiB,KAAI;IACpD,OAAO,CAAC,CAAC,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAC3C,EAAE;AAEW,MAAA,gBAAgB,GAAG,CAAC,KAAiB,EAAE,KAAmB,EAAE,KAAc,KAAI;AACvF,IAAA,IAAI,KAAK,KAAK,KAAK,CAAC,MAAM,YAAY,WAAW,IAAI,KAAK,CAAC,MAAM,YAAY,UAAU,CAAC,EAAE;QACtF,kBAAkB,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,MAAM,EAAE,KAAK,CAAC,MAAM,YAAY,UAAU,GAAG,KAAK,CAAC,MAAM,GAAG,SAAS,EAAE,CAAC,CAAC;KACnH;SAAM;QACH,MAAM,GAAG,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC1C,IAAI,GAAG,EAAE;AACL,YAAA,kBAAkB,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AACjC,YAAA,GAAG,CAAC,IAAI,EAAE,MAAM,EAAE,CAAC;SACtB;KACJ;AACL,EAAE;AAEF;;;;;AAKG;AACU,MAAA,iBAAiB,GAAG,CAAC,KAAiB,KAAI;IACnD,MAAM,QAAQ,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IAC/C,IAAI,QAAQ,IAAI,QAAQ,CAAC,MAAM,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,QAAQ,CAAC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,EAAE;QAClG,QAAQ,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,GAAG,GAAG,CAAC;AACpC,QAAA,MAAM,IAAI,GAAG,OAAO,EAAE,CAAC;AACvB,QAAA,IAAI,CAAC,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;AAClC,QAAA,QAAQ,CAAC,IAAI,GAAG,IAAI,CAAC;AACrB,QAAA,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,cAAc,CAAC,CAAC;QACnC,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;KACvD;AACL;;ACrCa,MAAA,iBAAiB,GAAG;AAC7B,IAAA,OAAO,EAAE,CAAC,KAAU,KAAyB;AACzC,QAAA,OAAO,KAAK,CAAC,IAAI,KAAK,OAAO,CAAC;KACjC;;;ACOQ,MAAA,QAAQ,GAAsB;AACvC,IAAA,UAAU,EAAE,CAAC,KAAU,KAAuB;AAC1C,QAAA,OAAO,CAAC,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,mBAAmB,CAAC,CAAC;KAC1F;;;ACVQ,MAAA,IAAI,GAAG;AAChB;;;;;AAKG;AACH,IAAA,SAAS,CAAC,IAAU,EAAE,OAAA,GAA6B,EAAE,EAAA;AACjD,QAAA,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QACpC,IAAI,KAAK,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;QAEvC,IAAI,OAAO,EAAE;AACT,YAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM;YACH,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC9B;AAED,QAAA,OAAO,KAAK,CAAC;KAChB;AACD;;;;;;AAMG;AACH,IAAA,MAAM,CAAC,IAAU,EAAE,OAAA,GAA6B,EAAE,EAAA;AAC9C,QAAA,MAAM,EAAE,OAAO,GAAG,KAAK,EAAE,GAAG,OAAO,CAAC;QACpC,MAAM,IAAI,GAAW,EAAE,CAAC;AAExB,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACnC,YAAA,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;SAC/B;QAED,IAAI,OAAO,EAAE;YACT,IAAI,CAAC,OAAO,EAAE,CAAC;SAClB;AAED,QAAA,OAAO,IAAI,CAAC;KACf;AACD,IAAA,MAAM,CAAC,IAAU,EAAA;AACb,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,gDAAgD,IAAI,CAAA,EAAA,CAAI,CAAC,CAAC;SAC7E;QAED,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;KAC5B;AACD,IAAA,IAAI,CAAC,IAAU,EAAA;AACX,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAA,gCAAA,CAAkC,CAAC,CAAC;SACvG;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;KAC7C;AACD,IAAA,WAAW,CAAC,IAAU,EAAA;QAClB,OAAO,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC;KACpC;AACD,IAAA,QAAQ,CAAC,IAAU,EAAA;AACf,QAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,YAAA,MAAM,IAAI,KAAK,CAAC,4CAA4C,IAAI,CAAA,oCAAA,CAAsC,CAAC,CAAC;SAC3G;QACD,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACnC,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC;KAC7C;AACD;;AAEG;IAEH,UAAU,CAAC,IAAU,EAAE,OAAa,EAAA;AAChC,QAAA,OAAO,IAAI,CAAC,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;KAC5E;AACD;;;;;;;AAOG;IACH,OAAO,CAAC,IAAU,EAAE,OAAa,EAAA;AAC7B,QAAA,MAAM,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,CAAC,MAAM,CAAC,CAAC;AAElD,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,EAAE,CAAC,EAAE,EAAE;YAC1B,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,CAAC,CAAC;YACpC,IAAI,IAAI,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC;AAAE,gBAAA,OAAO,CAAC,CAAC;SACtC;AAED,QAAA,OAAO,CAAC,CAAC;KACZ;AAED;;AAEG;IAEH,MAAM,CAAC,IAAU,EAAE,OAAa,EAAA;QAC5B,OAAO,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,IAAI,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,KAAK,OAAO,CAAC,CAAC,CAAC,CAAC,CAAC;KACnF;AACD;;AAEG;IAEH,UAAU,CAAC,IAAU,EAAE,OAAa,EAAA;AAChC,QAAA,MAAM,CAAC,GAAG,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC;QAC1B,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;QAC5B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;AAC/B,QAAA,MAAM,EAAE,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AACnB,QAAA,MAAM,EAAE,GAAG,OAAO,CAAC,CAAC,CAAC,CAAC;AACtB,QAAA,OAAO,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,IAAI,EAAE,GAAG,EAAE,CAAC;KACzC;AACD;;AAEG;IACH,SAAS,CAAC,IAAU,EAAE,OAAa,EAAA;QAC/B,IAAI,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,MAAM,EAAE;AAChC,YAAA,OAAO,KAAK,CAAC;SAChB;QAED,MAAM,EAAE,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAC7B,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;QAChC,MAAM,EAAE,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QACjC,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AACvC,QAAA,OAAO,EAAE,KAAK,EAAE,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC;KAC3C;IACD,SAAS,CAAC,IAAiB,EAAE,SAAyB,EAAA;AAClD,QAAA,OAAO,OAAO,CAAC,IAAI,EAAE,CAAC,IAAG;;YAErB,IAAI,CAAC,IAAI,IAAI,IAAI,EAAE,MAAM,KAAK,CAAC,EAAE;gBAC7B,OAAO;aACV;AAED,YAAA,IAAI,CAAC,KAAK,IAAI,EAAE;AACZ,gBAAA,OAAO,IAAI,CAAC;aACf;AAED,YAAA,QAAQ,SAAS,CAAC,IAAI;gBAClB,KAAK,aAAa,EAAE;AAChB,oBAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;oBAE/B,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;wBACxE,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;qBACzB;oBAED,MAAM;iBACT;gBAED,KAAK,aAAa,EAAE;AAChB,oBAAA,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,SAAS,CAAC;AAE/B,oBAAA,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC9C,wBAAA,OAAO,IAAI,CAAC;qBACf;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;wBAC/B,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;qBACzB;oBAED,MAAM;iBACT;gBAED,KAAK,WAAW,EAAE;oBACd,MAAM,EAAE,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,SAAS,CAAC;;oBAG7C,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,EAAE;wBACtB,OAAO;qBACV;AAED,oBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;AAC9C,wBAAA,MAAM,IAAI,GAAG,GAAG,CAAC,KAAK,EAAE,CAAC;;;AAGzB,wBAAA,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,EAAE,CAAC,MAAM,IAAI,GAAG,CAAC,MAAM,EAAE;4BACrD,IAAI,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;yBAC5B;AAED,wBAAA,OAAO,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,CAAC;qBAC1C;AAAM,yBAAA,IAAI,IAAI,CAAC,SAAS,CAAC,EAAE,EAAE,GAAG,CAAC,KAAK,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,CAAC,EAAE;wBACpF,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;4BACxB,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;yBACzB;6BAAM;4BACH,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;yBACzB;qBACJ;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,IAAI,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;wBAClF,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;4BACxB,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;yBACzB;wBAED,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;qBAC1B;yBAAM,IAAI,IAAI,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE;wBAC/B,IAAI,IAAI,CAAC,MAAM,CAAC,GAAG,EAAE,CAAC,CAAC,EAAE;4BACrB,CAAC,CAAC,GAAG,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;yBAC1B;wBAED,CAAC,CAAC,EAAE,CAAC,MAAM,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC;qBACzB;oBAED,MAAM;iBACT;aACJ;AACD,YAAA,OAAO,CAAC,CAAC;AACb,SAAC,CAAC,CAAC;KACN;;;ACpMQ,MAAA,SAAS,GAAG;AACrB,IAAA,MAAM,EAAE,CAAC,KAAiB,EAAE,IAAU,KAAI;QACtC,MAAM,UAAU,GAAG,IAAI,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;QACrC,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC;AAC3C,QAAA,OAAO,CAAC,CAAC;KACZ;AACD;;;;;AAKG;AACH,IAAA,CAAC,OAAO,CAAC,IAAgB,EAAE,IAAU,EAAE,UAA8B,EAAE,EAAA;AACnE,QAAA,KAAK,MAAM,CAAC,IAAI,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;YAC3C,MAAM,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC;AACjC,YAAA,MAAM,CAAC,CAAC;SACX;KACJ;IACD,GAAG,CAAkC,IAAgB,EAAE,IAAU,EAAA;QAC7D,IAAI,IAAI,GAAa,IAAI,CAAC;AAC1B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAClC,YAAA,MAAM,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,YAAA,IAAI,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,QAAQ,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE;AAC9C,gBAAA,MAAM,IAAI,KAAK,CAAC,qCAAqC,IAAI,CAAA,CAAA,CAAG,CAAC,CAAC;aACjE;AACD,YAAA,IAAI,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SAC3B;AACD,QAAA,OAAO,IAAS,CAAC;KACpB;IACD,IAAI,CAAC,KAAiB,EAAE,IAAU,EAAA;QAC9B,IAAI,CAAC,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACnC,QAAA,OAAO,CAAC,IAAI,CAAC,CAAC,QAAQ,IAAI,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;YAC7C,MAAM,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC;AAChC,YAAA,CAAC,GAAG,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC;SACrB;AACD,QAAA,OAAO,CAAC,CAAC;KACZ;;;ACnCL,MAAM,YAAY,GAAG,CAAC,KAAiB,EAAE,SAA2B,EAAE,QAAkB,EAAE,KAAiB,EAAE,EAAkB,KAAI;AAC/H,IAAA,QAAQ,EAAE,CAAC,IAAI;QACX,KAAK,aAAa,EAAE;AAChB,YAAA,MAAM,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YAC1B,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEpC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpD,gBAAA,MAAM,IAAI,KAAK,CACX,oDAAoD,IAAI,CAAA,sDAAA,CAAwD,CACnH,CAAC;aACL;YAED,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YACvC,MAAM;SACT;QACD,KAAK,aAAa,EAAE;AAChB,YAAA,MAAM,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;YACpB,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEpC,YAAA,IAAI,CAAC,MAAM,CAAC,QAAQ,IAAI,KAAK,GAAG,MAAM,CAAC,QAAQ,CAAC,MAAM,EAAE;AACpD,gBAAA,MAAM,IAAI,KAAK,CACX,oDAAoD,IAAI,CAAA,sDAAA,CAAwD,CACnH,CAAC;aACL;YACD,MAAM,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YACjC,MAAM;SACT;QACD,KAAK,WAAW,EAAE;AACd,YAAA,MAAM,EAAE,IAAI,EAAE,OAAO,EAAE,GAAG,EAAE,CAAC;YAE7B,IAAI,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,OAAO,CAAC,EAAE;gBAChC,MAAM,IAAI,KAAK,CAAC,CAAA,oBAAA,EAAuB,IAAI,CAAkB,eAAA,EAAA,OAAO,CAA6C,2CAAA,CAAA,CAAC,CAAC;aACtH;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACxC,MAAM,MAAM,GAAG,SAAS,CAAC,MAAM,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC7C,MAAM,KAAK,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;;;;;;;YAQpC,MAAM,CAAC,QAAQ,EAAE,MAAM,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;YAClC,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC;AAC3C,YAAA,MAAM,SAAS,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAa,CAAC;YAC1E,MAAM,QAAQ,GAAG,QAAQ,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;YAE/C,SAAS,CAAC,QAAQ,EAAE,MAAM,CAAC,QAAQ,EAAE,CAAC,EAAE,IAAI,CAAC,CAAC;YAC9C,MAAM;SACT;QACD,KAAK,UAAU,EAAE;YACb,MAAM,EAAE,IAAI,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AAE/C,YAAA,IAAI,IAAI,CAAC,MAAM,KAAK,CAAC,EAAE;AACnB,gBAAA,MAAM,IAAI,KAAK,CAAC,CAAA,uCAAA,CAAyC,CAAC,CAAC;aAC9D;YAED,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAExC,YAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC7B,gBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAEjC,gBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;iBACpB;qBAAM;AACH,oBAAA,IAAI,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;iBACrB;aACJ;;AAGD,YAAA,KAAK,MAAM,GAAG,IAAI,UAAU,EAAE;gBAC1B,IAAI,CAAC,aAAa,CAAC,cAAc,CAAC,GAAG,CAAC,EAAE;AACpC,oBAAA,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC;iBACpB;aACJ;YAED,MAAM;SACT;QACD,KAAK,cAAc,EAAE;AACjB,YAAA,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AAC7B,YAAA,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,QAAQ,GAAG,aAAa,CAAC;aAC5B;iBAAM;AACH,gBAAA,IAAI,QAAQ,IAAI,IAAI,EAAE;oBAClB,IAAI,CAAC,QAAQ,CAAC,UAAU,CAAC,aAAa,CAAC,EAAE;AACrC,wBAAA,MAAM,IAAI,KAAK,CACX,CAAA,+DAAA,EAAkE,IAAI,CAAC,SAAS,CAC5E,aAAa,CAChB,CAAqC,mCAAA,CAAA,CACzC,CAAC;qBACL;AACD,oBAAA,QAAQ,GAAG,EAAE,GAAG,aAAa,EAAE,CAAC;iBACnC;AAED,gBAAA,KAAK,MAAM,GAAG,IAAI,aAAa,EAAE;AAC7B,oBAAA,MAAM,KAAK,GAAG,aAAa,CAAC,GAAG,CAAC,CAAC;AAEjC,oBAAA,IAAI,KAAK,IAAI,IAAI,EAAE;AACf,wBAAA,OAAO,QAAQ,CAAC,GAAG,CAAC,CAAC;qBACxB;yBAAM;AACH,wBAAA,QAAQ,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;qBACzB;iBACJ;aACJ;YACD,MAAM;SACT;QACD,KAAK,eAAe,EAAE;AAClB,YAAA,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AAC7B,YAAA,IAAI,aAAa,IAAI,IAAI,EAAE;gBACvB,SAAS,GAAG,aAAa,CAAC;aAC7B;iBAAM;AACH,gBAAA,IAAI,SAAS,KAAK,IAAI,EAAE;AACpB,oBAAA,SAAS,GAAG,EAAE,CAAC,aAAa,CAAC;iBAChC;qBAAM;oBACH,SAAS,GAAG,aAAa,CAAC;iBAC7B;aACJ;YACD,MAAM;SACT;QACD,KAAK,WAAW,EAAE;AACd,YAAA,MAAM,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;YAC7B,KAAK,GAAG,aAA2B,CAAC;YACpC,MAAM;SACT;KACJ;AACD,IAAA,OAAO,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC;AAC1C,CAAC,CAAC;AAEK,MAAM,iBAAiB,GAAsB;AAChD;;AAEG;IACH,SAAS,CAAC,KAAiB,EAAE,EAAkB,EAAA;QAC3C,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7C,QAAA,IAAI,QAAQ,GAAG,KAAK,CAAC,QAAQ,IAAI,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;AAC7D,QAAA,IAAI,SAAS,GAAG,KAAK,CAAC,SAAS,IAAI,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAChE,QAAA,IAAI,KAAK,GAAG,KAAK,CAAC,KAAK,IAAI,WAAW,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;AAEpD,QAAA,IAAI;AACA,YAAA,MAAM,KAAK,GAAG,YAAY,CAAC,KAAK,EAAE,SAAS,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,CAAC,CAAC;AAClE,YAAA,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC;AAC1B,YAAA,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;AAC5B,YAAA,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC;SACvB;gBAAS;YACN,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,QAAQ,CAAC,CAAC;YAE7C,IAAI,SAAS,EAAE;AACX,gBAAA,KAAK,CAAC,SAAS,GAAG,OAAO,CAAC,SAAS,CAAC,GAAI,WAAW,CAAC,SAAS,CAAe,GAAG,SAAS,CAAC;aAC5F;iBAAM;AACH,gBAAA,KAAK,CAAC,SAAS,GAAG,IAAI,CAAC;aAC1B;AAED,YAAA,KAAK,CAAC,QAAQ,GAAG,OAAO,CAAC,QAAQ,CAAC,GAAI,WAAW,CAAC,QAAQ,CAAc,GAAG,QAAQ,CAAC;AACpF,YAAA,KAAK,CAAC,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,GAAG,WAAW,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC;SAC7D;KACJ;CACJ;;SCxKe,UAAU,CAAC,KAAiB,EAAE,IAAe,EAAE,IAAU,EAAA;IACrE,MAAM,SAAS,GAAwB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3E,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;SAEe,OAAO,CAAC,KAAiB,EAAE,KAAyB,EAAE,IAAU,EAAA;IAC5E,MAAM,UAAU,GAAuB,EAAE,CAAC;IAC1C,MAAM,aAAa,GAAuB,EAAE,CAAC;IAC7C,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AACxC,IAAA,KAAK,MAAM,CAAC,IAAI,KAAK,EAAE;QACnB,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,KAAK,CAAC,CAAC,CAAC,EAAE;AACtB,YAAA,IAAI,IAAI,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE;gBACxB,UAAU,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;aAC3B;AACD,YAAA,IAAI,KAAK,CAAC,CAAC,CAAC,IAAI,IAAI;gBAAE,aAAa,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC;SACrD;KACJ;AACD,IAAA,MAAM,SAAS,GAAqB,EAAE,IAAI,EAAE,UAAU,EAAE,UAAU,EAAE,aAAa,EAAE,IAAI,EAAE,CAAC;AAC1F,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAEe,SAAA,UAAU,CAAC,KAAiB,EAAE,IAAU,EAAA;IACpD,MAAM,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;IACxC,MAAM,SAAS,GAAwB,EAAE,IAAI,EAAE,aAAa,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;AAC3E,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;SAEe,QAAQ,CAAC,KAAiB,EAAE,IAAU,EAAE,OAAa,EAAA;IACjE,MAAM,SAAS,GAAsB,EAAE,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,OAAO,EAAE,CAAC;AAC1E,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AASM,MAAM,cAAc,GAAmB;IAC1C,UAAU;IACV,OAAO;IACP,UAAU;IACV,QAAQ;CACX;;AC1Ce,SAAA,YAAY,CAAC,KAAiB,EAAE,SAA2B,EAAA;AACvE,IAAA,MAAM,SAAS,GAA0B,EAAE,IAAI,EAAE,eAAe,EAAE,UAAU,EAAE,KAAK,CAAC,SAAS,EAAE,aAAa,EAAE,SAAS,EAAE,CAAC;AAC1H,IAAA,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC;AAC3B,CAAC;AAOM,MAAM,mBAAmB,GAAwB;IACpD,YAAY;IACZ,iCAAiC;CACpC,CAAC;AAEc,SAAA,iCAAiC,CAAC,KAAiB,EAAE,QAAwB,EAAA;AACzF,IAAA,MAAM,SAAS,GAAG,UAAU,CAAC,MAAK;QAC9B,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;KAC1D,EAAE,CAAC,CAAC,CAAC;AACN,IAAA,IAAI,GAAG,GAAG,eAAe,CAAC,KAAK,CAAC,CAAC;IACjC,IAAI,GAAG,EAAE;AACL,QAAA,YAAY,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;AAC5B,QAAA,MAAM,eAAe,GAAG,GAAG,CAAC,QAAQ,CAAC;QACrC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,GAAG,QAAQ,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;AACrF,QAAA,GAAG,CAAC,SAAS,GAAG,SAAS,CAAC;KAC7B;SAAM;QACH,2BAA2B,CAAC,GAAG,CAAC,KAAK,EAAE,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC;KACnE;AACL;;AC9BO,MAAM,cAAc,GAAG,CAAC,KAAiB,EAAE,QAAwB,KAAI;IAC1E,QAAQ;SACH,GAAG,CAAC,OAAO,IAAG;QACX,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;QACjD,MAAM,GAAG,GAAG,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;AAChC,QAAA,OAAO,MAAK;AACR,YAAA,UAAU,CAAC,KAAK,EAAE,GAAG,CAAC,OAAQ,CAAC,CAAC;YAChC,GAAG,CAAC,KAAK,EAAE,CAAC;AACZ,YAAA,qBAAqB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAC,CAAC;AAChD,SAAC,CAAC;AACN,KAAC,CAAC;SACD,OAAO,CAAC,MAAM,IAAG;AACd,QAAA,MAAM,EAAE,CAAC;AACb,KAAC,CAAC,CAAC;AACX,CAAC,CAAC;AAEW,MAAA,cAAc,GAAG;IAC1B,cAAc;;;ACdL,MAAA,UAAU,GAAkF;AACrG,IAAA,GAAG,iBAAiB;AACpB,IAAA,GAAGA,oBAAkB;AACrB,IAAA,GAAG,mBAAmB;AACtB,IAAA,GAAG,cAAc;;;ACJf,SAAU,iBAAiB,CAAC,KAAiB,EAAA;IAC/C,OAAO,CAAC,CAAC,4BAA4B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AACrD,CAAC;AAEK,SAAU,kBAAkB,CAAC,KAAiB,EAAA;AAChD,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,kBAAkB,CAAC,CAAC;AACtE,IAAA,4BAA4B,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,IAAA,WAAW,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC7B,CAAC;AAEK,SAAU,oBAAoB,CAAC,KAAiB,EAAA;AAClD,IAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,kBAAkB,CAAC,CAAC;AACzE,IAAA,4BAA4B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC3C,IAAA,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC9B,CAAC;AAEK,SAAU,iBAAiB,CAAC,KAAiB,EAAA;IAC/C,MAAM,OAAO,GAAI,KAA2B,CAAC,gBAAgB,CAAoB,cAAc,CAAC,aAAa,CAAC,CAAC;IAC/G,OAAO,KAAK,CAAC,OAAO,KAAK,gBAAgB,CAAC,IAAI,IAAI,CAAC,OAAO,CAAC,gBAAgB,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjH,CAAC;AAEK,SAAU,uBAAuB,CAAC,KAAiB,EAAA;AACrD,IAAA,OAAO,CAAC,CAAC,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,IAAI,KAAK,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;AAC5E,CAAC;AAEK,SAAU,oBAAoB,CAAC,KAAiB,EAAA;IAClD,MAAM,GAAG,GAAG,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;IACnD,IAAI,GAAG,EAAE;QACL,OAAO,GAAG,CAAC,QAAQ,CAAC;KACvB;SAAM;AACH,QAAA,OAAO,SAAS,CAAC;KACpB;AACL,CAAC;AAEK,SAAU,eAAe,CAAC,KAAiB,EAAA;AAC7C,IAAA,OAAO,2BAA2B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAClD,CAAC;AAEK,SAAU,uBAAuB,CAAC,KAAiB,EAAA;AACrD,IAAA,2BAA2B,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC9C,CAAC;AAEK,SAAU,yBAAyB,CAAC,KAAiB,EAAA;AACvD,IAAA,MAAM,QAAQ,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IAC5C,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;AACjE,IAAA,IAAI,SAAS,CAAC,KAAK,GAAG,CAAC,IAAI,SAAS,CAAC,MAAM,GAAG,CAAC,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AACpE,QAAA,MAAM,mBAAmB,GAAG,aAAa,CAAC,KAAK,EAAE,eAAe,CAAC,OAAO,CAAC,SAAS,EAAE,mBAAmB,CAAC,EAAE;AACtG,YAAA,MAAM,EAAE,sBAAsB;AAC9B,YAAA,WAAW,EAAE,mBAAmB;AAChC,YAAA,SAAS,EAAE,OAAO;AACrB,SAAA,CAAC,CAAC;AACH,QAAA,mBAAmB,CAAC,SAAS,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;QAClE,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,mBAAmB,CAAC,CAAC;AACnE,QAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;QAC1C,IAAI,KAAK,EAAE;AACP,YAAA,YAAY,CAAC,mBAAmB,EAAE,eAAe,CAAC,cAAc,CAAC,SAAS,CAAC,EAAE,KAAK,CAAC,CAAC;SACvF;AACD,QAAA,OAAO,mBAAmB,CAAC;KAC9B;AACD,IAAA,OAAO,IAAI,CAAC;AAChB;;ACzDO,MAAM,kBAAkB,GAAG,CAAC,KAAiB,EAAE,KAAiB,EAAE,SAAmB,EAAE,YAAsB,KAAI;IACpH,IAAI,MAAM,GAAmB,EAAE,CAAC;IAChC,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,KAAK,IAAK,KAAsB,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE,CAAmB,CAAC;IAChH,IAAI,SAAS,EAAE;AACX,QAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;AACpB,YAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACjC,IAAI,YAAY,EAAE;AACd,oBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iBACrB;AACD,gBAAA,MAAM,CAAC,IAAI,CAAC,GAAG,kBAAkB,CAAC,KAAK,EAAE,IAAI,EAAE,SAAS,CAAC,CAAC,CAAC;aAC9D;iBAAM;AACH,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrB;AACL,SAAC,CAAC,CAAC;KACN;SAAM;QACH,MAAM,GAAG,YAAY,GAAG,QAAQ,GAAI,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,iBAAiB,CAAC,OAAO,CAAC,IAAI,CAAC,CAAoB,CAAC;KACpH;AACD,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEW,MAAA,mBAAmB,GAAG,CAAC,KAAiB,EAAE,KAAiB,EAAE,SAAmB,KAAI;IAC7F,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAmB,CAAC;IACtF,OAAO,sBAAsB,CAAC,KAAK,EAAE,eAAe,EAAE,KAAK,CAAC,CAAC;AACjE,EAAE;AAEW,MAAA,iBAAiB,GAAG,CAAC,KAAiB,EAAE,OAAqB,EAAE,SAAmB,KAAsC;IACjI,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,EAAE,OAAO,CAAC,CAAC;IACxE,IAAI,CAAC,KAAK,EAAE;QACR,OAAO,SAAS,GAAG,EAAE,GAAG,IAAI,CAAC;KAChC;IACD,IAAI,SAAS,EAAE;AACX,QAAA,MAAM,MAAM,GAAG,CAAC,KAAK,CAAC,CAAC;QACvB,MAAM,WAAW,GAAG,iBAAiB,CAAC,KAAK,EAAE,KAAK,EAAE,SAAS,CAAiB,CAAC;AAC/E,QAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACpB,YAAA,MAAM,CAAC,IAAI,CAAC,GAAG,WAAW,CAAC,CAAC;SAC/B;AACD,QAAA,OAAO,MAAsB,CAAC;KACjC;SAAM;AACH,QAAA,OAAO,KAAmB,CAAC;KAC9B;AACL,EAAE;MAEW,eAAe,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;IACxE,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAiB,CAAC;AACvE,IAAA,IAAI,MAAM,CAAC,MAAM,EAAE;QACf,OAAO,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACpC;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;MAEW,2BAA2B,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;IACpF,MAAM,YAAY,GAAG,eAAe,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;IACrD,IAAI,YAAY,EAAE;QACd,OAAO,kBAAkB,CAAC,KAAK,EAAE,YAAY,EAAE,IAAI,CAAiB,CAAC;KACxE;SAAM;QACH,OAAO,CAAC,OAAO,CAAC,CAAC;KACpB;AACL,EAAE;MAEW,wBAAwB,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAI;AACjF,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,IAAI,iBAAiB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE;AACpC,QAAA,OAAO,4BAA4B,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;KACvD;AACD,IAAA,OAAO,gBAAgB,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC9C,EAAE;MAEW,4BAA4B,GAAG,CAAC,KAAiB,EAAE,KAAiB,KAAI;AACjF,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,MAAM,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;AAC/D,IAAA,OAAO,eAAe,CAAC,KAAK,CAAC,IAAI,IAAI,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC;AAC1E,EAAE;MAEW,iBAAiB,GAAG,CAAC,KAAiB,EAAE,MAAoB,KAAkB;IACvF,MAAM,cAAc,GAAiB,EAAE,CAAC;AACxC,IAAA,MAAM,CAAC,OAAO,CAAC,IAAI,IAAG;AAClB,QAAA,IAAI,wBAAwB,CAAC,KAAK,EAAE,IAAI,CAAC,EAAE;AACvC,YAAA,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SAC7B;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,cAAc,CAAC;AAC1B,EAAE;MAEW,uBAAuB,GAAG,CAAC,KAAiB,EAAE,OAAqB,KAAuB;IACnG,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,OAAO,EAAE,IAAI,CAAiB,CAAC;IACvE,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACxD,IAAA,IAAI,cAAc,CAAC,MAAM,EAAE;QACvB,OAAO,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;KACpD;AACD,IAAA,OAAO,IAAI,CAAC;AAChB,EAAE;AAEW,MAAA,wBAAwB,GAAG,CAAC,KAAiB,KAAkB;IACxE,IAAI,MAAM,GAAiB,EAAE,CAAC;AAC9B,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,gBAAgB,CAAC,OAAO,CAAC,IAAI,IAAG;AAC5B,QAAA,IAAI,IAAI,CAAC,OAAO,EAAE;YACd,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,KAAK,IAAI,CAAC,MAAM,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE;AAClC,gBAAA,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACtB;SACJ;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEW,MAAA,2BAA2B,GAAG,CAAC,KAAiB,KAAI;IAC7D,IAAI,MAAM,GAAmB,EAAE,CAAC;AAChC,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,gBAAgB,CAAC,OAAO,CAAC,IAAI,IAAG;AAC5B,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,YAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;SACrB;aAAM;YACH,MAAM,KAAK,GAAG,uBAAuB,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YACnD,IAAI,CAAC,KAAK,EAAE;AACR,gBAAA,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;aACrB;SACJ;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,MAAM,CAAC;AAClB,EAAE;AAEW,MAAA,0BAA0B,GAAG,CAAC,KAAiB,KAAI;AAC5D,IAAA,OAAO,CAAC,GAAG,wBAAwB,CAAC,KAAK,CAAC,EAAE,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC,CAAC;AACvF,EAAE;MAEW,qBAAqB,GAAG,CAAC,KAAiB,EAAE,QAAwB,KAAwB;AACrG,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,MAAM,eAAe,GAAgB,OAAO,EAAE,CAAC;AAC/C,IAAA,MAAM,QAAQ,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAE1C,IAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;AACpB,QAAA,MAAM,QAAQ,GAAG,CAAC,CAAC,gBAAgB,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,KAAK,QAAQ,CAAC;AAC7E,QAAA,IAAI,IAAI,CAAC,OAAO,IAAI,QAAQ,EAAE;YAC1B,MAAM,QAAQ,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;YAC1D,MAAM,SAAS,GAAG,sBAAsB,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,CAAC,CAAC;YACjE,eAAe,CAAC,MAAM,CAClB,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE;AAC5B,gBAAA,MAAM,EAAE,sBAAsB;AAC9B,gBAAA,WAAW,EAAE,mBAAmB;gBAChC,cAAc,EAAE,CAAC,CAAC,CAAC;AACtB,aAAA,CAAC,CACL,CAAC;SACL;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,eAAe,CAAC;AAC3B,EAAE;AAEK,MAAM,WAAW,GAAG,MAAiB;IACxC,OAAO;QACH,EAAE,EAAE,SAAS,EAAE;AACf,QAAA,IAAI,EAAE,OAAO;KAChB,CAAC;AACN,EAAE;AAEW,MAAA,iCAAiC,GAAG,CAAC,QAAwB,KAAI;AAC1E,IAAA,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;AACjD,EAAE;AAEW,MAAA,8BAA8B,GAAG,CAAC,QAAwB,KAAI;IACvE,OAAO,QAAQ,CAAC,KAAK,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,OAAO,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;AACxF,EAAE;AAEW,MAAA,WAAW,GAAG,CAAC,uBAAuC,KAAI;AACnE,IAAA,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;QACpC,OAAO,iCAAiC,CAAC,uBAAuB,CAAC,IAAI,8BAA8B,CAAC,uBAAuB,CAAC,CAAC;KAChI;AACD,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEW,MAAA,QAAQ,GAAG,CAAC,KAAiB,KAAI;AAC1C,IAAA,MAAM,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACvD,IAAA,MAAM,wBAAwB,GAAG,2BAA2B,CAAC,KAAK,CAAC,CAAC;IACpE,MAAM,uBAAuB,GAAG,CAAC,GAAG,cAAc,EAAE,GAAG,wBAAwB,CAAC,CAAC;AACjF,IAAA,MAAM,KAAK,GAAG,WAAW,EAAE,CAAC;AAC5B,IAAA,IAAI,WAAW,CAAC,uBAAuB,CAAC,EAAE;AACtC,QAAA,uBAAuB,CAAC,OAAO,CAAC,IAAI,IAAG;YACnC,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,YAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,EAAE,EAAE,EAAE,IAAI,CAAC,CAAC;AAC3D,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,8BAA8B,CAAC,uBAAuB,CAAC,EAAE;YACzD,MAAM,UAAU,GAAG,wBAAwB,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC;AACvD,YAAA,UAAU,CAAC,UAAU,CACjB,KAAK,EACL;AACI,gBAAA,GAAG,KAAK;AACR,gBAAA,OAAO,EAAE,UAAU;aACtB,EACD,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAC1B,CAAC;SACL;aAAM;AACH,YAAA,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,EAAE,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC;SAChE;KACJ;AACL,EAAE;MAEW,cAAc,GAAG,CAAC,KAAiB,EAAE,cAA4B,KAAI;AAC9E,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;IACpD,OAAO,gBAAgB,CAAC,MAAM,GAAG,CAAC,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC;AACpE,EAAE;AAEW,MAAA,WAAW,GAAG,CAAC,KAAiB,KAAI;AAC7C,IAAA,MAAM,cAAc,GAAG,wBAAwB,CAAC,KAAK,CAAC,CAAC;AACvD,IAAA,IAAI,cAAc,CAAC,KAAK,EAAE,cAAc,CAAC,EAAE;AACvC,QAAA,cAAc,CAAC,GAAG,CAAC,KAAK,IAAG;AACvB,YAAA,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE;gBACxC,KAAK,EAAE,IAAI,IAAI,IAAI,CAAC,OAAO,KAAK,KAAK,CAAC,EAAE;AACxC,gBAAA,SAAS,EAAE,MAAM,KAAK;AACzB,aAAA,CAAC,CAAC;AACH,YAAA,eAAe,CAAC,OAAO,CAAC,IAAI,IAAG;gBAC3B,MAAM,IAAI,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAC9C,gBAAA,UAAU,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,OAAO,IAAI,SAAS,EAAE,EAAE,IAAI,CAAC,CAAC;AAC7E,aAAC,CAAC,CAAC;YACH,MAAM,SAAS,GAAG,UAAU,CAAC,QAAQ,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AACpD,YAAA,UAAU,CAAC,UAAU,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAC5C,SAAC,CAAC,CAAC;KACN;AACL;;ACjOa,MAAA,YAAY,GAAG,CAAC,MAAe,EAAE,WAAkB,EAAE,KAAa,KAAI;IAC/E,IAAI,CAAC,KAAK,EAAE;QACR,KAAK,GAAG,CAAC,CAAC;KACb;AACD,IAAA,OAAO,MAAM,CAAC,GAAG,CAAC,KAAK,IAAG;QACtB,OAAO,MAAM,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE,KAAK,CAAU,CAAC;AACtF,KAAC,CAAC,CAAC;AACP,EAAE;AAEW,MAAA,iBAAiB,GAAG,CAAC,QAAwB,KAAI;IAC1D,IAAI,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC;AACnC,IAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;AACpB,QAAA,IAAI,IAAI,CAAC,KAAK,KAAK,KAAK,IAAI,CAAC,aAAa,CAAC,CAAC,IAAI,CAAC,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,EAAE,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YACnG,KAAK,GAAG,CAAC,CAAC;SACb;AACL,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,KAAK,CAAC;AACjB,EAAE;AAEW,MAAA,YAAY,GAAG,CAAC,QAAwB,KAAI;AACrD,IAAA,OAAO,CAAC,CAAC,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AACzC,EAAE;MAEW,2BAA2B,GAAG,CAAC,sBAAsD,EAAE,KAAa,KAAI;IACjH,IAAI,oBAAoB,GAAsB,EAAE,CAAC;AACjD,IAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,sBAAsB,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACpD,QAAA,MAAM,YAAY,GAAG,sBAAsB,CAAC,CAAC,CAAC,CAAC;AAC/C,QAAA,MAAM,4BAA4B,GAAG,YAAY,CAAC,YAAY,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;QAChF,oBAAoB,CAAC,IAAI,CAAC,eAAe,CAAC,oBAAoB,CAAC,4BAA4B,CAAC,CAAC,CAAC;KACjG;IAED,MAAM,4BAA4B,GAAG,eAAe,CAAC,oBAAoB,CAAC,oBAAoB,CAAC,CAAC;IAChG,MAAM,qBAAqB,GAAG,eAAe,CAAC,eAAe,CAAC,4BAA4B,CAAC,CAAC;AAC5F,IAAA,MAAM,sBAAsB,GAAG,YAAY,CAAC,qBAAqB,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC;AAClF,IAAA,MAAM,WAAW,GAAG,eAAe,CAAC,cAAc,CAAC,eAAe,CAAC,oBAAoB,CAAC,sBAAsB,CAAC,CAAC,CAAC;AACjH,IAAA,OAAO,eAAe,CAAC,oBAAoB,CAAC,YAAY,CAAC,sBAAsB,EAAE,WAAW,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AAC3G;;ACzBa,MAAA,YAAY,GAAG;AACxB,IAAA,aAAa,CAAC,KAAmB,EAAA;QAC7B,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACzC,IAAI,MAAM,IAAI,UAAU,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;AACtC,YAAA,OAAO,IAAI,CAAC;SACf;aAAM;AACH,YAAA,OAAO,KAAK,CAAC;SAChB;KACJ;AACD,IAAA,YAAY,CAAC,KAAmB,EAAA;AAC5B,QAAA,OAAO,oBAAoB,CAAC,GAAG,CAAC,KAAK,CAAgC,CAAC;KACzE;;;ACsCQ,MAAA,sBAAsB,GAAG,CAAC,KAAU,KAAmC;AAChF,IAAA,OAAO,KAAK,CAAC,IAAI,KAAK,cAAc,CAAC;AACzC,EAAE;AAEW,MAAA,OAAO,GAAG,CAAC,EAAkB,KAAoB;AAC1D,IAAA,QAAQ,EAAE,CAAC,IAAI;QACX,KAAK,aAAa,EAAE;YAChB,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SACzC;QAED,KAAK,aAAa,EAAE;YAChB,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,aAAa,EAAE,CAAC;SACzC;QAED,KAAK,WAAW,EAAE;AACd,YAAA,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,CAAC;;YAG7B,IAAI,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,IAAI,CAAC,EAAE;AAC5B,gBAAA,OAAO,EAAE,CAAC;aACb;;;;;;;;;;;;YAcD,MAAM,WAAW,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,EAAE,EAAE,CAAE,CAAC;AAC9C,YAAA,MAAM,cAAc,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAE,CAAC;AAC5D,YAAA,OAAO,EAAE,GAAG,EAAE,EAAE,IAAI,EAAE,WAAW,EAAE,OAAO,EAAE,cAAc,EAAE,CAAC;SAChE;QAED,KAAK,UAAU,EAAE;AACb,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AACzC,YAAA,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;SAC1E;QAED,KAAK,eAAe,EAAE;AAClB,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AAEzC,YAAA,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,OAAO;AACH,oBAAA,GAAG,EAAE;AACL,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,aAAa,EAAE,IAAI;iBACtB,CAAC;aACL;AAAM,iBAAA,IAAI,aAAa,IAAI,IAAI,EAAE;gBAC9B,OAAO;AACH,oBAAA,GAAG,EAAE;AACL,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,aAAa,EAAE,UAAU;iBAC5B,CAAC;aACL;iBAAM;AACH,gBAAA,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;aAC1E;SACJ;QAED,KAAK,cAAc,EAAE;AACjB,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AACzC,YAAA,IAAI,UAAU,IAAI,IAAI,EAAE;gBACpB,OAAO;AACH,oBAAA,GAAG,EAAE;AACL,oBAAA,UAAU,EAAE,aAAa;AACzB,oBAAA,aAAa,EAAE,aAAa;iBAC/B,CAAC;aACL;AAAM,iBAAA,IAAI,aAAa,IAAI,IAAI,EAAE;gBAC9B,OAAO;AACH,oBAAA,GAAG,EAAE;AACL,oBAAA,UAAU,EAAE,UAAU;AACtB,oBAAA,aAAa,EAAE,UAAU;iBAC5B,CAAC;aACL;iBAAM;AACH,gBAAA,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;aAC1E;SACJ;QAED,KAAK,WAAW,EAAE;AACd,YAAA,MAAM,EAAE,UAAU,EAAE,aAAa,EAAE,GAAG,EAAE,CAAC;AACzC,YAAA,OAAO,EAAE,GAAG,EAAE,EAAE,UAAU,EAAE,aAAa,EAAE,aAAa,EAAE,UAAU,EAAE,CAAC;SAC1E;KACJ;AACL,EAAE;AAEW,MAAA,cAAc,GAA4B;IACnD,sBAAsB;IACtB,OAAO;;;ACpJE,MAAA,KAAK,GAAG;IACjB,QAAQ,CAAC,KAAa,EAAE,UAAkB,EAAA;QACtC,OAAO,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,KAAK,UAAU,CAAC,CAAC,CAAC,CAAC;KAC1F;AACD,IAAA,YAAY,CAAC,KAAa,EAAE,UAAkB,EAAE,SAAS,GAAG,CAAC,EAAA;AACzD,QAAA,OAAO,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,gBAAgB,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;KACxF;AACD,IAAA,gBAAgB,CAAC,MAAe,EAAE,SAAA,GAAoB,CAAC,EAAA;AACnD,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;KAChF;AACD,IAAA,UAAU,CAAC,KAAa,EAAE,UAAkB,EAAE,SAAS,GAAG,CAAC,EAAA;AACvD,QAAA,OAAO,KAAK,IAAI,UAAU,IAAI,KAAK,CAAC,cAAc,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAAE,SAAS,CAAC,CAAC;KACtF;AACD,IAAA,cAAc,CAAC,MAAe,EAAE,SAAA,GAAoB,CAAC,EAAA;AACjD,QAAA,OAAO,MAAM,CAAC,KAAK,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC;KAChF;AACD,IAAA,OAAO,CAAC,MAAe,EAAE,SAAA,GAAoB,CAAC,EAAA;AAC1C,QAAA,OAAO,KAAK,CAAC,gBAAgB,CAAC,MAAM,EAAE,SAAS,CAAC,IAAI,KAAK,CAAC,cAAc,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC;KAC/F;IACD,UAAU,CAAC,MAAa,EAAE,MAAa,EAAA;QACnC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;KAChC;IACD,UAAU,CAAC,MAAa,EAAE,MAAa,EAAA;QACnC,OAAO,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,CAAC,CAAC,CAAC;KAChC;;;ACvBQ,MAAA,MAAM,GAAG,IAAI,OAAO,GAAoC;AACxD,MAAA,OAAO,GAAG,IAAI,OAAO;;ICCtB,eAOX;AAPD,CAAA,UAAY,cAAc,EAAA;AACtB,IAAA,cAAA,CAAA,SAAA,CAAA,GAAA,SAAqB,CAAA;AACrB,IAAA,cAAA,CAAA,UAAA,CAAA,GAAA,UAAuB,CAAA;AACvB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAe,CAAA;AACf,IAAA,cAAA,CAAA,OAAA,CAAA,GAAA,OAAiB,CAAA;AACjB,IAAA,cAAA,CAAA,MAAA,CAAA,GAAA,MAAe,CAAA;AACf,IAAA,cAAA,CAAA,QAAA,CAAA,GAAA,QAAmB,CAAA;AACvB,CAAC,EAPW,cAAc,KAAd,cAAc,GAOzB,EAAA,CAAA,CAAA,CAAA;AAEY,MAAA,iBAAiB,GAAe;IACzC,IAAI,EAAE,cAAc,CAAC,OAAO;AAC5B,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;EACtB;AAEW,MAAA,kBAAkB,GAAe;IAC1C,IAAI,EAAE,cAAc,CAAC,QAAQ;AAC7B,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;EACtB;AAEW,MAAA,cAAc,GAAe;IACtC,IAAI,EAAE,cAAc,CAAC,IAAI;AACzB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;EACtB;AAEW,MAAA,eAAe,GAAe;IACvC,IAAI,EAAE,cAAc,CAAC,KAAK;AAC1B,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;EACtB;AAEW,MAAA,cAAc,GAAe;IACtC,IAAI,EAAE,cAAc,CAAC,IAAI;AACzB,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;EACtB;AAEW,MAAA,gBAAgB,GAAe;IACxC,IAAI,EAAE,cAAc,CAAC,MAAM;AAC3B,IAAA,eAAe,EAAE,SAAS;AAC1B,IAAA,SAAS,EAAE,SAAS;EACtB;AAEW,MAAA,WAAW,GAAiB;IACrC,iBAAiB;IACjB,kBAAkB;IAClB,cAAc;IACd,eAAe;IACf,cAAc;IACd,gBAAgB;;;IC7DR,UAKX;AALD,CAAA,UAAY,SAAS,EAAA;AACjB,IAAA,SAAA,CAAA,MAAA,CAAA,GAAA,MAAa,CAAA;AACb,IAAA,SAAA,CAAA,KAAA,CAAA,GAAA,KAAW,CAAA;AACX,IAAA,SAAA,CAAA,OAAA,CAAA,GAAA,OAAe,CAAA;AACf,IAAA,SAAA,CAAA,QAAA,CAAA,GAAA,QAAiB,CAAA;AACrB,CAAC,EALW,SAAS,KAAT,SAAS,GAKpB,EAAA,CAAA,CAAA;;SCDe,sBAAsB,CAAC,KAAiB,EAAE,QAAwB,EAAE,SAAkB,EAAA;IAClG,MAAM,sBAAsB,GAAmC,EAAE,CAAC;AAClE,IAAA,MAAM,QAAQ,GAAG,CAAC,IAAkB,KAAI;QACpC,MAAM,aAAa,GAAG,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;QAC/C,IAAI,aAAa,EAAE;YACf,MAAM,YAAY,GAAG,eAAe,CAAC,eAAe,CAAC,aAAa,CAAC,CAAC;AACpE,YAAA,MAAM,mBAAmB,GAAG,YAAY,CAAC,YAAY,EAAE,eAAe,CAAC,cAAc,CAAC,aAAa,CAAC,EAAE,IAAI,CAAC,KAAK,IAAI,CAAC,CAKpH,CAAC;AACF,YAAA,sBAAsB,CAAC,IAAI,CAAC,mBAAmB,CAAC,CAAC;SACpD;aAAM;AACH,YAAA,OAAO,CAAC,KAAK,CAAC,mCAAmC,EAAE,IAAI,CAAC,CAAC;SAC5D;AACL,KAAC,CAAC;AACF,IAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;QACvB,IAAI,SAAS,EAAE;YACX,mBAAmB,CACf,OAAO,EACP,IAAI,IAAI,QAAQ,CAAC,IAAI,CAAC,EACtB,IAAI,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAClC,CAAC;SACL;aAAM;YACH,QAAQ,CAAC,OAAO,CAAC,CAAC;SACrB;AACL,KAAC,CAAC,CAAC;AACH,IAAA,IAAI,sBAAsB,CAAC,MAAM,GAAG,CAAC,EAAE;AACnC,QAAA,IAAI,YAAY,CAAC,QAAQ,CAAC,EAAE;AACxB,YAAA,MAAM,KAAK,GAAG,iBAAiB,CAAC,QAAQ,CAAC,CAAC;AAC1C,YAAA,OAAO,2BAA2B,CAAC,sBAAsB,EAAE,KAAK,CAAC,CAAC;SACrE;aAAM;YACH,MAAM,gBAAgB,GAAY,sBAAsB,CAAC,MAAM,CAAC,CAAC,GAAY,EAAE,GAAG,KAAI;AAClF,gBAAA,OAAO,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;aAC1B,EAAE,EAAE,CAAC,CAAC;AACP,YAAA,OAAO,eAAe,CAAC,oBAAoB,CAAC,gBAAgB,CAAC,CAAC;SACjE;KACJ;SAAM;QACH,OAAO;AACH,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,CAAC,EAAE,CAAC;AACJ,YAAA,KAAK,EAAE,CAAC;AACR,YAAA,MAAM,EAAE,CAAC;SACZ,CAAC;KACL;AACL,CAAC;AAEK,SAAU,iBAAiB,CAAC,KAAiB,EAAA;IAC/C,OAAO,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;AAC/D,CAAC;SAEe,cAAc,CAC1B,KAAiB,EACjB,EAAU,EACV,UAA2B,EAAA;IAE3B,IAAI,CAAC,UAAU,EAAE;QACb,UAAU,GAAG,YAAY,CAAC,KAAK,EAAE,EAAE,KAAK,EAAE,OAAO,IAAI,IAAI,EAAE,SAAS,EAAE,OAAO,IAAI,IAAI,EAAE,CAAC,CAAC;KAC5F;AACD,IAAA,IAAI,OAAO,GAAG,UAAU,CAAC,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,EAAE,KAAK,EAAE,CAAM,CAAC;AACjE,IAAA,OAAO,OAAO,CAAC;AACnB,CAAC;AAEe,SAAA,YAAY,CACxB,KAAiB,EACjB,OAIC,EAAA;IAED,IAAI,QAAQ,GAAQ,EAAE,CAAC;AACvB,IAAA,MAAM,SAAS,GAAG,OAAO,CAAC,SAAS,IAAI,IAAI,CAAC;AAC5C,IAAA,mBAAmB,CACf,KAAK,EACL,IAAI,IAAG;AACH,QAAA,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE;AAClD,YAAA,QAAQ,CAAC,IAAI,CAAC,IAAS,CAAC,CAAC;SAC5B;AACL,KAAC,EACD,CAAC,KAAe,KAAI;AAChB,QAAA,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC3B,YAAA,OAAO,IAAI,CAAC;SACf;aAAM;AACH,YAAA,OAAO,kBAAkB,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;SACvE;KACJ,EACD,SAAS,CACZ,CAAC;AACF,IAAA,OAAO,QAAQ,CAAC;AACpB;;ACqBa,MAAA,UAAU,GAAG;AACtB,IAAA,OAAO,CAAC,KAAU,EAAA;QACd,MAAM,aAAa,GAAG,cAAc,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,IAAI,aAAa,KAAK,SAAS,EAAE;AAC7B,YAAA,OAAO,aAAa,CAAC;SACxB;AACD,QAAA,MAAM,OAAO,GAAG,OAAO,KAAK,CAAC,QAAQ,KAAK,UAAU,IAAI,OAAO,KAAK,CAAC,KAAK,KAAK,UAAU,CAAC;AAC1F,QAAA,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC;AACnC,QAAA,OAAO,OAAO,CAAC;KAClB;IACD,QAAQ,CAAC,KAAiB,EAAE,IAAe,EAAA;QACvC,MAAM,IAAI,GAAS,EAAE,CAAC;QACtB,IAAI,KAAK,GAAa,IAAI,CAAC;QAC3B,OAAO,IAAI,EAAE;YACT,MAAM,MAAM,GAAG,cAAc,CAAC,GAAG,CAAC,KAAqB,CAAC,CAAC;AACzD,YAAA,IAAI,MAAM,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;AAC3B,oBAAA,OAAO,IAAI,CAAC;iBACf;qBAAM;oBACH,MAAM;iBACT;aACJ;YACD,MAAM,CAAC,GAAG,aAAa,CAAC,GAAG,CAAC,KAAqB,CAAC,CAAC;AACnD,YAAA,IAAI,CAAC,IAAI,IAAI,EAAE;gBACX,MAAM;aACT;AACD,YAAA,IAAI,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC;YAChB,KAAK,GAAG,MAAM,CAAC;SAClB;AACD,QAAA,MAAM,IAAI,KAAK,CAAC,CAAA,wCAAA,EAA2C,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,CAAE,CAAA,CAAC,CAAC;KACtF;AACD,IAAA,OAAO,CAAC,KAAiB,EAAA;AACrB,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,KAAK,CAAkB,CAAC;KACpD;AACD,IAAA,cAAc,CAAC,KAAiB,EAAA;QAC5B,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,IAAqB,CAAC;KAClE;AACD,IAAA,mBAAmB,CAAC,KAAiB,EAAA;QACjC,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,SAA0B,CAAC;KACvE;AACD,IAAA,oBAAoB,CAAC,KAAiB,EAAA;QAClC,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,UAA2B,CAAC;KACxE;AACD,IAAA,WAAW,CAAC,KAAiB,EAAA;AACzB,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAa,CAAC;KACpD;AACD,IAAA,YAAY,CAAC,KAAiB,EAAA;AAC1B,QAAA,OAAO,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAA4B,CAAC;KACnE;AACD,IAAA,iBAAiB,CAAC,KAAiB,EAAA;QAC/B,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,SAAwB,CAAC;KACrE;AACD,IAAA,YAAY,CAAC,KAAiB,EAAA;QAC1B,OAAO,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,CAAC;KAC9D;AACD,IAAA,oBAAoB,CAAC,KAAiB,EAAA;QAClC,OAAO,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE,iBAAgC,CAAC;KAC7E;AACD,IAAA,OAAO,CAAC,KAAiB,EAAA;AACrB,QAAA,OAAO,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC;KAC5B;AACD,IAAA,UAAU,CAAC,KAAiB,EAAA;AACxB,QAAA,OAAO,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;KACjC;AACD,IAAA,kBAAkB,CAAC,KAAiB,EAAA;QAChC,OAAO,CAAC,CAAC,gBAAgB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACxC;AACD,IAAA,UAAU,CAAuB,KAAiB,EAAA;QAC9C,OAAO,KAAK,CAAC,OAAY,CAAC;KAC7B;IACD,SAAS,CAAuB,KAAiB,EAAE,OAAU,EAAA;AACzD,QAAA,OAAO,KAAK,CAAC,OAAO,KAAK,OAAO,CAAC;KACpC;IACD,WAAW,CAAuB,KAAiB,EAAE,QAAa,EAAA;AAC9D,QAAA,MAAM,KAAK,GAAG,KAAK,CAAC,OAAY,CAAC;AACjC,QAAA,OAAO,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;KACnC;AACD,IAAA,qBAAqB,CAAC,KAAiB,EAAA;AACnC,QAAA,OAAO,8BAA8B,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;KACpD;AACD,IAAA,oBAAoB,CAAC,KAAiB,EAAA;QAClC,MAAM,KAAK,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC/C,MAAM,IAAI,GAAG,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,CAAC;AACzE,QAAA,IAAI,KAAK,IAAI,gCAAgC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,KAAK,CAAC,EAAE;AAC3E,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,OAAO,KAAK,CAAC;KAChB;AACD,IAAA,cAAc,CAAoC,KAAiB,EAAA;QAC/D,QAAQ,KAAK,CAAC,OAAO,CAAC,WAAW,IAAI,WAAW,EAAS;KAC5D;;;ACjME,MAAM,OAAO,GAAG;IACnB,SAAS,CAAC,GAAY,EAAE,EAAkB,EAAA;AACtC,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;AAExB,QAAA,IAAI,OAAO,IAAI,IAAI,EAAE;YACjB,OAAO;SACV;QAED,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC;AACzC,QAAA,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AAEnB,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;YACd,GAAG,CAAC,KAAK,EAAE,CAAC;SACf;KACJ;CACJ;;ACfe,SAAA,WAAW,CAAC,QAAwB,EAAE,OAA2B,EAAA;AAC7E,IAAA,MAAM,KAAK,GAAe;AACtB,QAAA,QAAQ,EAAE;AACN,YAAA,IAAI,EAAE,CAAC;AACV,SAAA;QACD,QAAQ;AACR,QAAA,KAAK,EAAE,EAAE,cAAc,EAAE,cAAc,CAAC,OAAO,EAAE;AACjD,QAAA,UAAU,EAAE,EAAE;AACd,QAAA,OAAO,EAAE;AACL,YAAA,KAAK,EAAE,EAAE;AACT,YAAA,KAAK,EAAE,EAAE;AACZ,SAAA;AACD,QAAA,SAAS,EAAE,IAAI;QACf,OAAO,EAAE,OAAO,IAAI;AAChB,YAAA,QAAQ,EAAE,KAAK;AACf,YAAA,aAAa,EAAE,KAAK;AACpB,YAAA,wBAAwB,EAAE,KAAK;AAClC,SAAA;AACD,QAAA,OAAO,EAAE,OAAO,EAAE,QAAQ,GAAG,gBAAgB,CAAC,IAAI,GAAG,gBAAgB,CAAC,SAAS;AAC/E,QAAA,IAAI,EAAE,MAAK,GAAG;AACd,QAAA,IAAI,EAAE,MAAK,GAAG;AACd,QAAA,KAAK,EAAE,CAAC,SAAyB,KAAI;YACjC,KAAK,MAAM,GAAG,IAAI,KAAK,CAAC,QAAQ,EAAE,EAAE;AAChC,gBAAA,OAAO,CAAC,SAAS,CAAC,GAAG,EAAE,SAAS,CAAC,CAAC;aACrC;AAED,YAAA,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;AAEjC,YAAA,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;YAEvC,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,KAAK,CAAC,EAAE;AACtB,gBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;AAE1B,gBAAA,OAAO,CAAC,OAAO,EAAE,CAAC,IAAI,CAAC,MAAK;AACxB,oBAAA,QAAQ,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;oBAC3B,KAAK,CAAC,QAAQ,EAAE,CAAC;oBACjB,KAAK,CAAC,WAAW,EAAE,CAAC;AACpB,oBAAA,KAAK,CAAC,UAAU,GAAG,EAAE,CAAC;AAC1B,iBAAC,CAAC,CAAC;aACN;SACJ;AACD,QAAA,OAAO,EAAE,CAAC,IAAU,EAAE,OAAwB,KAAI;AAC9C,YAAA,MAAM,QAAQ,GAAG,OAAO,EAAE,QAAQ,IAAI,SAAS,CAAC;AAChD,YAAA,MAAM,GAAG,GAAY;AACjB,gBAAA,OAAO,EAAE,IAAI;gBACb,QAAQ;gBACR,KAAK,GAAA;AACD,oBAAA,MAAM,EAAE,OAAO,EAAE,GAAG,GAAG,CAAC;AACxB,oBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AAClC,oBAAA,QAAQ,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;AACrB,oBAAA,GAAG,CAAC,OAAO,GAAG,IAAI,CAAC;AACnB,oBAAA,OAAO,OAAO,CAAC;iBAClB;aACJ,CAAC;AAEF,YAAA,MAAM,IAAI,GAAG,KAAK,CAAC,QAAQ,EAAE,CAAC;AAC9B,YAAA,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AACd,YAAA,OAAO,GAAG,CAAC;SACd;QACD,QAAQ,EAAE,MAAK;YACX,IAAI,IAAI,GAAG,SAAS,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;YAEhC,IAAI,CAAC,IAAI,EAAE;AACP,gBAAA,IAAI,GAAG,IAAI,GAAG,EAAE,CAAC;AACjB,gBAAA,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aAC9B;AAED,YAAA,OAAO,IAAI,CAAC;SACf;AACD,QAAA,QAAQ,EAAE,MAAK,GAAG;AAClB,QAAA,WAAW,EAAE,MAAK,GAAG;AACrB,QAAA,SAAS,EAAE,CAAC,KAAiB,QAAO;AACpC,QAAA,SAAS,EAAE,CAAC,KAAiB,QAAO;AACpC,QAAA,UAAU,EAAE,CAAC,KAAiB,QAAO;AACrC,QAAA,eAAe,EAAE,CAAC,KAAiB,QAAO;AAC1C,QAAA,OAAO,EAAE,CAAC,KAAiB,QAAO;AAClC,QAAA,aAAa,EAAE,CAAC,KAAiB,QAAO;AACxC,QAAA,OAAO,EAAE,CAAC,KAAoB,QAAO;AACrC,QAAA,aAAa,EAAE,CAAC,KAAoB,QAAO;AAC3C,QAAA,KAAK,EAAE,CAAC,KAAoB,QAAO;AACnC,QAAA,QAAQ,EAAE,CAAC,KAAiB,QAAO;AACnC,QAAA,WAAW,EAAE,CAAC,IAAyB,EAAE,gBAAiD,KAAI;AAC1F,YAAA,gBAAgB,CAAC,IAAI,EAAE,gBAAgB,CAAC,CAAC;SAC5C;AACD,QAAA,cAAc,EAAE,CAAC,IAAyB,QAAO;AACjD,QAAA,cAAc,EAAE,CAAC,IAAyB,KAAI;YAC1C,MAAM,QAAQ,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AAC9C,YAAA,cAAc,CAAC,cAAc,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;SAClD;AACD,QAAA,kBAAkB,EAAE,CAAC,IAAoB,KAAK,IAAI;AAClD,QAAA,kBAAkB,EAAE,CAAC,IAAoB,KAAK,IAAI;AAClD,QAAA,WAAW,EAAE,CAAC,OAAkC,KAAK,EAAE;QACvD,aAAa,EAAE,CAAC,OAAkC,EAAE,eAAe,QAAO;AAC1E,QAAA,cAAc,EAAE,CAAC,OAAkC,QAAO;AAC1D,QAAA,iBAAiB,EAAE,OAAO,IAAI,KAAK;AACnC,QAAA,cAAc,EAAE,OAAO,IAAI,KAAK;AAChC,QAAA,KAAK,EAAE,OAAO,IAAI,KAAK;AACvB,QAAA,aAAa,EAAE,OAAO,IAAI,KAAK;AAC/B,QAAA,WAAW,EAAE,OAAO,IAAI,IAAI;AAC5B,QAAA,SAAS,EAAE,OAAO,IAAI,KAAK;AAC3B,QAAA,YAAY,EAAE,OAAO,IAAI,IAAI;AAC7B,QAAA,UAAU,EAAE,CAAC,OAAqB,QAAO;AACzC,QAAA,OAAO,EAAE,OAAO,IAAI,KAAK;AACzB,QAAA,WAAW,EAAE,OAAO,OAAM;AAC1B,QAAA,WAAW,EAAE,OAAO,OAAM;AAC1B,QAAA,SAAS,EAAE,OAAO,OAAM;AACxB,QAAA,aAAa,EAAE,OAAO,OAAM;AAC5B,QAAA,UAAU,EAAE,OAAO,OAAM;AACzB,QAAA,YAAY,EAAE,OAAO,OAAM;AAC3B,QAAA,iBAAiB,EAAE,OAAO,OAAM;AAChC,QAAA,eAAe,EAAE,OAAO,OAAM;AAC9B,QAAA,qBAAqB,EAAE,CAAC,OAAqB,KAAK,KAAK;KAC1D,CAAC;AACF,IAAA,OAAO,KAAK,CAAC;AACjB;;AC5HM,SAAU,SAAS,CAAC,KAAiB,EAAA;AACvC,IAAA,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;AAExC,IAAA,KAAK,CAAC,QAAQ,GAAG,MAAK;QAClB,MAAM,eAAe,GAAG,kBAAkB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,eAAe,EAAE;AACjB,YAAA,eAAe,EAAE,CAAC;SACrB;AACD,QAAA,QAAQ,EAAE,CAAC;AACf,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,MAAK;QACrB,MAAM,kBAAkB,GAAG,qBAAqB,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC;QAC5D,IAAI,kBAAkB,EAAE;AACpB,YAAA,kBAAkB,EAAE,CAAC;SACxB;AACD,QAAA,WAAW,EAAE,CAAC;AAClB,KAAC,CAAA;AAED,IAAA,OAAO,KAAK,CAAC;AACjB;;ACnBM,SAAU,WAAW,CAAuB,KAAQ,EAAA;AACtD,IAAA,MAAM,EAAE,KAAK,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AACjC,IAAA,KAAK,CAAC,OAAO,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC;AAEzC,IAAA,KAAK,CAAC,IAAI,GAAG,MAAK;AACd,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAC1B,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAE1B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEtC,YAAA,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;AACxC,gBAAA,KAAK,MAAM,EAAE,IAAI,KAAK,EAAE;AACpB,oBAAA,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACnB;AACL,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;AACpB,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SAC7B;AACL,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,IAAI,GAAG,MAAK;AACd,QAAA,MAAM,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AAC1B,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;AAE1B,QAAA,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC,EAAE;YAClB,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAEtC,YAAA,iBAAiB,CAAC,aAAa,CAAC,KAAK,EAAE,MAAK;AACxC,gBAAA,MAAM,UAAU,GAAG,KAAK,CAAC,GAAG,CAAC,cAAc,CAAC,OAAO,CAAC,CAAC,OAAO,EAAE,CAAC;AAC/D,gBAAA,KAAK,MAAM,EAAE,IAAI,UAAU,EAAE;AACzB,oBAAA,KAAK,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;iBACnB;AACL,aAAC,CAAC,CAAC;AAEH,YAAA,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC1B,YAAA,OAAO,CAAC,KAAK,CAAC,GAAG,EAAE,CAAC;SACvB;AACL,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,KAAK,GAAG,CAAC,EAAkB,KAAI;AACjC,QAAA,MAAM,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,KAAK,CAAC;AACtC,QAAA,MAAM,EAAE,KAAK,EAAE,GAAG,OAAO,CAAC;QAC1B,MAAM,SAAS,GAAG,KAAK,CAAC,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;AAC1C,QAAA,MAAM,MAAM,GAAG,SAAS,IAAI,SAAS,CAAC,SAAS,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC5D,IAAI,IAAI,GAAG,iBAAiB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;QAC7C,IAAI,KAAK,GAAG,iBAAiB,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAE/C,QAAA,IAAI,IAAI,IAAI,IAAI,EAAE;AACd,YAAA,IAAI,GAAG,UAAU,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;SACjC;QAED,IAAI,IAAI,EAAE;YACN,IAAI,CAAC,KAAK,EAAE;AACR,gBAAA,IAAI,SAAS,IAAI,IAAI,EAAE;oBACnB,KAAK,GAAG,KAAK,CAAC;iBACjB;AAAM,qBAAA,IAAI,UAAU,CAAC,MAAM,KAAK,CAAC,EAAE;oBAChC,KAAK,GAAG,IAAI,CAAC;iBAChB;qBAAM;AACH,oBAAA,KAAK,GAAG,WAAW,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;iBACnC;aACJ;AAED,YAAA,IAAI,SAAS,IAAI,KAAK,EAAE;AACpB,gBAAA,SAAS,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;aACtB;iBAAM;AACH,gBAAA,MAAM,KAAK,GAAG,CAAC,EAAE,CAAC,CAAC;AACnB,gBAAA,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;aACrB;AAED,YAAA,OAAO,KAAK,CAAC,MAAM,GAAG,GAAG,EAAE;gBACvB,KAAK,CAAC,KAAK,EAAE,CAAC;aACjB;AAED,YAAA,IAAI,WAAW,CAAC,EAAE,CAAC,EAAE;AACjB,gBAAA,OAAO,CAAC,KAAK,GAAG,EAAE,CAAC;aACtB;SACJ;QACD,KAAK,CAAC,EAAE,CAAC,CAAC;AACd,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,QAAA,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YAC1B,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,OAAO;SACV;AACD,QAAA,IAAI,QAAQ,CAAC,aAAa,EAAE,KAAK,CAAC,EAAE;YAChC,KAAK,CAAC,IAAI,EAAE,CAAC;YACb,OAAO;SACV;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;AC9FM,SAAU,eAAe,CAAuB,KAAQ,EAAA;AAC1D,IAAA,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;IAC5E,IAAI,QAAQ,GAAY,KAAK,CAAC;AAC9B,IAAA,MAAM,cAAc,GAAmB;AACnC,QAAA,CAAC,EAAE,CAAC;AACJ,QAAA,CAAC,EAAE,CAAC;KACP,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,aAAa,CAAC,KAAK,CAAC,EAAE;YAC5E,QAAQ,GAAG,IAAI,CAAC;AAChB,YAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,iBAAiB,CAAC,CAAC;AACrE,YAAA,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC3B,YAAA,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9B;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,IAAI,QAAQ,EAAE;YAChE,MAAM,iBAAiB,GAAG,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACjE,YAAA,MAAM,IAAI,GAAG,iBAAiB,CAAC,UAAU,IAAI,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;AACzE,YAAA,MAAM,GAAG,GAAG,iBAAiB,CAAC,SAAS,IAAI,KAAK,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC,CAAC;YACvE,6BAA6B,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;AACvD,YAAA,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;AAC3B,YAAA,cAAc,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC;SAC9B;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,eAAe,GAAG,CAAC,KAAmB,KAAI;QAC5C,IAAI,QAAQ,EAAE;YACV,QAAQ,GAAG,KAAK,CAAC;AACjB,YAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,iBAAiB,CAAC,CAAC;AACxE,YAAA,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;AACrB,YAAA,cAAc,CAAC,CAAC,GAAG,CAAC,CAAC;SACxB;QACD,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,QAAA,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;AACxB,YAAA,IAAI,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBACrD,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;aACnE;YACD,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,KAAK,GAAG,CAAC,KAAoB,KAAI;AACnC,QAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,OAAO,EAAE;YACnD,eAAe,CAAC,iBAAiB,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,CAAC;SACxE;QACD,KAAK,CAAC,KAAK,CAAC,CAAC;AACjB,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;ACjBM,SAAU,aAAa,CAAC,KAAiB,EAAA;AAC3C,IAAA,MAAM,EAAE,WAAW,EAAE,SAAS,EAAE,WAAW,EAAE,eAAe,EAAE,QAAQ,EAAE,WAAW,EAAE,GAAG,KAAK,CAAC;IAC9F,IAAI,KAAK,GAAiB,IAAI,CAAC;IAC/B,IAAI,GAAG,GAAiB,IAAI,CAAC;AAC7B,IAAA,IAAI,gBAA6B,CAAC;AAClC,IAAA,IAAI,mBAAuC,CAAC;AAC5C,IAAA,IAAI,wBAAwC,CAAC;IAC7C,IAAI,OAAO,GAAG,KAAK,CAAC;IACpB,IAAI,eAAe,GAAG,KAAK,CAAC;AAE5B,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IAAI,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE;YAC5B,OAAO,GAAG,IAAI,CAAC;SAClB;AACD,QAAA,IAAI,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE;YAC5B,OAAO,GAAG,KAAK,CAAC;SACnB;QACD,MAAM,SAAS,GAAG,CAAC,EAAE,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,2BAA2B,CAAC,CAAC,CAAC;QAC3G,eAAe,GAAG,SAAS,IAAI,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,CAAC;;AAGpE,QAAA,IAAI,KAAK,CAAC,QAAQ,IAAI,CAAC,eAAe,EAAE;YACpC,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;AAED,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;QACpD,MAAM,UAAU,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QACtD,MAAM,mBAAmB,GAAG,gBAAgB,CAAC,MAAM,GAAG,CAAC,GAAG,sBAAsB,CAAC,KAAK,EAAE,KAAK,CAAC,GAAG,EAAE,CAAC;QACpG,MAAM,WAAW,GAAG,UAAU,IAAI,mBAAmB,CAAC,MAAM,GAAG,CAAC,CAAC;QACjE,MAAM,OAAO,GAAI,KAA2B,CAAC,gBAAgB,CAAoB,cAAc,CAAC,aAAa,CAAC,CAAC;QAE/G,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,IAAI,CAAC,WAAW,IAAI,OAAO,CAAC,UAAU,IAAI,CAAC,OAAO,CAAC,gBAAgB,EAAE;AAC5H,YAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;;AAErC,YAAA,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SACvE;QAED,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;QACxC,IAAI,CAAC,eAAe,EAAE;;YAElB,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;AACD,QAAA,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,IAAI,KAAK,EAAE;AAClE,YAAA,MAAM,WAAW,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAChF,YAAA,MAAM,SAAS,GAAG,eAAe,CAAC,oBAAoB,CAAC,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC,CAAC;YAC7E,gBAAgB,EAAE,MAAM,EAAE,CAAC;YAC3B,IAAI,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,EAAE,SAAS,CAAC,MAAM,CAAC,GAAG,qBAAqB,IAAI,iBAAiB,CAAC,KAAK,CAAC,EAAE;gBACnG,GAAG,GAAG,WAAW,CAAC;AAClB,gBAAA,WAAW,CAAC,KAAK,EAAE,gBAAgB,EAAE,MAAK;AACtC,oBAAA,IAAI,KAAK,IAAI,GAAG,EAAE;AACd,wBAAA,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;qBACjE;AACL,iBAAC,CAAC,CAAC;gBACH,kBAAkB,CAAC,KAAK,CAAC,CAAC;AAC1B,gBAAA,gBAAgB,GAAG,aAAa,CAAC,KAAK,EAAE,SAAS,EAAE;AAC/C,oBAAA,MAAM,EAAE,sBAAsB;AAC9B,oBAAA,WAAW,EAAE,CAAC;AACd,oBAAA,IAAI,EAAE,oBAAoB;AAC1B,oBAAA,SAAS,EAAE,OAAO;AACrB,iBAAA,CAAC,CAAC;gBACH,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;aACnE;SACJ;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;;AAGF,IAAA,KAAK,CAAC,SAAS,GAAG,CAAC,KAAmB,KAAI;QACtC,MAAM,qBAAqB,GACvB,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC,IAAI,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,IAAI,CAAC,CAAC;AAClH,QAAA,MAAM,MAAM,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,KAAK,CAAC,IAAI,CAAC,qBAAqB,CAAC;QACpF,IAAI,MAAM,EAAE;YACR,SAAS,CAAC,KAAK,CAAC,CAAC;YACjB,OAAO;SACV;AACD,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,MAAM,SAAS,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAClD,QAAA,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;QAC1C,SAAS,CAAC,KAAK,CAAC,CAAC;AACrB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,eAAe,GAAG,CAAC,KAAmB,KAAI;AAC5C,QAAA,IAAI,KAAK,IAAI,GAAG,EAAE;YACd,gBAAgB,EAAE,MAAM,EAAE,CAAC;YAC3B,oBAAoB,CAAC,KAAK,CAAC,CAAC;AAC5B,YAAA,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,EAAE,CAAC,CAAC;SACjE;AAED,QAAA,IAAI,UAAU,CAAC,OAAO,CAAC,KAAK,CAAC,EAAE;YAC3B,MAAM,SAAS,GAAG,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AAC7G,YAAA,MAAM,YAAY,GAAG,KAAK,CAAC,MAAM,YAAY,IAAI,IAAI,QAAQ,CAAC,QAAQ,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC;AACrF,YAAA,MAAM,iBAAiB,GAAG,KAAK,CAAC,MAAM,YAAY,OAAO,IAAI,KAAK,CAAC,MAAM,CAAC,OAAO,CAAC,IAAI,2BAA2B,CAAA,CAAE,CAAC,CAAC;;;YAGrH,IAAI,CAAC,SAAS,IAAI,CAAC,KAAK,IAAI,CAAC,iBAAiB,IAAI,YAAY,EAAE;AAC5D,gBAAA,UAAU,CAAC,YAAY,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;aACxC;SACJ;QACD,KAAK,GAAG,IAAI,CAAC;QACb,GAAG,GAAG,IAAI,CAAC;QACX,eAAe,GAAG,KAAK,CAAC;AACxB,QAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,QAAQ,GAAG,MAAK;QAClB,MAAM,OAAO,GAAI,KAA2B,CAAC,gBAAgB,CAAoB,cAAc,CAAC,aAAa,CAAC,CAAC;AAC/G,QAAA,IAAI,OAAO,CAAC,gBAAgB,EAAE;YAC1B,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAC/B;;AAED,QAAA,KAAK,CAAC,UAAU,CAAC,OAAO,CAAC,EAAE,IAAG;AAC1B,YAAA,IAAI,EAAE,CAAC,IAAI,KAAK,aAAa,EAAE;gBAC3B,qBAAqB,CAAC,KAAK,EAAE,EAAE,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;aAC/C;AACL,SAAC,CAAC,CAAC;QACH,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAC5D,YAAA,IAAI;gBACA,IAAI,CAAC,OAAO,EAAE;oBACV,mBAAmB,EAAE,MAAM,EAAE,CAAC;iBACjC;AACD,gBAAA,MAAM,iBAAiB,GAAG,oBAAoB,CAAC,KAAK,CAAC,CAAC;AACtD,gBAAA,IAAI,QAAQ,GAAG,iBAAiB,GAAG,iBAAiB,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;gBACxF,IAAI,CAAC,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE;AAC5C,oBAAA,QAAQ,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC;iBAC5B;AACD,gBAAA,MAAM,qBAAqB,GAAG,QAAQ,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,OAAO,CAAC,CAAC;gBAClE,IAAI,OAAO,EAAE;oBACT,MAAM,mBAAmB,GAAG,CAAC,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5D,oBAAA,IAAI,KAAK,CAAC,SAAS,IAAI,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;wBAC3D,IAAI,qBAAqB,EAAE;AACvB,4BAAA,IAAI,eAAe,GAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC;AACpD,4BAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAiB,CAAC;4BAC1E,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACxD,4BAAA,MAAM,sBAAsB,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC1F,4BAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gCAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,oCAAA,eAAe,GAAG,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iCAChG;6BACJ;iCAAM;gCACH,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,UAAU,CAAC,EAAE;AAC3C,oCAAA,MAAM,uBAAuB,GAAG,sBAAsB,CAAC,MAAM,CAAC,IAAI,IAC9D,mBAAmB,CAAC,QAAQ,CAAC,IAAI,CAAC,CACrC,CAAC;;;AAGF,oCAAA,IAAI,uBAAuB,CAAC,MAAM,EAAE;AAChC,wCAAA,eAAe,CAAC,IAAI,CAAC,GAAG,uBAAuB,CAAC,CAAC;qCACpD;yCAAM;wCACH,eAAe,GAAG,sBAAsB,CAAC;qCAC5C;iCACJ;qCAAM;oCACH,eAAe,GAAG,EAAE,CAAC;iCACxB;6BACJ;AACD,4BAAA,sBAAsB,CAAC,OAAO,CAAC,OAAO,IAAG;AACrC,gCAAA,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACvC,oCAAA,mBAAmB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;iCACvE;AACL,6BAAC,CAAC,CAAC;AACH,4BAAA,IAAI,eAAe,CAAC,MAAM,EAAE;AACxB,gCAAA,mBAAmB,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;6BAChD;yBACJ;6BAAM;AACH,4BAAA,QAAQ,CAAC,OAAO,CAAC,OAAO,IAAG;AACvB,gCAAA,IAAI,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACvC,oCAAA,mBAAmB,CAAC,MAAM,CAAC,mBAAmB,CAAC,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC;iCACvE;qCAAM;AACH,oCAAA,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;iCACrC;AACL,6BAAC,CAAC,CAAC;yBACN;AACD,wBAAA,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;qBACrD;yBAAM;AACH,wBAAA,IAAI,WAAW,GAAmB,CAAC,GAAG,QAAQ,CAAC,CAAC;wBAChD,IAAI,qBAAqB,EAAE;AACvB,4BAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;AACpB,gCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,oCAAA,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iCAC1B;qCAAM;oCACH,WAAW,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;iCACjE;AACL,6BAAC,CAAC,CAAC;yBACN;AACD,wBAAA,WAAW,CAAC,OAAO,CAAC,OAAO,IAAG;4BAC1B,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,OAAO,CAAC,EAAE;AACxC,gCAAA,mBAAmB,CAAC,IAAI,CAAC,OAAO,CAAC,CAAC;6BACrC;AACL,yBAAC,CAAC,CAAC;AACH,wBAAA,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;qBACrD;iBACJ;qBAAM;AACH,oBAAA,IAAI,mBAAmB,GAAG,CAAC,GAAG,QAAQ,CAAC,CAAC;oBACxC,IAAI,qBAAqB,EAAE;wBACvB,MAAM,WAAW,GAAG,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAU,CAAC,CAAC;wBAC5D,IAAI,CAAC,WAAW,EAAE;4BACd,mBAAmB,GAAG,EAAE,CAAC;AACzB,4BAAA,QAAQ,CAAC,OAAO,CAAC,IAAI,IAAG;AACpB,gCAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;AACf,oCAAA,mBAAmB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;iCAClC;qCAAM;oCACH,mBAAmB,CAAC,IAAI,CAAC,GAAG,2BAA2B,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC,CAAC;iCACzE;AACL,6BAAC,CAAC,CAAC;yBACN;6BAAM;AACH,4BAAA,MAAM,UAAU,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;4BAC/B,MAAM,MAAM,GAAG,iBAAiB,CAAC,KAAK,EAAE,UAAU,EAAE,IAAI,CAAiB,CAAC;4BAC1E,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AACxD,4BAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,gCAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,oCAAA,mBAAmB,GAAG,kBAAkB,CAAC,KAAK,EAAE,cAAc,CAAC,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;iCACpG;6BACJ;iCAAM;AACH,gCAAA,mBAAmB,GAAG,kBAAkB,CAAC,KAAK,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;6BACpF;yBACJ;qBACJ;AACD,oBAAA,qBAAqB,CAAC,KAAK,EAAE,mBAAmB,CAAC,CAAC;iBACrD;AACD,gBAAA,MAAM,WAAW,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC/C,wBAAwB,GAAG,WAAW,CAAC;gBACvC,uBAAuB,CAAC,KAAK,CAAC,CAAC;AAC/B,gBAAA,IAAI,CAAC,iBAAiB,CAAC,KAAK,CAAC,EAAE;oBAC3B,mBAAmB,EAAE,MAAM,EAAE,CAAC;AAC9B,oBAAA,IAAI,WAAW,CAAC,MAAM,GAAG,CAAC,EAAE;AACxB,wBAAA,mBAAmB,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;qBAC1D;iBACJ;aACJ;YAAC,OAAO,KAAK,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;SACJ;AACD,QAAA,QAAQ,EAAE,CAAC;AACf,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,MAAK;QACrB,IAAI,iBAAiB,CAAC,KAAK,CAAC,IAAI,CAAC,uBAAuB,CAAC,KAAK,CAAC,EAAE;AAC7D,YAAA,IAAI;AACA,gBAAA,MAAM,uBAAuB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;gBAC3D,IAAI,uBAAuB,CAAC,MAAM,IAAI,uBAAuB,CAAC,MAAM,GAAG,CAAC,EAAE;AACtE,oBAAA,IACI,wBAAwB;AACxB,yBAAC,uBAAuB,CAAC,MAAM,KAAK,wBAAwB,CAAC,MAAM;AAC/D,4BAAA,uBAAuB,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,KAAK,wBAAwB,CAAC,KAAK,CAAC,CAAC,CAAC,EACxF;wBACE,mBAAmB,EAAE,MAAM,EAAE,CAAC;AAC9B,wBAAA,mBAAmB,GAAG,yBAAyB,CAAC,KAAK,CAAC,CAAC;wBACvD,wBAAwB,GAAG,uBAAuB,CAAC;qBACtD;iBACJ;qBAAM;oBACH,mBAAmB,EAAE,MAAM,EAAE,CAAC;iBACjC;aACJ;YAAC,OAAO,KAAK,EAAE;AACZ,gBAAA,OAAO,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC;aACxB;SACJ;AACD,QAAA,WAAW,EAAE,CAAC;AAClB,KAAC,CAAC;AAED,IAAA,KAA2B,CAAC,gBAAgB,CAAoB,cAAc,CAAC,aAAa,EAAE;AAC3F,QAAA,UAAU,EAAE,IAAI;AAChB,QAAA,gBAAgB,EAAE,KAAK;AAC1B,KAAA,CAAC,CAAC;AAEH,IAAA,OAAO,KAAK,CAAC;AACjB;;ACxTM,SAAU,YAAY,CAAC,KAAiB,EAAA;AAC1C,IAAA,MAAM,EAAE,QAAQ,EAAE,GAAG,KAAK,CAAC;AAE3B,IAAA,MAAM,cAAc,GAAG,QAAQ,CAC3B,MAAK;QACD,iBAAiB,CAAC,KAAK,CAAC,CAAC;QACzB,oBAAoB,CAAC,KAAK,CAAC,CAAC;KAC/B,EACD,GAAG,EACH,EAAE,OAAO,EAAE,IAAI,EAAE,CACpB,CAAC;AAEF,IAAA,KAAK,CAAC,QAAQ,GAAG,MAAK;AAClB,QAAA,MAAM,aAAa,GAAG,KAAK,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,cAAc,CAAC,CAAC;AAC9E,QAAA,MAAM,kBAAkB,GAAG,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,CAAC,IAAI,KAAK,eAAe,CAAC,CAAC;QACrF,IAAI,kBAAkB,EAAE;YACpB,OAAO,QAAQ,EAAE,CAAC;SACrB;AACD,QAAA,IAAI,aAAa,IAAI,eAAe,CAAC,KAAK,CAAC,EAAE;AACzC,YAAA,kBAAkB,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;YACjC,OAAO,QAAQ,EAAE,CAAC;SACrB;QACD,IAAI,aAAa,EAAE;YACf,iBAAiB,CAAC,KAAK,CAAC,CAAC;YACzB,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAC/B;aAAM;AACH,YAAA,cAAc,EAAE,CAAC;SACpB;AACD,QAAA,QAAQ,EAAE,CAAC;AACf,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;AClBA,MAAM,eAAe,GAAG,CAAC,CAAC;MAEb,aAAa,CAAA;AAGtB,IAAA,WAAA,CAAoB,KAAiB,EAAU,cAA8B,EAAU,eAAgC,EAAA;QAAnG,IAAK,CAAA,KAAA,GAAL,KAAK,CAAY;QAAU,IAAc,CAAA,cAAA,GAAd,cAAc,CAAgB;QAAU,IAAe,CAAA,eAAA,GAAf,eAAe,CAAiB;AACnH,QAAA,IAAI,CAAC,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;KACnD;IAED,iBAAiB,GAAA;QACb,MAAM,MAAM,GAAsB,EAAE,CAAC;AACrC,QAAA,mBAAmB,CACf,IAAI,CAAC,KAAK,EACV,IAAI,IAAG;AACH,YAAA,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,OAAO,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;gBACtH,OAAO;aACV;YACD,MAAM,SAAS,GAAG,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC;AAChD,YAAA,SAAS,IAAI,MAAM,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC;SACvC,EACD,IAAI,IAAG;YACH,IAAI,IAAI,KAAK,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,CAAC,EAAE;AACpE,gBAAA,OAAO,IAAI,CAAC;aACf;iBAAM;AACH,gBAAA,OAAO,KAAK,CAAC;aAChB;SACJ,EACD,IAAI,CACP,CAAC;AACF,QAAA,OAAO,MAAM,CAAC;KACjB;IAED,WAAW,GAAA;AACP,QAAA,MAAM,eAAe,GAAG,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACjD,QAAA,MAAM,CAAC,GAAG,OAAO,EAAE,CAAC;QACpB,IAAI,UAAU,GAAG,EAAE,CAAC;QAEpB,MAAM,MAAM,GAAG,EAAE,CAAC;QAClB,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,MAAM,GAAG,CAAC,CAAC;QACf,IAAI,UAAU,GAAG,KAAK,CAAC;QACvB,IAAI,UAAU,GAAG,KAAK,CAAC;AAEvB,QAAA,KAAK,IAAI,cAAc,IAAI,eAAe,EAAE;AACxC,YAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,yBAAyB,CAAC,IAAI,CAAC,eAAe,EAAE,cAAc,CAAC,CAAC;YAC9F,IAAI,iBAAiB,GAAG,KAAK,CAAC;YAC9B,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC,YAAY,GAAG,eAAe,EAAE;AAChE,gBAAA,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC;AACpC,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,MAAM,CAAC;gBACjC,UAAU,GAAG,IAAI,CAAC;gBAClB,iBAAiB,GAAG,IAAI,CAAC;aAC5B;AAED,YAAA,IAAI,gBAAgB,CAAC,YAAY,KAAK,CAAC,EAAE;gBACrC,iBAAiB,GAAG,IAAI,CAAC;aAC5B;YAED,IAAI,iBAAiB,EAAE;AACnB,gBAAA,MAAM,SAAS,GAAG;AACd,oBAAA,cAAc,CAAC,CAAC;AAChB,oBAAA,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM;oBACxC,IAAI,CAAC,eAAe,CAAC,CAAC;oBACtB,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;iBACvD,CAAC;gBACF,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC;gBACjD,MAAM,WAAW,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,SAAS,CAAC,GAAG,MAAM,CAAC;AACpD,gBAAA,MAAM,QAAQ,GAAG,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,QAAQ,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,WAAW,CAAC,CAAC;AACzF,gBAAA,MAAM,UAAU,GAAG;oBACf,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC;oBACvD,QAAQ;oBACR,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK,GAAG,CAAC;oBACvD,WAAW;iBACd,CAAC;AACF,gBAAA,MAAM,SAAS,GAAG;oBACd,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;oBACnD,QAAQ;oBACR,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;oBACnD,WAAW;iBACd,CAAC;AAEF,gBAAA,MAAM,kBAAkB,GACpB,gBAAgB,CAAC,MAAM,KAAK,CAAC;oBAC7B,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAC7B,qBAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3F,IAAI,kBAAkB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACtC,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC;iBAC5B;AAED,gBAAA,MAAM,mBAAmB,GACrB,gBAAgB,CAAC,MAAM,KAAK,CAAC;oBAC7B,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAC7B,qBAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3F,IAAI,mBAAmB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACvC,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,SAAS,CAAC;iBAC7B;AAED,gBAAA,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,kBAAkB,IAAI,CAAC,mBAAmB,CAAC,CAAC;gBAC5G,IAAI,oBAAoB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACxC,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;iBAC9B;gBAED,UAAU,GAAG,IAAI,CAAC;aACrB;YAED,IAAI,eAAe,GAAG,KAAK,CAAC;YAC5B,IAAI,CAAC,UAAU,IAAI,gBAAgB,CAAC,YAAY,GAAG,eAAe,EAAE;AAChE,gBAAA,MAAM,GAAG,gBAAgB,CAAC,SAAS,CAAC;AACpC,gBAAA,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,MAAM,CAAC;gBACjC,UAAU,GAAG,IAAI,CAAC;gBAClB,eAAe,GAAG,IAAI,CAAC;aAC1B;AACD,YAAA,IAAI,gBAAgB,CAAC,YAAY,KAAK,CAAC,EAAE;gBACrC,eAAe,GAAG,IAAI,CAAC;aAC1B;YACD,IAAI,eAAe,EAAE;AACjB,gBAAA,MAAM,WAAW,GAAG;AAChB,oBAAA,cAAc,CAAC,CAAC;AAChB,oBAAA,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK;oBACvC,IAAI,CAAC,eAAe,CAAC,CAAC;oBACtB,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,KAAK;iBACtD,CAAC;gBACF,MAAM,SAAS,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC;gBACpD,MAAM,UAAU,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,WAAW,CAAC,GAAG,MAAM,CAAC;AACrD,gBAAA,MAAM,OAAO,GAAG,CAAC,SAAS,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,EAAE,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;AACxF,gBAAA,MAAM,oBAAoB,GAAG;oBACzB,SAAS;oBACT,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;oBACxD,UAAU;oBACV,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM,GAAG,CAAC;iBAC3D,CAAC;AACF,gBAAA,MAAM,UAAU,GAAG;oBACf,SAAS;oBACT,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;oBACpD,UAAU;oBACV,IAAI,CAAC,eAAe,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,MAAM;iBACvD,CAAC;AAEF,gBAAA,MAAM,iBAAiB,GACnB,gBAAgB,CAAC,MAAM,KAAK,CAAC;oBAC7B,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAC7B,qBAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,MAAM,KAAK,cAAc,CAAC,MAAM,CAAC,CAAC;gBAC7F,IAAI,iBAAiB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACrC,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC;iBAC3B;AAED,gBAAA,MAAM,oBAAoB,GACtB,gBAAgB,CAAC,MAAM,KAAK,CAAC;oBAC7B,gBAAgB,CAAC,MAAM,KAAK,CAAC;AAC7B,qBAAC,gBAAgB,CAAC,MAAM,KAAK,CAAC,IAAI,IAAI,CAAC,eAAe,CAAC,KAAK,KAAK,cAAc,CAAC,KAAK,CAAC,CAAC;gBAC3F,IAAI,oBAAoB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACxC,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC;iBAC9B;AAED,gBAAA,MAAM,oBAAoB,GAAG,gBAAgB,CAAC,MAAM,KAAK,CAAC,KAAK,CAAC,iBAAiB,IAAI,CAAC,oBAAoB,CAAC,CAAC;gBAC5G,IAAI,oBAAoB,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE;AACxC,oBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC;iBACxC;aACJ;SACJ;QAED,MAAM,WAAW,GAAG,MAAM,CAAC;QAC3B,MAAM,WAAW,GAAG,MAAM,CAAC;AAE3B,QAAA,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,MAAM,CAAC;AACjC,QAAA,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,MAAM,CAAC;QACjC,MAAM,0BAA0B,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,IAAI,CAAC,CAAC;QAC/E,MAAM,wBAAwB,GAAG,IAAI,CAAC,eAAe,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;AAC9E,QAAA,MAAM,eAAe,GAAc,CAAC,GAAG,0BAA0B,CAAC,eAAe,EAAE,GAAG,wBAAwB,CAAC,eAAe,CAAC,CAAC;AAChI,QAAA,IAAI,0BAA0B,CAAC,KAAK,EAAE;AAClC,YAAA,MAAM,GAAG,0BAA0B,CAAC,KAAK,CAAC;AAC1C,YAAA,IAAI,WAAW,KAAK,MAAM,EAAE;AACxB,gBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACnB,gBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACnB,gBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aACtB;SACJ;AAED,QAAA,IAAI,wBAAwB,CAAC,KAAK,EAAE;AAChC,YAAA,MAAM,GAAG,wBAAwB,CAAC,KAAK,CAAC;AACxC,YAAA,IAAI,WAAW,KAAK,MAAM,EAAE;AACxB,gBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACnB,gBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;AACnB,gBAAA,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAAC;aACtB;SACJ;AAED,QAAA,IAAI,UAAU,CAAC,MAAM,EAAE;AACnB,YAAA,IAAI,CAAC,cAAc,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;SACtC;AAED,QAAA,IAAI,eAAe,CAAC,MAAM,EAAE;AACxB,YAAA,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,CAAC,CAAC,CAAC;SAChD;AAED,QAAA,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,CAAC,EAAE,CAAC;KAChC;IAED,yBAAyB,CAAC,eAAgC,EAAE,cAA+B,EAAA;QACvF,MAAM,qBAAqB,GAAG,CAAC,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,CAAC,EAAE,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAC9H,MAAM,oBAAoB,GAAG,CAAC,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,GAAG,CAAC,EAAE,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEzH,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAC3E,MAAM,eAAe,GAAG,qBAAqB,CAAC,CAAC,CAAC,GAAG,oBAAoB,CAAC,CAAC,CAAC,CAAC;QAE3E,MAAM,UAAU,GAAG,eAAe,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;AACxD,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAClF,QAAA,MAAM,YAAY,GAAG,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,IAAI,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,KAAK,CAAC,CAAC;AAC3G,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,cAAc,CAAC,CAAC,CAAC;QAEjF,MAAM,QAAQ,GAAG,eAAe,CAAC,CAAC,GAAG,cAAc,CAAC,CAAC,CAAC;AACtD,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AACnF,QAAA,MAAM,WAAW,GAAG,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,cAAc,CAAC,CAAC,CAAC;AAClF,QAAA,MAAM,cAAc,GAAG,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,IAAI,cAAc,CAAC,CAAC,GAAG,cAAc,CAAC,MAAM,CAAC,CAAC;AAE/G,QAAA,MAAM,UAAU,GAAG,CAAC,UAAU,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AACzF,QAAA,MAAM,UAAU,GAAG,CAAC,QAAQ,EAAE,WAAW,EAAE,cAAc,EAAE,WAAW,EAAE,eAAe,CAAC,CAAC;AAEzF,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AACrE,QAAA,MAAM,aAAa,GAAG,UAAU,CAAC,GAAG,CAAC,QAAQ,IAAI,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC;AAErE,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;AACjE,QAAA,MAAM,MAAM,GAAG,aAAa,CAAC,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,GAAG,aAAa,CAAC,CAAC,CAAC;QAEjE,OAAO;AACH,YAAA,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC;AACnC,YAAA,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC;AAC7B,YAAA,YAAY,EAAE,aAAa,CAAC,MAAM,CAAC;AACnC,YAAA,SAAS,EAAE,UAAU,CAAC,MAAM,CAAC;YAC7B,MAAM;YACN,MAAM;SACT,CAAC;KACL;IAED,eAAe,CAAC,eAAkC,EAAE,YAAqB,EAAA;QACrE,IAAI,eAAe,GAAU,EAAE,CAAC;QAChC,IAAI,KAAK,GAAG,CAAC,CAAC;QACd,IAAI,UAAU,GAAsB,EAAE,CAAC;QACvC,MAAM,IAAI,GAAG,YAAY,GAAG,GAAG,GAAG,GAAG,CAAC;QACtC,MAAM,IAAI,GAAG,YAAY,GAAG,OAAO,GAAG,QAAQ,CAAC;AAE/C,QAAA,MAAM,qBAAqB,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC1F,QAAA,eAAe,CAAC,OAAO,CAAC,GAAG,IAAG;YAC1B,MAAM,OAAO,GAAG,YAAY,GAAG,iBAAiB,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,GAAG,eAAe,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AACzH,YAAA,IAAI,OAAO,IAAI,CAAC,eAAe,CAAC,KAAK,CAAC,GAAG,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE;AAC9D,gBAAA,UAAU,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;aACxB;AACL,SAAC,CAAC,CAAC;AACH,QAAA,UAAU,GAAG,CAAC,GAAG,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC;QAErF,MAAM,QAAQ,GAAoB,EAAE,CAAC;QACrC,IAAI,kBAAkB,GAAG,CAAC,CAAC;QAC3B,IAAI,WAAW,GAAG,SAAS,CAAC;QAC5B,IAAI,UAAU,GAAG,SAAS,CAAC;AAE3B,QAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACxC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,UAAU,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AAC5C,gBAAA,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC7B,gBAAA,MAAM,KAAK,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;AAC5B,gBAAA,MAAM,QAAQ,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAC7D,IAAI,GAAG,GAAG,QAAQ,CAAC;AACnB,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE;AACpB,oBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBAClD;qBAAM;oBACH,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;iBACrE;AAED,gBAAA,IAAI,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE;AACrB,oBAAA,QAAQ,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAC;iBACnD;qBAAM;oBACH,QAAQ,CAAC,CAAC,CAAC,GAAG,EAAE,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;iBACtE;;gBAGD,IAAI,OAAO,GAAG,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;gBAC9D,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC,CAAC;AAChD,gBAAA,IAAI,GAAG,GAAG,eAAe,EAAE;AACvB,oBAAA,kBAAkB,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AACpG,oBAAA,KAAK,GAAG,qBAAqB,GAAG,OAAO,CAAC;oBACxC,WAAW,GAAG,CAAC,CAAC;oBAChB,UAAU,GAAG,CAAC,CAAC;iBAClB;;AAGD,gBAAA,MAAM,aAAa,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;gBAClE,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,CAAC,GAAG,aAAa,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACrF,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC,CAAC;AAChD,gBAAA,IAAI,CAAC,kBAAkB,IAAI,GAAG,GAAG,eAAe,EAAE;oBAC9C,kBAAkB,GAAG,aAAa,CAAC;oBACnC,WAAW,GAAG,CAAC,CAAC;AAChB,oBAAA,KAAK,GAAG,qBAAqB,GAAG,OAAO,CAAC;iBAC3C;;AAGD,gBAAA,MAAM,cAAc,GAAG,KAAK,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC,IAAI,CAAC,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC;AACnE,gBAAA,OAAO,GAAG,MAAM,CAAC,IAAI,CAAC,GAAG,cAAc,GAAG,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;gBACzE,GAAG,GAAG,IAAI,CAAC,GAAG,CAAC,qBAAqB,GAAG,OAAO,CAAC,CAAC;AAEhD,gBAAA,IAAI,CAAC,kBAAkB,IAAI,GAAG,GAAG,eAAe,EAAE;oBAC9C,kBAAkB,GAAG,cAAc,CAAC;oBACpC,UAAU,GAAG,CAAC,CAAC;AACf,oBAAA,KAAK,GAAG,qBAAqB,GAAG,OAAO,CAAC;iBAC3C;aACJ;SACJ;QAED,MAAM,WAAW,GAAG,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,eAAe,CAAC,CAAC;QAC7D,IAAI,aAAa,GAAa,EAAE,CAAC;QACjC,IAAI,YAAY,GAAa,EAAE,CAAC;AAChC,QAAA,IAAI,WAAW,KAAK,SAAS,EAAE;AAC3B,YAAA,aAAa,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AAChC,YAAA,aAAa,CAAC,kBAAkB,EAAE,QAAQ,CAAC,WAAW,CAAC,EAAE,QAAQ,EAAE,aAAa,CAAC,CAAC;SACrF;AAED,QAAA,IAAI,UAAU,KAAK,SAAS,EAAE;AAC1B,YAAA,YAAY,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC;AAC9B,YAAA,aAAa,CAAC,kBAAkB,EAAE,QAAQ,CAAC,UAAU,CAAC,EAAE,OAAO,EAAE,YAAY,CAAC,CAAC;SAClF;QAED,IAAI,aAAa,CAAC,MAAM,IAAI,YAAY,CAAC,MAAM,EAAE;AAC7C,YAAA,MAAM,QAAQ,GAAG,CAAC,GAAG,aAAa,CAAC,OAAO,EAAE,EAAE,WAAW,EAAE,GAAG,YAAY,CAAC,CAAC;AAC5E,YAAA,IAAI,CAAC,eAAe,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;AACpC,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,QAAQ,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;gBACtC,eAAe,CAAC,IAAI,CAAC,aAAa,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;aAC7F;SACJ;QAED,SAAS,aAAa,CAAC,QAAgB,EAAE,GAAkB,EAAE,SAAiB,EAAE,gBAA0B,EAAA;AACtG,YAAA,MAAM,GAAG,GAAG,GAAG,CAAC,SAAgC,CAAC,CAAC;YAClD,MAAM,KAAK,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACpC,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,SAAS,KAAK,QAAQ,MAAM,KAAK,KAAK,QAAQ,CAAC,MAAM,GAAG,CAAC,IAAI,SAAS,KAAK,OAAO,CAAC;gBAAE,OAAO;AAChH,YAAA,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE;AACjC,gBAAA,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,QAAQ,GAAG,QAAQ,CAAC,GAAG,GAAG,EAAE;oBAC5C,gBAAgB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC;AACpC,oBAAA,aAAa,CAAC,QAAQ,EAAE,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE,SAAS,EAAE,gBAAgB,CAAC,CAAC;oBAC7E,OAAO;iBACV;aACJ;SACJ;AAED,QAAA,SAAS,aAAa,CAAC,eAAgC,EAAE,cAA+B,EAAA;AACpF,YAAA,MAAM,YAAY,GAAG,IAAI,KAAK,GAAG,GAAG,GAAG,GAAG,GAAG,CAAC;AAC9C,YAAA,MAAM,YAAY,GAAG,IAAI,KAAK,OAAO,GAAG,QAAQ,GAAG,OAAO,CAAC;AAC3D,YAAA,MAAM,KAAK,GAAG;gBACV,eAAe,CAAC,YAAY,CAAC;AAC7B,gBAAA,eAAe,CAAC,YAAY,CAAC,GAAG,eAAe,CAAC,YAAY,CAAC;gBAC7D,cAAc,CAAC,YAAY,CAAC;AAC5B,gBAAA,cAAc,CAAC,YAAY,CAAC,GAAG,cAAc,CAAC,YAAY,CAAC;aAC9D,CAAC;AACF,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAC5C,YAAA,MAAM,OAAO,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;YAC9C,MAAM,MAAM,GAAG,CAAC,CAAC;AACjB,YAAA,OAAO,YAAY;AACf,kBAAE;oBACI,CAAC,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,KAAK,GAAG,MAAM,EAAE,OAAO,CAAC;AAC7D,oBAAA,CAAC,cAAc,CAAC,CAAC,GAAG,MAAM,EAAE,OAAO,CAAC;AACvC,iBAAA;AACH,kBAAE;oBACI,CAAC,OAAO,EAAE,eAAe,CAAC,CAAC,GAAG,eAAe,CAAC,MAAM,GAAG,MAAM,CAAC;AAC9D,oBAAA,CAAC,OAAO,EAAE,cAAc,CAAC,CAAC,GAAG,MAAM,CAAC;iBACvC,CAAC;SACX;AACD,QAAA,OAAO,EAAE,KAAK,EAAE,eAAe,EAAE,CAAC;KACrC;IAED,cAAc,CAAC,KAAiB,EAAE,CAAc,EAAA;AAC5C,QAAA,KAAK,CAAC,OAAO,CAAC,MAAM,IAAG;YACnB,IAAI,CAAC,MAAM,CAAC,MAAM;gBAAE,OAAO;AAC3B,YAAA,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE;AAC/F,gBAAA,MAAM,EAAE,sBAAsB;AAC9B,gBAAA,WAAW,EAAE,CAAC;AACd,gBAAA,cAAc,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;AACzB,aAAA,CAAC,CAAC;AACH,YAAA,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;KACN;IAED,mBAAmB,CAAC,KAAgB,EAAE,CAAc,EAAA;AAChD,QAAA,KAAK,CAAC,OAAO,CAAC,IAAI,IAAG;YACjB,IAAI,CAAC,IAAI,CAAC,MAAM;gBAAE,OAAO;AACzB,YAAA,IAAI,YAAY,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,KAAK,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7C,MAAM,MAAM,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AACnG,gBAAA,MAAM,EAAE,sBAAsB;AAC9B,gBAAA,WAAW,EAAE,CAAC;AACjB,aAAA,CAAC,CAAC;AACH,YAAA,CAAC,CAAC,WAAW,CAAC,MAAM,CAAC,CAAC;AAEtB,YAAA,IAAI,CAAC,OAAO,CAAC,KAAK,IAAG;gBACjB,MAAM,QAAQ,GAAG,WAAW,CAAC,KAAK,EAAE,YAAY,CAAC,CAAC;gBAClD,MAAM,GAAG,GAAG,UAAU,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE;AAChH,oBAAA,MAAM,EAAE,sBAAsB;AAC9B,oBAAA,WAAW,EAAE,CAAC;AACjB,iBAAA,CAAC,CAAC;AACH,gBAAA,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,CAAC;AACvB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;KACN;AACJ,CAAA;AAED,SAAS,iBAAiB,CAAC,SAA0B,EAAE,KAAsB,EAAA;IACzE,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,MAAM,GAAG,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC;AAC/F,CAAC;AAED,SAAS,eAAe,CAAC,SAA0B,EAAE,KAAsB,EAAA;IACvE,OAAO,EAAE,SAAS,CAAC,CAAC,GAAG,SAAS,CAAC,KAAK,GAAG,KAAK,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7F,CAAC;AACD,SAAS,WAAW,CAAC,KAAY,EAAE,YAAqB,EAAA;AACpD,IAAA,OAAO,YAAY;AACf,UAAE;YACI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;YACxB,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC;AAC3B,SAAA;AACH,UAAE;YACI,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACxB,CAAC,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;SAC3B,CAAC;AACZ;;ACtZM,SAAU,UAAU,CAAC,KAAiB,EAAA;IACxC,MAAM,EAAE,WAAW,EAAE,WAAW,EAAE,eAAe,EAAE,iBAAiB,EAAE,GAAG,KAAK,CAAC;IAE/E,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,OAAO,GAAG,CAAC,CAAC;IAChB,IAAI,gBAAgB,GAAG,KAAK,CAAC;AAC7B,IAAA,IAAI,UAAwB,CAAC;IAC7B,IAAI,cAAc,GAAmB,EAAE,CAAC;IACxC,IAAI,MAAM,GAAuB,IAAI,CAAC;IACtC,IAAI,uBAAuB,GAA2B,IAAI,CAAC;AAE3D,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IACI,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;YAC5B,CAAC,UAAU,CAAC,SAAS,CAAC,KAAK,EAAE,gBAAgB,CAAC,SAAS,CAAC;YACxD,kBAAkB,CAAC,KAAK,CAAC;AACzB,YAAA,CAAC,aAAa,CAAC,KAAK,CAAC,EACvB;YACE,WAAW,CAAC,KAAK,CAAC,CAAC;YACnB,OAAO;SACV;AACD,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1E,QAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAChD,QAAA,MAAM,eAAe,GAAG,cAAc,CAAC,MAAM,GAAG,CAAC,IAAI,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,KAAK,CAAC,CAAC;AAC1G,QAAA,MAAM,mBAAmB,GAAG,eAAe,IAAI,eAAe,CAAC,kBAAkB,CAAC,eAAe,EAAE,KAAK,CAAC,CAAC;QAC1G,IAAI,mBAAmB,EAAE;YACrB,UAAU,GAAG,KAAK,CAAC;YACnB,cAAc,GAAG,cAAc,CAAC;AAChC,YAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC,CAAC;YACrC,uBAAuB,GAAG,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;SACjF;aAAM;AACH,YAAA,MAAM,aAAa,GAAG,oBAAoB,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,IAAI,KAAK,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC,CAAC;YACpF,IAAI,aAAa,EAAE;gBACf,UAAU,GAAG,KAAK,CAAC;AACnB,gBAAA,cAAc,GAAG,2BAA2B,CAAC,KAAK,EAAE,aAAa,CAAC,CAAC;AACnE,gBAAA,IAAI,cAAc,CAAC,MAAM,GAAG,CAAC,EAAE;AAC3B,oBAAA,iCAAiC,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;iBAChD;gBACD,uBAAuB,GAAG,sBAAsB,CAAC,KAAK,EAAE,cAAc,EAAE,IAAI,CAAC,CAAC;aACjF;SACJ;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;AACxC,QAAA,IAAI,UAAU,IAAI,cAAc,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,KAAK,CAAC,EAAE;YAC9E,IAAI,CAAC,gBAAgB,EAAE;gBACnB,gBAAgB,GAAG,IAAI,CAAC;aAC3B;YACD,MAAM,EAAE,MAAM,EAAE,CAAC;AACjB,YAAA,MAAM,QAAQ,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;YAC7E,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACtC,OAAO,GAAG,QAAQ,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,CAAC,CAAC,CAAC;YACtC,MAAM,QAAQ,GAAG,4BAA4B,CAAC,GAAG,QAAQ,EAAE,GAAG,UAAU,CAAC,CAAC;AAC1E,YAAA,IAAI,QAAQ,GAAG,qBAAqB,IAAI,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,GAAG,CAAC,EAAE;AACzE,gBAAA,WAAW,CAAC,KAAK,EAAE,aAAa,EAAE,MAAK;oBACnC,IAAI,CAAC,uBAAuB,EAAE;wBAC1B,OAAO;qBACV;AACD,oBAAA,MAAM,YAAY,GAAG;AACjB,wBAAA,GAAG,uBAAuB;AAC1B,wBAAA,CAAC,EAAE,uBAAuB,CAAC,CAAC,GAAG,OAAO;AACtC,wBAAA,CAAC,EAAE,uBAAuB,CAAC,CAAC,GAAG,OAAO;qBACzC,CAAC;oBACF,MAAM,eAAe,GAAG,IAAI,aAAa,CAAC,KAAK,EAAE,cAAc,EAAE,YAAY,CAAC,CAAC;AAC/E,oBAAA,MAAM,GAAG,GAAG,eAAe,CAAC,WAAW,EAAE,CAAC;AAC1C,oBAAA,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC;AACtB,oBAAA,OAAO,IAAI,GAAG,CAAC,MAAM,CAAC;AACtB,oBAAA,MAAM,GAAG,GAAG,CAAC,CAAC,CAAC;AACf,oBAAA,MAAM,CAAC,SAAS,CAAC,GAAG,CAAC,wBAAwB,CAAC,CAAC;oBAC/C,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;oBACtD,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACzB,oBAAA,MAAM,eAAe,GAAG,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC;AAC9E,oBAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,gBAAgB,CAAC,CAAC;AACpE,oBAAA,mBAAmB,CAAC,KAAK,EAAE,eAAiC,CAAC,CAAC;AAClE,iBAAC,CAAC,CAAC;aACN;SACJ;QACD,IAAI,gBAAgB,EAAE;;YAElB,KAAK,CAAC,cAAc,EAAE,CAAC;SAC1B;QACD,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,iBAAiB,GAAG,CAAC,KAAmB,KAAI;QAC9C,IAAI,UAAU,EAAE;AACZ,YAAA,MAAM,mBAAmB,GAAG,cAAc,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC;YACpE,IAAI,CAAC,mBAAmB,EAAE;gBACtB,UAAU,CAAC,KAAK,CAAC,CAAC;aACrB;SACJ;QACD,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAC7B,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,eAAe,GAAG,KAAK,IAAG;QAC5B,gBAAgB,GAAG,KAAK,CAAC;QACzB,IAAI,UAAU,EAAE;YACZ,UAAU,CAAC,KAAK,CAAC,CAAC;SACrB;AACD,QAAA,gBAAgB,CAAC,KAAK,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC;QACtC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAC,CAAC;IAEF,SAAS,UAAU,CAAC,KAAiB,EAAA;QACjC,MAAM,EAAE,MAAM,EAAE,CAAC;QACjB,UAAU,GAAG,IAAI,CAAC;QAClB,uBAAuB,GAAG,IAAI,CAAC;QAC/B,OAAO,GAAG,CAAC,CAAC;QACZ,OAAO,GAAG,CAAC,CAAC;QACZ,cAAc,GAAG,EAAE,CAAC;AACpB,QAAA,IAAI,gBAAgB,CAAC,KAAK,CAAC,EAAE;YACzB,oBAAoB,CAAC,KAAK,CAAC,CAAC;SAC/B;AACD,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC1B,QAAA,UAAU,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;KAC1E;AAED,IAAA,OAAO,eAAe,CAAC,KAAK,CAAC,CAAC;AAClC,CAAC;AAEK,SAAU,eAAe,CAAC,KAAiB,EAAA;AAC7C,IAAA,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,GAAG,KAAK,CAAC;AACjC,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;AACrC,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,gBAAgB,CAAC,MAAM,GAAG,CAAC,KAAK,OAAO,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,EAAE;YAC1H,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,MAAM,OAAO,GAAG,KAAK,CAAC,QAAQ,GAAG,IAAI,GAAG,KAAK,CAAC;AAC9C,YAAA,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;YACtB,MAAM,MAAM,GAAG,OAAO,GAAG,EAAE,GAAG,CAAC,CAAC;YAChC,QAAQ,IAAI;AACR,gBAAA,KAAK,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,EAAE;AACvD,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;oBACpB,MAAM;iBACT;AACD,gBAAA,KAAK,OAAO,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,YAAY,CAAC,KAAK,CAAC,EAAE;AAC3D,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;oBACnB,MAAM;iBACT;AACD,gBAAA,KAAK,OAAO,CAAC,cAAc,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,EAAE;AACnE,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;oBACpB,MAAM;iBACT;AACD,gBAAA,KAAK,OAAO,CAAC,aAAa,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,EAAE;AACjE,oBAAA,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;oBACnB,MAAM;iBACT;aACJ;AACD,YAAA,MAAM,cAAc,GAAG,iBAAiB,CAAC,KAAK,CAAC,CAAC;AAChD,YAAA,WAAW,CAAC,KAAK,EAAE,mBAAmB,EAAE,MAAK;AACzC,gBAAA,YAAY,CAAC,KAAK,EAAE,cAAc,EAAE,MAAM,CAAC,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC;AAC9D,aAAC,CAAC,CAAC;SACN;QACD,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,KAAK,GAAG,CAAC,KAAoB,KAAI;AACnC,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAC1B,KAAK,CAAC,KAAK,CAAC,CAAC;AACjB,KAAC,CAAC;AACF,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAEK,SAAU,iBAAiB,CAAC,KAAiB,EAAA;AAC/C,IAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,IAAA,MAAM,eAAe,GAAG,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC,CAAC;IAC7E,MAAM,cAAc,GAAG,gBAAgB,CAAC,MAAM,CAAC,OAAO,IAAG;AACrD,QAAA,OAAO,eAAe,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC;AAC7C,KAAC,CAAC,CAAC;IACH,MAAM,eAAe,GAAG,KAAK,CAAC,kBAAkB,CAAC,EAAE,CAAC,CAAC;AACrD,IAAA,cAAc,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,CAAC;AACxC,IAAA,OAAO,cAAc,CAAC;AAC1B,CAAC;AAEK,SAAU,YAAY,CAAC,KAAiB,EAAE,cAA8B,EAAE,OAAe,EAAE,OAAe,EAAA;AAC5G,IAAA,MAAM,aAAa,GAAG,cAAc,CAAC,MAAM,CAAC,OAAO,IAAI,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACtH,MAAM,eAAe,GAAG,aAAa,CAAC,GAAG,CAAC,OAAO,IAAG;AAChD,QAAA,MAAM,MAAM,GAAG,OAAO,CAAC,MAAM,IAAI,EAAE,CAAC;QACpC,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAY,CAAC;QAC/E,MAAM,KAAK,GAAG,KAAK,CAAC,QAAQ,CAAC,SAAS,CAAC,IAAI,IAAI,IAAI,CAAC,EAAE,KAAK,OAAO,CAAC,EAAE,CAAC,CAAC;AACvE,QAAA,UAAU,CAAC,OAAO,CACd,KAAK,EACL;AACI,YAAA,MAAM,EAAE,SAAS;AACpB,SAAA,EACD,CAAC,KAAK,CAAC,CACV,CAAC;AACF,QAAA,OAAO,CAAC,GAAG,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzB,OAAO,SAAS,CAAC,GAAG,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,CAAC;AACzC,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,eAAe,CAAC;AAC3B;;AC/Ma,MAAA,WAAW,GAAG,CAAC,KAAiB,KAAI;AAC7C,IAAA,MAAM,aAAa,GAAG,IAAI,GAAG,EAAe,CAAC;IAC7C,MAAM,QAAQ,GAAG,KAA0B,CAAC;AAE5C,IAAA,QAAQ,CAAC,gBAAgB,GAAG,GAAG,IAAG;AAC9B,QAAA,OAAO,aAAa,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAClC,KAAC,CAAC;IAEF,QAAQ,CAAC,gBAAgB,GAAG,CAAC,GAAG,EAAE,OAAO,KAAI;QACzC,MAAM,UAAU,GAAG,QAAQ,CAAC,gBAAgB,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;AACxD,QAAA,aAAa,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,GAAG,UAAU,EAAE,GAAG,OAAO,EAAE,CAAC,CAAC;AAC1D,KAAC,CAAC;AAEF,IAAA,OAAO,QAAQ,CAAC;AACpB;;MChBsB,wBAAwB,CAAA;AAG1C,IAAA,WAAA,CAAsB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;KAAI;AAEhD,IAAA,UAAU,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;KAC3B;8GAZiB,wBAAwB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAxB,wBAAwB,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,wBAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAAxB,wBAAwB,EAAA,UAAA,EAAA,CAAA;kBAL7C,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,wBAAwB;AAClC,qBAAA;AACJ,iBAAA,CAAA;;MAqBqB,+BAA+B,CAAA;AAKjD,IAAA,WAAA,CAAmB,GAAsB,EAAA;QAAtB,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;KAAI;AAE7C,IAAA,UAAU,CAAC,KAAiB,EAAA;AACxB,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;QACnB,MAAM,cAAc,GAAG,UAAU,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;QACtD,IAAI,CAAC,YAAY,GAAG,cAAc,CAAC,WAAW,CAAC,SAAS,CAAC,MAAK;AAC1D,YAAA,IAAI,gBAAgB,CAAC,IAAI,CAAC,EAAE;gBACxB,IAAI,CAAC,aAAa,EAAE,CAAC;aACxB;AACD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AAC5B,SAAC,CAAC,CAAC;KACN;IAED,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE;AACb,YAAA,MAAM,IAAI,KAAK,CAAC,6BAA6B,CAAC,CAAC;SAClD;AACD,QAAA,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5B,IAAI,CAAC,YAAY,EAAE,CAAC;KACvB;IAED,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,YAAY,EAAE,WAAW,EAAE,CAAC;QACjC,IAAI,CAAC,eAAe,EAAE,CAAC;KAC1B;8GA7BiB,+BAA+B,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAA/B,+BAA+B,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,EAAA,IAAA,EAAA,EAAA,cAAA,EAAA,gCAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,CAAA,CAAA,EAAA;;2FAA/B,+BAA+B,EAAA,UAAA,EAAA,CAAA;kBALpD,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,IAAI,EAAE;AACF,wBAAA,KAAK,EAAE,gCAAgC;AAC1C,qBAAA;AACJ,iBAAA,CAAA;sFAEY,KAAK,EAAA,CAAA;sBAAb,KAAK;;AA6CG,MAAA,gBAAgB,GAAG,CAAC,KAAU,KAA4B;AACnE,IAAA,IAAI,KAAK,CAAC,aAAa,EAAE;AACrB,QAAA,OAAO,IAAI,CAAC;KACf;SAAM;AACH,QAAA,OAAO,KAAK,CAAC;KAChB;AACL;;AC1EO,MAAM,UAAU,GAAG,CAAC,KAAiB,KAAI;IAC5C,MAAM,EAAE,OAAO,EAAE,KAAK,EAAE,aAAa,EAAE,GAAG,KAAK,CAAC;AAEhD,IAAA,KAAK,CAAC,OAAO,GAAG,CAAC,KAAoB,KAAI;QACrC,MAAM,OAAO,GAAI,KAA2B,CAAC,gBAAgB,CAAoB,cAAc,CAAC,aAAa,CAAC,CAAC;AAC/G,QAAA,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,UAAU,IAAI,QAAQ,CAAC,OAAO,EAAE,KAAK,CAAC,EAAE;YACjF,KAAK,CAAC,cAAc,EAAE,CAAC;YACvB,IAAI,QAAQ,GAAmB,EAAE,CAAC;AAClC,YAAA,mBAAmB,CACf,KAAK,EACL,IAAI,IAAG;AACH,gBAAA,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,EAAE;oBAC1B,OAAO;iBACV;AACD,gBAAA,QAAQ,CAAC,IAAI,CAAC,IAAoB,CAAC,CAAC;aACvC,EACD,IAAI,IAAG;AACH,gBAAA,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC,WAAW,CAAC,IAAI,CAAC,EAAE;AACrD,oBAAA,OAAO,IAAI,CAAC;iBACf;qBAAM;AACH,oBAAA,OAAO,KAAK,CAAC;iBAChB;aACJ,EACD,IAAI,CACP,CAAC;AACF,YAAA,UAAU,CAAC,iCAAiC,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;YAC9D,OAAO;SACV;AAED,QAAA,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,KAAK,CAAC,CAAC;AACpD,QAAA,IACI,CAAC,UAAU,CAAC,UAAU,CAAC,KAAK,CAAC;YAC7B,gBAAgB,CAAC,MAAM,GAAG,CAAC;AAC3B,aAAC,OAAO,CAAC,gBAAgB,CAAC,KAAK,CAAC,IAAI,OAAO,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC,EACrE;YACE,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,CAAC;SAC9B;QAED,OAAO,CAAC,KAAK,CAAC,CAAC;AACnB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,KAAK,GAAG,CAAC,KAAoB,KAAI;QACnC,KAAK,CAAC,KAAK,CAAC,CAAC;AACjB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,aAAa,GAAG,CAAC,KAAoB,KAAI;AAC3C,QAAA,IAAI,UAAU,CAAC,qBAAqB,CAAC,KAAK,CAAC,IAAI,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,EAAE;AACnF,YAAA,IAAI,QAAQ,CAAC,CAAC,OAAO,EAAE,OAAO,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;gBACtD,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,EAAE,KAAK,CAAC,CAAC;gBACpE,OAAO;aACV;AACD,YAAA,IAAI,QAAQ,CAAC,CAAC,aAAa,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;gBAClE,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,eAAe,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;gBACnC,OAAO;aACV;AACD,YAAA,IAAI,QAAQ,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,EAAE;gBAC3C,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,KAAK,CAAC,QAAQ,CAAC,IAAI,GAAG,GAAG,CAAC,CAAC;gBAC7D,OAAO;aACV;AACD,YAAA,IAAI,QAAQ,CAAC,CAAC,OAAO,EAAE,aAAa,CAAC,EAAE,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAC,KAAK,CAAC,EAAE;gBAC5D,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,eAAe,CAAC,UAAU,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC;gBACrC,OAAO;aACV;SACJ;QACD,aAAa,CAAC,KAAK,CAAC,CAAC;AACzB,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;;MC5EY,mBAAmB,CAAA;AADhC,IAAA,WAAA,GAAA;QAEY,IAAc,CAAA,cAAA,GAAiB,EAAE,CAAC;AAa7C,KAAA;AAXG,IAAA,gBAAgB,CAAC,GAAW,EAAA;AACxB,QAAA,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,GAAG,CAAC,CAAC;KAC7D;AAED,IAAA,gBAAgB,CAAC,IAAgB,EAAA;QAC7B,OAAO,IAAI,CAAC,cAAc,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;KACzC;AAED,IAAA,mBAAmB,CAAC,SAAqB,EAAA;QACrC,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAC,MAAM,CAAC,IAAI,IAAI,IAAI,CAAC,GAAG,KAAK,SAAS,CAAC,GAAG,CAAC,CAAC;KACxF;8GAbQ,mBAAmB,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,UAAA,EAAA,CAAA,CAAA,EAAA;kHAAnB,mBAAmB,EAAA,CAAA,CAAA,EAAA;;2FAAnB,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAD/B,UAAU;;;MCuBE,qBAAqB,CAAA;IAiB9B,WAAmB,CAAA,SAAoB,EAAS,gBAAkC,EAAA;QAA/D,IAAS,CAAA,SAAA,GAAT,SAAS,CAAW;QAAS,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QAhBlF,IAAW,CAAA,WAAA,GAAG,KAAK,CAAC;KAgBkE;IAEtF,QAAQ,GAAA;QACJ,IAAI,CAAC,UAAU,EAAE,CAAC;QAClB,IAAI,CAAC,WAAW,EAAE,CAAC;KACtB;IAED,UAAU,GAAA;QACN,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;QAC5C,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9C,QAAA,IAAI,CAAC,WAAW,GAAG,IAAI,CAAC;KAC3B;IAED,WAAW,GAAA;AACP,QAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;QAClC,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,OAAO,CAAC,CAAC;AAC/C,QAAA,IAAI,KAAK,CAAC,OAAO,CAAC,MAAM,CAAC,EAAE;SAC1B;aAAM;YACH,MAAM,YAAY,GAAG,IAAI,CAAC,gBAAgB,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC;AACnE,YAAA,MAAM,QAAQ,GAAG,YAAY,CAAC,QAAQ,CAAC;AACvC,YAAA,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC3B,YAAA,IAAI,CAAC,OAAO,CAAC,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,KAAK,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAC3D,YAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;SAC5B;KACJ;AAED,IAAA,OAAO,CAAC,CAAc,EAAA;QAClB,IAAI,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AACjC,YAAA,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;SAC1B;aAAM;AACH,YAAA,IAAI,QAAQ,GAAG,YAAY,CAAC,YAAY,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;AACxD,YAAA,IAAI,IAAI,CAAC,KAAK,GAAG,CAAC,EAAE;AAChB,gBAAA,MAAM,cAAc,GAAI,IAAI,CAAC,MAAM,CAAC,QAA2B,CAAC,IAAI,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC;gBAChF,MAAM,WAAW,GAAG,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,QAAQ,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,CAAC,CAAC;AAChG,gBAAA,IAAI,SAAS,GAAG,YAAY,CAAC,YAAY,CAAC,WAAW,CAAC,IAAI,YAAY,CAAC,YAAY,CAAC,cAAc,CAAC,CAAC;AACpG,gBAAA,QAAQ,GAAG,SAAS,CAAC,CAAC,CAAC;aAC1B;YACD,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,CAAC,EAAE,QAAQ,CAAC,CAAC;SAC1C;KACJ;AAED,IAAA,WAAW,CAAC,aAA4B,EAAA;AACpC,QAAA,IAAI,IAAI,CAAC,WAAW,EAAE;YAClB,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC;YAC5C,cAAc,CAAC,GAAG,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC;AAC9C,YAAA,MAAM,cAAc,GAAG,aAAa,CAAC,SAAS,CAAC,CAAC;AAChD,YAAA,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,EAAE,CAAC;AAClC,YAAA,IAAI,cAAc,IAAI,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,aAAa,CAAC,EAAE;AAC/E,gBAAA,OAAO,CAAC,QAAQ,GAAG,IAAI,CAAC;gBACxB,qBAAqB,CAAC,IAAI,CAAC,KAAK,EAAE,cAAc,CAAC,aAAa,CAAC,CAAC;gBAChE,kBAAkB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;aAChD;AACD,YAAA,IAAI,IAAI,CAAC,QAAQ,EAAE;AACf,gBAAA,IAAI,CAAC,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;aACnC;SACJ;KACJ;IAED,UAAU,GAAA;AACN,QAAA,MAAM,UAAU,GAAG,iBAAiB,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,OAAO,CAAC,CAAC;AAC/D,QAAA,MAAM,OAAO,GAA8B;YACvC,OAAO,EAAE,IAAI,CAAC,OAAO;YACrB,MAAM,EAAE,IAAI,CAAC,MAAM;YACnB,KAAK,EAAE,IAAI,CAAC,KAAK;AACjB,YAAA,QAAQ,EAAE,UAAU;YACpB,MAAM,EAAE,IAAI,CAAC,MAAM;SACtB,CAAC;AACF,QAAA,OAAO,OAAO,CAAC;KAClB;IAED,WAAW,GAAA;QACP,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,IAAI,CAAC,UAAU,EAAE,CAAC,CAAC;KAChD;8GAzFQ,qBAAqB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,SAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAArB,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,qBAAqB,sNAJpB,EAAE,EAAA,QAAA,EAAA,IAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAIH,qBAAqB,EAAA,UAAA,EAAA,CAAA;kBANjC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,eAAe;AACzB,oBAAA,QAAQ,EAAE,EAAE;oBACZ,eAAe,EAAE,uBAAuB,CAAC,MAAM;AAC/C,oBAAA,UAAU,EAAE,IAAI;AACnB,iBAAA,CAAA;6GAMY,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;;;MCjBG,6BAA6B,CAAA;AAStC,IAAA,WAAA,GAAA;AAWA,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,KAAa,EAAE,OAAqB,KAAI;YAC/C,OAAO,OAAO,CAAC,EAAE,CAAC;AACtB,SAAC,CAAC;KAbc;IAEhB,QAAQ,GAAA;AACJ,QAAA,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE;AACd,YAAA,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC;SAC5B;AACD,QAAA,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE;YACf,IAAI,CAAC,OAAO,GAAG,UAAU,CAAC,cAAc,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;SACxD;KACJ;8GAlBQ,6BAA6B,EAAA,IAAA,EAAA,EAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;AAA7B,IAAA,SAAA,IAAA,CAAA,IAAA,GAAA,EAAA,CAAA,oBAAA,CAAA,EAAA,UAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,IAAA,EAAA,6BAA6B,EAd5B,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,EAAA,KAAA,EAAA,OAAA,EAAA,MAAA,EAAA,QAAA,EAAA,MAAA,EAAA,QAAA,EAAA,OAAA,EAAA,SAAA,EAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;KAUT,EAES,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAAA,KAAK,mHAAE,qBAAqB,EAAA,QAAA,EAAA,eAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,SAAA,EAAA,QAAA,EAAA,OAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,CAAA,CAAA,EAAA;;2FAE7B,6BAA6B,EAAA,UAAA,EAAA,CAAA;kBAhBzC,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,gBAAgB;AAC1B,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUT,IAAA,CAAA;AACD,oBAAA,UAAU,EAAE,IAAI;AAChB,oBAAA,OAAO,EAAE,CAAC,KAAK,EAAE,qBAAqB,CAAC;AAC1C,iBAAA,CAAA;wDAEY,KAAK,EAAA,CAAA;sBAAb,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,MAAM,EAAA,CAAA;sBAAd,KAAK;gBAEG,OAAO,EAAA,CAAA;sBAAf,KAAK;;;ACvBJ,SAAU,SAAS,CAAC,KAAiB,EAAA;AACvC,IAAA,MAAM,EAAE,WAAW,EAAE,eAAe,EAAE,GAAG,KAAK,CAAC;AAC/C,IAAA,IAAI,eAAmC,CAAC;AAExC,IAAA,KAAK,CAAC,WAAW,GAAG,CAAC,KAAmB,KAAI;QACxC,eAAe,EAAE,MAAM,EAAE,CAAC;AAC1B,QAAA,MAAM,KAAK,GAAG,cAAc,CAAC,KAAK,EAAE,WAAW,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;QAC1E,IAAI,SAAS,GAAc,EAAE,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC3D,QAAA,IAAI,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,WAAW,CAAC,KAAK,CAAC,SAAS,CAAC,EAAE;AAC5D,YAAA,SAAS,GAAG,KAAK,CAAC,SAAS,CAAC;SAC/B;QACD,MAAM,WAAW,GAAG,yBAAyB,CAAC,KAAK,EAAE,SAAS,CAAC,CAAC;AAChE,QAAA,IAAI,WAAW,CAAC,MAAM,EAAE;AACpB,YAAA,eAAe,GAAG,qBAAqB,CAAC,KAAK,EAAE,WAAW,CAAC,CAAC;AAC5D,YAAA,eAAe,IAAI,UAAU,CAAC,oBAAoB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,eAAe,CAAC,CAAC;SACrF;QAED,WAAW,CAAC,KAAK,CAAC,CAAC;AACvB,KAAC,CAAC;AAEF,IAAA,KAAK,CAAC,eAAe,GAAG,CAAC,KAAmB,KAAI;QAC5C,eAAe,EAAE,MAAM,EAAE,CAAC;QAC1B,eAAe,GAAG,IAAI,CAAC;QACvB,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAC,CAAC;AAEF,IAAA,OAAO,KAAK,CAAC;AACjB;;AC4CA,MAAM,gBAAgB,GAAG,cAAc,CAAC;AACxC,MAAM,qBAAqB,GAAG,oBAAoB,CAAC;AACnD,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;MAoBxC,mBAAmB,CAAA;AA2B5B,IAAA,IAAI,IAAI,GAAA;AACJ,QAAA,OAAO,IAAI,CAAC,GAAG,CAAC,aAAa,CAAC;KACjC;AAED,IAAA,IACI,SAAS,GAAA;QACT,OAAO,CAAA,EAAG,eAAe,CAAY,SAAA,EAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAA,OAAA,EAAU,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,cAAc,CAAA,CAAA,EAAI,IAAI,CAAC,mBAAmB,EAAE,CAAA,CAAE,CAAC;KACpI;IAED,mBAAmB,GAAA;QACf,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,QAAQ,CAAC;SACnB;QACD,IAAI,SAAS,EAAE;AACX,YAAA,OAAO,QAAQ,CAAC;SACnB;QACD,IAAI,UAAU,EAAE;AACZ,YAAA,OAAO,SAAS,CAAC;SACpB;AACD,QAAA,OAAO,EAAE,CAAC;KACb;AAED,IAAA,IACI,QAAQ,GAAA;AACR,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,QAAQ,CAAC;KACtC;AAED,IAAA,IACI,SAAS,GAAA;QACT,OAAO,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzC;AAED,IAAA,IACI,wBAAwB,GAAA;AACxB,QAAA,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,wBAAwB,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACzF;AAED,IAAA,IAAI,aAAa,GAAA;AACb,QAAA,OAAO,IAAI,CAAC,UAAU,CAAC,aAAa,CAAC;KACxC;AAUD,IAAA,WAAA,CACW,GAAsB,EACtB,gBAAkC,EACjC,UAAmC,EACnC,MAAc,EAAA;QAHf,IAAG,CAAA,GAAA,GAAH,GAAG,CAAmB;QACtB,IAAgB,CAAA,gBAAA,GAAhB,gBAAgB,CAAkB;QACjC,IAAU,CAAA,UAAA,GAAV,UAAU,CAAyB;QACnC,IAAM,CAAA,MAAA,GAAN,MAAM,CAAQ;QA/E1B,IAAc,CAAA,cAAA,GAAG,KAAK,CAAC;QAEvB,IAAM,CAAA,MAAA,GAAG,EAAE,CAAC;AAMZ,QAAA,IAAA,CAAA,QAAQ,GAAG,IAAI,OAAO,EAAQ,CAAC;QAItB,IAAU,CAAA,UAAA,GAAmB,EAAE,CAAC;QAIhC,IAAY,CAAA,YAAA,GAAkB,EAAE,CAAC;AAMhC,QAAA,IAAA,CAAA,WAAW,GAAwC,IAAI,YAAY,EAAE,CAAC;AAEtE,QAAA,IAAA,CAAA,qBAAqB,GAA6B,IAAI,YAAY,EAAE,CAAC;AAmY/E,QAAA,IAAA,CAAA,OAAO,GAAG,CAAC,KAAa,EAAE,OAAqB,KAAI;YAC/C,OAAO,OAAO,CAAC,EAAE,CAAC;AACtB,SAAC,CAAC;KA7UE;IAEJ,QAAQ,GAAA;AACJ,QAAA,MAAM,WAAW,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,gBAAgB,CAAE,CAAA,CAAgB,CAAC;AACnF,QAAA,MAAM,gBAAgB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,qBAAqB,CAAE,CAAA,CAAgB,CAAC;AAC7F,QAAA,MAAM,iBAAiB,GAAG,IAAI,CAAC,IAAI,CAAC,aAAa,CAAC,CAAI,CAAA,EAAA,sBAAsB,CAAE,CAAA,CAAgB,CAAC;QAC/F,MAAM,QAAQ,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAqB,EAAE;YACnD,OAAO,EAAE,EAAE,SAAS,EAAE,CAAC,EAAE,WAAW,EAAE,CAAC,EAAE;AAC5C,SAAA,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,QAAQ,GAAG,QAAQ,CAAC;QACzB,IAAI,CAAC,iBAAiB,EAAE,CAAC;AACzB,QAAA,IAAI,CAAC,MAAM,CAAC,iBAAiB,CAAC,MAAK;YAC/B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,sBAAsB,EAAE,CAAC;YAC9B,IAAI,CAAC,iBAAiB,EAAE,CAAC;YACzB,IAAI,CAAC,qBAAqB,EAAE,CAAC;AAC7B,YAAA,SAAS,CAAa,QAAQ,EAAE,YAAY,CAAC;AACxC,iBAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,iBAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,gBAAA,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC7C,aAAC,CAAC,CAAC;AACX,SAAC,CAAC,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,CAAC;QACzC,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,QAAQ,CAAC,CAAC;QAC7C,aAAa,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,CAAC,CAAC;AACzC,QAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE;AAClC,YAAA,IAAI,EAAE,WAAW;AACjB,YAAA,SAAS,EAAE,gBAAgB;AAC3B,YAAA,UAAU,EAAE,iBAAiB;AAC7B,YAAA,SAAS,EAAE,IAAI,CAAC,UAAU,CAAC,aAAa;AACxC,YAAA,iBAAiB,EAAE,IAAI,CAAC,iBAAiB,CAAC,aAAa;AAC1D,SAAA,CAAC,CAAC;QACH,kBAAkB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAK;AACpC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;gBACjB,IAAI,CAAC,MAAM,EAAE,CAAC;AAClB,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;QACH,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAK;AACvC,YAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;AACjB,gBAAA,MAAM,WAAW,GAA0B;AACvC,oBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC7B,oBAAA,UAAU,EAAE,IAAI,CAAC,KAAK,CAAC,UAAU;AACjC,oBAAA,QAAQ,EAAE,IAAI,CAAC,KAAK,CAAC,QAAQ;AAC7B,oBAAA,SAAS,EAAE,IAAI,CAAC,KAAK,CAAC,SAAS;AAC/B,oBAAA,KAAK,EAAE,IAAI,CAAC,KAAK,CAAC,KAAK;iBAC1B,CAAC;gBACF,IAAI,CAAC,aAAa,EAAE,CAAC;AACrB,gBAAA,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;AACvC,aAAC,CAAC,CAAC;AACP,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC;KAC9B;IAED,kBAAkB,GAAA;QACd,IAAI,CAAC,iBAAiB,EAAE,CAAC;KAC5B;IAED,MAAM,GAAA;AACF,QAAA,IAAI,CAAC,MAAM,GAAG,EAAE,CAAC;AACjB,QAAA,IAAI,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC;KAC5B;AAED,IAAA,WAAW,CAAC,OAAsB,EAAA;AAC9B,QAAA,IAAI,IAAI,CAAC,cAAc,EAAE;AACrB,YAAA,MAAM,WAAW,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;AAC1C,YAAA,MAAM,OAAO,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;AAExC,YAAA,IAAI,WAAW;gBAAE,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,WAAW,CAAC,YAAY,CAAC;AAChE,YAAA,IAAI,OAAO;gBAAE,IAAI,CAAC,KAAK,CAAC,OAAO,GAAG,OAAO,CAAC,YAAY,CAAC;AACvD,YAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;SAC3B;KACJ;IAED,eAAe,GAAA;QACX,IAAI,CAAC,qBAAqB,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC5C,QAAA,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,QAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,QAAA,wBAAwB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;KACxC;IAEO,iBAAiB,GAAA;AACrB,QAAA,IAAI,KAAK,GAAG,UAAU,CAClB,eAAe,CACX,WAAW,CACP,aAAa,CACT,SAAS,CAAC,UAAU,CAAC,SAAS,CAAC,YAAY,CAAC,WAAW,CAAC,WAAW,CAAC,IAAI,CAAC,UAAU,EAAE,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAC/G,CACJ,CACJ,CACJ,CAAC;AACF,QAAA,IAAI,CAAC,YAAY,CAAC,OAAO,CAAC,MAAM,IAAG;AAC/B,YAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,SAAC,CAAC,CAAC;AACH,QAAA,IAAI,CAAC,KAAK,GAAG,KAAK,CAAC;AAEnB,QAAA,IAAI,IAAI,CAAC,aAAa,EAAE;YACpB,IAAI,CAAC,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,aAAa,CAAC;SAC5C;AAED,QAAA,IAAI,IAAI,CAAC,UAAU,EAAE;YACjB,IAAI,CAAC,KAAK,CAAC,KAAK,GAAG,IAAI,CAAC,UAAU,CAAC;SACtC;KACJ;IAEO,sBAAsB,GAAA;AAC1B,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;AAC5C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AACxC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,aAAa,CAAC;AAC5C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,8BAA8B,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AACnE,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,YAAY,CAAC;AACzC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,KAAK,CAAC,CAAC;AACjC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,cAAc,CAAC;AAC7C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,8BAA8B,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClD,YAAA,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;AACnC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,QAAQ,EAAE,WAAW,CAAC;AACvC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,QAAQ,EAAE,aAAa,CAAC;AAC3C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;AAC1D,YAAA,IAAI,CAAC,KAAK,CAAC,iBAAiB,CAAC,KAAK,CAAC,CAAC;AACxC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,SAAS,CAAC;AACtC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,IAAI,CAAC,IAAI,EAAE,WAAW,CAAC;AAC1C,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;AAChC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,QAAQ,EAAE,SAAS,CAAC;AACrC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAe,QAAQ,EAAE,WAAW,CAAC;AACzC,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAmB,KAAI;AAC/B,YAAA,IAAI,CAAC,KAAK,CAAC,eAAe,CAAC,KAAK,CAAC,CAAC;AACtC,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,UAAU,CAAC;aACvC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7E;AACA,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;AAC7B,YAAA,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC;AAC/B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAgB,QAAQ,EAAE,SAAS,CAAC;AACxC,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,GAAG,CAAC,KAAK,IAAG;AACR,YAAA,IAAI,CAAC,KAAK,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC;AACpC,SAAC,CAAC,EACF,MAAM,CAAC,KAAK,IAAI,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,wBAAwB,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAC3H;AACA,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;AAChC,YAAA,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,CAAC;AAC9B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAgB,QAAQ,EAAE,OAAO,CAAC;aACtC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7E;AACA,aAAA,SAAS,CAAC,CAAC,KAAoB,KAAI;AAChC,YAAA,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,CAAC;AAC7B,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,MAAM,CAAC;aACtC,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAC7E;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;YACjC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC9E,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,CAAC,CAAC;AACzE,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,OAAO,CAAC;AACvC,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACnH;AACA,aAAA,SAAS,CAAC,OAAO,cAA8B,KAAI;YAChD,MAAM,UAAU,GAAG,UAAU,CAAC,qBAAqB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YAChE,IAAI,UAAU,EAAE;gBACZ,MAAM,WAAW,GAAG,cAAc,CAAC,IAAI,CAAC,KAAK,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,CAAC,CAAC,CAAC,EAAE,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;gBACtG,MAAM,aAAa,GAAG,MAAM,gBAAgB,CAAC,cAAc,CAAC,aAAa,CAAC,CAAC;AAC3E,gBAAA,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,cAAc,CAAC,aAAa,EAAE,aAAa,EAAE,WAAW,CAAC,CAAC;aACvF;AACL,SAAC,CAAC,CAAC;AAEP,QAAA,SAAS,CAAiB,QAAQ,EAAE,KAAK,CAAC;AACrC,aAAA,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAM,IAAI,CAAC,SAAS,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,UAAU,CAAC,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CACnH;AACA,aAAA,SAAS,CAAC,CAAC,KAAqB,KAAI;YACjC,MAAM,gBAAgB,GAAG,mBAAmB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;YACzD,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,YAAA,MAAM,SAAS,GAAG,sBAAsB,CAAC,IAAI,CAAC,KAAK,EAAE,gBAAgB,EAAE,KAAK,CAAC,CAAC;AAC9E,YAAA,IAAI,CAAC,KAAK,CAAC,WAAW,CAAC,KAAK,CAAC,aAAa,EAAE,IAAI,EAAE,SAAS,EAAE,KAAK,CAAC,CAAC;YACpE,IAAI,CAAC,KAAK,CAAC,cAAc,CAAC,KAAK,CAAC,aAAa,CAAC,CAAC;AACnD,SAAC,CAAC,CAAC;KACV;IAEO,sBAAsB,GAAA;QAC1B,SAAS,CAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,QAAQ,CAAC;aAChE,IAAI,CACD,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,EACxB,MAAM,CAAC,MAAK;AACR,YAAA,IAAI,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;AAClC,gBAAA,uBAAuB,CAAC,IAAI,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;AAC3C,gBAAA,OAAO,KAAK,CAAC;aAChB;AACD,YAAA,OAAO,IAAI,CAAC;AAChB,SAAC,CAAC,CACL;AACA,aAAA,SAAS,CAAC,CAAC,KAAY,KAAI;YACxB,MAAM,EAAE,UAAU,EAAE,SAAS,EAAE,GAAG,KAAK,CAAC,MAAqB,CAAC;YAC9D,yBAAyB,CAAC,IAAI,CAAC,KAAK,EAAE,UAAU,EAAE,SAAS,CAAC,CAAC;AACjE,SAAC,CAAC,CAAC;AACP,QAAA,SAAS,CAAa,IAAI,CAAC,iBAAiB,CAAC,aAAa,EAAE,WAAW,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACvF,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAY,KAAI;AACxB,YAAA,IAAI,kBAAkB,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;aAC1B;AACL,SAAC,CAAC,CAAC;KACV;IAEO,qBAAqB,GAAA;AACzB,QAAA,IAAI,CAAC,cAAc,GAAG,IAAI,cAAc,CAAC,MAAK;AAC1C,YAAA,2BAA2B,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACxC,YAAA,iBAAiB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAC9B,YAAA,oBAAoB,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACrC,SAAC,CAAC,CAAC;QACH,IAAI,CAAC,cAAc,CAAC,OAAO,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;KACnD;IAEO,iBAAiB,GAAA;AACrB,QAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAG;AAC3B,YAAA,MAAM,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AAClC,SAAC,CAAC,CAAC;KACN;IAEO,aAAa,GAAA;AACjB,QAAA,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,MAAM,IAAG;AAC3B,YAAA,IAAI,gBAAgB,CAAC,MAAM,CAAC,EAAE;gBAC1B,MAAM,CAAC,aAAa,EAAE,CAAC;aAC1B;YACD,MAAM,CAAC,YAAY,EAAE,CAAC;AAC1B,SAAC,CAAC,CAAC;KACN;IAEO,iBAAiB,GAAA;AACrB,QAAA,SAAS,CAAa,IAAI,CAAC,IAAI,EAAE,OAAO,EAAE,EAAE,OAAO,EAAE,KAAK,EAAE,CAAC;AACxD,aAAA,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;AAC9B,aAAA,SAAS,CAAC,CAAC,KAAiB,KAAI;;;YAG7B,IAAI,KAAK,CAAC,OAAO,IAAI,KAAK,CAAC,OAAO,EAAE;gBAChC,KAAK,CAAC,cAAc,EAAE,CAAC;AACvB,gBAAA,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,GAAG,KAAK,CAAC;gBACjC,MAAM,IAAI,GAAG,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC;gBACtC,MAAM,IAAI,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;AAC/B,gBAAA,MAAM,QAAQ,GAAG,SAAS,GAAG,GAAG,CAAC;gBACjC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;gBAClC,IAAI,KAAK,GAAG,MAAM,CAAC;AACnB,gBAAA,IAAI,QAAQ,GAAG,QAAQ,EAAE;AACrB,oBAAA,KAAK,GAAG,QAAQ,GAAG,IAAI,CAAC;iBAC3B;AACD,gBAAA,IAAI,OAAO,GAAG,IAAI,GAAG,KAAK,GAAG,GAAG,CAAC;;gBAEjC,OAAO;oBACH,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;AAC7B,wBAAA,CAAC,IAAI;;wBAEL,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,QAAQ,GAAG,EAAE,CAAC,CAAC;gBAC/B,eAAe,CAAC,UAAU,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,EAAE,KAAK,CAAC,CAAC;aAC1D;AACL,SAAC,CAAC,CAAC;KACV;IAMD,WAAW,GAAA;AACP,QAAA,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,CAAC;AACrB,QAAA,IAAI,CAAC,QAAQ,CAAC,QAAQ,EAAE,CAAC;QACzB,IAAI,CAAC,cAAc,IAAI,IAAI,CAAC,cAAc,EAAE,UAAU,EAAE,CAAC;AACzD,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACjC,QAAA,qBAAqB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACzC,QAAA,kBAAkB,CAAC,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC;AACtC,QAAA,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,EAAE,MAAK,GAAG,CAAC,CAAC;KACnD;IAED,YAAY,GAAA;AACR,QAAA,IAAI,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC;AACxB,QAAA,IAAI,CAAC,MAAM,CAAC,GAAG,CAAC,MAAK;YACjB,IAAI,CAAC,aAAa,EAAE,CAAC;AACzB,SAAC,CAAC,CAAC;KACN;8GAlbQ,mBAAmB,EAAA,IAAA,EAAA,CAAA,EAAA,KAAA,EAAA,EAAA,CAAA,iBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,gBAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,UAAA,EAAA,EAAA,EAAA,KAAA,EAAA,EAAA,CAAA,MAAA,EAAA,CAAA,EAAA,MAAA,EAAA,EAAA,CAAA,eAAA,CAAA,SAAA,EAAA,CAAA,CAAA,EAAA;kGAAnB,mBAAmB,EAAA,YAAA,EAAA,IAAA,EAAA,QAAA,EAAA,aAAA,EAAA,MAAA,EAAA,EAAA,UAAA,EAAA,YAAA,EAAA,aAAA,EAAA,eAAA,EAAA,YAAA,EAAA,cAAA,EAAA,YAAA,EAAA,cAAA,EAAA,UAAA,EAAA,YAAA,EAAA,EAAA,OAAA,EAAA,EAAA,WAAA,EAAA,aAAA,EAAA,qBAAA,EAAA,uBAAA,EAAA,EAAA,IAAA,EAAA,EAAA,UAAA,EAAA,EAAA,OAAA,EAAA,gBAAA,EAAA,gBAAA,EAAA,eAAA,EAAA,eAAA,EAAA,gBAAA,EAAA,uBAAA,EAAA,+BAAA,EAAA,EAAA,EAAA,SAAA,EAJjB,CAAC,mBAAmB,CAAC,kDA8Ef,wBAAwB,EAAA,WAAA,EAAA,IAAA,EAAA,CAAA,EAAA,WAAA,EAAA,CAAA,EAAA,YAAA,EAAA,KAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,KAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,MAAA,EAAA,IAAA,EAAA,EAAA,EAAA,YAAA,EAAA,mBAAA,EAAA,KAAA,EAAA,IAAA,EAAA,SAAA,EAAA,CAAA,mBAAA,CAAA,EAAA,WAAA,EAAA,IAAA,EAAA,IAAA,EAHD,UAAU,EAvFxC,MAAA,EAAA,IAAA,EAAA,CAAA,EAAA,aAAA,EAAA,IAAA,EAAA,QAAA,EAAA,EAAA,EAAA,QAAA,EAAA,CAAA;;;;;;;;;;AAUT,IAAA,CAAA,EAAA,QAAA,EAAA,IAAA,EAAA,YAAA,EAAA,CAAA,EAAA,IAAA,EAAA,WAAA,EAAA,IAAA,EAIS,6BAA6B,EAAA,QAAA,EAAA,gBAAA,EAAA,MAAA,EAAA,CAAA,OAAA,EAAA,QAAA,EAAA,QAAA,EAAA,SAAA,CAAA,EAAA,CAAA,EAAA,eAAA,EAAA,EAAA,CAAA,uBAAA,CAAA,MAAA,EAAA,CAAA,CAAA,EAAA;;2FAE9B,mBAAmB,EAAA,UAAA,EAAA,CAAA;kBAlB/B,SAAS;AAAC,YAAA,IAAA,EAAA,CAAA;AACP,oBAAA,QAAQ,EAAE,aAAa;AACvB,oBAAA,QAAQ,EAAE,CAAA;;;;;;;;;;AAUT,IAAA,CAAA;oBACD,eAAe,EAAE,uBAAuB,CAAC,MAAM;oBAC/C,SAAS,EAAE,CAAC,mBAAmB,CAAC;AAChC,oBAAA,UAAU,EAAE,IAAI;oBAChB,OAAO,EAAE,CAAC,6BAA6B,CAAC;AAC3C,iBAAA,CAAA;mKAcY,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEG,aAAa,EAAA,CAAA;sBAArB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,YAAY,EAAA,CAAA;sBAApB,KAAK;gBAEG,UAAU,EAAA,CAAA;sBAAlB,KAAK;gBAEI,WAAW,EAAA,CAAA;sBAApB,MAAM;gBAEG,qBAAqB,EAAA,CAAA;sBAA9B,MAAM;gBAOH,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,OAAO,CAAA;gBAmBhB,QAAQ,EAAA,CAAA;sBADX,WAAW;uBAAC,gBAAgB,CAAA;gBAMzB,SAAS,EAAA,CAAA;sBADZ,WAAW;uBAAC,eAAe,CAAA;gBAMxB,wBAAwB,EAAA,CAAA;sBAD3B,WAAW;uBAAC,uBAAuB,CAAA;gBAUpC,GAAG,EAAA,CAAA;sBADF,SAAS;AAAC,gBAAA,IAAA,EAAA,CAAA,KAAK,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAIlC,iBAAiB,EAAA,CAAA;sBADhB,SAAS;uBAAC,mBAAmB,EAAE,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,EAAE,CAAA;gBAGA,OAAO,EAAA,CAAA;sBAAxE,eAAe;AAAC,gBAAA,IAAA,EAAA,CAAA,wBAAwB,EAAE,EAAE,WAAW,EAAE,IAAI,EAAE,CAAA;;;AC5KpE;;;AAGG;AACU,MAAA,kBAAkB,GAAG,CAC9B,OAAsB,EACtB,QAAwB,EACxB,OAAA,GAA6B,EAAE,QAAQ,EAAE,KAAK,EAAE,aAAa,EAAE,IAAI,EAAE,wBAAwB,EAAE,KAAK,EAAE,KACtG;IACA,IAAI,KAAK,GAAG,WAAW,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;AAC3C,IAAA,OAAO,CAAC,OAAO,CAAC,MAAM,IAAG;AACrB,QAAA,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC;AAC1B,KAAC,CAAC,CAAC;AACH,IAAA,OAAO,KAAK,CAAC;AACjB;;ACba,MAAA,eAAe,GAAG,CAAC,MAA8B,KAAI;AAC9D,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;IACvC,QAAQ,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,KAAa,KAAI;AACtC,QAAA,cAAc,CAAC,GAAG,CAAC,KAAK,EAAE,MAAM,CAAC,CAAC;AAClC,QAAA,aAAa,CAAC,GAAG,CAAC,KAAK,EAAE,KAAK,CAAC,CAAC;QAChC,eAAe,CAAC,KAAK,CAAC,CAAC;AAC3B,KAAC,CAAC,CAAC;AACP,EAAE;AAEW,MAAA,gBAAgB,GAAG,CAAC,MAA8B,KAAI;AAC/D,IAAA,MAAM,QAAQ,GAAG,MAAM,CAAC,QAAQ,IAAI,EAAE,CAAC;AACvC,IAAA,QAAQ,CAAC,OAAO,CAAC,KAAK,IAAG;AACrB,QAAA,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;AAC7B,QAAA,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;QAC5B,gBAAgB,CAAC,KAAK,CAAC,CAAC;AAC5B,KAAC,CAAC,CAAC;AACP;;ACpBA;;;;;;AAMG;AAKH;AACA,IAAI,SAAS,GAAG,CAAC,CAAC;AAElB;;;AAGG;AACG,SAAU,gBAAgB,CAC5B,IAAY,EACZ,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,MAAM,GAAG,CAAC,EACV,SAAA,GAA0B,EAAE,EAAA;;;;;IAM5B,MAAM,OAAO,GAAG,OAAO,CAAC;IACxB,MAAM,OAAO,GAAG,OAAO,CAAC;AAExB,IAAA,MAAM,KAAK,GAAG,IAAI,UAAU,CAAC,IAAI,EAAE;AAC/B,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,MAAM,EAAE,CAAC;AACT,QAAA,aAAa,EAAE,IAAI;QACnB,OAAO;QACP,OAAO;QACP,OAAO;QACP,OAAO;QACP,OAAO,EAAE,SAAS,CAAC,OAAO;QAC1B,MAAM,EAAE,SAAS,CAAC,GAAG;QACrB,QAAQ,EAAE,SAAS,CAAC,KAAK;QACzB,OAAO,EAAE,SAAS,CAAC,IAAI;AACvB,QAAA,MAAM,EAAE,MAAM;AACd,QAAA,OAAO,EAAE,CAAC;AACb,KAAA,CAAC,CAAC;;;AAIH,IAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,QAAA,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC1D;AAED,IAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,QAAA,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC1D;AAED,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;;;;;;;AASG;AACG,SAAU,kBAAkB,CAC9B,IAAY,EACZ,OAAO,GAAG,CAAC,EACX,OAAO,GAAG,CAAC,EACX,OAAgB,EAChB,OAAgB,EAChB,UAA4B,EAAE,SAAS,EAAE,IAAI,EAAE,EAAA;AAE/C,IAAA,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,IAAI,EAAE;AACjC,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;AACd,QAAA,IAAI,EAAE,MAAM;QACZ,OAAO;QACP,OAAO;AACP,QAAA,GAAG,OAAO;AACb,KAAA,CAAC,CAAC;AAEH,IAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,QAAA,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC1D;AAED,IAAA,IAAI,OAAO,IAAI,IAAI,EAAE;AACjB,QAAA,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,OAAO,CAAC,CAAC;KAC1D;AAED,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;AAGG;SACa,gBAAgB,CAAC,IAAY,EAAE,KAAK,GAAG,CAAC,EAAE,KAAK,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAE,OAAO,GAAG,CAAC,EAAA;;;IAGzF,MAAM,KAAK,GAAG,QAAQ,CAAC,WAAW,CAAC,SAAS,CAAC,CAAC;AAC9C,IAAA,MAAM,YAAY,GAAG,EAAE,KAAK,EAAE,KAAK,EAAE,OAAO,EAAE,OAAO,EAAE,UAAU,EAAE,SAAS,EAAE,EAAE,CAAC;;AAGhF,IAAA,KAAa,CAAC,WAAW,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,MAAM,EAAE,CAAC,CAAC,CAAC;;;IAIxD,2BAA2B,CAAC,KAAK,EAAE,SAAS,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IAC9D,2BAA2B,CAAC,KAAK,EAAE,eAAe,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;IACpE,2BAA2B,CAAC,KAAK,EAAE,gBAAgB,EAAE,CAAC,YAAY,CAAC,CAAC,CAAC;AAErE,IAAA,OAAO,KAAK,CAAC;AACjB,CAAC;AAED;;;AAGG;AACa,SAAA,mBAAmB,CAAC,IAAY,EAAE,OAAA,GAAkB,CAAC,EAAE,GAAc,GAAA,EAAE,EAAE,SAAA,GAA0B,EAAE,EAAA;AACjH,IAAA,OAAO,IAAI,aAAa,CAAC,IAAI,EAAE;AAC3B,QAAA,OAAO,EAAE,IAAI;AACb,QAAA,UAAU,EAAE,IAAI;QAChB,QAAQ,EAAE,IAAI;AACd,QAAA,IAAI,EAAE,MAAM;AACZ,QAAA,OAAO,EAAE,OAAO;AAChB,QAAA,GAAG,EAAE,GAAG;QACR,QAAQ,EAAE,SAAS,CAAC,KAAK;QACzB,OAAO,EAAE,SAAS,CAAC,IAAI;QACvB,MAAM,EAAE,SAAS,CAAC,GAAG;QACrB,OAAO,EAAE,SAAS,CAAC,OAAO;AAC7B,KAAA,CAAC,CAAC;AACP,CAAC;AAED;;;AAGG;AACa,SAAA,eAAe,CAAC,IAAY,EAAE,OAAO,GAAG,KAAK,EAAE,UAAU,GAAG,IAAI,EAAE,QAAQ,GAAG,IAAI,EAAA;AAC7F,IAAA,OAAO,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,OAAO,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;AAC9D,CAAC;AAED;;;AAGG;AACH,SAAS,2BAA2B,CAAC,KAAY,EAAE,YAAoB,EAAE,KAAU,EAAA;IAC/E,MAAM,CAAC,cAAc,CAAC,KAAK,EAAE,YAAY,EAAE,EAAE,GAAG,EAAE,MAAM,KAAK,EAAE,YAAY,EAAE,IAAI,EAAE,CAAC,CAAC;AACzF,CAAC;SAEe,qBAAqB,GAAA;AACjC,IAAA,MAAM,SAAS,GAAG,MAAM,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9D,IAAA,OAAO,SAAS,CAAC;AACrB;;ACrKA;;AAEG;;ACFH;;AAEG;;;;"}