UNPKG

element-plus

Version:

A Component Library for Vue 3

1 lines 32.1 kB
{"version":3,"file":"node.mjs","sources":["../../../../../../../packages/components/tree/src/model/node.ts"],"sourcesContent":["import { reactive } from 'vue'\nimport { isNil } from 'lodash-unified'\nimport {\n hasOwn,\n isArray,\n isBoolean,\n isFunction,\n isString,\n isUndefined,\n} from '@element-plus/utils'\nimport { NODE_KEY, markNodeData } from './util'\n\nimport type TreeStore from './tree-store'\nimport type { Nullable } from '@element-plus/utils'\nimport type {\n FakeNode,\n TreeKey,\n TreeNodeChildState,\n TreeNodeData,\n TreeNodeLoadedDefaultProps,\n TreeNodeOptions,\n} from '../tree.type'\n\nexport const getChildState = (node: Node[]): TreeNodeChildState => {\n let all = true\n let none = true\n let allWithoutDisable = true\n let isEffectivelyChecked = true\n for (let i = 0, j = node.length; i < j; i++) {\n const n = node[i]\n if (n.checked !== true || n.indeterminate) {\n all = false\n if (!n.disabled) {\n allWithoutDisable = false\n }\n }\n if (n.checked !== false || n.indeterminate) {\n none = false\n }\n if (!n.isEffectivelyChecked) {\n isEffectivelyChecked = false\n }\n }\n\n return {\n all,\n none,\n allWithoutDisable,\n half: !all && !none,\n isEffectivelyChecked,\n }\n}\n\nconst reInitChecked = function (node: Node): void {\n if (node.childNodes.length === 0 || node.loading) {\n node.isEffectivelyChecked = node.disabled || node.checked\n return\n }\n\n const { all, none, half, isEffectivelyChecked } = getChildState(\n node.childNodes\n )\n node.isEffectivelyChecked = isEffectivelyChecked\n if (all) {\n node.checked = true\n node.indeterminate = false\n } else if (half) {\n node.checked = false\n node.indeterminate = true\n } else if (none) {\n node.checked = false\n node.indeterminate = false\n }\n\n const parent = node.parent\n if (!parent || parent.level === 0) return\n\n if (!node.store.checkStrictly) {\n reInitChecked(parent)\n }\n}\n\nconst getPropertyFromData = function (node: Node, prop: string): any {\n const props = node.store.props\n const data = node.data || {}\n const config = (props as any)[prop]\n\n if (isFunction(config)) {\n return config(data, node)\n } else if (isString(config)) {\n return data[config]\n } else if (isUndefined(config)) {\n const dataProp = data[prop]\n return isUndefined(dataProp) ? '' : dataProp\n }\n}\n\nconst setCanFocus = function (childNodes: Node[], focus: boolean): void {\n childNodes.forEach((item) => {\n item.canFocus = focus\n setCanFocus(item.childNodes, focus)\n })\n}\n\nlet nodeIdSeed = 0\n\nclass Node {\n id: number\n text: string | null\n checked: boolean\n indeterminate: boolean\n data: TreeNodeData\n expanded: boolean\n parent: Node | null\n visible: boolean\n isCurrent: boolean\n store!: TreeStore\n isLeafByUser: boolean | undefined = undefined\n isLeaf: boolean | undefined = undefined\n canFocus: boolean\n\n level: number\n loaded: boolean\n childNodes: Node[]\n loading: boolean\n\n /**\n * Determines whether the current tree node is effectively checked.\n *\n * Rules:\n * 1. A disabled leaf node is always considered checked.\n * 2. A non-disabled leaf node reflects its actual checked state.\n * 3. A non-leaf node is considered checked only when:\n * - All of its child nodes are effectively checked, and\n * - Each child follows the same evaluation rules:\n * - Disabled leaf nodes follow rule #1.\n * - Non-leaf child nodes are recursively evaluated under this rule (#3).\n */\n isEffectivelyChecked: boolean = false\n\n constructor(options: TreeNodeOptions) {\n this.id = nodeIdSeed++\n this.text = null\n this.checked = false\n this.indeterminate = false\n this.data = null as unknown as TreeNodeData\n this.expanded = false\n this.parent = null as Node | null\n this.visible = true\n this.isCurrent = false\n this.canFocus = false\n\n for (const name in options) {\n if (hasOwn(options, name)) {\n this[name] = options[name]\n }\n }\n\n // internal\n this.level = 0\n this.loaded = false\n this.childNodes = []\n this.loading = false\n\n if (this.parent) {\n this.level = this.parent.level + 1\n }\n }\n\n initialize() {\n const store = this.store\n if (!store) {\n throw new Error('[Node]store is required!')\n }\n store.registerNode(this)\n\n const props = store.props\n if (props && typeof props.isLeaf !== 'undefined') {\n const isLeaf = getPropertyFromData(this, 'isLeaf')\n if (isBoolean(isLeaf)) {\n this.isLeafByUser = isLeaf\n }\n }\n\n if (store.lazy !== true && this.data) {\n this.setData(this.data)\n\n if (store.defaultExpandAll) {\n this.expanded = true\n this.canFocus = true\n }\n } else if (\n this.level > 0 &&\n store.lazy &&\n store.defaultExpandAll &&\n !this.isLeafByUser\n ) {\n this.expand()\n }\n if (!isArray(this.data)) {\n markNodeData(this, this.data)\n }\n if (!this.data) return\n\n const defaultExpandedKeys = store.defaultExpandedKeys\n const key = store.key\n\n if (\n key &&\n !isNil(this.key) &&\n defaultExpandedKeys &&\n defaultExpandedKeys.includes(this.key)\n ) {\n this.expand(null, store.autoExpandParent)\n }\n\n if (\n key &&\n store.currentNodeKey !== undefined &&\n this.key === store.currentNodeKey\n ) {\n store.currentNode && (store.currentNode.isCurrent = false)\n store.currentNode = this\n store.currentNode.isCurrent = true\n }\n\n if (store.lazy) {\n store._initDefaultCheckedNode(this)\n }\n\n this.updateLeafState()\n if (this.level === 1 || this.parent?.expanded === true) this.canFocus = true\n }\n\n setData(data: TreeNodeData): void {\n if (!isArray(data)) {\n markNodeData(this, data)\n }\n\n this.data = data\n this.childNodes = []\n\n let children\n if (this.level === 0 && isArray(this.data)) {\n children = this.data\n } else {\n children = getPropertyFromData(this, 'children') || []\n }\n\n for (let i = 0, j = children.length; i < j; i++) {\n this.insertChild({ data: children[i] })\n }\n }\n\n get label(): string {\n return getPropertyFromData(this, 'label')\n }\n\n get key(): TreeKey | null | undefined {\n const nodeKey = this.store.key\n if (this.data) return this.data[nodeKey]\n return null\n }\n\n get disabled(): boolean {\n return getPropertyFromData(this, 'disabled')\n }\n\n get nextSibling(): Nullable<Node> {\n const parent = this.parent\n if (parent) {\n const index = parent.childNodes.indexOf(this)\n if (index > -1) {\n return parent.childNodes[index + 1]\n }\n }\n return null\n }\n\n get previousSibling(): Nullable<Node> {\n const parent = this.parent\n if (parent) {\n const index = parent.childNodes.indexOf(this)\n if (index > -1) {\n return index > 0 ? parent.childNodes[index - 1] : null\n }\n }\n return null\n }\n\n contains(target: Node, deep = true): boolean {\n return (this.childNodes || []).some(\n (child) => child === target || (deep && child.contains(target))\n )\n }\n\n remove(): void {\n const parent = this.parent\n if (parent) {\n parent.removeChild(this)\n }\n }\n\n insertChild(child?: FakeNode | Node, index?: number, batch?: boolean): void {\n if (!child) throw new Error('InsertChild error: child is required.')\n\n if (!(child instanceof Node)) {\n if (!batch) {\n const children = this.getChildren(true)\n if (!children?.includes(child.data)) {\n if (isUndefined(index) || index < 0) {\n children?.push(child.data)\n } else {\n children?.splice(index, 0, child.data)\n }\n }\n }\n Object.assign(child, {\n parent: this,\n store: this.store,\n })\n child = reactive(new Node(child as TreeNodeOptions))\n if (child instanceof Node) {\n child.initialize()\n }\n }\n\n ;(child as Node).level = this.level + 1\n\n if (isUndefined(index) || index < 0) {\n this.childNodes.push(child as Node)\n } else {\n this.childNodes.splice(index, 0, child as Node)\n }\n\n this.updateLeafState()\n }\n\n insertBefore(child: FakeNode | Node, ref: Node): void {\n let index\n if (ref) {\n index = this.childNodes.indexOf(ref)\n }\n this.insertChild(child, index)\n }\n\n insertAfter(child: FakeNode | Node, ref: Node): void {\n let index\n if (ref) {\n index = this.childNodes.indexOf(ref)\n if (index !== -1) index += 1\n }\n this.insertChild(child, index)\n }\n\n removeChild(child: Node): void {\n const children = this.getChildren() || []\n const dataIndex = children.indexOf(child.data)\n if (dataIndex > -1) {\n children.splice(dataIndex, 1)\n }\n\n const index = this.childNodes.indexOf(child)\n\n if (index > -1) {\n this.store && this.store.deregisterNode(child)\n child.parent = null\n this.childNodes.splice(index, 1)\n }\n\n this.updateLeafState()\n }\n\n removeChildByData(data: TreeNodeData | null): void {\n const targetNode = this.childNodes.find((child) => child.data === data)\n\n if (targetNode) {\n this.removeChild(targetNode)\n }\n }\n\n expand(callback?: (() => void) | null, expandParent?: boolean): void {\n const done = () => {\n if (expandParent) {\n let parent = this.parent\n while (parent && parent.level > 0) {\n parent.expanded = true\n parent = parent.parent\n }\n }\n this.expanded = true\n if (callback) callback()\n setCanFocus(this.childNodes, true)\n }\n\n if (this.shouldLoadData()) {\n this.loadData((data) => {\n if (isArray(data)) {\n if (this.checked) {\n this.setChecked(true, true)\n } else if (!this.store.checkStrictly) {\n reInitChecked(this)\n }\n done()\n }\n })\n } else {\n done()\n }\n }\n\n doCreateChildren(\n array: TreeNodeData[],\n defaultProps: TreeNodeLoadedDefaultProps = {}\n ): void {\n array.forEach((item) => {\n this.insertChild(\n Object.assign({ data: item }, defaultProps),\n undefined,\n true\n )\n })\n }\n\n collapse(): void {\n this.expanded = false\n setCanFocus(this.childNodes, false)\n }\n\n shouldLoadData() {\n return Boolean(this.store.lazy === true && this.store.load && !this.loaded)\n }\n\n updateLeafState(): void {\n if (\n this.store.lazy === true &&\n this.loaded !== true &&\n typeof this.isLeafByUser !== 'undefined'\n ) {\n this.isLeaf = this.isLeafByUser\n this.isEffectivelyChecked = this.isLeaf && this.disabled\n return\n }\n const childNodes = this.childNodes\n if (\n !this.store.lazy ||\n (this.store.lazy === true && this.loaded === true)\n ) {\n this.isLeaf = !childNodes || childNodes.length === 0\n this.isEffectivelyChecked = this.isLeaf && this.disabled\n return\n }\n this.isLeaf = false\n }\n\n setChecked(\n value?: boolean | string,\n deep?: boolean,\n recursion?: boolean,\n passValue?: boolean\n ) {\n this.indeterminate = value === 'half'\n this.checked = value === true\n this.isEffectivelyChecked =\n !this.childNodes.length && (this.disabled || this.checked)\n\n if (this.store.checkStrictly) return\n\n if (!(this.shouldLoadData() && !this.store.checkDescendants)) {\n const handleDescendants = (): void => {\n if (deep) {\n const childNodes = this.childNodes\n for (let i = 0, j = childNodes.length; i < j; i++) {\n const child = childNodes[i]\n passValue = passValue || value !== false\n const isCheck =\n child.disabled && child.isLeaf ? child.checked : passValue\n child.setChecked(isCheck, deep, true, passValue)\n }\n const { half, all, isEffectivelyChecked } = getChildState(childNodes)\n if (!all) {\n this.checked = all\n this.indeterminate = half\n }\n this.isEffectivelyChecked = !this.childNodes.length\n ? this.disabled || this.checked\n : isEffectivelyChecked\n }\n }\n\n if (this.shouldLoadData()) {\n // Only work on lazy load data.\n this.loadData(\n () => {\n handleDescendants()\n reInitChecked(this)\n },\n {\n checked: value !== false,\n }\n )\n return\n } else {\n handleDescendants()\n }\n }\n\n const parent = this.parent\n if (!parent || parent.level === 0) return\n\n if (!recursion) {\n reInitChecked(parent)\n }\n }\n\n getChildren(forceInit = false): TreeNodeData | TreeNodeData[] | null {\n // this is data\n if (this.level === 0) return this.data\n const data = this.data\n if (!data) return null\n\n const props = this.store.props\n let children = 'children'\n if (props) {\n children = props.children || 'children'\n }\n\n if (isUndefined(data[children])) {\n data[children] = null\n }\n\n if (forceInit && !data[children]) {\n data[children] = []\n }\n\n return data[children]\n }\n\n updateChildren(): void {\n const newData = (this.getChildren() || []) as TreeNodeData[]\n const oldData = this.childNodes.map((node) => node.data)\n\n const newDataMap: Record<TreeKey, TreeNodeData> = {}\n const newNodes: TreeNodeData[] = []\n\n newData.forEach((item, index) => {\n const key = item[NODE_KEY]\n const isNodeExists =\n !!key && oldData.some((data) => data?.[NODE_KEY] === key)\n if (isNodeExists) {\n newDataMap[key] = { index, data: item }\n } else {\n newNodes.push({ index, data: item })\n }\n })\n\n if (!this.store.lazy) {\n oldData.forEach((item) => {\n if (!newDataMap[item?.[NODE_KEY]]) this.removeChildByData(item)\n })\n }\n\n newNodes.forEach(({ index, data }) => {\n this.insertChild({ data }, index)\n })\n\n this.updateLeafState()\n }\n\n loadData(\n callback: (data?: TreeNodeData[]) => void,\n defaultProps: TreeNodeLoadedDefaultProps = {}\n ) {\n if (\n this.store.lazy === true &&\n this.store.load &&\n !this.loaded &&\n (!this.loading || Object.keys(defaultProps).length)\n ) {\n this.loading = true\n\n const resolve = (children: TreeNodeData[]) => {\n this.childNodes = []\n\n this.doCreateChildren(children, defaultProps)\n this.loaded = true\n this.loading = false\n\n this.updateLeafState()\n if (callback) {\n callback.call(this, children)\n }\n }\n const reject = () => {\n this.loading = false\n }\n\n this.store.load(this, resolve, reject)\n } else {\n if (callback) {\n callback.call(this)\n }\n }\n }\n\n eachNode(callback: (node: Node) => void) {\n const arr: Node[] = [this]\n while (arr.length) {\n const node = arr.shift()!\n arr.unshift(...node.childNodes)\n callback(node)\n }\n }\n\n reInitChecked() {\n if (this.store.checkStrictly) return\n reInitChecked(this)\n }\n}\n\nexport default Node\n"],"names":[],"mappings":";;;;;;;;;AAuBO,MAAM,aAAA,GAAgB,CAAC,IAAA,KAAqC;AACjE,EAAA,IAAI,GAAA,GAAM,IAAA;AACV,EAAA,IAAI,IAAA,GAAO,IAAA;AACX,EAAA,IAAI,iBAAA,GAAoB,IAAA;AACxB,EAAA,IAAI,oBAAA,GAAuB,IAAA;AAC3B,EAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,KAAK,MAAA,EAAQ,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC3C,IAAA,MAAM,CAAA,GAAI,KAAK,CAAC,CAAA;AAChB,IAAA,IAAI,CAAA,CAAE,OAAA,KAAY,IAAA,IAAQ,CAAA,CAAE,aAAA,EAAe;AACzC,MAAA,GAAA,GAAM,KAAA;AACN,MAAA,IAAI,CAAC,EAAE,QAAA,EAAU;AACf,QAAA,iBAAA,GAAoB,KAAA;AAAA,MACtB;AAAA,IACF;AACA,IAAA,IAAI,CAAA,CAAE,OAAA,KAAY,KAAA,IAAS,CAAA,CAAE,aAAA,EAAe;AAC1C,MAAA,IAAA,GAAO,KAAA;AAAA,IACT;AACA,IAAA,IAAI,CAAC,EAAE,oBAAA,EAAsB;AAC3B,MAAA,oBAAA,GAAuB,KAAA;AAAA,IACzB;AAAA,EACF;AAEA,EAAA,OAAO;AAAA,IACL,GAAA;AAAA,IACA,IAAA;AAAA,IACA,iBAAA;AAAA,IACA,IAAA,EAAM,CAAC,GAAA,IAAO,CAAC,IAAA;AAAA,IACf;AAAA,GACF;AACF;AAEA,MAAM,aAAA,GAAgB,SAAU,IAAA,EAAkB;AAChD,EAAA,IAAI,IAAA,CAAK,UAAA,CAAW,MAAA,KAAW,CAAA,IAAK,KAAK,OAAA,EAAS;AAChD,IAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,QAAA,IAAY,IAAA,CAAK,OAAA;AAClD,IAAA;AAAA,EACF;AAEA,EAAA,MAAM,EAAE,GAAA,EAAK,IAAA,EAAM,IAAA,EAAM,sBAAqB,GAAI,aAAA;AAAA,IAChD,IAAA,CAAK;AAAA,GACP;AACA,EAAA,IAAA,CAAK,oBAAA,GAAuB,oBAAA;AAC5B,EAAA,IAAI,GAAA,EAAK;AACP,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,EACvB,WAAW,IAAA,EAAM;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,EACvB,WAAW,IAAA,EAAM;AACf,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AAAA,EACvB;AAEA,EAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,EAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,CAAA,EAAG;AAEnC,EAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,aAAA,EAAe;AAC7B,IAAA,aAAA,CAAc,MAAM,CAAA;AAAA,EACtB;AACF,CAAA;AAEA,MAAM,mBAAA,GAAsB,SAAU,IAAA,EAAY,IAAA,EAAmB;AACnE,EAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA;AACzB,EAAA,MAAM,IAAA,GAAO,IAAA,CAAK,IAAA,IAAQ,EAAC;AAC3B,EAAA,MAAM,MAAA,GAAU,MAAc,IAAI,CAAA;AAElC,EAAA,IAAI,UAAA,CAAW,MAAM,CAAA,EAAG;AACtB,IAAA,OAAO,MAAA,CAAO,MAAM,IAAI,CAAA;AAAA,EAC1B,CAAA,MAAA,IAAW,QAAA,CAAS,MAAM,CAAA,EAAG;AAC3B,IAAA,OAAO,KAAK,MAAM,CAAA;AAAA,EACpB,CAAA,MAAA,IAAW,WAAA,CAAY,MAAM,CAAA,EAAG;AAC9B,IAAA,MAAM,QAAA,GAAW,KAAK,IAAI,CAAA;AAC1B,IAAA,OAAO,WAAA,CAAY,QAAQ,CAAA,GAAI,EAAA,GAAK,QAAA;AAAA,EACtC;AACF,CAAA;AAEA,MAAM,WAAA,GAAc,SAAU,UAAA,EAAoB,KAAA,EAAsB;AACtE,EAAA,UAAA,CAAW,OAAA,CAAQ,CAAC,IAAA,KAAS;AAC3B,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,WAAA,CAAY,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,EACpC,CAAC,CAAA;AACH,CAAA;AAEA,IAAI,UAAA,GAAa,CAAA;AAEjB,MAAM,IAAA,CAAK;AAAA,EAkCT,YAAY,OAAA,EAA0B;AAjCtC,IAAA,aAAA,CAAA,IAAA,EAAA,IAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,eAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,MAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,WAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,cAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,UAAA,CAAA;AAEA,IAAA,aAAA,CAAA,IAAA,EAAA,OAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,QAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,YAAA,CAAA;AACA,IAAA,aAAA,CAAA,IAAA,EAAA,SAAA,CAAA;AAcA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAAA,aAAA,CAAA,IAAA,EAAA,sBAAA,EAAgC,KAAA,CAAA;AAG9B,IAAA,IAAA,CAAK,EAAA,GAAK,UAAA,EAAA;AACV,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AACf,IAAA,IAAA,CAAK,aAAA,GAAgB,KAAA;AACrB,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,IAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AACf,IAAA,IAAA,CAAK,SAAA,GAAY,KAAA;AACjB,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAEhB,IAAA,KAAA,MAAW,QAAQ,OAAA,EAAS;AAC1B,MAAA,IAAI,MAAA,CAAO,OAAA,EAAS,IAAI,CAAA,EAAG;AACzB,QAAA,IAAA,CAAK,IAAI,CAAA,GAAI,OAAA,CAAQ,IAAI,CAAA;AAAA,MAC3B;AAAA,IACF;AAGA,IAAA,IAAA,CAAK,KAAA,GAAQ,CAAA;AACb,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AACd,IAAA,IAAA,CAAK,aAAa,EAAC;AACnB,IAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAEf,IAAA,IAAI,KAAK,MAAA,EAAQ;AACf,MAAA,IAAA,CAAK,KAAA,GAAQ,IAAA,CAAK,MAAA,CAAO,KAAA,GAAQ,CAAA;AAAA,IACnC;AAAA,EACF;AAAA,EAEA,UAAA,GAAa;AAzKf,IAAA,IAAA,EAAA;AA0KI,IAAA,MAAM,QAAQ,IAAA,CAAK,KAAA;AACnB,IAAA,IAAI,CAAC,KAAA,EAAO;AACV,MAAA,MAAM,IAAI,MAAM,0BAA0B,CAAA;AAAA,IAC5C;AACA,IAAA,KAAA,CAAM,aAAa,IAAI,CAAA;AAEvB,IAAA,MAAM,QAAQ,KAAA,CAAM,KAAA;AACpB,IAAA,IAAI,KAAA,IAAS,OAAO,KAAA,CAAM,MAAA,KAAW,WAAA,EAAa;AAChD,MAAA,MAAM,MAAA,GAAS,mBAAA,CAAoB,IAAA,EAAM,QAAQ,CAAA;AACjD,MAAA,IAAI,SAAA,CAAU,MAAM,CAAA,EAAG;AACrB,QAAA,IAAA,CAAK,YAAA,GAAe,MAAA;AAAA,MACtB;AAAA,IACF;AAEA,IAAA,IAAI,KAAA,CAAM,IAAA,KAAS,IAAA,IAAQ,IAAA,CAAK,IAAA,EAAM;AACpC,MAAA,IAAA,CAAK,OAAA,CAAQ,KAAK,IAAI,CAAA;AAEtB,MAAA,IAAI,MAAM,gBAAA,EAAkB;AAC1B,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,QAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,MAClB;AAAA,IACF,CAAA,MAAA,IACE,IAAA,CAAK,KAAA,GAAQ,CAAA,IACb,KAAA,CAAM,QACN,KAAA,CAAM,gBAAA,IACN,CAAC,IAAA,CAAK,YAAA,EACN;AACA,MAAA,IAAA,CAAK,MAAA,EAAO;AAAA,IACd;AACA,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AACvB,MAAA,YAAA,CAAa,IAAA,EAAM,KAAK,IAAI,CAAA;AAAA,IAC9B;AACA,IAAA,IAAI,CAAC,KAAK,IAAA,EAAM;AAEhB,IAAA,MAAM,sBAAsB,KAAA,CAAM,mBAAA;AAClC,IAAA,MAAM,MAAM,KAAA,CAAM,GAAA;AAElB,IAAA,IACE,GAAA,IACA,CAAC,KAAA,CAAM,IAAA,CAAK,GAAG,CAAA,IACf,mBAAA,IACA,mBAAA,CAAoB,QAAA,CAAS,IAAA,CAAK,GAAG,CAAA,EACrC;AACA,MAAA,IAAA,CAAK,MAAA,CAAO,IAAA,EAAM,KAAA,CAAM,gBAAgB,CAAA;AAAA,IAC1C;AAEA,IAAA,IACE,OACA,KAAA,CAAM,cAAA,KAAmB,UACzB,IAAA,CAAK,GAAA,KAAQ,MAAM,cAAA,EACnB;AACA,MAAA,KAAA,CAAM,WAAA,KAAgB,KAAA,CAAM,WAAA,CAAY,SAAA,GAAY,KAAA,CAAA;AACpD,MAAA,KAAA,CAAM,WAAA,GAAc,IAAA;AACpB,MAAA,KAAA,CAAM,YAAY,SAAA,GAAY,IAAA;AAAA,IAChC;AAEA,IAAA,IAAI,MAAM,IAAA,EAAM;AACd,MAAA,KAAA,CAAM,wBAAwB,IAAI,CAAA;AAAA,IACpC;AAEA,IAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,IAAA,IAAI,IAAA,CAAK,UAAU,CAAA,IAAA,CAAA,CAAK,EAAA,GAAA,IAAA,CAAK,WAAL,IAAA,GAAA,MAAA,GAAA,EAAA,CAAa,QAAA,MAAa,IAAA,EAAM,IAAA,CAAK,QAAA,GAAW,IAAA;AAAA,EAC1E;AAAA,EAEA,QAAQ,IAAA,EAA0B;AAChC,IAAA,IAAI,CAAC,OAAA,CAAQ,IAAI,CAAA,EAAG;AAClB,MAAA,YAAA,CAAa,MAAM,IAAI,CAAA;AAAA,IACzB;AAEA,IAAA,IAAA,CAAK,IAAA,GAAO,IAAA;AACZ,IAAA,IAAA,CAAK,aAAa,EAAC;AAEnB,IAAA,IAAI,QAAA;AACJ,IAAA,IAAI,KAAK,KAAA,KAAU,CAAA,IAAK,OAAA,CAAQ,IAAA,CAAK,IAAI,CAAA,EAAG;AAC1C,MAAA,QAAA,GAAW,IAAA,CAAK,IAAA;AAAA,IAClB,CAAA,MAAO;AACL,MAAA,QAAA,GAAW,mBAAA,CAAoB,IAAA,EAAM,UAAU,CAAA,IAAK,EAAC;AAAA,IACvD;AAEA,IAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,SAAS,MAAA,EAAQ,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AAC/C,MAAA,IAAA,CAAK,YAAY,EAAE,IAAA,EAAM,QAAA,CAAS,CAAC,GAAG,CAAA;AAAA,IACxC;AAAA,EACF;AAAA,EAEA,IAAI,KAAA,GAAgB;AAClB,IAAA,OAAO,mBAAA,CAAoB,MAAM,OAAO,CAAA;AAAA,EAC1C;AAAA,EAEA,IAAI,GAAA,GAAkC;AACpC,IAAA,MAAM,OAAA,GAAU,KAAK,KAAA,CAAM,GAAA;AAC3B,IAAA,IAAI,IAAA,CAAK,IAAA,EAAM,OAAO,IAAA,CAAK,KAAK,OAAO,CAAA;AACvC,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAI,QAAA,GAAoB;AACtB,IAAA,OAAO,mBAAA,CAAoB,MAAM,UAAU,CAAA;AAAA,EAC7C;AAAA,EAEA,IAAI,WAAA,GAA8B;AAChC,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA;AAC5C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,OAAO,MAAA,CAAO,UAAA,CAAW,KAAA,GAAQ,CAAC,CAAA;AAAA,MACpC;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,IAAI,eAAA,GAAkC;AACpC,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,UAAA,CAAW,OAAA,CAAQ,IAAI,CAAA;AAC5C,MAAA,IAAI,QAAQ,EAAA,EAAI;AACd,QAAA,OAAO,QAAQ,CAAA,GAAI,MAAA,CAAO,UAAA,CAAW,KAAA,GAAQ,CAAC,CAAA,GAAI,IAAA;AAAA,MACpD;AAAA,IACF;AACA,IAAA,OAAO,IAAA;AAAA,EACT;AAAA,EAEA,QAAA,CAAS,MAAA,EAAc,IAAA,GAAO,IAAA,EAAe;AAC3C,IAAA,OAAA,CAAQ,IAAA,CAAK,UAAA,IAAc,EAAC,EAAG,IAAA;AAAA,MAC7B,CAAC,KAAA,KAAU,KAAA,KAAU,UAAW,IAAA,IAAQ,KAAA,CAAM,SAAS,MAAM;AAAA,KAC/D;AAAA,EACF;AAAA,EAEA,MAAA,GAAe;AACb,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,IAAI,MAAA,EAAQ;AACV,MAAA,MAAA,CAAO,YAAY,IAAI,CAAA;AAAA,IACzB;AAAA,EACF;AAAA,EAEA,WAAA,CAAY,KAAA,EAAyB,KAAA,EAAgB,KAAA,EAAuB;AAC1E,IAAA,IAAI,CAAC,KAAA,EAAO,MAAM,IAAI,MAAM,uCAAuC,CAAA;AAEnE,IAAA,IAAI,EAAE,iBAAiB,IAAA,CAAA,EAAO;AAC5B,MAAA,IAAI,CAAC,KAAA,EAAO;AACV,QAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,CAAY,IAAI,CAAA;AACtC,QAAA,IAAI,EAAC,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,QAAA,CAAS,KAAA,CAAM,IAAA,CAAA,CAAA,EAAO;AACnC,UAAA,IAAI,WAAA,CAAY,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG;AACnC,YAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,KAAK,KAAA,CAAM,IAAA,CAAA;AAAA,UACvB,CAAA,MAAO;AACL,YAAA,QAAA,IAAA,IAAA,GAAA,MAAA,GAAA,QAAA,CAAU,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,KAAA,CAAM,IAAA,CAAA;AAAA,UACnC;AAAA,QACF;AAAA,MACF;AACA,MAAA,MAAA,CAAO,OAAO,KAAA,EAAO;AAAA,QACnB,MAAA,EAAQ,IAAA;AAAA,QACR,OAAO,IAAA,CAAK;AAAA,OACb,CAAA;AACD,MAAA,KAAA,GAAQ,QAAA,CAAS,IAAI,IAAA,CAAK,KAAwB,CAAC,CAAA;AACnD,MAAA,IAAI,iBAAiB,IAAA,EAAM;AACzB,QAAA,KAAA,CAAM,UAAA,EAAW;AAAA,MACnB;AAAA,IACF;AAEC,IAAC,KAAA,CAAe,KAAA,GAAQ,IAAA,CAAK,KAAA,GAAQ,CAAA;AAEtC,IAAA,IAAI,WAAA,CAAY,KAAK,CAAA,IAAK,KAAA,GAAQ,CAAA,EAAG;AACnC,MAAA,IAAA,CAAK,UAAA,CAAW,KAAK,KAAa,CAAA;AAAA,IACpC,CAAA,MAAO;AACL,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAA,EAAO,CAAA,EAAG,KAAa,CAAA;AAAA,IAChD;AAEA,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEA,YAAA,CAAa,OAAwB,GAAA,EAAiB;AACpD,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AAAA,IACrC;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEA,WAAA,CAAY,OAAwB,GAAA,EAAiB;AACnD,IAAA,IAAI,KAAA;AACJ,IAAA,IAAI,GAAA,EAAK;AACP,MAAA,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,GAAG,CAAA;AACnC,MAAA,IAAI,KAAA,KAAU,IAAI,KAAA,IAAS,CAAA;AAAA,IAC7B;AACA,IAAA,IAAA,CAAK,WAAA,CAAY,OAAO,KAAK,CAAA;AAAA,EAC/B;AAAA,EAEA,YAAY,KAAA,EAAmB;AAC7B,IAAA,MAAM,QAAA,GAAW,IAAA,CAAK,WAAA,EAAY,IAAK,EAAC;AACxC,IAAA,MAAM,SAAA,GAAY,QAAA,CAAS,OAAA,CAAQ,KAAA,CAAM,IAAI,CAAA;AAC7C,IAAA,IAAI,YAAY,EAAA,EAAI;AAClB,MAAA,QAAA,CAAS,MAAA,CAAO,WAAW,CAAC,CAAA;AAAA,IAC9B;AAEA,IAAA,MAAM,KAAA,GAAQ,IAAA,CAAK,UAAA,CAAW,OAAA,CAAQ,KAAK,CAAA;AAE3C,IAAA,IAAI,QAAQ,EAAA,EAAI;AACd,MAAA,IAAA,CAAK,KAAA,IAAS,IAAA,CAAK,KAAA,CAAM,cAAA,CAAe,KAAK,CAAA;AAC7C,MAAA,KAAA,CAAM,MAAA,GAAS,IAAA;AACf,MAAA,IAAA,CAAK,UAAA,CAAW,MAAA,CAAO,KAAA,EAAO,CAAC,CAAA;AAAA,IACjC;AAEA,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEA,kBAAkB,IAAA,EAAiC;AACjD,IAAA,MAAM,UAAA,GAAa,KAAK,UAAA,CAAW,IAAA,CAAK,CAAC,KAAA,KAAU,KAAA,CAAM,SAAS,IAAI,CAAA;AAEtE,IAAA,IAAI,UAAA,EAAY;AACd,MAAA,IAAA,CAAK,YAAY,UAAU,CAAA;AAAA,IAC7B;AAAA,EACF;AAAA,EAEA,MAAA,CAAO,UAAgC,YAAA,EAA8B;AACnE,IAAA,MAAM,OAAO,MAAM;AACjB,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,IAAI,SAAS,IAAA,CAAK,MAAA;AAClB,QAAA,OAAO,MAAA,IAAU,MAAA,CAAO,KAAA,GAAQ,CAAA,EAAG;AACjC,UAAA,MAAA,CAAO,QAAA,GAAW,IAAA;AAClB,UAAA,MAAA,GAAS,MAAA,CAAO,MAAA;AAAA,QAClB;AAAA,MACF;AACA,MAAA,IAAA,CAAK,QAAA,GAAW,IAAA;AAChB,MAAA,IAAI,UAAU,QAAA,EAAS;AACvB,MAAA,WAAA,CAAY,IAAA,CAAK,YAAY,IAAI,CAAA;AAAA,IACnC,CAAA;AAEA,IAAA,IAAI,IAAA,CAAK,gBAAe,EAAG;AACzB,MAAA,IAAA,CAAK,QAAA,CAAS,CAAC,IAAA,KAAS;AACtB,QAAA,IAAI,OAAA,CAAQ,IAAI,CAAA,EAAG;AACjB,UAAA,IAAI,KAAK,OAAA,EAAS;AAChB,YAAA,IAAA,CAAK,UAAA,CAAW,MAAM,IAAI,CAAA;AAAA,UAC5B,CAAA,MAAA,IAAW,CAAC,IAAA,CAAK,KAAA,CAAM,aAAA,EAAe;AACpC,YAAA,aAAA,CAAc,IAAI,CAAA;AAAA,UACpB;AACA,UAAA,IAAA,EAAK;AAAA,QACP;AAAA,MACF,CAAC,CAAA;AAAA,IACH,CAAA,MAAO;AACL,MAAA,IAAA,EAAK;AAAA,IACP;AAAA,EACF;AAAA,EAEA,gBAAA,CACE,KAAA,EACA,YAAA,GAA2C,EAAC,EACtC;AACN,IAAA,KAAA,CAAM,OAAA,CAAQ,CAAC,IAAA,KAAS;AACtB,MAAA,IAAA,CAAK,WAAA;AAAA,QACH,OAAO,MAAA,CAAO,EAAE,IAAA,EAAM,IAAA,IAAQ,YAAY,CAAA;AAAA,QAC1C,MAAA;AAAA,QACA;AAAA,OACF;AAAA,IACF,CAAC,CAAA;AAAA,EACH;AAAA,EAEA,QAAA,GAAiB;AACf,IAAA,IAAA,CAAK,QAAA,GAAW,KAAA;AAChB,IAAA,WAAA,CAAY,IAAA,CAAK,YAAY,KAAK,CAAA;AAAA,EACpC;AAAA,EAEA,cAAA,GAAiB;AACf,IAAA,OAAO,OAAA,CAAQ,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,IAAA,IAAQ,KAAK,KAAA,CAAM,IAAA,IAAQ,CAAC,IAAA,CAAK,MAAM,CAAA;AAAA,EAC5E;AAAA,EAEA,eAAA,GAAwB;AACtB,IAAA,IACE,IAAA,CAAK,KAAA,CAAM,IAAA,KAAS,IAAA,IACpB,IAAA,CAAK,WAAW,IAAA,IAChB,OAAO,IAAA,CAAK,YAAA,KAAiB,WAAA,EAC7B;AACA,MAAA,IAAA,CAAK,SAAS,IAAA,CAAK,YAAA;AACnB,MAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,QAAA;AAChD,MAAA;AAAA,IACF;AACA,IAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,IAAA,IACE,CAAC,IAAA,CAAK,KAAA,CAAM,IAAA,IACX,IAAA,CAAK,MAAM,IAAA,KAAS,IAAA,IAAQ,IAAA,CAAK,MAAA,KAAW,IAAA,EAC7C;AACA,MAAA,IAAA,CAAK,MAAA,GAAS,CAAC,UAAA,IAAc,UAAA,CAAW,MAAA,KAAW,CAAA;AACnD,MAAA,IAAA,CAAK,oBAAA,GAAuB,IAAA,CAAK,MAAA,IAAU,IAAA,CAAK,QAAA;AAChD,MAAA;AAAA,IACF;AACA,IAAA,IAAA,CAAK,MAAA,GAAS,KAAA;AAAA,EAChB;AAAA,EAEA,UAAA,CACE,KAAA,EACA,IAAA,EACA,SAAA,EACA,SAAA,EACA;AACA,IAAA,IAAA,CAAK,gBAAgB,KAAA,KAAU,MAAA;AAC/B,IAAA,IAAA,CAAK,UAAU,KAAA,KAAU,IAAA;AACzB,IAAA,IAAA,CAAK,uBACH,CAAC,IAAA,CAAK,WAAW,MAAA,KAAW,IAAA,CAAK,YAAY,IAAA,CAAK,OAAA,CAAA;AAEpD,IAAA,IAAI,IAAA,CAAK,MAAM,aAAA,EAAe;AAE9B,IAAA,IAAI,EAAE,IAAA,CAAK,cAAA,MAAoB,CAAC,IAAA,CAAK,MAAM,gBAAA,CAAA,EAAmB;AAC5D,MAAA,MAAM,oBAAoB,MAAY;AACpC,QAAA,IAAI,IAAA,EAAM;AACR,UAAA,MAAM,aAAa,IAAA,CAAK,UAAA;AACxB,UAAA,KAAA,IAAS,IAAI,CAAA,EAAG,CAAA,GAAI,WAAW,MAAA,EAAQ,CAAA,GAAI,GAAG,CAAA,EAAA,EAAK;AACjD,YAAA,MAAM,KAAA,GAAQ,WAAW,CAAC,CAAA;AAC1B,YAAA,SAAA,GAAY,aAAa,KAAA,KAAU,KAAA;AACnC,YAAA,MAAM,UACJ,KAAA,CAAM,QAAA,IAAY,KAAA,CAAM,MAAA,GAAS,MAAM,OAAA,GAAU,SAAA;AACnD,YAAA,KAAA,CAAM,UAAA,CAAW,OAAA,EAAS,IAAA,EAAM,IAAA,EAAM,SAAS,CAAA;AAAA,UACjD;AACA,UAAA,MAAM,EAAE,IAAA,EAAM,GAAA,EAAK,oBAAA,EAAqB,GAAI,cAAc,UAAU,CAAA;AACpE,UAAA,IAAI,CAAC,GAAA,EAAK;AACR,YAAA,IAAA,CAAK,OAAA,GAAU,GAAA;AACf,YAAA,IAAA,CAAK,aAAA,GAAgB,IAAA;AAAA,UACvB;AACA,UAAA,IAAA,CAAK,oBAAA,GAAuB,CAAC,IAAA,CAAK,UAAA,CAAW,SACzC,IAAA,CAAK,QAAA,IAAY,KAAK,OAAA,GACtB,oBAAA;AAAA,QACN;AAAA,MACF,CAAA;AAEA,MAAA,IAAI,IAAA,CAAK,gBAAe,EAAG;AAEzB,QAAA,IAAA,CAAK,QAAA;AAAA,UACH,MAAM;AACJ,YAAA,iBAAA,EAAkB;AAClB,YAAA,aAAA,CAAc,IAAI,CAAA;AAAA,UACpB,CAAA;AAAA,UACA;AAAA,YACE,SAAS,KAAA,KAAU;AAAA;AACrB,SACF;AACA,QAAA;AAAA,MACF,CAAA,MAAO;AACL,QAAA,iBAAA,EAAkB;AAAA,MACpB;AAAA,IACF;AAEA,IAAA,MAAM,SAAS,IAAA,CAAK,MAAA;AACpB,IAAA,IAAI,CAAC,MAAA,IAAU,MAAA,CAAO,KAAA,KAAU,CAAA,EAAG;AAEnC,IAAA,IAAI,CAAC,SAAA,EAAW;AACd,MAAA,aAAA,CAAc,MAAM,CAAA;AAAA,IACtB;AAAA,EACF;AAAA,EAEA,WAAA,CAAY,YAAY,KAAA,EAA6C;AAEnE,IAAA,IAAI,IAAA,CAAK,KAAA,KAAU,CAAA,EAAG,OAAO,IAAA,CAAK,IAAA;AAClC,IAAA,MAAM,OAAO,IAAA,CAAK,IAAA;AAClB,IAAA,IAAI,CAAC,MAAM,OAAO,IAAA;AAElB,IAAA,MAAM,KAAA,GAAQ,KAAK,KAAA,CAAM,KAAA;AACzB,IAAA,IAAI,QAAA,GAAW,UAAA;AACf,IAAA,IAAI,KAAA,EAAO;AACT,MAAA,QAAA,GAAW,MAAM,QAAA,IAAY,UAAA;AAAA,IAC/B;AAEA,IAAA,IAAI,WAAA,CAAY,IAAA,CAAK,QAAQ,CAAC,CAAA,EAAG;AAC/B,MAAA,IAAA,CAAK,QAAQ,CAAA,GAAI,IAAA;AAAA,IACnB;AAEA,IAAA,IAAI,SAAA,IAAa,CAAC,IAAA,CAAK,QAAQ,CAAA,EAAG;AAChC,MAAA,IAAA,CAAK,QAAQ,IAAI,EAAC;AAAA,IACpB;AAEA,IAAA,OAAO,KAAK,QAAQ,CAAA;AAAA,EACtB;AAAA,EAEA,cAAA,GAAuB;AACrB,IAAA,MAAM,OAAA,GAAW,IAAA,CAAK,WAAA,EAAY,IAAK,EAAC;AACxC,IAAA,MAAM,UAAU,IAAA,CAAK,UAAA,CAAW,IAAI,CAAC,IAAA,KAAS,KAAK,IAAI,CAAA;AAEvD,IAAA,MAAM,aAA4C,EAAC;AACnD,IAAA,MAAM,WAA2B,EAAC;AAElC,IAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,EAAM,KAAA,KAAU;AAC/B,MAAA,MAAM,GAAA,GAAM,KAAK,QAAQ,CAAA;AACzB,MAAA,MAAM,YAAA,GACJ,CAAC,CAAC,GAAA,IAAO,OAAA,CAAQ,KAAK,CAAC,IAAA,KAAA,CAAS,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAO,QAAA,CAAA,MAAc,GAAG,CAAA;AAC1D,MAAA,IAAI,YAAA,EAAc;AAChB,QAAA,UAAA,CAAW,GAAG,CAAA,GAAI,EAAE,KAAA,EAAO,MAAM,IAAA,EAAK;AAAA,MACxC,CAAA,MAAO;AACL,QAAA,QAAA,CAAS,IAAA,CAAK,EAAE,KAAA,EAAO,IAAA,EAAM,MAAM,CAAA;AAAA,MACrC;AAAA,IACF,CAAC,CAAA;AAED,IAAA,IAAI,CAAC,IAAA,CAAK,KAAA,CAAM,IAAA,EAAM;AACpB,MAAA,OAAA,CAAQ,OAAA,CAAQ,CAAC,IAAA,KAAS;AACxB,QAAA,IAAI,CAAC,UAAA,CAAW,IAAA,IAAA,IAAA,GAAA,MAAA,GAAA,IAAA,CAAO,SAAS,CAAA,EAAG,IAAA,CAAK,kBAAkB,IAAI,CAAA;AAAA,MAChE,CAAC,CAAA;AAAA,IACH;AAEA,IAAA,QAAA,CAAS,OAAA,CAAQ,CAAC,EAAE,KAAA,EAAO,MAAK,KAAM;AACpC,MAAA,IAAA,CAAK,WAAA,CAAY,EAAE,IAAA,EAAK,EAAG,KAAK,CAAA;AAAA,IAClC,CAAC,CAAA;AAED,IAAA,IAAA,CAAK,eAAA,EAAgB;AAAA,EACvB;AAAA,EAEA,QAAA,CACE,QAAA,EACA,YAAA,GAA2C,EAAC,EAC5C;AACA,IAAA,IACE,KAAK,KAAA,CAAM,IAAA,KAAS,IAAA,IACpB,IAAA,CAAK,MAAM,IAAA,IACX,CAAC,IAAA,CAAK,MAAA,KACL,CAAC,IAAA,CAAK,OAAA,IAAW,OAAO,IAAA,CAAK,YAAY,EAAE,MAAA,CAAA,EAC5C;AACA,MAAA,IAAA,CAAK,OAAA,GAAU,IAAA;AAEf,MAAA,MAAM,OAAA,GAAU,CAAC,QAAA,KAA6B;AAC5C,QAAA,IAAA,CAAK,aAAa,EAAC;AAEnB,QAAA,IAAA,CAAK,gBAAA,CAAiB,UAAU,YAAY,CAAA;AAC5C,QAAA,IAAA,CAAK,MAAA,GAAS,IAAA;AACd,QAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAEf,QAAA,IAAA,CAAK,eAAA,EAAgB;AACrB,QAAA,IAAI,QAAA,EAAU;AACZ,UAAA,QAAA,CAAS,IAAA,CAAK,MAAM,QAAQ,CAAA;AAAA,QAC9B;AAAA,MACF,CAAA;AACA,MAAA,MAAM,SAAS,MAAM;AACnB,QAAA,IAAA,CAAK,OAAA,GAAU,KAAA;AAAA,MACjB,CAAA;AAEA,MAAA,IAAA,CAAK,KAAA,CAAM,IAAA,CAAK,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAAA,IACvC,CAAA,MAAO;AACL,MAAA,IAAI,QAAA,EAAU;AACZ,QAAA,QAAA,CAAS,KAAK,IAAI,CAAA;AAAA,MACpB;AAAA,IACF;AAAA,EACF;AAAA,EAEA,SAAS,QAAA,EAAgC;AACvC,IAAA,MAAM,GAAA,GAAc,CAAC,IAAI,CAAA;AACzB,IAAA,OAAO,IAAI,MAAA,EAAQ;AACjB,MAAA,MAAM,IAAA,GAAO,IAAI,KAAA,EAAM;AACvB,MAAA,GAAA,CAAI,OAAA,CAAQ,GAAG,IAAA,CAAK,UAAU,CAAA;AAC9B,MAAA,QAAA,CAAS,IAAI,CAAA;AAAA,IACf;AAAA,EACF;AAAA,EAEA,aAAA,GAAgB;AACd,IAAA,IAAI,IAAA,CAAK,MAAM,aAAA,EAAe;AAC9B,IAAA,aAAA,CAAc,IAAI,CAAA;AAAA,EACpB;AACF;;;;"}