bobe 0.0.26 → 0.0.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"file":"bobe.esm.js","sources":["../src/type.ts","../src/typed.ts","../src/terp.ts","../src/tokenizer.ts","../src/index.ts"],"sourcesContent":["import { Dispose, Effect, Scope, Signal, SignalNode, Store } from 'aoye';\nimport type { Tokenizer } from './tokenizer';\nimport type { Interpreter } from './terp';\nimport { MultiTypeStack } from './typed';\n\nexport enum TokenType {\n NewLine = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Indent = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Dedent = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n Identifier = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Assign = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Pipe = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n Eof = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n InsertionExp = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n Semicolon = 0b0000_0000_0000_0000_0000_0001_0000_0000\n}\n\nexport enum FakeType {\n If = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Fail = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Else = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n For = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Component = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Fragment = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n ForItem = 0b0000_0000_0000_0000_0000_0000_0100_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\nexport const LogicalBit = FakeType.If | FakeType.Fail | FakeType.Else | FakeType.For | FakeType.ForItem;\nexport const CtxProviderBit =\n FakeType.If |\n FakeType.Fail |\n FakeType.Else |\n FakeType.For |\n FakeType.ForItem |\n FakeType.Component |\n FakeType.Fragment;\n\nexport const TokenizerSwitcherBit = FakeType.Component | FakeType.Fragment;\nexport type NodeSortBit = number;\n/**\n * 按不同维度分类,分类不互斥\n */\nexport enum NodeSort {\n /** 逻辑类型 1.if 2.else 3.fail 4.for 5. for item */\n Logic = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** 真实节点 */\n Real = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 组件 */\n Component = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** FakeType 所有枚举都能提供 ctx,否则重新渲染时获取不到上下文 */\n CtxProvider = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 节点可导致 token 切换 1. component 2. fragment */\n TokenizerSwitcher = 0b0000_0000_0000_0000_0000_0000_0001_0000\n}\n\nexport enum TerpEvt {\n AllAttrGot = 'all-attr-got',\n HandledComponentNode = 'handled-component-node'\n}\n\nexport type BaseType = string | number | boolean | undefined | null;\n\nexport const InsComputed = Symbol('insertion-computed-map-key');\nexport const IsAnchor = Symbol('is-anchor');\n\nexport type Token = {\n type: TokenType;\n typeName: string;\n value: BaseType;\n};\n\nexport type HookProps = {\n /** 通过哪个 HookId 进入的 */\n HookId: string;\n /** 第几个 hook */\n i: number;\n /** 父节点 */\n parentNode?: any;\n};\n\nexport type TerpConf = Partial<\n Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>\n>;\nexport type CustomRenderConf = Pick<\n TerpConf,\n 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'\n>;\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport type ProgramCtx = {\n stack: MultiTypeStack<any>;\n prevSibling: any;\n realParent: any;\n current: any;\n before: any;\n};\n\n/** 返回值是用户自定义的节点 */\nexport type BobeUI = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n (isSub: boolean): Tokenizer;\n};\n\nexport type StackItem = {\n /** 插入到 prev 后 */\n prev: any;\n /** 当前节点*/\n node: any;\n};\n\nexport type LogicNode = {\n __logicType: FakeType;\n realParent: any;\n realBefore?: any;\n realAfter?: any;\n};\n\nexport type ForNode = LogicNode & {\n children: ForItemNode[];\n snapshot: ReturnType<Tokenizer['snapshot']>;\n itemExp: string | ((value: any) => any);\n indexName?: string;\n getKey?: (data: any) => any;\n arr: any[];\n effect: Effect;\n i: number;\n owner: ComponentNode | FragmentNode;\n prevSibling: any;\n};\n\nexport type ForItemNode = LogicNode & {\n id: number;\n forNode: ForNode;\n data: any;\n effect: Scope;\n key?: any;\n};\n\nexport type IfNode = LogicNode & {\n condition: SignalNode;\n isFirstRender: boolean;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n effect: Effect;\n preCond: IfNode | null;\n owner: ComponentNode | FragmentNode;\n};\n\nexport type FragmentNode = LogicNode & {\n data: Store;\n tokenizer: Tokenizer;\n};\nexport type ComponentNode = LogicNode & {\n data: Store;\n tokenizer: Tokenizer;\n};\nexport type RootNode = LogicNode & {\n store: Store;\n};","import { NodeSort, NodeSortBit, StackItem } from './type';\n\n// 1. 定义类别枚举\ntype Type = 'A' | 'B' | 'C';\n\n// 2. 定义节点结构\ninterface StackNode<T> {\n value: T;\n types: NodeSortBit;\n // prevGlobal: StackNode<T> | null;\n // 核心:记录在该节点加入时,各个类别的上一个节点是谁\n prevByType: Partial<Record<number, StackNode<T>>>;\n}\n\nexport class MultiTypeStack<T> {\n // 记录全局栈顶\n // private top: StackNode<T> | null = null;\n\n // 记录每个类别的当前最新节点(各分类的“栈顶”)\n private typeTops: Partial<Record<number, StackNode<T>>> = {};\n\n length = 0;\n stack: StackNode<T>[] = [];\n /**\n * 入栈操作\n * @param value 数据\n * @param bits 该节点所属的类别数组\n */\n push(value: T, bits: NodeSortBit): void {\n const newNode: StackNode<T> = {\n value,\n types: bits,\n prevByType: {}\n };\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 按类型链接前置节点\n newNode.prevByType[bit] = this.typeTops[bit] || undefined;\n this.typeTops[bit] = newNode;\n }\n this.stack[this.length++] = newNode;\n }\n\n /**\n * 出栈操作\n */\n pop() {\n const poppedNode = this.stack[this.length - 1];\n this.stack[--this.length] = null;\n if (!poppedNode) return undefined;\n\n let { types: bits } = poppedNode;\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 弹出对应类别的“顶端”元素\n this.typeTops[bit] = poppedNode.prevByType[bit];\n }\n\n // 更新全局栈顶\n return [poppedNode.value, poppedNode.types] as const;\n }\n\n /**\n * 获取某个类别的当前“顶部”元素\n */\n peekByType(cat: number): T | undefined {\n return this.typeTops[cat]?.value;\n }\n\n peekType(): number | undefined {\n return this.stack.at(-1).types;\n }\n\n /**\n * 获取全局栈顶\n */\n peek(): T | undefined {\n return this.stack.at(-1).value;\n }\n\n // /**\n // * 1. 全局向前遍历 (不分类)\n // * 从栈顶开始,沿着全局链条向栈底遍历\n // */\n // forEach(callback: (value: T, types: number) => any): void {\n // let current = this.top;\n\n // while (current !== null) {\n // // 执行回调,如果返回 false 则立即停止\n // const shouldBreak = callback(current.value, current.types);\n // if (shouldBreak) break;\n\n // current = current.prevGlobal;\n // }\n // }\n\n // /**\n // * 2. 按类别向前遍历\n // * 仅遍历属于指定类别 cat 的节点\n // */\n // forEachByType(cat: number, callback: (value: T) => any): void {\n // // 从该类别的当前“顶端”节点开始\n // let current = this.typeTops[cat];\n\n // while (current) {\n // const shouldBreak = callback(current.value);\n // if (shouldBreak) break;\n\n // // 关键点:直接跳向该节点记录的“上一个同类节点”\n // // 这比遍历全局栈再筛选类别要快得多 (O(m) vs O(n))\n // current = current.prevByType[cat];\n // }\n // }\n}\n","import { Tokenizer } from './tokenizer';\nimport {\n Computed,\n deepSignal,\n Effect,\n effect,\n getPulling,\n Keys,\n runWithPulling,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n toRaw\n} from 'aoye';\nimport {\n BobeUI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicalBit,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n Token\n} from './type';\nimport { jsVarRegexp } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\n isLogicNode(node: any) {\n return node && node.__logicType & LogicalBit;\n }\n\n ctx: ProgramCtx;\n rootComponent: ComponentNode | null = null;\n\n program(root: any, componentNode?: ComponentNode, before?: any, ctxProvider?: any) {\n // 首屏渲 app 组件需要创建对象\n this.rootComponent = componentNode;\n\n this.tokenizer.nextToken();\n const stack = new MultiTypeStack<StackItem>();\n stack.push({ node: root, prev: null }, NodeSort.Real);\n stack.push(\n { node: componentNode, prev: null },\n NodeSort.Component | NodeSort.CtxProvider | NodeSort.TokenizerSwitcher\n );\n if (ctxProvider) {\n stack.push(\n { node: ctxProvider, prev: null },\n (ctxProvider.__logicType & LogicalBit ? NodeSort.Logic : 0) | NodeSort.CtxProvider\n );\n }\n\n const ctx = (this.ctx = {\n realParent: root,\n prevSibling: before,\n current: null,\n stack,\n before\n });\n\n const rootPulling = getPulling();\n while (1) {\n // 子 tokenizer 退出,代表子组件逻辑结束\n if (this.tokenizer.isEof()) {\n if (!ctx.prevSibling) ctx.prevSibling = before;\n this.handleInsert(root, ctx.current, ctx.prevSibling, componentNode);\n break;\n }\n\n const token = this.tokenizer.token;\n // 下沉,创建 child0\n if (token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // token = ID\n const isLogicNode = this.isLogicNode(ctx.current);\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (ctx.current.__logicType & LogicalBit ? NodeSort.Logic : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n NodeSort.CtxProvider\n );\n if (ctx.current.__logicType) {\n // 父节点是逻辑节点\n if (isLogicNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n ctx.realParent = ctx.current;\n }\n ctx.prevSibling = null;\n }\n ctx.current = this.declaration(ctx);\n continue;\n }\n // Token 不论指示找 下一个同级节点,还是 Dedent, 都将当前节点插入\n if (ctx.current) {\n // root 下第一个子节点应该插入在 before 之后\n if (stack.length === 2 && !ctx.prevSibling) {\n ctx.prevSibling = before;\n }\n this.handleInsert(ctx.realParent, ctx.current, ctx.prevSibling);\n }\n // 下一个 token 是 Dedent\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // token = ID | DEDENT\n const [{ node: parent, prev }, sort] = stack.pop();\n // 弹出原生节点,找最近的 ctx.realParent\n if (!parent.__logicType) {\n const prevSameType = stack.peekByType(NodeSort.Real);\n ctx.realParent = prevSameType?.node || root;\n }\n // 弹出非原生节点\n else {\n // 考虑 if, for 等获取最后一个插入节点\n if (sort & NodeSort.Logic) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.Logic)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n this.tokenizer = switcher.tokenizer;\n }\n\n // 弹出 forItem\n if (parent.__logicType === FakeType.ForItem) {\n const { forNode } = parent as ForItemNode;\n const { i, arr, snapshot } = forNode;\n if (i + 1 < arr.length) {\n // 恢复后 token null, 下一个是 \\n, Indent\n this.tokenizer.resume(snapshot);\n this.tokenizer.nextToken(); // token = \\n\n this.tokenizer.nextToken(); // token = Indent\n ctx.prevSibling = parent;\n ctx.current = forNode.children[++forNode.i];\n continue;\n }\n // 正常弹出 current = for node\n ctx.prevSibling = forNode.prevSibling;\n ctx.current = forNode;\n continue;\n }\n }\n ctx.prevSibling = prev;\n ctx.current = parent;\n }\n // 下一个是 同级节点\n else {\n ctx.prevSibling = ctx.current || ctx.prevSibling;\n ctx.current = this.declaration(ctx);\n }\n }\n return componentNode;\n }\n\n insertAfterAnchor(name = 'anchor') {\n const { realParent, prevSibling, stack, before } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name);\n this.ctx.prevSibling = stack.length === 2 && !prevSibling ? before : prevSibling;\n this.handleInsert(realParent, afterAnchor, prevSibling);\n return afterAnchor;\n }\n\n /** 处理\n * 是逻辑 是普通\n * 父节点 将子节点加入 directList 调用 insert 方法挨个插入子节点\n * 子节点 仅插入到父逻辑节点 将本节点插入父节点\n * 理论上父节点不能是一个 逻辑节点,遇到if 时 Terp 会重新执行 program 这种情况下,会指定 root 为真实 dom\n */\n handleInsert(parent: any, child: any, prev: any, parentComponent?: any) {\n // 父 是 逻辑节点\n if (parentComponent) {\n // parentComponent.directList.push(child);\n }\n // 子 普通节点\n if (!child.__logicType) {\n // 前置节点空 或 普通节点\n if (!prev || !prev.__logicType) {\n this.insertAfter(parent, child, prev);\n }\n // 前置节点是逻辑节点,必定有 after\n else {\n const before = prev.realAfter;\n this.insertAfter(parent, child, before);\n }\n }\n // 子 是 逻辑节点\n else {\n const childCmp: LogicNode = child;\n childCmp.realParent = parent;\n // 前置 -> 逻辑节点\n if (prev?.__logicType) {\n // forItem 应该使用 forNode 的 after\n childCmp.realBefore = prev.forNode ? prev.forNode.realAfter : prev.realAfter;\n }\n // 前置 -> 普通节点\n else {\n childCmp.realBefore = prev;\n }\n }\n }\n\n /** 考虑到同级 逻辑模块 */\n getPrevRealSibling(prevSibling: any) {\n // 正常节点则直接返回\n if (!prevSibling || !prevSibling.__logicType) {\n return prevSibling;\n }\n let point = prevSibling;\n while (point != null) {\n if (point.lastChild) {\n return point.lastChild.value;\n }\n point = point.anchor;\n }\n }\n\n /**\n * 声明部分:\n * 包含首行定义和(可选的)多行属性扩展\n * <declaration> ::= <tagName=token> <headerLine> <extensionLines>\n * */\n declaration(ctx: ProgramCtx) {\n const [hookType, value] = this.tokenizer._hook({});\n let _node: any;\n if (value === 'if' || value === 'else' || value === 'fail') {\n return this.condDeclaration(ctx);\n } else if (value === 'for') {\n return this.forDeclaration();\n } else if (hookType) {\n const data = this.getData();\n // 静态 1. Component,2. bobe 返回的 render 方法\n if (hookType === 'static') {\n // 传组件 class 或 片段\n if (typeof value === 'function') {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n throw new SyntaxError(`declaration 不支持 ${value} 类型的静态插值`);\n }\n }\n // 动态插值\n // 一定是 js 表达式\n // 1. 返回基础值,创建文本节点 createNode('text', String(value))\n // 2. 返回 组件,创建组件节点\n // 3. 返回 片段\n // TODO: 后续考虑动态组件\n else {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const val = data[Keys.Raw][value];\n if (typeof val === 'function') {\n _node = this.componentOrFragmentDeclaration(val, ctx);\n }\n // 字符\n else {\n const str = valueIsMapKey ? value : this.getFn(data, value);\n _node = this.createNode('text');\n this.onePropParsed(data, _node, 'text', str, valueIsMapKey, false);\n }\n }\n } else {\n _node = this.createNode(value);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLine(_node);\n this.extensionLines(_node);\n // 组件用完,切换回 真实node 的方法\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = _node.tokenizer;\n }\n return _node;\n }\n\n forDeclaration() {\n const arrExp = this.tokenizer.nextToken().value as string;\n this.tokenizer.nextToken(); // 分号\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n let itemExp: string | ((value: any) => any) = itemToken.value as string;\n if (isDestruct) {\n itemExp = '{' + itemExp + '}';\n const vars = itemExp.match(jsVarRegexp).join(',');\n itemExp = new Function('item', `let ${vars}; (${itemExp}=item); return {${vars}};`) as any;\n }\n let indexName: string, keyExp: string;\n while (this.tokenizer.code[this.tokenizer.i] !== '\\n') {\n const next = this.tokenizer.nextToken();\n if (next.type !== TokenType.Semicolon) {\n if (!indexName) {\n indexName = next.value as string;\n } else {\n keyExp = next.value as string;\n }\n }\n }\n const owner = this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const prevSibling = this.ctx.prevSibling;\n const forNode: ForNode = {\n __logicType: FakeType.For,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n realParent: this.ctx.realParent,\n prevSibling,\n realBefore: prevSibling?.realAfter || prevSibling,\n realAfter: null,\n arr: null,\n itemExp,\n indexName,\n getKey: null,\n children: [],\n effect: null,\n owner,\n i: 0\n };\n if (keyExp) {\n forNode.getKey = new Function('data', `let v;with(data){v=${keyExp}};return v;`) as any;\n }\n window['for1'] = forNode;\n\n const data = this.getData();\n\n const cells = data[Keys.Meta].cells;\n const hasArrExpKey = Reflect.has(data[Keys.Raw], arrExp);\n const arrSignal = hasArrExpKey\n ? // 有 key 直接拿\n (data[arrExp], cells.get(arrExp))\n : // 无key\n new Computed(this.getFn(data, arrExp));\n\n // 由于此处 snapshot 多配置了2个属性,更新渲染时 应该忽略这个两个属性\n forNode.realAfter = this.insertAfterAnchor('for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n // TODO: 更新逻辑\n let isFirstRender = true;\n // TODO: effect 重新执行时,内部的 effect 自动销毁,包括 dom setProps 无法生效了\n forNode.effect = new Effect(() => {\n let arr: any[] = (forNode.arr = arrSignal.get());\n // 订阅 iter\n arr[Keys.Iterator];\n // 使用原始数组避免 index 依赖\n arr = toRaw(arr);\n const children = forNode.children;\n // 首屏渲染\n if (isFirstRender) {\n const len = arr.length;\n for (let i = len; i--; ) {\n const nextItem = children[i + 1];\n const item = this.createForItem(forNode, i, data);\n const anchor = this.insertAfterAnchor('for-item-after');\n item.realAfter = anchor;\n if (nextItem) {\n nextItem.realBefore = anchor;\n }\n item.realParent = forNode.realParent;\n children[i] = item;\n }\n const firstInsert = children[0];\n // 有子项进行计算\n if (firstInsert) {\n firstInsert.realBefore = forNode.realBefore;\n this.tokenizer.nextToken(); // 是 NewLine\n this.tokenizer.nextToken(); // 是 Indent\n }\n // 没有子项,跳过\n else {\n this.tokenizer.skip();\n }\n }\n // 更新渲染\n else {\n const oldLen = children.length;\n const newLen = arr.length;\n const minLen = Math.min(oldLen, newLen);\n const newChildren: ForItemNode[] = [];\n if (!forNode.getKey) {\n // 删除\n if (newLen < oldLen) {\n for (let i = oldLen - 1; i >= newLen; i--) {\n const child = children[i];\n this.removeLogicNode(child);\n this.remove(child.realAfter);\n // 释放删除项 effect\n child.effect.dispose();\n }\n }\n // 新增\n if (oldLen < newLen) {\n const lastAfter = children.at(-1)?.realAfter || forNode.realBefore;\n for (let i = newLen - 1; i >= oldLen; i--) {\n const item = this.createForItem(forNode, i, data);\n newChildren[i] = item;\n const nextItem = newChildren[i + 1];\n const anchor = this.createAnchor('for-item-after');\n this.insertAfter(forNode.realParent, anchor, lastAfter);\n item.realAfter = anchor;\n if (nextItem) {\n nextItem.realBefore = anchor;\n }\n item.realParent = forNode.realParent;\n this.tokenizer = owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(snapshotForUpdate);\n // 解析到缩进小于 base 时自动 eof\n this.tokenizer.useDedentAsEof = false;\n runWithPulling(() => {\n this.program(forNode.realParent, forNode.owner, lastAfter, item);\n }, item.effect);\n }\n const firstInsert = newChildren[oldLen];\n if (firstInsert) {\n firstInsert.realBefore = lastAfter;\n }\n }\n for (let i = minLen; i--; ) {\n const child = children[i];\n newChildren[i] = child;\n if (typeof itemExp === 'string') {\n child.data[itemExp] = arr[i];\n } else {\n Object.assign(child.data, itemExp(arr[i]));\n }\n }\n forNode.children = newChildren;\n }\n }\n isFirstRender = false;\n });\n return forNode.children[0] || forNode;\n }\n\n forItemId = 0;\n createForItem(forNode: ForNode, i: number, parentData: any) {\n let forItemNode: ForItemNode;\n /**\n * 考虑到 effect 是嵌套的,这种情况每次 forNodeEffect 更新会导致上次产生的内部 setPropsEffect 被自动释放\n * 这是响应式 effect 嵌套的默认特性\n * forNodeEffect(() => {\n * 这里通过 setPulling 模拟嵌套 effect\n * setPropsEffect(() => {\n * })\n * })\n * 因此我们需要让情况变成这样,内部的 effect 交由 forItemNode.effect 接管\n * 这个 scope 是全局的,即指定了参数 parentScope = null\n * 这样外部的 effect 不再自动释放 setPropsEffect\n * 这么的目的是我们能在 diff 过程中手动控制释放 forItemNode.effect\n * globalScope(() => {\n * setPropsEffect(() => {\n * })\n * })\n *\n * 1. runWithPulling 避免 scope 被 effect 收集\n * 2. scope 保证 signal 被 scope 管理\n */\n // TODO: scope 目前认为 parentScope 就是 其下游节点,恢复 pulling 会出现问题\n const scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => {\n scope.get();\n }, null);\n\n // 考虑到生成每项数据需要依赖原始数组,因此无法放在 scope 里\n const { arr, itemExp, indexName, getKey } = forNode;\n let data: Record<any, any>;\n if (typeof itemExp === 'string') {\n data = deepSignal(\n indexName\n ? {\n [itemExp]: arr[i],\n [indexName]: i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n const rawData = itemExp(arr[i]);\n if (indexName) {\n rawData[indexName] = i;\n }\n data = deepSignal(rawData, getPulling());\n }\n\n Object.setPrototypeOf(data, parentData);\n\n forItemNode = {\n id: this.forItemId++,\n __logicType: FakeType.ForItem,\n realParent: null,\n realBefore: null,\n realAfter: null,\n forNode,\n key: getKey?.(data),\n effect: null,\n data\n };\n forItemNode.effect = scope;\n return forItemNode;\n }\n\n getData() {\n const { node } = this.ctx.stack.peekByType(NodeSort.CtxProvider);\n return node.data || node.owner.data;\n }\n\n /**\n * key 元素,组件的 key\n * value\n * 1. 静态类型值\n * 2. 插值计算 函数,可以考虑 使用 effect 或 computed 做处理\n *\n * mapKey 映射, 对应子组件的属性\n * */\n onePropParsed(\n data: Store,\n node: any,\n key: string,\n value: any,\n valueIsMapKey: boolean,\n isFn: boolean,\n hookI?: number\n ) {\n if (isFn) {\n this.setProp(node, key, value, hookI);\n } else if (typeof value === 'function') {\n new Effect(() => {\n const res = value();\n this.setProp(node, key, res, hookI);\n });\n } else if (valueIsMapKey) {\n new Effect(() => {\n const res = data[value];\n this.setProp(node, key, res, hookI);\n });\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n componentOrFragmentDeclaration(ComponentOrRender: BobeUI | typeof Store, ctx: ProgramCtx) {\n // 先进行 attr 映射,或建立 signal 连接,才能开始 render\n // 必须等待 attr 解析完毕\n let Component: typeof Store, render: BobeUI, child: any;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n Component = ComponentOrRender as any;\n child = Component.new();\n } else {\n render = ComponentOrRender as BobeUI;\n const boundStore = render.boundStore;\n // 使用原型链来继承 store 的数据\n child = deepSignal({}, getPulling(), true);\n Object.setPrototypeOf(child, boundStore);\n }\n\n const node: ComponentNode = {\n __logicType: isCC ? FakeType.Component : FakeType.Fragment,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data: child,\n tokenizer: render ? render(true) : (child['ui'] as BobeUI)(true)\n };\n this.onePropParsed = (data, _, key, value, valueIsMapKey, isFn, hookI) => {\n if (isFn) {\n child[Keys.Raw][key] = value;\n }\n // key 映射\n else if (valueIsMapKey) {\n shareSignal(data, value, child, key);\n }\n // 动态值内置 computed 处理\n else {\n const meta = child[Keys.Meta];\n const cells: Map<string, Signal> = meta.cells;\n if (typeof value === 'function') {\n const computed = new Computed(value);\n cells.set(key, computed as any);\n child[Keys.Raw][key] = undefined;\n }\n // 静态数据\n else {\n cells.set(key, { get: () => value } as Signal);\n child[Keys.Raw][key] = value;\n }\n }\n };\n node.realAfter = this.insertAfterAnchor('component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `let v;with(data){v=${expression}};return v;`).bind(undefined, data);\n }\n // TODO: 优化代码逻辑,拆分 if elseif else\n condDeclaration(ctx: ProgramCtx) {\n const { prevSibling } = ctx;\n const keyWord = this.tokenizer.token;\n const expToken = this.tokenizer.condExp(); // keyWord => exp\n const value = expToken.value as string | number;\n const isElse = keyWord.value === 'else';\n const isIf = keyWord.value === 'if';\n const preIsCond = prevSibling?.__logicType & CondBit;\n const data = this.getData();\n // @ts-ignore\n const noCond = value === true;\n const valueIsMapKey = !noCond && Reflect.has(data[Keys.Raw], value);\n const owner = ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const ifNode: IfNode = {\n __logicType: isElse ? FakeType.Else : isIf ? FakeType.If : FakeType.Fail,\n // 此时 token 是 exp, 下次解析 从 \\n 开始\n snapshot: this.tokenizer.snapshot(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n condition: null,\n preCond: preIsCond ? prevSibling : null,\n isFirstRender: true,\n effect: null,\n owner\n };\n let signal: SignalNode;\n\n switch (keyWord.value) {\n case 'if':\n if (valueIsMapKey) {\n // 确保 signal 已生成\n runWithPulling(() => data[value], null);\n // 拿到 signal\n const { cells } = data[Keys.Meta];\n signal = cells.get(value);\n } else {\n const fn = this.getFn(data, value);\n // 是 getter 使用 computed 计算出一个 signal\n signal = new Computed(fn);\n }\n break;\n case 'else':\n // 纯 else\n if (noCond) {\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return true;\n });\n }\n // else if xxx\n else {\n const fn = valueIsMapKey ? null : this.getFn(data, value);\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return valueIsMapKey ? data[value] : fn();\n });\n }\n break;\n case 'fail':\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n point = point.preCond;\n }\n return true;\n });\n break;\n default:\n break;\n }\n\n ifNode.condition = signal;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n ifNode.realAfter = this.insertAfterAnchor(`${keyWord.value}-after`);\n\n const ef = effect(\n ({ val }) => {\n // 如果值是 true 则直接放行让下面的节点自然执行插入\n if (val) {\n if (ifNode.isFirstRender) {\n this.tokenizer.nextToken(); // token = NEWLINE\n this.tokenizer.nextToken(); // token = ID\n }\n // 更新渲染\n else {\n // 切换到对应 Switcher 的 tokenizer\n this.tokenizer = ifNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(ifNode.snapshot);\n this.tokenizer.useDedentAsEof = false;\n\n // 由于首屏渲染直接放行,导致 if 子节点首屏产生的 effect 不能被管理\n // 在 effect 中创建的子组件 sub effect 能被管理\n // 当 if = false 时,不需要执行销毁子 effect 操作\n // 因为当外部 effect 重新执行时,上次尝试的 sub effect 自动销毁\n // 前提是 sub effect 是嵌套执行的\n this.program(ifNode.realParent, ifNode.owner, ifNode.realBefore, ifNode);\n }\n }\n // 删除逻辑块\n else {\n if (ifNode.isFirstRender) {\n // 此时 token 是 condition, i => \\n\n this.tokenizer.skip(); // skipStr\n }\n // 更新渲染,删除所有节点\n else {\n this.removeLogicNode(ifNode);\n }\n }\n ifNode.isFirstRender = false;\n },\n [signal]\n );\n ifNode.effect = ef;\n return ifNode;\n }\n\n removeLogicNode(node: LogicNode) {\n const { realBefore, realAfter, realParent } = node;\n let point = realBefore ? this.nextSib(realBefore) : this.firstChild(realParent);\n while (point !== realAfter) {\n const next = this.nextSib(point);\n this.remove(point, realParent, realBefore);\n point = next;\n }\n }\n /**\n * <extensionLines> ::= PIPE <attributeList> NEWLINE <extensionLines>\n * | ε\n */\n extensionLines(_node: any) {\n while (1) {\n // 终止条件,下一行不是 pipe\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n return;\n }\n // 开始解析 attributeList\n this.tokenizer.nextToken(); // PIPE\n this.attributeList(_node);\n // 文件结束了,通常不会发生\n if ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n return;\n }\n // 换行\n this.tokenizer.nextToken(); // NEWLINE\n }\n }\n\n /**\n * 首行:\n * 节点名称 + 属性列表 + 换行\n * <headerLine> ::= <attributeList> NEWLINE\n */\n headerLine(_node: any) {\n this.attributeList(_node);\n this.tokenizer.nextToken(); // NEWLINE\n }\n\n /**\n * 属性列表:\n * 可以是空的,或者包含多个属性\n * <attributeList> ::= <attribute> <attributeList>\n * | ε\n *\n * <attribute> ::= <key> = <value>\n * 1. 普通节点 执行 setProps 🪝\n * 2. 组件节点 收集映射关系,或 产生 computed\n */\n attributeList(_node: any) {\n let key: string, eq: any;\n const data = this.getData();\n while ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n // 取 key\n if (key == null) {\n key = this.tokenizer.token.value as any;\n }\n // 取 =\n else if (eq == null) {\n eq = '=';\n }\n // 取 value\n else {\n const [hookType, value, hookI] = this.tokenizer._hook({});\n const rawVal = data[Keys.Raw][value];\n const isFn = typeof rawVal === 'function';\n // 动态的要做成函数\n if (hookType === 'dynamic') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const fn = isFn ? rawVal : valueIsMapKey ? value : this.getFn(data, value);\n this.onePropParsed(data, _node, key, fn, valueIsMapKey, isFn, hookI);\n }\n // 静态\n else if (hookType === 'static') {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n // 基础数据字面量\n else {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n key = null;\n eq = null;\n }\n this.tokenizer.nextToken();\n }\n }\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n }\n\n createNode(name: string) {\n return {\n name,\n props: {},\n nextSibling: null\n };\n }\n\n nextSib(node: any) {\n return node.nextSibling;\n }\n\n firstChild(node: any) {\n return node.firstChild;\n }\n\n createAnchor(name: string) {\n return {\n name,\n nextSibling: null\n };\n }\n\n insertAfter(parent: any, node: any, prev: any) {\n return this.defaultInsert(parent, node, prev);\n }\n defaultInsert(parent: any, node: any, prev: any) {\n if (prev) {\n const next = prev.nextSibling;\n prev.nextSibling = node;\n node.nextSibling = next;\n } else {\n const next = parent.firstChild;\n parent.firstChild = node;\n node.nextSibling = next;\n }\n }\n\n remove(node: any, parent?: any, prev?: any) {\n return this.defaultRemove(node, parent, prev);\n }\n // TODO: 默认改成 prevItem\n defaultRemove(node: any, parent: any, prevSibling: any) {\n const next = node.nextSibling;\n if (prevSibling) {\n prevSibling.nextSibling = next;\n }\n if (parent.firstChild === node) {\n parent.firstChild = next;\n }\n }\n\n setProp(node: any, key: string, value: any, hookI?: number) {\n node.props[key] = value;\n }\n}\n","import { isNum, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport { BaseType, Hook, HookProps, HookType, Token, TokenType } from './type';\n\nexport class Tokenizer {\n /** 缩进大小 默认 2 */\n TabSize = 2;\n /** 缩进字符 */\n Tab = Array.from({ length: this.TabSize }, () => ' ').join('');\n /** Eof 标识符的值 */\n static EofId = `__EOF__${Date.now()}`;\n static DedentId = `__DEDENT__${Date.now()}`;\n\n /** 当前 token */\n token!: Token;\n /** 回车后需要判断缩进 */\n needIndent = false;\n /** 用于跳过第一个节点前的空白字符串,以及生成基础缩进 */\n isFirstToken = true;\n /** 代码 */\n code: string;\n /** 记录历史缩进的长度,相对于行首 */\n dentStack: number[] = [0];\n /** 当前字符 index */\n i = 0;\n // TODO: 生产环境不需要这个,导致不必要的内存占用\n handledTokens: Token[] = [];\n /**\n * 有些标识符能产生多个 token\n * 例如 dedent\n * parent1\n * child\n * subChild\n * parent2 <- 产生两个 dedent\n */\n waitingTokens = new Queue<Token>();\n\n constructor(\n private hook: Hook,\n public useDedentAsEof: boolean\n ) {\n if (useDedentAsEof) {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n consume() {\n const token = this.token;\n this.nextToken();\n return token;\n }\n // /** 恢复至某一个现场,进行 token 重算 */\n resume(_snapshot: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = [0];\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[]): Partial<Tokenizer> {\n const snap = {\n i: this.i,\n waitingTokens: this.waitingTokens.clone()\n };\n if (keys) {\n for (const k of keys) {\n snap[k] = this[k];\n if (k === 'dentStack') {\n snap[k] = this[k].slice();\n }\n }\n }\n return snap;\n }\n\n skip() {\n const logicDentLen = this.dentStack[this.dentStack.length - 1];\n let needIndent = false;\n /** \\n 是为了弥补 if 节点 consume condition 后,已将 token 设置成回车 */\n let skipFragment = ``;\n this.token = undefined;\n while (1) {\n const char = this.code[this.i];\n\n if (char === '\\n') {\n needIndent = true;\n skipFragment += char;\n this.i++;\n continue;\n }\n\n if (!needIndent) {\n skipFragment += char;\n this.i++;\n continue;\n }\n\n needIndent = false;\n // 此时已经指到一个非 tab 的字符\n const { value, isEmptyLine } = this.getDentValue();\n const currLen = value.length;\n if (isEmptyLine) continue;\n if (currLen > logicDentLen) {\n skipFragment += value;\n }\n // 找到与条件节点同级或更短的缩进了,结束。\n else {\n // skipFragment += `\\n${Tokenizer.EofId}`;\n // 一直找到最小\n for (let i = this.dentStack.length - 1; i >= 0; i--) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n\n // 大于\n if (currLen > expLen) {\n throw SyntaxError(`缩进错误,缩进长度不匹配`);\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n\n this.dentStack.pop();\n\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n } else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen)\n });\n }\n }\n break;\n }\n }\n if (!this.token) {\n this.nextToken();\n }\n return skipFragment;\n }\n\n setCode(code: string) {\n // 保证开头结尾能正确计算\n this.code = '\\n' + code.trimEnd() + `\\n${Tokenizer.EofId}`;\n }\n\n tokenize() {\n do {\n this.nextToken();\n console.log('token:', TokenType[this.token?.type], JSON.stringify(this.token?.value || ''));\n } while (!this.isEof());\n }\n\n isEof() {\n // 刚开始时 token 不存在\n if (!this.token) return false;\n return this.token.type & TokenType.Identifier && this.token.value === Tokenizer.EofId;\n // return this.code[this.i] === undefined;\n }\n\n private setToken(type: TokenType, value: BaseType) {\n this.token = {\n type,\n typeName: TokenType[type],\n value\n };\n this.isFirstToken = false;\n }\n\n public nextToken(): Token {\n try {\n // 已遍历到文件结尾\n if (this.isEof()) {\n return this.token;\n }\n this.token = undefined as any;\n if (this.waitingTokens.len) {\n const item = this.waitingTokens.shift()!;\n this.setToken(item.type, item.value);\n return this.token;\n }\n outer: while (1) {\n if (this.needIndent) {\n this.dent();\n // 遍历到当前标识符非 空白为止\n } else {\n const char = this.code[this.i];\n switch (char) {\n case '\\t':\n case ' ':\n // skip, 缩进通过 \\n 匹配来激活 needIndent\n break;\n // 找后续所有 newLine\n case '\\n':\n this.newLine();\n // 回车后需要判断缩进\n this.needIndent = true;\n break;\n case '=':\n this.assignment();\n break;\n case '|':\n this.pipe();\n break;\n case \"'\":\n case '\"':\n this.str(char);\n break;\n case '{':\n const braceToken = this.brace();\n this.setToken(TokenType.InsertionExp, braceToken);\n break;\n case '$':\n const handled = this.dynamic(char);\n if (handled) break;\n case ';':\n this.setToken(TokenType.Semicolon, ';');\n break;\n default:\n if (isNum(char)) {\n this.number(char);\n break;\n }\n if (typeof char === 'string' && matchIdStart2(char, 0)) {\n this.identifier(char);\n }\n break;\n }\n // 指向下一个字符\n this.i++;\n }\n\n // 找到 token 即可停止\n if (this.token) {\n break;\n }\n }\n return this.token;\n } catch (error) {\n console.error(error);\n return this.token;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n condExp() {\n let value = '';\n this.token = null;\n while (1) {\n const char = this.code[this.i];\n if (char === '\\n') {\n break;\n }\n value += char;\n this.i++;\n }\n value = value.trim();\n this.setToken(TokenType.Identifier, value || true);\n return this.token;\n }\n\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public forLoopSubExp() {\n this.token = null;\n let value = '';\n let count = 0;\n while (1) {\n const char = this.code[this.i];\n const isSemicolon = char === ';';\n if (isSemicolon || char === '\\n') {\n value = value.trim();\n if (!this.token) {\n this.setToken(TokenType.Identifier, value);\n } else {\n this.waitingTokens.push({\n type: TokenType.Identifier,\n typeName: TokenType[TokenType.Identifier],\n value\n });\n }\n value = '';\n count++;\n if (count > 3) {\n throw SyntaxError(`for 循环最多可包含三个表达式, 分别为 arr ; item index [; key]`);\n }\n // 匹配到回车退出\n if (!isSemicolon) return count === 3;\n } else {\n value += char;\n }\n this.i++;\n }\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private dynamic(char: string) {\n let nextC = this.code[this.i + 1];\n // 不是动态插值\n if (nextC !== '{') {\n return false;\n }\n this.i++;\n let value = '${';\n let innerBrace = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n value += nextC;\n // 下一个属于本标识符再前进\n this.i++;\n if (nextC === '{') {\n innerBrace++;\n }\n\n if (nextC === '}') {\n // 内部无左括号,说明完成匹配 TODO: 考虑js注释中的括号可能导致匹配错误\n if (!innerBrace) {\n break;\n }\n innerBrace--;\n }\n }\n this.setToken(TokenType.Identifier, value);\n return true;\n }\n\n private brace() {\n let inComment: string,\n inString: string,\n count = 0,\n value = '',\n backslashCount = 0; // 用于记录连续的反斜杠数量\n while (1) {\n const char = this.code[this.i];\n const nextChar = this.code[this.i + 1];\n\n // 1. 处理注释状态退出\n if (inComment === 'single' && char === '\\n') {\n inComment = null;\n } else if (inComment === 'multi' && char === '*' && nextChar === '/') {\n inComment = null;\n value += this.code[this.i];\n this.i++;\n }\n // 2. 如果不在注释中,处理字符串状态\n else if (inString) {\n // 退出字符串\n if (char === inString && backslashCount % 2 === 0) {\n inString = null;\n }\n backslashCount = char === '\\\\' ? backslashCount + 1 : 0;\n } else {\n // 3. 进入注释或字符串状态\n if (char === '/' && nextChar === '/') {\n inComment = 'single';\n value += this.code[this.i]; // 跳过 / 号\n this.i++;\n } else if (char === '/' && nextChar === '*') {\n inComment = 'multi';\n value += this.code[this.i]; // 跳过 / 号\n this.i++;\n } else if (char === \"'\" || char === '\"' || char === '`') {\n inString = char;\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && inString == null && inComment == null) {\n return value.slice(1);\n }\n value += this.code[this.i];\n this.i++;\n }\n }\n\n private newLine() {\n let value = '\\n';\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC !== '\\n') {\n break;\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.i++;\n }\n // Program 希望第一个 token 一定是 node 节点\n if (this.isFirstToken) {\n return;\n }\n this.setToken(TokenType.NewLine, value);\n }\n private getDentValue() {\n let value = '';\n let nextC;\n let isEmptyLine = false;\n // 构建缩进字符串\n while (1) {\n const nextChar = this.code[this.i];\n\n switch (nextChar) {\n case '\\t':\n nextC = this.Tab;\n break;\n case ' ':\n nextC = ' ';\n break;\n case '\\n':\n nextC = '\\n';\n break;\n default:\n nextC = '';\n break;\n }\n\n // \\n 空白 \\n 的情况,这行不算\n if (nextC === '\\n') {\n isEmptyLine = true;\n break;\n }\n if (!nextC) {\n break;\n }\n value += nextC;\n this.i++;\n }\n return {\n value,\n isEmptyLine\n };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 重新开始匹配\n this.needIndent = true;\n return;\n }\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\n this.needIndent = false;\n // 期望 firstToken 是 node,所以这里只要修改第一个节点的基础偏移值即可\n if (this.isFirstToken) {\n this.dentStack[0] = value.length;\n return;\n }\n let currLen = value.length;\n const indentHasLen = currLen > 0;\n const prevLen = this.dentStack[this.dentStack.length - 1];\n if (currLen > prevLen) {\n this.dentStack.push(currLen);\n this.setToken(TokenType.Indent, currLen);\n return indentHasLen;\n }\n if (currLen < prevLen) {\n // 一直找到最小\n for (let i = this.dentStack.length; i--; ) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n // 夹在两者说明缩进大小有问题\n if (currLen > expLen) {\n throw SyntaxError('缩进大小不统一');\n }\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n return;\n }\n this.dentStack.pop();\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n }\n // 多余的 dent 缓存在 waitingTokens\n else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen)\n });\n }\n }\n return indentHasLen;\n }\n // 同级则无视\n return indentHasLen;\n }\n\n private shorterThanBaseDentEof() {\n const yes = this.dentStack.length === 1;\n if (yes) {\n if (!this.token) {\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tkr\n if (this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n } else {\n this.setToken(TokenType.Identifier, Tokenizer.EofId);\n }\n } else {\n if (this.useDedentAsEof) {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: ''\n });\n } else {\n this.waitingTokens.push({\n type: TokenType.Identifier,\n typeName: TokenType[TokenType.Identifier],\n value: Tokenizer.EofId\n });\n }\n }\n }\n return yes;\n }\n\n private identifier(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (typeof nextC !== 'string' || !matchIdStart2(nextC, 0)) {\n break;\n }\n value += nextC;\n this.i++;\n }\n if (value === Tokenizer.EofId && this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n return;\n }\n\n let realValue =\n value === 'null'\n ? null\n : value === 'undefined'\n ? undefined\n : value === 'false'\n ? false\n : value === 'true'\n ? true\n : value;\n this.setToken(TokenType.Identifier, realValue);\n }\n private str(char: string) {\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.i++;\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === char && memoCount % 2 === 0) {\n break;\n }\n value += nextC;\n }\n this.setToken(TokenType.Identifier, value);\n }\n private number(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (!isNum(nextC)) {\n break;\n }\n value += nextC;\n this.i++;\n }\n this.setToken(TokenType.Identifier, Number(value));\n }\n private eof() {\n this.setToken(TokenType.Eof, 'End Of File');\n }\n /** 模板字符串动态节点的占位符 */\n HookId = '_h_o_o_k_';\n /** 模板字符串动态节点索引 */\n hookI = 0;\n _hook = (props: Partial<HookProps>): [HookType | undefined, any, hookI?: any] => {\n const value = this.token.value;\n const isDynamicHook = this.token.type & TokenType.InsertionExp;\n const isStaticHook = typeof value === 'string' && value.indexOf(this.HookId) === 0;\n const hookType: HookType = isDynamicHook ? 'dynamic' : isStaticHook ? 'static' : undefined;\n // 静态插值 `${xxx}`\n if (this.hook && isStaticHook) {\n const hookI = Number(value.slice(this.HookId.length));\n const res = this.hook({\n ...props,\n HookId: this.HookId,\n i: hookI\n });\n // TODO: 去除 this.hookI, hookI 由本函数返回\n return [hookType, res, hookI];\n }\n // 动态插值 `{xxx}`\n else if (isDynamicHook) {\n return [hookType, value];\n }\n // 普通值\n return [hookType, value];\n };\n\n init(fragments: string | string[]) {\n if (typeof fragments === 'string') {\n this.setCode(fragments);\n } else {\n let code = '';\n for (let i = 0; i < fragments.length - 1; i++) {\n const fragment = fragments[i];\n code += fragment + `${this.HookId}${i}`;\n }\n this.setCode(code + fragments[fragments.length - 1]);\n }\n }\n}\n","import { Interpreter } from './terp';\nimport { Store } from 'aoye';\nimport { Tokenizer } from './tokenizer';\nimport { BobeUI, ComponentNode, CustomRenderConf, FakeType } from './type';\nexport * from 'aoye';\nexport function bobe(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: BobeUI = function ui(isSub: boolean) {\n const tokenizer = new Tokenizer(({ i }) => {\n return values[i];\n }, isSub);\n tokenizer.init(Array.from(fragments));\n return tokenizer;\n };\n ui.boundStore = Store.Current;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T>(Ctor: typeof Store, root: any) {\n const store = Ctor.new();\n const tokenizer: Tokenizer = store['ui'](false);\n const terp = new Interpreter(tokenizer);\n terp.config(option);\n\n const componentNode: ComponentNode = {\n __logicType: FakeType.Component,\n realParent: root,\n data: store,\n tokenizer\n };\n\n terp.program(root, componentNode);\n // ui => bobe`` 返回的函数\n return [componentNode, store];\n };\n}\n"],"names":["TokenType","FakeType","CondBit","If","Fail","Else","LogicalBit","For","ForItem","Component","Fragment","TokenizerSwitcherBit","NodeSort","TerpEvt","MultiTypeStack","typeTops","length","stack","push","value","bits","newNode","types","prevByType","bit","undefined","pop","poppedNode","peekByType","cat","peekType","at","peek","Interpreter","constructor","tokenizer","isLogicNode","node","__logicType","rootComponent","program","root","componentNode","before","ctxProvider","nextToken","prev","Real","CtxProvider","TokenizerSwitcher","Logic","ctx","realParent","prevSibling","current","rootPulling","getPulling","isEof","handleInsert","token","type","Indent","setPulling","effect","declaration","Dedent","_stack$pop","_stack$pop2","_slicedToArray","_stack$pop2$","parent","sort","prevSameType","parentLogic","switcher","_ref","forNode","i","arr","snapshot","resume","children","insertAfterAnchor","name","_this$ctx","afterAnchor","createAnchor","child","parentComponent","insertAfter","realAfter","childCmp","realBefore","getPrevRealSibling","point","lastChild","anchor","_this$tokenizer$_hook","_hook","_this$tokenizer$_hook2","hookType","_node","condDeclaration","forDeclaration","data","getData","componentOrFragmentDeclaration","SyntaxError","valueIsMapKey","Reflect","has","Keys","Raw","val","str","getFn","createNode","onePropParsed","headerLine","extensionLines","oneRealPropParsed","arrExp","itemToken","isDestruct","InsertionExp","itemExp","vars","match","jsVarRegexp","join","Function","indexName","keyExp","code","next","Semicolon","owner","getKey","window","cells","Meta","hasArrExpKey","arrSignal","get","Computed","_forNode$snapshot","dentStack","isFirstToken","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","Iterator","toRaw","len","nextItem","item","createForItem","firstInsert","skip","oldLen","newLen","minLen","Math","min","newChildren","removeLogicNode","remove","dispose","lastAfter","useDedentAsEof","runWithPulling","Object","assign","forItemId","parentData","forItemNode","scope","Scope","deepSignal","rawData","setPrototypeOf","id","key","_this$ctx$stack$peekB","isFn","hookI","setProp","res","bind","ComponentOrRender","render","isCC","prototype","Store","new","boundStore","_","shareSignal","meta","computed","set","expression","keyWord","expToken","condExp","isElse","isIf","preIsCond","noCond","ifNode","condition","preCond","signal","fn","ef","nextSib","firstChild","Pipe","attributeList","NewLine","eq","_this$tokenizer$_hook3","_this$tokenizer$_hook4","rawVal","config","opt","props","nextSibling","defaultInsert","defaultRemove","Tokenizer","TabSize","Tab","Array","from","EofId","Date","now","DedentId","needIndent","handledTokens","waitingTokens","Queue","hook","setToken","consume","_snapshot","keys","snap","clone","k","slice","logicDentLen","skipFragment","char","_this$getDentValue","getDentValue","isEmptyLine","currLen","expLen","shorterThanBaseDentEof","String","typeName","setCode","trimEnd","tokenize","console","log","JSON","stringify","Identifier","shift","outer","dent","newLine","assignment","pipe","braceToken","brace","handled","dynamic","isNum","number","matchIdStart2","identifier","error","trim","forLoopSubExp","count","isSemicolon","Assign","nextC","innerBrace","inComment","inString","backslashCount","nextChar","_this$getDentValue2","indentHasLen","prevLen","yes","realValue","continuousBackslashCount","memoCount","Number","eof","Eof","HookId","isDynamicHook","isStaticHook","indexOf","init","fragments","fragment","bobe","values","ui","isSub","Current","customRender","option","Ctor","store","terp"],"mappings":"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"}
1
+ {"version":3,"file":"bobe.esm.js","sources":["../src/type.ts","../src/typed.ts","../src/util.ts","../src/global.ts","../src/terp.ts","../src/tokenizer.ts","../src/index.ts"],"sourcesContent":["import { Computed, Dispose, Effect, Scope, Signal, SignalNode, Store } from 'aoye';\nimport type { Tokenizer } from './tokenizer';\nimport type { Interpreter } from './terp';\nimport { MultiTypeStack } from './typed';\n\nexport enum TokenType {\n NewLine = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Indent = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Dedent = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n Identifier = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Assign = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Pipe = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n Eof = 0b0000_0000_0000_0000_0000_0000_0100_0000,\n InsertionExp = 0b0000_0000_0000_0000_0000_0000_1000_0000,\n Semicolon = 0b0000_0000_0000_0000_0000_0001_0000_0000\n}\n\nexport enum FakeType {\n If = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n Fail = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n Else = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n For = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n Component = 0b0000_0000_0000_0000_0000_0000_0001_0000,\n Fragment = 0b0000_0000_0000_0000_0000_0000_0010_0000,\n ForItem = 0b0000_0000_0000_0000_0000_0000_0100_0000\n}\n\nexport const CondBit = FakeType.If | FakeType.Fail | FakeType.Else;\nexport const LogicalBit = FakeType.If | FakeType.Fail | FakeType.Else | FakeType.For | FakeType.ForItem;\nexport const CtxProviderBit =\n FakeType.If |\n FakeType.Fail |\n FakeType.Else |\n FakeType.For |\n FakeType.ForItem |\n FakeType.Component |\n FakeType.Fragment;\n\nexport const TokenizerSwitcherBit = FakeType.Component | FakeType.Fragment;\nexport type NodeSortBit = number;\n/**\n * 按不同维度分类,分类不互斥\n */\nexport enum NodeSort {\n /** 逻辑类型 1.if 2.else 3.fail 4.for 5. for item */\n Logic = 0b0000_0000_0000_0000_0000_0000_0000_0001,\n /** 真实节点 */\n Real = 0b0000_0000_0000_0000_0000_0000_0000_0010,\n /** 组件 */\n Component = 0b0000_0000_0000_0000_0000_0000_0000_0100,\n /** FakeType 所有枚举都能提供 ctx,否则重新渲染时获取不到上下文 */\n CtxProvider = 0b0000_0000_0000_0000_0000_0000_0000_1000,\n /** 节点可导致 token 切换 1. component 2. fragment */\n TokenizerSwitcher = 0b0000_0000_0000_0000_0000_0000_0001_0000\n}\n\nexport enum TerpEvt {\n AllAttrGot = 'all-attr-got',\n HandledComponentNode = 'handled-component-node'\n}\n\nexport type BaseType = string | number | boolean | undefined | null;\n\nexport const InsComputed = Symbol('insertion-computed-map-key');\nexport const IsAnchor = Symbol('is-anchor');\n\nexport type Token = {\n type: TokenType;\n typeName: string;\n value: BaseType;\n};\n\nexport type HookProps = {\n /** 通过哪个 HookId 进入的 */\n HookId: string;\n /** 第几个 hook */\n i: number;\n /** 父节点 */\n parentNode?: any;\n};\n\nexport type TerpConf = Partial<\n Pick<Interpreter, 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'>\n>;\nexport type CustomRenderConf = Pick<\n TerpConf,\n 'createNode' | 'setProp' | 'insertAfter' | 'remove' | 'createAnchor' | 'firstChild' | 'nextSib'\n>;\n\nexport type Hook = (props: HookProps) => any;\n\nexport type HookType = 'dynamic' | 'static';\n\nexport type ProgramCtx = {\n stack: MultiTypeStack<any>;\n prevSibling: any;\n realParent: any;\n current: any;\n before: any;\n};\n\n/** 返回值是用户自定义的节点 */\nexport type BobeUI = {\n /** 在哪个 Store 声明的 */\n boundStore: Store;\n (isSub: boolean): Tokenizer;\n};\n\nexport type StackItem = {\n /** 插入到 prev 后 */\n prev: any;\n /** 当前节点*/\n node: any;\n};\n\nexport type LogicNode = {\n __logicType: FakeType;\n realParent: any;\n realBefore?: any;\n realAfter?: any;\n};\n\nexport type ForNode = LogicNode & {\n children: ForItemNode[];\n snapshot: ReturnType<Tokenizer['snapshot']>;\n itemExp: string | ((value: any) => any);\n indexName?: string;\n getKey?: (data: any) => any;\n arr: any[];\n arrSignal: Signal<any[]>|Computed<any[]>;\n effect: Effect;\n i: number;\n owner: ComponentNode | FragmentNode;\n prevSibling: any;\n vars: string[];\n};\n\nexport type ForItemNode = LogicNode & {\n id: number;\n forNode: ForNode;\n data: any;\n effect: Scope;\n key?: any;\n};\n\nexport type IfNode = LogicNode & {\n condition: SignalNode;\n isFirstRender: boolean;\n snapshot: ReturnType<Tokenizer['snapshot']>;\n effect: Effect;\n preCond: IfNode | null;\n owner: ComponentNode | FragmentNode;\n};\n\nexport type FragmentNode = LogicNode & {\n data: Store;\n tokenizer: Tokenizer;\n};\nexport type ComponentNode = LogicNode & {\n data: Store;\n tokenizer: Tokenizer;\n};\nexport type RootNode = LogicNode & {\n store: Store;\n};","import { NodeSort, NodeSortBit, StackItem } from './type';\n\n// 1. 定义类别枚举\ntype Type = 'A' | 'B' | 'C';\n\n// 2. 定义节点结构\ninterface StackNode<T> {\n value: T;\n types: NodeSortBit;\n // prevGlobal: StackNode<T> | null;\n // 核心:记录在该节点加入时,各个类别的上一个节点是谁\n prevByType: Partial<Record<number, StackNode<T>>>;\n}\n\nexport class MultiTypeStack<T> {\n // 记录全局栈顶\n // private top: StackNode<T> | null = null;\n\n // 记录每个类别的当前最新节点(各分类的“栈顶”)\n private typeTops: Partial<Record<number, StackNode<T>>> = {};\n\n length = 0;\n stack: StackNode<T>[] = [];\n /**\n * 入栈操作\n * @param value 数据\n * @param bits 该节点所属的类别数组\n */\n push(value: T, bits: NodeSortBit): void {\n const newNode: StackNode<T> = {\n value,\n types: bits,\n prevByType: {}\n };\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 按类型链接前置节点\n newNode.prevByType[bit] = this.typeTops[bit] || undefined;\n this.typeTops[bit] = newNode;\n }\n this.stack[this.length++] = newNode;\n }\n\n /**\n * 出栈操作\n */\n pop() {\n const poppedNode = this.stack[this.length - 1];\n this.stack[--this.length] = null;\n if (!poppedNode) return undefined;\n\n let { types: bits } = poppedNode;\n\n let bit: number;\n while (1) {\n // 从最低位取一个类别\n bit = bits & (~bits + 1);\n if (!bit) break;\n // 去掉最低位\n bits &= ~bit;\n // 弹出对应类别的“顶端”元素\n this.typeTops[bit] = poppedNode.prevByType[bit];\n }\n\n // 更新全局栈顶\n return [poppedNode.value, poppedNode.types] as const;\n }\n\n /**\n * 获取某个类别的当前“顶部”元素\n */\n peekByType(cat: number): T | undefined {\n return this.typeTops[cat]?.value;\n }\n\n peekType(): number | undefined {\n return this.stack.at(-1).types;\n }\n\n /**\n * 获取全局栈顶\n */\n peek(): T | undefined {\n return this.stack.at(-1).value;\n }\n\n // /**\n // * 1. 全局向前遍历 (不分类)\n // * 从栈顶开始,沿着全局链条向栈底遍历\n // */\n // forEach(callback: (value: T, types: number) => any): void {\n // let current = this.top;\n\n // while (current !== null) {\n // // 执行回调,如果返回 false 则立即停止\n // const shouldBreak = callback(current.value, current.types);\n // if (shouldBreak) break;\n\n // current = current.prevGlobal;\n // }\n // }\n\n // /**\n // * 2. 按类别向前遍历\n // * 仅遍历属于指定类别 cat 的节点\n // */\n // forEachByType(cat: number, callback: (value: T) => any): void {\n // // 从该类别的当前“顶端”节点开始\n // let current = this.typeTops[cat];\n\n // while (current) {\n // const shouldBreak = callback(current.value);\n // if (shouldBreak) break;\n\n // // 关键点:直接跳向该节点记录的“上一个同类节点”\n // // 这比遍历全局栈再筛选类别要快得多 (O(m) vs O(n))\n // current = current.prevByType[cat];\n // }\n // }\n}\n","export function macInc(arr: number[]) {\n const len = arr.length;\n /** 候选者数组的尾项在 arr 中的 index */\n let candyLast = [],\n i = 0;\n while (i < len) {\n const it = arr[i];\n if (it !== -1) {\n candyLast = [i];\n break;\n }\n i++;\n }\n // i 为第一项不为 -1 的项,如果其是最后一项,直接返回,因为此时数组只有一个元素\n if (i + 1 >= len) return candyLast;\n\n /** 反向链表 */\n const toPrev = new Int32Array(len);\n\n while (i < len) {\n const target = arr[i];\n // -1 为新增项直接跳过\n if (target === -1) continue;\n // 二分查找,找到在 candyLast 中 item 的插入位置\n // 维持 0,start 小于 target, end, len-1 大于等于 target\n let start = -1,\n end = candyLast.length;\n while (start + 1 < end) {\n const mid = (start + end) >> 1;\n if (arr[candyLast[mid]] < target) {\n start = mid;\n } else {\n end = mid;\n }\n }\n // 最终 end 替换为 target\n candyLast[end] = i;\n // 匹配 i 的前项索引\n toPrev[i] = candyLast[start];\n i++;\n }\n\n let length = candyLast.length;\n for (let j = length - 1; j > 0; j--) {\n const prev = toPrev[candyLast[j]];\n candyLast[j - 1] = prev;\n }\n return candyLast;\n}\n","export const KEY_INDEX = '__BOBE_KEY_INDEX';","import { Tokenizer } from './tokenizer';\nimport {\n Computed,\n deepSignal,\n Effect,\n effect,\n getPulling,\n Keys,\n runWithPulling,\n Scope,\n setPulling,\n shareSignal,\n Signal,\n SignalNode,\n Store,\n clean,\n toRaw\n} from 'aoye';\nimport {\n BobeUI,\n ComponentNode,\n CondBit,\n IfNode,\n LogicalBit,\n LogicNode,\n FakeType,\n NodeSort,\n ProgramCtx,\n StackItem,\n TerpConf,\n TokenType,\n TokenizerSwitcherBit,\n ForNode,\n ForItemNode,\n Token\n} from './type';\nimport { jsVarRegexp } from 'bobe-shared';\nimport { MultiTypeStack } from './typed';\nimport { macInc } from './util';\nimport { KEY_INDEX } from './global';\n\nexport class Interpreter {\n opt: TerpConf;\n constructor(private tokenizer: Tokenizer) {}\n isLogicNode(node: any) {\n return node && node.__logicType & LogicalBit;\n }\n\n ctx: ProgramCtx;\n rootComponent: ComponentNode | null = null;\n\n program(root: any, componentNode?: ComponentNode, before?: any, ctxProvider?: any) {\n // 首屏渲 app 组件需要创建对象\n this.rootComponent = componentNode;\n\n this.tokenizer.nextToken();\n const stack = new MultiTypeStack<StackItem>();\n stack.push({ node: root, prev: null }, NodeSort.Real);\n stack.push(\n { node: componentNode, prev: null },\n NodeSort.Component | NodeSort.CtxProvider | NodeSort.TokenizerSwitcher\n );\n if (ctxProvider) {\n stack.push(\n { node: ctxProvider, prev: null },\n (ctxProvider.__logicType & LogicalBit ? NodeSort.Logic : 0) | NodeSort.CtxProvider\n );\n }\n\n const ctx = (this.ctx = {\n realParent: root,\n prevSibling: before,\n current: null,\n stack,\n before\n });\n\n const rootPulling = getPulling();\n while (1) {\n // 子 tokenizer 退出,代表子组件逻辑结束\n if (this.tokenizer.isEof()) {\n if (!ctx.prevSibling) ctx.prevSibling = before;\n this.handleInsert(root, ctx.current, ctx.prevSibling, componentNode);\n break;\n }\n\n const token = this.tokenizer.token;\n // 下沉,创建 child0\n if (token.type & TokenType.Indent) {\n this.tokenizer.nextToken(); // token = ID\n const isLogicNode = this.isLogicNode(ctx.current);\n stack.push(\n {\n node: ctx.current,\n prev: ctx.prevSibling\n },\n !ctx.current.__logicType\n ? NodeSort.Real\n : (ctx.current.__logicType & LogicalBit ? NodeSort.Logic : 0) |\n (ctx.current.__logicType & TokenizerSwitcherBit ? NodeSort.TokenizerSwitcher : 0) |\n (ctx.current.__logicType === FakeType.Component ? NodeSort.Component : 0) |\n NodeSort.CtxProvider\n );\n if (ctx.current.__logicType) {\n // 父节点是逻辑节点\n if (isLogicNode) {\n // 保证 if 子逻辑节点能被其 effect 管理\n setPulling(ctx.current.effect);\n if (ctx.current.__logicType & FakeType.ForItem) {\n ctx.prevSibling = ctx.current.realBefore;\n }\n }\n }\n // 父节点是原生节点时才修改 ctx.prevSibling\n else {\n if (ctx.current) {\n ctx.realParent = ctx.current;\n }\n ctx.prevSibling = null;\n }\n ctx.current = this.declaration(ctx);\n continue;\n }\n // Token 不论指示找 下一个同级节点,还是 Dedent, 都将当前节点插入\n if (ctx.current) {\n // root 下第一个子节点应该插入在 before 之后\n if (stack.length === 2 && !ctx.prevSibling) {\n ctx.prevSibling = before;\n }\n this.handleInsert(ctx.realParent, ctx.current, ctx.prevSibling);\n }\n // 下一个 token 是 Dedent\n if (this.tokenizer.token.type & TokenType.Dedent) {\n this.tokenizer.nextToken(); // token = ID | DEDENT\n const [{ node: parent, prev }, sort] = stack.pop();\n // 弹出原生节点,找最近的 ctx.realParent\n if (!parent.__logicType) {\n const prevSameType = stack.peekByType(NodeSort.Real);\n ctx.realParent = prevSameType?.node || root;\n }\n // 弹出非原生节点\n else {\n // 考虑 if, for 等获取最后一个插入节点\n if (sort & NodeSort.Logic) {\n // 找最近的 if for\n const parentLogic = stack.peekByType(NodeSort.Logic)?.node;\n if (parentLogic) {\n setPulling(parentLogic.effect);\n } else {\n setPulling(rootPulling);\n }\n }\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tokenizer\n if (sort & NodeSort.TokenizerSwitcher) {\n const switcher = stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n this.tokenizer = switcher.tokenizer;\n }\n\n // 弹出 forItem\n if (parent.__logicType === FakeType.ForItem) {\n const { forNode } = parent as ForItemNode;\n const { i, arr, snapshot } = forNode;\n if (i + 1 < arr.length) {\n // 恢复后 token null, 下一个是 \\n, Indent\n this.tokenizer.resume(snapshot);\n this.tokenizer.nextToken(); // token = \\n\n this.tokenizer.nextToken(); // token = Indent\n ctx.current = forNode.children[++forNode.i];\n ctx.prevSibling = ctx.current.realBefore;\n continue;\n }\n // 正常弹出 current = for node\n ctx.prevSibling = forNode.prevSibling;\n ctx.current = forNode;\n continue;\n }\n }\n ctx.prevSibling = prev;\n ctx.current = parent;\n }\n // 下一个是 同级节点\n else {\n ctx.prevSibling = ctx.current || ctx.prevSibling;\n ctx.current = this.declaration(ctx);\n }\n }\n return componentNode;\n }\n\n insertAfterAnchor(name = 'anchor') {\n const { realParent, prevSibling, stack, before } = this.ctx;\n // 先将 after 插入\n const afterAnchor = this.createAnchor(name);\n this.ctx.prevSibling = stack.length === 2 && !prevSibling ? before : prevSibling;\n this.handleInsert(realParent, afterAnchor, prevSibling);\n return afterAnchor;\n }\n\n /** 处理\n * 是逻辑 是普通\n * 父节点 将子节点加入 directList 调用 insert 方法挨个插入子节点\n * 子节点 仅插入到父逻辑节点 将本节点插入父节点\n * 理论上父节点不能是一个 逻辑节点,遇到if 时 Terp 会重新执行 program 这种情况下,会指定 root 为真实 dom\n */\n handleInsert(parent: any, child: any, prev: any, parentComponent?: any) {\n // 父 是 逻辑节点\n if (parentComponent) {\n // parentComponent.directList.push(child);\n }\n // 子 普通节点\n if (!child.__logicType) {\n // 前置节点空 或 普通节点\n if (!prev || !prev.__logicType) {\n this.insertAfter(parent, child, prev);\n }\n // 前置节点是逻辑节点,必定有 after\n else {\n const before = prev.realAfter;\n this.insertAfter(parent, child, before);\n }\n }\n // 子 是 逻辑节点\n else {\n const childCmp: LogicNode = child;\n childCmp.realParent = parent;\n // 前置 -> 逻辑节点\n if (prev?.__logicType) {\n // forItem 应该使用 forNode 的 after\n childCmp.realBefore = prev.forNode ? prev.forNode.realAfter : prev.realAfter;\n }\n // 前置 -> 普通节点\n else {\n childCmp.realBefore = prev;\n }\n }\n }\n\n /** 考虑到同级 逻辑模块 */\n getPrevRealSibling(prevSibling: any) {\n // 正常节点则直接返回\n if (!prevSibling || !prevSibling.__logicType) {\n return prevSibling;\n }\n let point = prevSibling;\n while (point != null) {\n if (point.lastChild) {\n return point.lastChild.value;\n }\n point = point.anchor;\n }\n }\n\n /**\n * 声明部分:\n * 包含首行定义和(可选的)多行属性扩展\n * <declaration> ::= <tagName=token> <headerLine> <extensionLines>\n * */\n declaration(ctx: ProgramCtx) {\n const [hookType, value] = this.tokenizer._hook({});\n let _node: any;\n if (value === 'if' || value === 'else' || value === 'fail') {\n return this.condDeclaration(ctx);\n } else if (value === 'for') {\n return this.forDeclaration();\n } else if (hookType) {\n const data = this.getData();\n // 静态 1. Component,2. bobe 返回的 render 方法\n if (hookType === 'static') {\n // 传组件 class 或 片段\n if (typeof value === 'function') {\n _node = this.componentOrFragmentDeclaration(value, ctx);\n }\n // 其余类型不允许静态插值\n else {\n throw new SyntaxError(`declaration 不支持 ${value} 类型的静态插值`);\n }\n }\n // 动态插值\n // 一定是 js 表达式\n // 1. 返回基础值,创建文本节点 createNode('text', String(value))\n // 2. 返回 组件,创建组件节点\n // 3. 返回 片段\n // TODO: 后续考虑动态组件\n else {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const val = data[Keys.Raw][value];\n if (typeof val === 'function') {\n _node = this.componentOrFragmentDeclaration(val, ctx);\n }\n // 字符\n else {\n const str = valueIsMapKey ? value : this.getFn(data, value);\n _node = this.createNode('text');\n this.onePropParsed(data, _node, 'text', str, valueIsMapKey, false);\n }\n }\n } else {\n _node = this.createNode(value);\n }\n this.tokenizer.nextToken(); // 跳过 node 本身,token -> id\n this.headerLine(_node);\n this.extensionLines(_node);\n // 组件用完,切换回 真实node 的方法\n if (_node.__logicType & TokenizerSwitcherBit) {\n this.onePropParsed = this.oneRealPropParsed;\n this.tokenizer = _node.tokenizer;\n }\n return _node;\n }\n\n forDeclaration() {\n const arrExp = this.tokenizer.nextToken().value as string;\n this.tokenizer.nextToken(); // 分号\n const itemToken = this.tokenizer.nextToken(); // item 表达式\n const isDestruct = itemToken.type === TokenType.InsertionExp;\n let itemExp: string | ((value: any) => any) = itemToken.value as string,\n vars: string[];\n if (isDestruct) {\n itemExp = '{' + itemExp + '}';\n vars = itemExp.match(jsVarRegexp);\n const varStr = vars.join(',');\n itemExp = new Function(itemExp, `return {${varStr}};`) as any;\n }\n let indexName: string,\n keyExp: string,\n char = this.tokenizer.peekChar();\n if (char === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n } else if (char === '\\n') {\n }\n // 下一个是 indexName\n else {\n indexName = this.tokenizer.nextToken().value as string;\n if (this.tokenizer.peekChar() === ';') {\n this.tokenizer.nextToken(); // 分号\n if (this.tokenizer.peekChar() !== '\\n') keyExp = this.tokenizer.jsExp().value as string;\n }\n }\n\n const owner = this.ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const prevSibling = this.ctx.prevSibling;\n const forNode: ForNode = {\n __logicType: FakeType.For,\n snapshot: this.tokenizer.snapshot(['dentStack', 'isFirstToken']),\n realParent: this.ctx.realParent,\n prevSibling,\n realBefore: prevSibling?.realAfter || prevSibling,\n realAfter: null,\n arr: null,\n arrSignal: null,\n itemExp,\n indexName,\n getKey: null,\n children: [],\n effect: null,\n owner,\n vars,\n i: 0\n };\n if (keyExp) {\n forNode.getKey = new Function('data', `let v;with(data){v=${keyExp}};return v;`) as any;\n }\n window['for1'] = forNode;\n\n const data = this.getData();\n\n const cells = data[Keys.Meta].cells;\n const hasArrExpKey = Reflect.has(data[Keys.Raw], arrExp);\n const arrSignal = hasArrExpKey\n ? // 有 key 直接拿\n (data[arrExp], cells.get(arrExp))\n : // 无key\n new Computed(this.getFn(data, arrExp));\n forNode.arrSignal = arrSignal;\n // 由于此处 snapshot 多配置了2个属性,更新渲染时 应该忽略这个两个属性\n forNode.realAfter = this.insertAfterAnchor('for-after');\n\n // 去除 dentStack 和 isFirstToken\n const { dentStack, isFirstToken, ...snapshotForUpdate } = forNode.snapshot;\n\n let isFirstRender = true;\n forNode.effect = new Effect(() => {\n let arr: any[] = arrSignal.get();\n // 订阅 iter\n arr[Keys.Iterator];\n const prevCtx = getPulling();\n setPulling(null);\n // 使用原始数组避免 index 依赖\n forNode.arr = arr = toRaw(arr);\n const children = forNode.children;\n // 首屏渲染\n if (isFirstRender) {\n const len = arr.length;\n for (let i = len; i--; ) {\n const item = this.createForItem(forNode, i, data);\n item.realAfter = this.insertAfterAnchor('for-item-after');\n item.realBefore = this.insertAfterAnchor('for-item-before');\n item.realParent = forNode.realParent;\n children[i] = item;\n }\n const firstInsert = children[0];\n // 有子项进行计算\n if (firstInsert) {\n this.tokenizer.nextToken(); // 是 NewLine\n this.tokenizer.nextToken(); // 是 Indent\n }\n // 没有子项,跳过\n else {\n this.tokenizer.skip();\n }\n }\n // 更新渲染\n else {\n const oldLen = children.length;\n const newLen = arr.length;\n const minLen = Math.min(oldLen, newLen);\n const newChildren: ForItemNode[] = [];\n if (!forNode.getKey) {\n // 删除\n if (newLen < oldLen) {\n for (let i = oldLen - 1; i >= newLen; i--) {\n this.removeForItem(children, i);\n }\n }\n // 新增\n if (oldLen < newLen) {\n const lastAfter = children.at(-1)?.realAfter || forNode.realBefore;\n for (let i = newLen - 1; i >= oldLen; i--) {\n this.insertForItem(forNode, i, data, newChildren, lastAfter, snapshotForUpdate);\n }\n }\n for (let i = minLen; i--; ) {\n const child = children[i];\n newChildren[i] = child;\n this.reuseForItem(child, arr[i], itemExp, i, indexName);\n }\n }\n // 带 key 列表\n else {\n let s = 0,\n e1 = oldLen - 1,\n e2 = newLen - 1;\n // 掐头\n while (s <= e1 && s <= e2) {\n const child = children[s];\n const old = child.key;\n const itemData = this.getItemData(forNode, s, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[s] = child;\n this.reuseForItem(child, arr[s], itemExp, s, indexName);\n s++;\n } else {\n break;\n }\n }\n // 去尾\n while (s <= e1 && s <= e2) {\n const child = children[e1];\n const old = child.key;\n const itemData = this.getItemData(forNode, e2, data);\n const key = forNode.getKey(itemData);\n if (old === key) {\n newChildren[e2] = child;\n this.reuseForItem(child, arr[e2], itemExp, e2, indexName);\n e1--;\n e2--;\n } else {\n break;\n }\n }\n // 纯新增\n if (s > e1) {\n if (s <= e2) {\n // s > 0 纯尾增\n // 否则 纯尾增\n const firstBefore = s > 0 ? children.at(-1)?.realAfter || forNode.realBefore : forNode.realBefore;\n for (let i = e2; i >= s; i--) {\n this.insertForItem(forNode, i, data, newChildren, firstBefore, snapshotForUpdate);\n }\n }\n }\n // 纯尾删\n else if (s > e2) {\n if (s <= e1) {\n for (let i = e1; i >= s; i--) {\n this.removeForItem(children, i);\n }\n }\n }\n // 混合\n else {\n let s1 = s,\n s2 = s;\n const mixLen = e2 - s2 + 1;\n /** key -> 旧 index */\n const key2new = new Map<any, number>();\n for (let i = s2; i <= e2; i++) {\n // TODO: 这里只求 key 可以不用响应式\n const itemData = this.getItemData(forNode, i, data);\n const key = forNode.getKey(itemData);\n key2new.set(key, i);\n }\n /*----------------- 构建 new2oldI -----------------*/\n let maxIncNewI = -1;\n let hasMove = false;\n const new2oldI = new Array<number>(mixLen).fill(-1);\n for (let i = s1; i <= e1; i++) {\n const key = children[i].key;\n const newI = key2new.get(key);\n // 不在新列表中,删除\n if (newI == null) {\n this.removeForItem(children, i);\n continue;\n }\n const child = children[i];\n // 复用\n newChildren[newI] = child;\n this.reuseForItem(child, arr[newI], itemExp, newI, indexName);\n new2oldI[newI - s2] = i;\n // 剩余的 key 是新增\n key2new.delete(key);\n // 如果 newI 比已处理的最大 newI 要小,说明索引较小的项反而靠后,即发生移动\n if (newI < maxIncNewI) {\n hasMove = true;\n } else {\n maxIncNewI = newI;\n }\n }\n /*----------------- 纯增删 -----------------*/\n if (!hasMove) {\n // 按顺序从前往后插入即可\n key2new.forEach((i, key) => {\n const before = i === 0 ? forNode.realBefore : newChildren[i - 1].realAfter;\n this.insertForItem(forNode, i, data, newChildren, before, snapshotForUpdate);\n });\n } else {\n /*----------------- 增删移 -----------------*/\n const incI = macInc(new2oldI),\n incLen = incI.length;\n /** p1 表示新数组中的索引 */\n let p1: number,\n /** p2 表示最长递增子序列的索引 */\n p2: number;\n // 从 s2 开始对比\n for (p1 = s2, p2 = 0; p1 <= e2; p1++) {\n const oldI = new2oldI[p1];\n /** 新增 */\n if (oldI === -1) {\n const before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n this.insertForItem(forNode, p1, data, newChildren, before, snapshotForUpdate);\n continue;\n }\n\n /** 锚点在 new2oldI 组中的索引 */\n const staticIdx = incI[p2] + s2;\n // 匹配到锚点,复用节点,已在构建 new2oldI 时完成\n if (p1 === staticIdx) {\n p2 <= incLen && p2++;\n continue;\n }\n\n // p1 点位需要移动, 数据复用在 new2oldI 构建时已完成,这里处理 dom 移动即可\n let before = p1 === 0 ? forNode.realBefore : newChildren[p1 - 1].realAfter;\n const child = newChildren[p1];\n\n const { realBefore, realAfter, realParent } = child;\n\n let point = realBefore,\n next: any;\n do {\n next = this.nextSib(point);\n this.insertAfter(realParent, point, before);\n // this.handleInsert(realParent, point, before);\n before = point;\n if (point === realAfter) break;\n point = next;\n } while (true);\n }\n }\n }\n }\n forNode.children = newChildren;\n }\n isFirstRender = false;\n setPulling(prevCtx);\n\n return isDestroy => {\n if (isDestroy) {\n for (let i = 0; i < forNode.children.length; i++) {\n const item = forNode.children[i];\n item.effect.dispose();\n }\n }\n };\n });\n return forNode.children[0] || forNode;\n }\n\n insertForItem(\n forNode: ForNode,\n i: number,\n parentData: any,\n newChildren: ForItemNode[],\n before: any,\n snapshotForUpdate: any\n ) {\n const item = this.createForItem(forNode, i, parentData);\n newChildren[i] = item;\n let realAfter = this.createAnchor('for-item-after');\n this.handleInsert(forNode.realParent, realAfter, before);\n\n let realBefore = this.createAnchor('for-item-before');\n this.handleInsert(forNode.realParent, realBefore, before);\n\n item.realBefore = realBefore;\n item.realAfter = realAfter;\n\n this.tokenizer = forNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(snapshotForUpdate);\n // 解析到缩进小于 base 时自动 eof\n this.tokenizer.useDedentAsEof = false;\n runWithPulling(() => {\n this.program(forNode.realParent, forNode.owner, realBefore, item);\n }, item.effect);\n }\n\n removeForItem(children: ForItemNode[], i: number) {\n const child = children[i];\n this.removeLogicNode(child);\n this.remove(child.realBefore);\n this.remove(child.realAfter);\n // 释放删除项 effect\n child.effect.dispose();\n }\n\n reuseForItem(child: ForItemNode, data: any, itemExp: string | ((value: any) => any), i: number, indexName?: string) {\n if (typeof itemExp === 'string') {\n child.data[itemExp] = data;\n if (indexName) {\n child.data[indexName] = i;\n }\n } else {\n indexName = indexName || KEY_INDEX;\n child.data[indexName] = i;\n }\n }\n\n forItemId = 0;\n createForItem(forNode: ForNode, i: number, parentData: any) {\n let forItemNode: ForItemNode;\n let data: Record<any, any>;\n /**\n * 考虑到 effect 是嵌套的,这种情况每次 forNodeEffect 更新会导致上次产生的内部 setPropsEffect 被自动释放\n * 这是响应式 effect 嵌套的默认特性\n * forNodeEffect(() => {\n * 这里通过 setPulling 模拟嵌套 effect\n * setPropsEffect(() => {\n * })\n * })\n * 因此我们需要让情况变成这样,内部的 effect 交由 forItemNode.effect 接管\n * 这个 scope 是全局的,即指定了参数 parentScope = null\n * 这样外部的 effect 不再自动释放 setPropsEffect\n * 这么的目的是我们能在 diff 过程中手动控制释放 forItemNode.effect\n * globalScope(() => {\n * setPropsEffect(() => {\n * })\n * })\n *\n * 1. runWithPulling 避免 scope 被 effect 收集\n * 2. scope 保证 signal 被 scope 管理\n */\n // TODO: scope 目前认为 parentScope 就是 其下游节点,恢复 pulling 会出现问题\n const scope = new Scope(() => {});\n scope.scope = null;\n runWithPulling(() => {\n scope.get();\n }, null);\n // 考虑到生成每项数据需要依赖原始响应式数组,因此无法放在 scope 里\n // 使得 for effect 依赖原响应式数组,每一项\n data = this.getItemData(forNode, i, parentData);\n forItemNode = {\n id: this.forItemId++,\n __logicType: FakeType.ForItem,\n realParent: null,\n realBefore: null,\n realAfter: null,\n forNode,\n key: forNode.getKey?.(data),\n effect: null,\n data\n };\n forItemNode.effect = scope;\n return forItemNode;\n }\n\n getItemData(forNode: ForNode, i: number, parentData: any) {\n const { arr, itemExp, vars, arrSignal, getKey } = forNode;\n let indexName = forNode.indexName;\n let data: Record<any, any>;\n if (typeof itemExp === 'string') {\n data = deepSignal(\n indexName\n ? {\n [itemExp]: arr[i],\n [indexName]: i\n }\n : {\n [itemExp]: arr[i]\n },\n getPulling()\n );\n } else {\n indexName = indexName ?? KEY_INDEX;\n const rawData = { [indexName]: i };\n data = deepSignal(rawData, getPulling());\n const computedData = new Computed(() => itemExp(arrSignal.get()[getKey ? data[indexName] : i]));\n const cells = data[Keys.Meta].cells;\n for (let i = 0; i < vars.length; i++) {\n const name = vars[i];\n rawData[name] = undefined;\n cells.set(name, new Computed(() => computedData.get()[name]));\n }\n }\n\n Object.setPrototypeOf(data, parentData);\n return data;\n }\n\n getData() {\n const { node } = this.ctx.stack.peekByType(NodeSort.CtxProvider);\n return node.data || node.owner.data;\n }\n\n /**\n * key 元素,组件的 key\n * value\n * 1. 静态类型值\n * 2. 插值计算 函数,可以考虑 使用 effect 或 computed 做处理\n *\n * mapKey 映射, 对应子组件的属性\n * */\n onePropParsed(\n data: Store,\n node: any,\n key: string,\n value: any,\n valueIsMapKey: boolean,\n isFn: boolean,\n hookI?: number\n ) {\n if (isFn) {\n this.setProp(node, key, value, hookI);\n } else if (typeof value === 'function') {\n new Effect(() => {\n const res = value();\n this.setProp(node, key, res, hookI);\n });\n } else if (valueIsMapKey) {\n new Effect(() => {\n const res = data[value];\n this.setProp(node, key, res, hookI);\n });\n }\n // 静态数据\n else {\n this.setProp(node, key, value, hookI);\n }\n }\n\n oneRealPropParsed: Interpreter['onePropParsed'] = this.onePropParsed.bind(this);\n\n componentOrFragmentDeclaration(ComponentOrRender: BobeUI | typeof Store, ctx: ProgramCtx) {\n // 先进行 attr 映射,或建立 signal 连接,才能开始 render\n // 必须等待 attr 解析完毕\n let Component: typeof Store, render: BobeUI, child: any;\n\n const isCC = (ComponentOrRender as any).prototype instanceof Store;\n if (isCC) {\n Component = ComponentOrRender as any;\n child = Component.new();\n } else {\n render = ComponentOrRender as BobeUI;\n const boundStore = render.boundStore;\n // 使用原型链来继承 store 的数据\n child = deepSignal({}, getPulling(), true);\n Object.setPrototypeOf(child, boundStore);\n }\n\n const node: ComponentNode = {\n __logicType: isCC ? FakeType.Component : FakeType.Fragment,\n realParent: ctx.realParent,\n realBefore: null,\n realAfter: null,\n data: child,\n tokenizer: render ? render(true) : (child['ui'] as BobeUI)(true)\n };\n this.onePropParsed = (data, _, key, value, valueIsMapKey, isFn, hookI) => {\n if (isFn) {\n child[Keys.Raw][key] = value;\n }\n // key 映射\n else if (valueIsMapKey) {\n shareSignal(data, value, child, key);\n }\n // 动态值内置 computed 处理\n else {\n const meta = child[Keys.Meta];\n const cells: Map<string, Signal> = meta.cells;\n if (typeof value === 'function') {\n const computed = new Computed(value);\n cells.set(key, computed as any);\n child[Keys.Raw][key] = undefined;\n }\n // 静态数据\n else {\n cells.set(key, { get: () => value } as Signal);\n child[Keys.Raw][key] = value;\n }\n }\n };\n node.realAfter = this.insertAfterAnchor('component-after');\n return node;\n }\n getFn(data: any, expression: string | number) {\n return new Function('data', `let v;with(data){v=${expression}};return v;`).bind(undefined, data);\n }\n // TODO: 优化代码逻辑,拆分 if elseif else\n condDeclaration(ctx: ProgramCtx) {\n const { prevSibling } = ctx;\n const keyWord = this.tokenizer.token;\n const expToken = this.tokenizer.condExp(); // keyWord => exp\n const value = expToken.value as string | number;\n const isElse = keyWord.value === 'else';\n const isIf = keyWord.value === 'if';\n const preIsCond = prevSibling?.__logicType & CondBit;\n const data = this.getData();\n // @ts-ignore\n const noCond = value === true;\n const valueIsMapKey = !noCond && Reflect.has(data[Keys.Raw], value);\n const owner = ctx.stack.peekByType(NodeSort.TokenizerSwitcher)?.node;\n const ifNode: IfNode = {\n __logicType: isElse ? FakeType.Else : isIf ? FakeType.If : FakeType.Fail,\n // 此时 token 是 exp, 下次解析 从 \\n 开始\n snapshot: this.tokenizer.snapshot(),\n realParent: null,\n realBefore: null,\n realAfter: null,\n condition: null,\n preCond: preIsCond ? prevSibling : null,\n isFirstRender: true,\n effect: null,\n owner\n };\n let signal: SignalNode;\n\n switch (keyWord.value) {\n case 'if':\n if (valueIsMapKey) {\n // 确保 signal 已生成\n runWithPulling(() => data[value], null);\n // 拿到 signal\n const { cells } = data[Keys.Meta];\n signal = cells.get(value);\n } else {\n const fn = this.getFn(data, value);\n // 是 getter 使用 computed 计算出一个 signal\n signal = new Computed(fn);\n }\n break;\n case 'else':\n // 纯 else\n if (noCond) {\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return true;\n });\n }\n // else if xxx\n else {\n const fn = valueIsMapKey ? null : this.getFn(data, value);\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n // else 的条件判断应该停止在第一个访问到的 if 节点\n if (point.__logicType === FakeType.If) {\n break;\n }\n point = point.preCond;\n }\n return valueIsMapKey ? data[value] : fn();\n });\n }\n break;\n case 'fail':\n signal = new Computed(() => {\n let point = ifNode.preCond;\n while (point) {\n if (point.condition.get()) {\n return false;\n }\n point = point.preCond;\n }\n return true;\n });\n break;\n default:\n break;\n }\n\n ifNode.condition = signal;\n // 不论是否执行 if 都应该插入 anchor 节点用于后续\n ifNode.realAfter = this.insertAfterAnchor(`${keyWord.value}-after`);\n\n const ef = effect(\n ({ val }) => {\n // 如果值是 true 则直接放行让下面的节点自然执行插入\n if (val) {\n if (ifNode.isFirstRender) {\n this.tokenizer.nextToken(); // token = NEWLINE\n this.tokenizer.nextToken(); // token = ID\n }\n // 更新渲染\n else {\n // 切换到对应 Switcher 的 tokenizer\n this.tokenizer = ifNode.owner.tokenizer;\n /**\n * resume 后 token = null, 下个字符是 \\n\n */\n this.tokenizer.resume(ifNode.snapshot);\n this.tokenizer.useDedentAsEof = false;\n\n // 由于首屏渲染直接放行,导致 if 子节点首屏产生的 effect 不能被管理\n // 在 effect 中创建的子组件 sub effect 能被管理\n // 当 if = false 时,不需要执行销毁子 effect 操作\n // 因为当外部 effect 重新执行时,上次尝试的 sub effect 自动销毁\n // 前提是 sub effect 是嵌套执行的\n this.program(ifNode.realParent, ifNode.owner, ifNode.realBefore, ifNode);\n }\n }\n // 删除逻辑块\n else {\n if (ifNode.isFirstRender) {\n // 此时 token 是 condition, i => \\n\n this.tokenizer.skip(); // skipStr\n }\n // 更新渲染,删除所有节点\n else {\n this.removeLogicNode(ifNode);\n }\n }\n ifNode.isFirstRender = false;\n },\n [signal]\n );\n ifNode.effect = ef;\n return ifNode;\n }\n\n removeLogicNode(node: LogicNode) {\n const { realBefore, realAfter, realParent } = node;\n let point = realBefore ? this.nextSib(realBefore) : this.firstChild(realParent);\n while (point !== realAfter) {\n const next = this.nextSib(point);\n this.remove(point, realParent, realBefore);\n point = next;\n }\n }\n /**\n * <extensionLines> ::= PIPE <attributeList> NEWLINE <extensionLines>\n * | ε\n */\n extensionLines(_node: any) {\n while (1) {\n // 终止条件,下一行不是 pipe\n if ((this.tokenizer.token.type & TokenType.Pipe) === 0) {\n return;\n }\n // 开始解析 attributeList\n this.tokenizer.nextToken(); // PIPE\n this.attributeList(_node);\n // 文件结束了,通常不会发生\n if ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n return;\n }\n // 换行\n this.tokenizer.nextToken(); // NEWLINE\n }\n }\n\n /**\n * 首行:\n * 节点名称 + 属性列表 + 换行\n * <headerLine> ::= <attributeList> NEWLINE\n */\n headerLine(_node: any) {\n this.attributeList(_node);\n this.tokenizer.nextToken(); // NEWLINE\n }\n\n /**\n * 属性列表:\n * 可以是空的,或者包含多个属性\n * <attributeList> ::= <attribute> <attributeList>\n * | ε\n *\n * <attribute> ::= <key> = <value>\n * 1. 普通节点 执行 setProps 🪝\n * 2. 组件节点 收集映射关系,或 产生 computed\n */\n attributeList(_node: any) {\n let key: string, eq: any;\n const data = this.getData();\n while ((this.tokenizer.token.type & TokenType.NewLine) === 0) {\n // 取 key\n if (key == null) {\n key = this.tokenizer.token.value as any;\n }\n // 取 =\n else if (eq == null) {\n eq = '=';\n }\n // 取 value\n else {\n const [hookType, value, hookI] = this.tokenizer._hook({});\n const rawVal = data[Keys.Raw][value];\n const isFn = typeof rawVal === 'function';\n // 动态的要做成函数\n if (hookType === 'dynamic') {\n const valueIsMapKey = Reflect.has(data[Keys.Raw], value);\n const fn = isFn ? rawVal : valueIsMapKey ? value : this.getFn(data, value);\n this.onePropParsed(data, _node, key, fn, valueIsMapKey, isFn, hookI);\n }\n // 静态\n else if (hookType === 'static') {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n // 基础数据字面量\n else {\n this.onePropParsed(data, _node, key, value, false, isFn, hookI);\n }\n key = null;\n eq = null;\n }\n this.tokenizer.nextToken();\n }\n }\n config(opt: TerpConf) {\n Object.assign(this, opt);\n this.opt = opt;\n }\n\n createNode(name: string) {\n return {\n name,\n props: {},\n nextSibling: null\n };\n }\n\n nextSib(node: any) {\n return node.nextSibling;\n }\n\n firstChild(node: any) {\n return node.firstChild;\n }\n\n createAnchor(name: string) {\n return {\n name,\n nextSibling: null\n };\n }\n\n insertAfter(parent: any, node: any, prev: any) {\n return this.defaultInsert(parent, node, prev);\n }\n defaultInsert(parent: any, node: any, prev: any) {\n if (prev) {\n const next = prev.nextSibling;\n prev.nextSibling = node;\n node.nextSibling = next;\n } else {\n const next = parent.firstChild;\n parent.firstChild = node;\n node.nextSibling = next;\n }\n }\n\n remove(node: any, parent?: any, prev?: any) {\n return this.defaultRemove(node, parent, prev);\n }\n\n defaultRemove(node: any, parent: any, prevSibling: any) {\n const next = node.nextSibling;\n if (prevSibling) {\n prevSibling.nextSibling = next;\n }\n if (parent.firstChild === node) {\n parent.firstChild = next;\n }\n }\n\n setProp(node: any, key: string, value: any, hookI?: number) {\n node.props[key] = value;\n }\n}\n","import { isNum, matchIdStart, matchIdStart2, Queue } from 'bobe-shared';\nimport { BaseType, Hook, HookProps, HookType, Token, TokenType } from './type';\n\nexport class Tokenizer {\n /** 缩进大小 默认 2 */\n TabSize = 2;\n /** 缩进字符 */\n Tab = Array.from({ length: this.TabSize }, () => ' ').join('');\n /** Eof 标识符的值 */\n static EofId = `__EOF__${Date.now()}`;\n static DedentId = `__DEDENT__${Date.now()}`;\n\n /** 当前 token */\n token!: Token;\n /** 回车后需要判断缩进 */\n needIndent = false;\n /** 用于跳过第一个节点前的空白字符串,以及生成基础缩进 */\n isFirstToken = true;\n /** 代码 */\n code: string;\n /** 记录历史缩进的长度,相对于行首 */\n dentStack: number[] = [0];\n /** 当前字符 index */\n i = 0;\n // TODO: 生产环境不需要这个,导致不必要的内存占用\n handledTokens: Token[] = [];\n /**\n * 有些标识符能产生多个 token\n * 例如 dedent\n * parent1\n * child\n * subChild\n * parent2 <- 产生两个 dedent\n */\n waitingTokens = new Queue<Token>();\n\n constructor(\n private hook: Hook,\n public useDedentAsEof: boolean\n ) {\n if (useDedentAsEof) {\n this.setToken(TokenType.Indent, '');\n this.isFirstToken = true;\n // this.waitingTokens.push({\n // type: TokenType.Indent,\n // typeName: TokenType[TokenType.Indent],\n // value: ''\n // })\n }\n }\n consume() {\n const token = this.token;\n this.nextToken();\n return token;\n }\n // /** 恢复至某一个现场,进行 token 重算 */\n resume(_snapshot: ReturnType<Tokenizer['snapshot']>) {\n this.token = undefined;\n this.needIndent = false;\n this.isFirstToken = true;\n this.dentStack = [0];\n Object.assign(this, _snapshot);\n }\n snapshot(keys?: (keyof Tokenizer)[]): Partial<Tokenizer> {\n const snap = {\n i: this.i,\n waitingTokens: this.waitingTokens.clone()\n };\n if (keys) {\n for (const k of keys) {\n snap[k] = this[k];\n if (k === 'dentStack') {\n snap[k] = this[k].slice();\n }\n }\n }\n return snap;\n }\n\n skip() {\n const logicDentLen = this.dentStack[this.dentStack.length - 1];\n let needIndent = false;\n /** \\n 是为了弥补 if 节点 consume condition 后,已将 token 设置成回车 */\n let skipFragment = ``;\n this.token = undefined;\n while (1) {\n const char = this.code[this.i];\n\n if (char === '\\n') {\n needIndent = true;\n skipFragment += char;\n this.i++;\n continue;\n }\n\n if (!needIndent) {\n skipFragment += char;\n this.i++;\n continue;\n }\n\n needIndent = false;\n // 此时已经指到一个非 tab 的字符\n const { value, isEmptyLine } = this.getDentValue();\n const currLen = value.length;\n if (isEmptyLine) continue;\n if (currLen > logicDentLen) {\n skipFragment += value;\n }\n // 找到与条件节点同级或更短的缩进了,结束。\n else {\n // skipFragment += `\\n${Tokenizer.EofId}`;\n // 一直找到最小\n for (let i = this.dentStack.length - 1; i >= 0; i--) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n\n // 大于\n if (currLen > expLen) {\n throw SyntaxError(`缩进错误,缩进长度不匹配`);\n }\n\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n break;\n }\n\n this.dentStack.pop();\n\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n } else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen)\n });\n }\n }\n break;\n }\n }\n if (!this.token) {\n this.nextToken();\n }\n return skipFragment;\n }\n\n setCode(code: string) {\n // 保证开头结尾能正确计算\n this.code = '\\n' + code.trimEnd() + `\\n${Tokenizer.EofId}`;\n }\n\n tokenize() {\n do {\n this.nextToken();\n console.log('token:', TokenType[this.token?.type], JSON.stringify(this.token?.value || ''));\n } while (!this.isEof());\n }\n\n isEof() {\n // 刚开始时 token 不存在\n if (!this.token) return false;\n return this.token.type & TokenType.Identifier && this.token.value === Tokenizer.EofId;\n // return this.code[this.i] === undefined;\n }\n\n private setToken(type: TokenType, value: BaseType) {\n this.token = {\n type,\n typeName: TokenType[type],\n value\n };\n this.isFirstToken = false;\n }\n\n public nextToken(): Token {\n try {\n // 已遍历到文件结尾\n if (this.isEof()) {\n return this.token;\n }\n this.token = undefined as any;\n if (this.waitingTokens.len) {\n const item = this.waitingTokens.shift()!;\n this.setToken(item.type, item.value);\n return this.token;\n }\n outer: while (1) {\n if (this.needIndent) {\n this.dent();\n // 遍历到当前标识符非 空白为止\n } else {\n const char = this.code[this.i];\n switch (char) {\n case '\\t':\n case ' ':\n // skip, 缩进通过 \\n 匹配来激活 needIndent\n break;\n // 找后续所有 newLine\n case '\\n':\n this.newLine();\n // 回车后需要判断缩进\n this.needIndent = true;\n break;\n case '=':\n this.assignment();\n break;\n case '|':\n this.pipe();\n break;\n case \"'\":\n case '\"':\n this.str(char);\n break;\n case '{':\n const braceToken = this.brace();\n this.setToken(TokenType.InsertionExp, braceToken);\n break;\n case '$':\n const handled = this.dynamic(char);\n if (handled) break;\n case ';':\n this.setToken(TokenType.Semicolon, ';');\n break;\n default:\n if (isNum(char)) {\n this.number(char);\n break;\n }\n if (typeof char === 'string' && matchIdStart2(char, 0)) {\n this.identifier(char);\n }\n break;\n }\n // 指向下一个字符\n this.i++;\n }\n\n // 找到 token 即可停止\n if (this.token) {\n break;\n }\n }\n return this.token;\n } catch (error) {\n console.error(error);\n return this.token;\n } finally {\n this.handledTokens.push(this.token);\n }\n }\n\n condExp() {\n let value = '';\n this.token = null;\n while (1) {\n const char = this.code[this.i];\n if (char === '\\n') {\n break;\n }\n value += char;\n this.i++;\n }\n value = value.trim();\n this.setToken(TokenType.Identifier, value || true);\n return this.token;\n }\n\n /**\n * 解析到 for 时使用这个方法获取 for 后方的子表达式\n * 表达式通过 “;” 分割\n * // 最多可有三个表达式\n * for arr ; item index; item.key\n * @returns {boolean} 是否含有 key\n */\n public jsExp() {\n this.token = null;\n let value = '';\n while (1) {\n const char = this.code[this.i];\n if (char === ';' || char === '\\n') {\n this.setToken(TokenType.Identifier, value.trim());\n return this.token;\n } else {\n value += char;\n }\n this.i++;\n }\n }\n\n public peekChar() {\n let i = this.i;\n while (this.code[i] === ' ' || this.code[i] === '\\t') {\n i++;\n }\n return this.code[i];\n }\n\n private assignment() {\n this.setToken(TokenType.Assign, '=');\n }\n private pipe() {\n this.setToken(TokenType.Pipe, '|');\n }\n private dynamic(char: string) {\n let nextC = this.code[this.i + 1];\n // 不是动态插值\n if (nextC !== '{') {\n return false;\n }\n this.i++;\n let value = '${';\n let innerBrace = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n value += nextC;\n // 下一个属于本标识符再前进\n this.i++;\n if (nextC === '{') {\n innerBrace++;\n }\n\n if (nextC === '}') {\n // 内部无左括号,说明完成匹配 TODO: 考虑js注释中的括号可能导致匹配错误\n if (!innerBrace) {\n break;\n }\n innerBrace--;\n }\n }\n this.setToken(TokenType.Identifier, value);\n return true;\n }\n\n private brace() {\n let inComment: string,\n inString: string,\n count = 0,\n value = '',\n backslashCount = 0; // 用于记录连续的反斜杠数量\n while (1) {\n const char = this.code[this.i];\n const nextChar = this.code[this.i + 1];\n\n // 1. 处理注释状态退出\n if (inComment === 'single' && char === '\\n') {\n inComment = null;\n } else if (inComment === 'multi' && char === '*' && nextChar === '/') {\n inComment = null;\n value += this.code[this.i];\n this.i++;\n }\n // 2. 如果不在注释中,处理字符串状态\n else if (inString) {\n // 退出字符串\n if (char === inString && backslashCount % 2 === 0) {\n inString = null;\n }\n backslashCount = char === '\\\\' ? backslashCount + 1 : 0;\n } else {\n // 3. 进入注释或字符串状态\n if (char === '/' && nextChar === '/') {\n inComment = 'single';\n value += this.code[this.i]; // 跳过 / 号\n this.i++;\n } else if (char === '/' && nextChar === '*') {\n inComment = 'multi';\n value += this.code[this.i]; // 跳过 / 号\n this.i++;\n } else if (char === \"'\" || char === '\"' || char === '`') {\n inString = char;\n }\n // 4. 只有在非字符串、非注释状态下才计数\n else if (char === '{') {\n count++;\n } else if (char === '}') {\n count--;\n }\n }\n\n if (count === 0 && inString == null && inComment == null) {\n return value.slice(1);\n }\n value += this.code[this.i];\n this.i++;\n }\n }\n\n private newLine() {\n let value = '\\n';\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (nextC !== '\\n') {\n break;\n }\n value += nextC;\n // 下一个属于本标识符再前进\n this.i++;\n }\n // Program 希望第一个 token 一定是 node 节点\n if (this.isFirstToken) {\n return;\n }\n this.setToken(TokenType.NewLine, value);\n }\n private getDentValue() {\n let value = '';\n let nextC;\n let isEmptyLine = false;\n // 构建缩进字符串\n while (1) {\n const nextChar = this.code[this.i];\n\n switch (nextChar) {\n case '\\t':\n nextC = this.Tab;\n break;\n case ' ':\n nextC = ' ';\n break;\n case '\\n':\n nextC = '\\n';\n break;\n default:\n nextC = '';\n break;\n }\n\n // \\n 空白 \\n 的情况,这行不算\n if (nextC === '\\n') {\n isEmptyLine = true;\n break;\n }\n if (!nextC) {\n break;\n }\n value += nextC;\n this.i++;\n }\n return {\n value,\n isEmptyLine\n };\n }\n private dent() {\n const { value, isEmptyLine } = this.getDentValue();\n if (isEmptyLine) {\n // 这种情况下需要 next ,即后续从 \\n 重新开始匹配\n this.needIndent = true;\n return;\n }\n // 比较长度,比上个 indent 长,缩进,比上个 indent 短,dedent\n this.needIndent = false;\n // 期望 firstToken 是 node,所以这里只要修改第一个节点的基础偏移值即可\n if (this.isFirstToken) {\n this.dentStack[0] = value.length;\n return;\n }\n let currLen = value.length;\n const indentHasLen = currLen > 0;\n const prevLen = this.dentStack[this.dentStack.length - 1];\n if (currLen > prevLen) {\n this.dentStack.push(currLen);\n this.setToken(TokenType.Indent, currLen);\n return indentHasLen;\n }\n if (currLen < prevLen) {\n // 一直找到最小\n for (let i = this.dentStack.length; i--; ) {\n const expLen = this.dentStack[i];\n // 等于\n if (currLen === expLen) break;\n // 夹在两者说明缩进大小有问题\n if (currLen > expLen) {\n throw SyntaxError('缩进大小不统一');\n }\n // 小于 expLen 检查是否是基础缩进\n if (this.shorterThanBaseDentEof()) {\n return;\n }\n this.dentStack.pop();\n if (!this.token) {\n this.setToken(TokenType.Dedent, String(expLen));\n }\n // 多余的 dent 缓存在 waitingTokens\n else {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: String(expLen)\n });\n }\n }\n return indentHasLen;\n }\n // 同级则无视\n return indentHasLen;\n }\n\n private shorterThanBaseDentEof() {\n const yes = this.dentStack.length === 1;\n if (yes) {\n if (!this.token) {\n // 子 tokenizer 使用 Dedent 推出 component 节点后,将 tokenizer 切换为 上一个 TokenSwitcher 的 tkr\n if (this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n } else {\n this.setToken(TokenType.Identifier, Tokenizer.EofId);\n }\n } else {\n if (this.useDedentAsEof) {\n this.waitingTokens.push({\n type: TokenType.Dedent,\n typeName: TokenType[TokenType.Dedent],\n value: ''\n });\n } else {\n this.waitingTokens.push({\n type: TokenType.Identifier,\n typeName: TokenType[TokenType.Identifier],\n value: Tokenizer.EofId\n });\n }\n }\n }\n return yes;\n }\n\n private identifier(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (typeof nextC !== 'string' || !matchIdStart2(nextC, 0)) {\n break;\n }\n value += nextC;\n this.i++;\n }\n if (value === Tokenizer.EofId && this.useDedentAsEof) {\n this.setToken(TokenType.Dedent, '');\n return;\n }\n\n let realValue =\n value === 'null'\n ? null\n : value === 'undefined'\n ? undefined\n : value === 'false'\n ? false\n : value === 'true'\n ? true\n : value;\n this.setToken(TokenType.Identifier, realValue);\n }\n private str(char: string) {\n let value = '';\n let nextC;\n let continuousBackslashCount = 0;\n while (1) {\n nextC = this.code[this.i + 1];\n const memoCount = continuousBackslashCount;\n if (nextC === '\\\\') {\n continuousBackslashCount++;\n } else {\n continuousBackslashCount = 0;\n }\n this.i++;\n /**\n * 引号前 \\ 为双数时,全都是字符 \\\n * */\n if (nextC === char && memoCount % 2 === 0) {\n break;\n }\n value += nextC;\n }\n this.setToken(TokenType.Identifier, value);\n }\n private number(char: string) {\n let value = char;\n let nextC;\n while (1) {\n nextC = this.code[this.i + 1];\n if (!isNum(nextC)) {\n break;\n }\n value += nextC;\n this.i++;\n }\n this.setToken(TokenType.Identifier, Number(value));\n }\n private eof() {\n this.setToken(TokenType.Eof, 'End Of File');\n }\n /** 模板字符串动态节点的占位符 */\n HookId = '_h_o_o_k_';\n /** 模板字符串动态节点索引 */\n hookI = 0;\n _hook = (props: Partial<HookProps>): [HookType | undefined, any, hookI?: any] => {\n const value = this.token.value;\n const isDynamicHook = this.token.type & TokenType.InsertionExp;\n const isStaticHook = typeof value === 'string' && value.indexOf(this.HookId) === 0;\n const hookType: HookType = isDynamicHook ? 'dynamic' : isStaticHook ? 'static' : undefined;\n // 静态插值 `${xxx}`\n if (this.hook && isStaticHook) {\n const hookI = Number(value.slice(this.HookId.length));\n const res = this.hook({\n ...props,\n HookId: this.HookId,\n i: hookI\n });\n // TODO: 去除 this.hookI, hookI 由本函数返回\n return [hookType, res, hookI];\n }\n // 动态插值 `{xxx}`\n else if (isDynamicHook) {\n return [hookType, value];\n }\n // 普通值\n return [hookType, value];\n };\n\n init(fragments: string | string[]) {\n if (typeof fragments === 'string') {\n this.setCode(fragments);\n } else {\n let code = '';\n for (let i = 0; i < fragments.length - 1; i++) {\n const fragment = fragments[i];\n code += fragment + `${this.HookId}${i}`;\n }\n this.setCode(code + fragments[fragments.length - 1]);\n }\n }\n}\n","import { Interpreter } from './terp';\nimport { Store } from 'aoye';\nimport { Tokenizer } from './tokenizer';\nimport { BobeUI, ComponentNode, CustomRenderConf, FakeType } from './type';\nexport * from 'aoye';\nexport function bobe(fragments: TemplateStringsArray, ...values: any[]) {\n const ui: BobeUI = function ui(isSub: boolean) {\n const tokenizer = new Tokenizer(({ i }) => {\n return values[i];\n }, isSub);\n tokenizer.init(Array.from(fragments));\n return tokenizer;\n };\n ui.boundStore = Store.Current;\n return ui;\n}\n\n// render -> options\nexport function customRender(option: CustomRenderConf) {\n // 保存 options\n return function render<T>(Ctor: typeof Store, root: any) {\n const store = Ctor.new();\n const tokenizer: Tokenizer = store['ui'](false);\n const terp = new Interpreter(tokenizer);\n terp.config(option);\n\n const componentNode: ComponentNode = {\n __logicType: FakeType.Component,\n realParent: root,\n data: store,\n tokenizer\n };\n\n terp.program(root, componentNode);\n // ui => bobe`` 返回的函数\n return [componentNode, store];\n };\n}\n"],"names":["TokenType","FakeType","CondBit","If","Fail","Else","LogicalBit","For","ForItem","Component","Fragment","TokenizerSwitcherBit","NodeSort","TerpEvt","MultiTypeStack","typeTops","length","stack","push","value","bits","newNode","types","prevByType","bit","undefined","pop","poppedNode","peekByType","cat","peekType","at","peek","macInc","arr","len","candyLast","i","it","toPrev","Int32Array","target","start","end","mid","j","prev","KEY_INDEX","Interpreter","constructor","tokenizer","isLogicNode","node","__logicType","rootComponent","program","root","componentNode","before","ctxProvider","nextToken","Real","CtxProvider","TokenizerSwitcher","Logic","ctx","realParent","prevSibling","current","rootPulling","getPulling","isEof","handleInsert","token","type","Indent","setPulling","effect","realBefore","declaration","Dedent","_stack$pop","_stack$pop2","_slicedToArray","_stack$pop2$","parent","sort","prevSameType","parentLogic","switcher","_ref","forNode","snapshot","resume","children","insertAfterAnchor","name","_this$ctx","afterAnchor","createAnchor","child","parentComponent","insertAfter","realAfter","childCmp","getPrevRealSibling","point","lastChild","anchor","_this$tokenizer$_hook","_hook","_this$tokenizer$_hook2","hookType","_node","condDeclaration","forDeclaration","data","getData","componentOrFragmentDeclaration","SyntaxError","valueIsMapKey","Reflect","has","Keys","Raw","val","str","getFn","createNode","onePropParsed","headerLine","extensionLines","oneRealPropParsed","arrExp","itemToken","isDestruct","InsertionExp","itemExp","vars","match","jsVarRegexp","varStr","join","Function","indexName","keyExp","char","peekChar","jsExp","owner","arrSignal","getKey","window","cells","Meta","hasArrExpKey","get","Computed","_forNode$snapshot","dentStack","isFirstToken","snapshotForUpdate","_objectWithoutProperties","_excluded","isFirstRender","Effect","Iterator","prevCtx","toRaw","item","createForItem","firstInsert","skip","oldLen","newLen","minLen","Math","min","newChildren","removeForItem","lastAfter","insertForItem","reuseForItem","s","e1","e2","old","key","itemData","getItemData","firstBefore","s1","s2","mixLen","key2new","Map","set","maxIncNewI","hasMove","new2oldI","Array","fill","newI","delete","forEach","incI","incLen","p1","p2","oldI","staticIdx","next","nextSib","isDestroy","dispose","parentData","useDedentAsEof","runWithPulling","removeLogicNode","remove","forItemId","forItemNode","scope","Scope","id","deepSignal","rawData","computedData","Object","setPrototypeOf","_this$ctx$stack$peekB","isFn","hookI","setProp","res","bind","ComponentOrRender","render","isCC","prototype","Store","new","boundStore","_","shareSignal","meta","computed","expression","keyWord","expToken","condExp","isElse","isIf","preIsCond","noCond","ifNode","condition","preCond","signal","fn","ef","firstChild","Pipe","attributeList","NewLine","eq","_this$tokenizer$_hook3","_this$tokenizer$_hook4","rawVal","config","opt","assign","props","nextSibling","defaultInsert","defaultRemove","Tokenizer","TabSize","Tab","from","EofId","Date","now","DedentId","needIndent","handledTokens","waitingTokens","Queue","hook","setToken","consume","_snapshot","keys","snap","clone","k","slice","logicDentLen","skipFragment","code","_this$getDentValue","getDentValue","isEmptyLine","currLen","expLen","shorterThanBaseDentEof","String","typeName","setCode","trimEnd","tokenize","console","log","JSON","stringify","Identifier","shift","outer","dent","newLine","assignment","pipe","braceToken","brace","handled","dynamic","Semicolon","isNum","number","matchIdStart2","identifier","error","trim","Assign","nextC","innerBrace","inComment","inString","count","backslashCount","nextChar","_this$getDentValue2","indentHasLen","prevLen","yes","realValue","continuousBackslashCount","memoCount","Number","eof","Eof","HookId","isDynamicHook","isStaticHook","indexOf","init","fragments","fragment","bobe","values","ui","isSub","Current","customRender","option","Ctor","store","terp"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAKA,IAAYA,SAAS,aAATA,SAAS,EAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,SAAA,CAAA,GAAA,CAAA,CAAA,GAAA,SAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,CAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,YAAA,CAAA,GAAA,CAAA,CAAA,GAAA,YAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,QAAA,CAAA,GAAA,EAAA,CAAA,GAAA,QAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,MAAA,CAAA,GAAA,EAAA,CAAA,GAAA,MAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,KAAA,CAAA,GAAA,EAAA,CAAA,GAAA,KAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,cAAA,CAAA,GAAA,GAAA,CAAA,GAAA,cAAA;AAATA,EAAAA,SAAS,CAATA,SAAS,CAAA,WAAA,CAAA,GAAA,GAAA,CAAA,GAAA,WAAA;AAAA,EAAA,OAATA,SAAS;AAAA,CAAA,CAAA,EAAA,CAAA;AAYrB,IAAYC,QAAQ,aAARA,QAAQ,EAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,IAAA,CAAA,GAAA,CAAA,CAAA,GAAA,IAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,KAAA,CAAA,GAAA,CAAA,CAAA,GAAA,KAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,WAAA,CAAA,GAAA,EAAA,CAAA,GAAA,WAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,UAAA,CAAA,GAAA,EAAA,CAAA,GAAA,UAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,SAAA,CAAA,GAAA,EAAA,CAAA,GAAA,SAAA;AAAA,EAAA,OAARA,QAAQ;AAAA,CAAA,CAAA,EAAA,CAAA;AAUb,MAAMC,OAAO,GAAGD,QAAQ,CAACE,EAAE,GAAGF,QAAQ,CAACG,IAAI,GAAGH,QAAQ,CAACI,IAAI;AAC3D,MAAMC,UAAU,GAAGL,QAAQ,CAACE,EAAE,GAAGF,QAAQ,CAACG,IAAI,GAAGH,QAAQ,CAACI,IAAI,GAAGJ,QAAQ,CAACM,GAAG,GAAGN,QAAQ,CAACO,OAAO;AAErGP,QAAQ,CAACE,EAAE,GACXF,QAAQ,CAACG,IAAI,GACbH,QAAQ,CAACI,IAAI,GACbJ,QAAQ,CAACM,GAAG,GACZN,QAAQ,CAACO,OAAO,GAChBP,QAAQ,CAACQ,SAAS,GAClBR,QAAQ,CAACS;AAEJ,MAAMC,oBAAoB,GAAGV,QAAQ,CAACQ,SAAS,GAAGR,QAAQ,CAACS,QAAQ;AAK1E,IAAYE,QAAQ,aAARA,QAAQ,EAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,OAAA,CAAA,GAAA,CAAA,CAAA,GAAA,OAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,MAAA,CAAA,GAAA,CAAA,CAAA,GAAA,MAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,WAAA,CAAA,GAAA,CAAA,CAAA,GAAA,WAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,aAAA,CAAA,GAAA,CAAA,CAAA,GAAA,aAAA;AAARA,EAAAA,QAAQ,CAARA,QAAQ,CAAA,mBAAA,CAAA,GAAA,EAAA,CAAA,GAAA,mBAAA;AAAA,EAAA,OAARA,QAAQ;AAAA,CAAA,CAAA,EAAA,CAAA;WAaRC,OAAO,EAAA;EAAPA,OAAO,CAAA,YAAA,CAAA,GAAA,cAAA;EAAPA,OAAO,CAAA,sBAAA,CAAA,GAAA,wBAAA;AAAA,EAAA,OAAPA,OAAO;AAAA,EAAA,CAAA,EAAA;;AC1CZ,MAAMC,cAAc,CAAI;EAKrBC,QAAQ,GAA0C,EAAE;AAE5DC,EAAAA,MAAM,GAAG,CAAC;AACVC,EAAAA,KAAK,GAAmB,EAAE;AAM1BC,EAAAA,IAAIA,CAACC,KAAQ,EAAEC,IAAiB,EAAQ;AACtC,IAAA,MAAMC,OAAqB,GAAG;MAC5BF,KAAK;AACLG,MAAAA,KAAK,EAAEF,IAAI;AACXG,MAAAA,UAAU,EAAE;KACb;AAED,IAAA,IAAIC,GAAW;AACf,IAAA,OAAO,CAAC,EAAE;AAERA,MAAAA,GAAG,GAAGJ,IAAI,GAAI,CAACA,IAAI,GAAG,CAAE;MACxB,IAAI,CAACI,GAAG,EAAE;MAEVJ,IAAI,IAAI,CAACI,GAAG;AAEZH,MAAAA,OAAO,CAACE,UAAU,CAACC,GAAG,CAAC,GAAG,IAAI,CAACT,QAAQ,CAACS,GAAG,CAAC,IAAIC,SAAS;AACzD,MAAA,IAAI,CAACV,QAAQ,CAACS,GAAG,CAAC,GAAGH,OAAO;AAC9B,IAAA;IACA,IAAI,CAACJ,KAAK,CAAC,IAAI,CAACD,MAAM,EAAE,CAAC,GAAGK,OAAO;AACrC,EAAA;AAKAK,EAAAA,GAAGA,GAAG;IACJ,MAAMC,UAAU,GAAG,IAAI,CAACV,KAAK,CAAC,IAAI,CAACD,MAAM,GAAG,CAAC,CAAC;IAC9C,IAAI,CAACC,KAAK,CAAC,EAAE,IAAI,CAACD,MAAM,CAAC,GAAG,IAAI;AAChC,IAAA,IAAI,CAACW,UAAU,EAAE,OAAOF,SAAS;AAEjC,IAAA,IAAaL,IAAI,GAAKO,UAAU,CAA1BL,KAAK;AAEX,IAAA,IAAIE,GAAW;AACf,IAAA,OAAO,CAAC,EAAE;AAERA,MAAAA,GAAG,GAAGJ,IAAI,GAAI,CAACA,IAAI,GAAG,CAAE;MACxB,IAAI,CAACI,GAAG,EAAE;MAEVJ,IAAI,IAAI,CAACI,GAAG;MAEZ,IAAI,CAACT,QAAQ,CAACS,GAAG,CAAC,GAAGG,UAAU,CAACJ,UAAU,CAACC,GAAG,CAAC;AACjD,IAAA;IAGA,OAAO,CAACG,UAAU,CAACR,KAAK,EAAEQ,UAAU,CAACL,KAAK,CAAC;AAC7C,EAAA;EAKAM,UAAUA,CAACC,GAAW,EAAiB;AACrC,IAAA,OAAO,IAAI,CAACd,QAAQ,CAACc,GAAG,CAAC,EAAEV,KAAK;AAClC,EAAA;AAEAW,EAAAA,QAAQA,GAAuB;IAC7B,OAAO,IAAI,CAACb,KAAK,CAACc,EAAE,CAAC,EAAE,CAAC,CAACT,KAAK;AAChC,EAAA;AAKAU,EAAAA,IAAIA,GAAkB;IACpB,OAAO,IAAI,CAACf,KAAK,CAACc,EAAE,CAAC,EAAE,CAAC,CAACZ,KAAK;AAChC,EAAA;AAmCF;;AC7HO,SAASc,MAAMA,CAACC,GAAa,EAAE;AACpC,EAAA,MAAMC,GAAG,GAAGD,GAAG,CAAClB,MAAM;EAEtB,IAAIoB,SAAS,GAAG,EAAE;AAChBC,IAAAA,CAAC,GAAG,CAAC;EACP,OAAOA,CAAC,GAAGF,GAAG,EAAE;AACd,IAAA,MAAMG,EAAE,GAAGJ,GAAG,CAACG,CAAC,CAAC;AACjB,IAAA,IAAIC,EAAE,KAAK,EAAE,EAAE;MACbF,SAAS,GAAG,CAACC,CAAC,CAAC;AACf,MAAA;AACF,IAAA;AACAA,IAAAA,CAAC,EAAE;AACL,EAAA;AAEA,EAAA,IAAIA,CAAC,GAAG,CAAC,IAAIF,GAAG,EAAE,OAAOC,SAAS;AAGlC,EAAA,MAAMG,MAAM,GAAG,IAAIC,UAAU,CAACL,GAAG,CAAC;EAElC,OAAOE,CAAC,GAAGF,GAAG,EAAE;AACd,IAAA,MAAMM,MAAM,GAAGP,GAAG,CAACG,CAAC,CAAC;AAErB,IAAA,IAAII,MAAM,KAAK,EAAE,EAAE;IAGnB,IAAIC,KAAK,GAAG,EAAE;MACZC,GAAG,GAAGP,SAAS,CAACpB,MAAM;AACxB,IAAA,OAAO0B,KAAK,GAAG,CAAC,GAAGC,GAAG,EAAE;AACtB,MAAA,MAAMC,GAAG,GAAIF,KAAK,GAAGC,GAAG,IAAK,CAAC;MAC9B,IAAIT,GAAG,CAACE,SAAS,CAACQ,GAAG,CAAC,CAAC,GAAGH,MAAM,EAAE;AAChCC,QAAAA,KAAK,GAAGE,GAAG;AACb,MAAA,CAAC,MAAM;AACLD,QAAAA,GAAG,GAAGC,GAAG;AACX,MAAA;AACF,IAAA;AAEAR,IAAAA,SAAS,CAACO,GAAG,CAAC,GAAGN,CAAC;AAElBE,IAAAA,MAAM,CAACF,CAAC,CAAC,GAAGD,SAAS,CAACM,KAAK,CAAC;AAC5BL,IAAAA,CAAC,EAAE;AACL,EAAA;AAEA,EAAA,IAAIrB,MAAM,GAAGoB,SAAS,CAACpB,MAAM;AAC7B,EAAA,KAAK,IAAI6B,CAAC,GAAG7B,MAAM,GAAG,CAAC,EAAE6B,CAAC,GAAG,CAAC,EAAEA,CAAC,EAAE,EAAE;IACnC,MAAMC,IAAI,GAAGP,MAAM,CAACH,SAAS,CAACS,CAAC,CAAC,CAAC;AACjCT,IAAAA,SAAS,CAACS,CAAC,GAAG,CAAC,CAAC,GAAGC,IAAI;AACzB,EAAA;AACA,EAAA,OAAOV,SAAS;AAClB;;AChDO,MAAMW,SAAS,GAAG,kBAAkB;;;ACyCpC,MAAMC,WAAW,CAAC;EAEvBC,WAAWA,CAASC,SAAoB,EAAE;IAAA,IAAA,CAAtBA,SAAoB,GAApBA,SAAoB;AAAG,EAAA;EAC3CC,WAAWA,CAACC,IAAS,EAAE;AACrB,IAAA,OAAOA,IAAI,IAAIA,IAAI,CAACC,WAAW,GAAG/C,UAAU;AAC9C,EAAA;AAGAgD,EAAAA,aAAa,GAAyB,IAAI;EAE1CC,OAAOA,CAACC,IAAS,EAAEC,aAA6B,EAAEC,MAAY,EAAEC,WAAiB,EAAE;IAEjF,IAAI,CAACL,aAAa,GAAGG,aAAa;AAElC,IAAA,IAAI,CAACP,SAAS,CAACU,SAAS,EAAE;AAC1B,IAAA,MAAM3C,KAAK,GAAG,IAAIH,cAAc,EAAa;IAC7CG,KAAK,CAACC,IAAI,CAAC;AAAEkC,MAAAA,IAAI,EAAEI,IAAI;AAAEV,MAAAA,IAAI,EAAE;AAAK,KAAC,EAAElC,QAAQ,CAACiD,IAAI,CAAC;IACrD5C,KAAK,CAACC,IAAI,CACR;AAAEkC,MAAAA,IAAI,EAAEK,aAAa;AAAEX,MAAAA,IAAI,EAAE;AAAK,KAAC,EACnClC,QAAQ,CAACH,SAAS,GAAGG,QAAQ,CAACkD,WAAW,GAAGlD,QAAQ,CAACmD,iBACvD,CAAC;AACD,IAAA,IAAIJ,WAAW,EAAE;MACf1C,KAAK,CAACC,IAAI,CACR;AAAEkC,QAAAA,IAAI,EAAEO,WAAW;AAAEb,QAAAA,IAAI,EAAE;AAAK,OAAC,EACjC,CAACa,WAAW,CAACN,WAAW,GAAG/C,UAAU,GAAGM,QAAQ,CAACoD,KAAK,GAAG,CAAC,IAAIpD,QAAQ,CAACkD,WACzE,CAAC;AACH,IAAA;AAEA,IAAA,MAAMG,GAAG,GAAI,IAAI,CAACA,GAAG,GAAG;AACtBC,MAAAA,UAAU,EAAEV,IAAI;AAChBW,MAAAA,WAAW,EAAET,MAAM;AACnBU,MAAAA,OAAO,EAAE,IAAI;MACbnD,KAAK;AACLyC,MAAAA;KACA;AAEF,IAAA,MAAMW,WAAW,GAAGC,UAAU,EAAE;AAChC,IAAA,OAAO,CAAC,EAAE;AAER,MAAA,IAAI,IAAI,CAACpB,SAAS,CAACqB,KAAK,EAAE,EAAE;QAC1B,IAAI,CAACN,GAAG,CAACE,WAAW,EAAEF,GAAG,CAACE,WAAW,GAAGT,MAAM;AAC9C,QAAA,IAAI,CAACc,YAAY,CAAChB,IAAI,EAAES,GAAG,CAACG,OAAO,EAAEH,GAAG,CAACE,WAAW,EAAEV,aAAa,CAAC;AACpE,QAAA;AACF,MAAA;AAEA,MAAA,MAAMgB,KAAK,GAAG,IAAI,CAACvB,SAAS,CAACuB,KAAK;AAElC,MAAA,IAAIA,KAAK,CAACC,IAAI,GAAG1E,SAAS,CAAC2E,MAAM,EAAE;AACjC,QAAA,IAAI,CAACzB,SAAS,CAACU,SAAS,EAAE;QAC1B,MAAMT,WAAW,GAAG,IAAI,CAACA,WAAW,CAACc,GAAG,CAACG,OAAO,CAAC;QACjDnD,KAAK,CAACC,IAAI,CACR;UACEkC,IAAI,EAAEa,GAAG,CAACG,OAAO;UACjBtB,IAAI,EAAEmB,GAAG,CAACE;AACZ,SAAC,EACD,CAACF,GAAG,CAACG,OAAO,CAACf,WAAW,GACpBzC,QAAQ,CAACiD,IAAI,GACb,CAACI,GAAG,CAACG,OAAO,CAACf,WAAW,GAAG/C,UAAU,GAAGM,QAAQ,CAACoD,KAAK,GAAG,CAAC,KACvDC,GAAG,CAACG,OAAO,CAACf,WAAW,GAAG1C,oBAAoB,GAAGC,QAAQ,CAACmD,iBAAiB,GAAG,CAAC,CAAC,IAChFE,GAAG,CAACG,OAAO,CAACf,WAAW,KAAKpD,QAAQ,CAACQ,SAAS,GAAGG,QAAQ,CAACH,SAAS,GAAG,CAAC,CAAC,GACzEG,QAAQ,CAACkD,WACjB,CAAC;AACD,QAAA,IAAIG,GAAG,CAACG,OAAO,CAACf,WAAW,EAAE;AAE3B,UAAA,IAAIF,WAAW,EAAE;AAEfyB,YAAAA,UAAU,CAACX,GAAG,CAACG,OAAO,CAACS,MAAM,CAAC;YAC9B,IAAIZ,GAAG,CAACG,OAAO,CAACf,WAAW,GAAGpD,QAAQ,CAACO,OAAO,EAAE;AAC9CyD,cAAAA,GAAG,CAACE,WAAW,GAAGF,GAAG,CAACG,OAAO,CAACU,UAAU;AAC1C,YAAA;AACF,UAAA;AACF,QAAA,CAAC,MAEI;UACH,IAAIb,GAAG,CAACG,OAAO,EAAE;AACfH,YAAAA,GAAG,CAACC,UAAU,GAAGD,GAAG,CAACG,OAAO;AAC9B,UAAA;UACAH,GAAG,CAACE,WAAW,GAAG,IAAI;AACxB,QAAA;QACAF,GAAG,CAACG,OAAO,GAAG,IAAI,CAACW,WAAW,CAACd,GAAG,CAAC;AACnC,QAAA;AACF,MAAA;MAEA,IAAIA,GAAG,CAACG,OAAO,EAAE;QAEf,IAAInD,KAAK,CAACD,MAAM,KAAK,CAAC,IAAI,CAACiD,GAAG,CAACE,WAAW,EAAE;UAC1CF,GAAG,CAACE,WAAW,GAAGT,MAAM;AAC1B,QAAA;AACA,QAAA,IAAI,CAACc,YAAY,CAACP,GAAG,CAACC,UAAU,EAAED,GAAG,CAACG,OAAO,EAAEH,GAAG,CAACE,WAAW,CAAC;AACjE,MAAA;MAEA,IAAI,IAAI,CAACjB,SAAS,CAACuB,KAAK,CAACC,IAAI,GAAG1E,SAAS,CAACgF,MAAM,EAAE;AAChD,QAAA,IAAI,CAAC9B,SAAS,CAACU,SAAS,EAAE;AAC1B,QAAA,MAAAqB,UAAA,GAAuChE,KAAK,CAACS,GAAG,EAAE;UAAAwD,WAAA,GAAAC,cAAA,CAAAF,UAAA,EAAA,CAAA,CAAA;AAAAG,UAAAA,YAAA,GAAAF,WAAA,CAAA,CAAA,CAAA;UAAnCG,MAAM,GAAAD,YAAA,CAAZhC,IAAI;UAAUN,IAAI,GAAAsC,YAAA,CAAJtC,IAAI;AAAIwC,UAAAA,IAAI,GAAAJ,WAAA,CAAA,CAAA,CAAA;AAEnC,QAAA,IAAI,CAACG,MAAM,CAAChC,WAAW,EAAE;UACvB,MAAMkC,YAAY,GAAGtE,KAAK,CAACW,UAAU,CAAChB,QAAQ,CAACiD,IAAI,CAAC;AACpDI,UAAAA,GAAG,CAACC,UAAU,GAAGqB,YAAY,EAAEnC,IAAI,IAAII,IAAI;AAC7C,QAAA,CAAC,MAEI;AAEH,UAAA,IAAI8B,IAAI,GAAG1E,QAAQ,CAACoD,KAAK,EAAE;YAEzB,MAAMwB,WAAW,GAAGvE,KAAK,CAACW,UAAU,CAAChB,QAAQ,CAACoD,KAAK,CAAC,EAAEZ,IAAI;AAC1D,YAAA,IAAIoC,WAAW,EAAE;AACfZ,cAAAA,UAAU,CAACY,WAAW,CAACX,MAAM,CAAC;AAChC,YAAA,CAAC,MAAM;cACLD,UAAU,CAACP,WAAW,CAAC;AACzB,YAAA;AACF,UAAA;AAEA,UAAA,IAAIiB,IAAI,GAAG1E,QAAQ,CAACmD,iBAAiB,EAAE;YACrC,MAAM0B,QAAQ,GAAGxE,KAAK,CAACW,UAAU,CAAChB,QAAQ,CAACmD,iBAAiB,CAAC,EAAEX,IAAI;AACnE,YAAA,IAAI,CAACF,SAAS,GAAGuC,QAAQ,CAACvC,SAAS;AACrC,UAAA;AAGA,UAAA,IAAImC,MAAM,CAAChC,WAAW,KAAKpD,QAAQ,CAACO,OAAO,EAAE;YAC3C,MAAAkF,IAAA,GAAoBL,MAAM;cAAlBM,OAAO,GAAAD,IAAA,CAAPC,OAAO;AACf,YAAA,MAAQtD,CAAC,GAAoBsD,OAAO,CAA5BtD,CAAC;cAAEH,GAAG,GAAeyD,OAAO,CAAzBzD,GAAG;cAAE0D,QAAQ,GAAKD,OAAO,CAApBC,QAAQ;AACxB,YAAA,IAAIvD,CAAC,GAAG,CAAC,GAAGH,GAAG,CAAClB,MAAM,EAAE;AAEtB,cAAA,IAAI,CAACkC,SAAS,CAAC2C,MAAM,CAACD,QAAQ,CAAC;AAC/B,cAAA,IAAI,CAAC1C,SAAS,CAACU,SAAS,EAAE;AAC1B,cAAA,IAAI,CAACV,SAAS,CAACU,SAAS,EAAE;cAC1BK,GAAG,CAACG,OAAO,GAAGuB,OAAO,CAACG,QAAQ,CAAC,EAAEH,OAAO,CAACtD,CAAC,CAAC;AAC3C4B,cAAAA,GAAG,CAACE,WAAW,GAAGF,GAAG,CAACG,OAAO,CAACU,UAAU;AACxC,cAAA;AACF,YAAA;AAEAb,YAAAA,GAAG,CAACE,WAAW,GAAGwB,OAAO,CAACxB,WAAW;YACrCF,GAAG,CAACG,OAAO,GAAGuB,OAAO;AACrB,YAAA;AACF,UAAA;AACF,QAAA;QACA1B,GAAG,CAACE,WAAW,GAAGrB,IAAI;QACtBmB,GAAG,CAACG,OAAO,GAAGiB,MAAM;AACtB,MAAA,CAAC,MAEI;QACHpB,GAAG,CAACE,WAAW,GAAGF,GAAG,CAACG,OAAO,IAAIH,GAAG,CAACE,WAAW;QAChDF,GAAG,CAACG,OAAO,GAAG,IAAI,CAACW,WAAW,CAACd,GAAG,CAAC;AACrC,MAAA;AACF,IAAA;AACA,IAAA,OAAOR,aAAa;AACtB,EAAA;AAEAsC,EAAAA,iBAAiBA,CAACC,IAAI,GAAG,QAAQ,EAAE;AACjC,IAAA,MAAAC,SAAA,GAAmD,IAAI,CAAChC,GAAG;MAAnDC,UAAU,GAAA+B,SAAA,CAAV/B,UAAU;MAAEC,WAAW,GAAA8B,SAAA,CAAX9B,WAAW;MAAElD,KAAK,GAAAgF,SAAA,CAALhF,KAAK;MAAEyC,MAAM,GAAAuC,SAAA,CAANvC,MAAM;AAE9C,IAAA,MAAMwC,WAAW,GAAG,IAAI,CAACC,YAAY,CAACH,IAAI,CAAC;AAC3C,IAAA,IAAI,CAAC/B,GAAG,CAACE,WAAW,GAAGlD,KAAK,CAACD,MAAM,KAAK,CAAC,IAAI,CAACmD,WAAW,GAAGT,MAAM,GAAGS,WAAW;IAChF,IAAI,CAACK,YAAY,CAACN,UAAU,EAAEgC,WAAW,EAAE/B,WAAW,CAAC;AACvD,IAAA,OAAO+B,WAAW;AACpB,EAAA;EAQA1B,YAAYA,CAACa,MAAW,EAAEe,KAAU,EAAEtD,IAAS,EAAEuD,eAAqB,EAAE;AAMtE,IAAA,IAAI,CAACD,KAAK,CAAC/C,WAAW,EAAE;AAEtB,MAAA,IAAI,CAACP,IAAI,IAAI,CAACA,IAAI,CAACO,WAAW,EAAE;QAC9B,IAAI,CAACiD,WAAW,CAACjB,MAAM,EAAEe,KAAK,EAAEtD,IAAI,CAAC;AACvC,MAAA,CAAC,MAEI;AACH,QAAA,MAAMY,MAAM,GAAGZ,IAAI,CAACyD,SAAS;QAC7B,IAAI,CAACD,WAAW,CAACjB,MAAM,EAAEe,KAAK,EAAE1C,MAAM,CAAC;AACzC,MAAA;AACF,IAAA,CAAC,MAEI;MACH,MAAM8C,QAAmB,GAAGJ,KAAK;MACjCI,QAAQ,CAACtC,UAAU,GAAGmB,MAAM;MAE5B,IAAIvC,IAAI,EAAEO,WAAW,EAAE;AAErBmD,QAAAA,QAAQ,CAAC1B,UAAU,GAAGhC,IAAI,CAAC6C,OAAO,GAAG7C,IAAI,CAAC6C,OAAO,CAACY,SAAS,GAAGzD,IAAI,CAACyD,SAAS;AAC9E,MAAA,CAAC,MAEI;QACHC,QAAQ,CAAC1B,UAAU,GAAGhC,IAAI;AAC5B,MAAA;AACF,IAAA;AACF,EAAA;EAGA2D,kBAAkBA,CAACtC,WAAgB,EAAE;AAEnC,IAAA,IAAI,CAACA,WAAW,IAAI,CAACA,WAAW,CAACd,WAAW,EAAE;AAC5C,MAAA,OAAOc,WAAW;AACpB,IAAA;IACA,IAAIuC,KAAK,GAAGvC,WAAW;IACvB,OAAOuC,KAAK,IAAI,IAAI,EAAE;MACpB,IAAIA,KAAK,CAACC,SAAS,EAAE;AACnB,QAAA,OAAOD,KAAK,CAACC,SAAS,CAACxF,KAAK;AAC9B,MAAA;MACAuF,KAAK,GAAGA,KAAK,CAACE,MAAM;AACtB,IAAA;AACF,EAAA;EAOA7B,WAAWA,CAACd,GAAe,EAAE;IAC3B,MAAA4C,qBAAA,GAA0B,IAAI,CAAC3D,SAAS,CAAC4D,KAAK,CAAC,EAAE,CAAC;MAAAC,sBAAA,GAAA5B,cAAA,CAAA0B,qBAAA,EAAA,CAAA,CAAA;AAA3CG,MAAAA,QAAQ,GAAAD,sBAAA,CAAA,CAAA,CAAA;AAAE5F,MAAAA,KAAK,GAAA4F,sBAAA,CAAA,CAAA,CAAA;AACtB,IAAA,IAAIE,KAAU;IACd,IAAI9F,KAAK,KAAK,IAAI,IAAIA,KAAK,KAAK,MAAM,IAAIA,KAAK,KAAK,MAAM,EAAE;AAC1D,MAAA,OAAO,IAAI,CAAC+F,eAAe,CAACjD,GAAG,CAAC;AAClC,IAAA,CAAC,MAAM,IAAI9C,KAAK,KAAK,KAAK,EAAE;AAC1B,MAAA,OAAO,IAAI,CAACgG,cAAc,EAAE;IAC9B,CAAC,MAAM,IAAIH,QAAQ,EAAE;AACnB,MAAA,MAAMI,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;MAE3B,IAAIL,QAAQ,KAAK,QAAQ,EAAE;AAEzB,QAAA,IAAI,OAAO7F,KAAK,KAAK,UAAU,EAAE;UAC/B8F,KAAK,GAAG,IAAI,CAACK,8BAA8B,CAACnG,KAAK,EAAE8C,GAAG,CAAC;AACzD,QAAA,CAAC,MAEI;AACH,UAAA,MAAM,IAAIsD,WAAW,CAAC,CAAA,gBAAA,EAAmBpG,KAAK,UAAU,CAAC;AAC3D,QAAA;AACF,MAAA,CAAC,MAOI;AACH,QAAA,MAAMqG,aAAa,GAAGC,OAAO,CAACC,GAAG,CAACN,IAAI,CAACO,IAAI,CAACC,GAAG,CAAC,EAAEzG,KAAK,CAAC;QACxD,MAAM0G,GAAG,GAAGT,IAAI,CAACO,IAAI,CAACC,GAAG,CAAC,CAACzG,KAAK,CAAC;AACjC,QAAA,IAAI,OAAO0G,GAAG,KAAK,UAAU,EAAE;UAC7BZ,KAAK,GAAG,IAAI,CAACK,8BAA8B,CAACO,GAAG,EAAE5D,GAAG,CAAC;AACvD,QAAA,CAAC,MAEI;AACH,UAAA,MAAM6D,GAAG,GAAGN,aAAa,GAAGrG,KAAK,GAAG,IAAI,CAAC4G,KAAK,CAACX,IAAI,EAAEjG,KAAK,CAAC;AAC3D8F,UAAAA,KAAK,GAAG,IAAI,CAACe,UAAU,CAAC,MAAM,CAAC;AAC/B,UAAA,IAAI,CAACC,aAAa,CAACb,IAAI,EAAEH,KAAK,EAAE,MAAM,EAAEa,GAAG,EAAEN,aAAa,EAAE,KAAK,CAAC;AACpE,QAAA;AACF,MAAA;AACF,IAAA,CAAC,MAAM;AACLP,MAAAA,KAAK,GAAG,IAAI,CAACe,UAAU,CAAC7G,KAAK,CAAC;AAChC,IAAA;AACA,IAAA,IAAI,CAAC+B,SAAS,CAACU,SAAS,EAAE;AAC1B,IAAA,IAAI,CAACsE,UAAU,CAACjB,KAAK,CAAC;AACtB,IAAA,IAAI,CAACkB,cAAc,CAAClB,KAAK,CAAC;AAE1B,IAAA,IAAIA,KAAK,CAAC5D,WAAW,GAAG1C,oBAAoB,EAAE;AAC5C,MAAA,IAAI,CAACsH,aAAa,GAAG,IAAI,CAACG,iBAAiB;AAC3C,MAAA,IAAI,CAAClF,SAAS,GAAG+D,KAAK,CAAC/D,SAAS;AAClC,IAAA;AACA,IAAA,OAAO+D,KAAK;AACd,EAAA;AAEAE,EAAAA,cAAcA,GAAG;IACf,MAAMkB,MAAM,GAAG,IAAI,CAACnF,SAAS,CAACU,SAAS,EAAE,CAACzC,KAAe;AACzD,IAAA,IAAI,CAAC+B,SAAS,CAACU,SAAS,EAAE;IAC1B,MAAM0E,SAAS,GAAG,IAAI,CAACpF,SAAS,CAACU,SAAS,EAAE;IAC5C,MAAM2E,UAAU,GAAGD,SAAS,CAAC5D,IAAI,KAAK1E,SAAS,CAACwI,YAAY;AAC5D,IAAA,IAAIC,OAAuC,GAAGH,SAAS,CAACnH,KAAe;MACrEuH,IAAc;AAChB,IAAA,IAAIH,UAAU,EAAE;AACdE,MAAAA,OAAO,GAAG,GAAG,GAAGA,OAAO,GAAG,GAAG;AAC7BC,MAAAA,IAAI,GAAGD,OAAO,CAACE,KAAK,CAACC,WAAW,CAAC;AACjC,MAAA,MAAMC,MAAM,GAAGH,IAAI,CAACI,IAAI,CAAC,GAAG,CAAC;MAC7BL,OAAO,GAAG,IAAIM,QAAQ,CAACN,OAAO,EAAE,CAAA,QAAA,EAAWI,MAAM,CAAA,EAAA,CAAI,CAAQ;AAC/D,IAAA;AACA,IAAA,IAAIG,SAAiB;MACnBC,MAAc;AACdC,MAAAA,IAAI,GAAG,IAAI,CAAChG,SAAS,CAACiG,QAAQ,EAAE;IAClC,IAAID,IAAI,KAAK,GAAG,EAAE;AAChB,MAAA,IAAI,CAAChG,SAAS,CAACU,SAAS,EAAE;MAC1B,IAAI,IAAI,CAACV,SAAS,CAACiG,QAAQ,EAAE,KAAK,IAAI,EAAEF,MAAM,GAAG,IAAI,CAAC/F,SAAS,CAACkG,KAAK,EAAE,CAACjI,KAAe;IACzF,CAAC,MAAM,IAAI+H,IAAI,KAAK,IAAI,EAAE,CACzB,MAEI;MACHF,SAAS,GAAG,IAAI,CAAC9F,SAAS,CAACU,SAAS,EAAE,CAACzC,KAAe;MACtD,IAAI,IAAI,CAAC+B,SAAS,CAACiG,QAAQ,EAAE,KAAK,GAAG,EAAE;AACrC,QAAA,IAAI,CAACjG,SAAS,CAACU,SAAS,EAAE;QAC1B,IAAI,IAAI,CAACV,SAAS,CAACiG,QAAQ,EAAE,KAAK,IAAI,EAAEF,MAAM,GAAG,IAAI,CAAC/F,SAAS,CAACkG,KAAK,EAAE,CAACjI,KAAe;AACzF,MAAA;AACF,IAAA;AAEA,IAAA,MAAMkI,KAAK,GAAG,IAAI,CAACpF,GAAG,CAAChD,KAAK,CAACW,UAAU,CAAChB,QAAQ,CAACmD,iBAAiB,CAAC,EAAEX,IAAI;AACzE,IAAA,MAAMe,WAAW,GAAG,IAAI,CAACF,GAAG,CAACE,WAAW;AACxC,IAAA,MAAMwB,OAAgB,GAAG;MACvBtC,WAAW,EAAEpD,QAAQ,CAACM,GAAG;AACzBqF,MAAAA,QAAQ,EAAE,IAAI,CAAC1C,SAAS,CAAC0C,QAAQ,CAAC,CAAC,WAAW,EAAE,cAAc,CAAC,CAAC;AAChE1B,MAAAA,UAAU,EAAE,IAAI,CAACD,GAAG,CAACC,UAAU;MAC/BC,WAAW;AACXW,MAAAA,UAAU,EAAEX,WAAW,EAAEoC,SAAS,IAAIpC,WAAW;AACjDoC,MAAAA,SAAS,EAAE,IAAI;AACfrE,MAAAA,GAAG,EAAE,IAAI;AACToH,MAAAA,SAAS,EAAE,IAAI;MACfb,OAAO;MACPO,SAAS;AACTO,MAAAA,MAAM,EAAE,IAAI;AACZzD,MAAAA,QAAQ,EAAE,EAAE;AACZjB,MAAAA,MAAM,EAAE,IAAI;MACZwE,KAAK;MACLX,IAAI;AACJrG,MAAAA,CAAC,EAAE;KACJ;AACD,IAAA,IAAI4G,MAAM,EAAE;MACVtD,OAAO,CAAC4D,MAAM,GAAG,IAAIR,QAAQ,CAAC,MAAM,EAAE,CAAA,mBAAA,EAAsBE,MAAM,CAAA,WAAA,CAAa,CAAQ;AACzF,IAAA;AACAO,IAAAA,MAAM,CAAC,MAAM,CAAC,GAAG7D,OAAO;AAExB,IAAA,MAAMyB,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;IAE3B,MAAMoC,KAAK,GAAGrC,IAAI,CAACO,IAAI,CAAC+B,IAAI,CAAC,CAACD,KAAK;AACnC,IAAA,MAAME,YAAY,GAAGlC,OAAO,CAACC,GAAG,CAACN,IAAI,CAACO,IAAI,CAACC,GAAG,CAAC,EAAES,MAAM,CAAC;IACxD,MAAMiB,SAAS,GAAGK,YAAY,IAEzBvC,IAAI,CAACiB,MAAM,CAAC,EAAEoB,KAAK,CAACG,GAAG,CAACvB,MAAM,CAAC,IAEhC,IAAIwB,QAAQ,CAAC,IAAI,CAAC9B,KAAK,CAACX,IAAI,EAAEiB,MAAM,CAAC,CAAC;IAC1C1C,OAAO,CAAC2D,SAAS,GAAGA,SAAS;IAE7B3D,OAAO,CAACY,SAAS,GAAG,IAAI,CAACR,iBAAiB,CAAC,WAAW,CAAC;AAGvD,IAAA,MAAA+D,iBAAA,GAA0DnE,OAAO,CAACC,QAAQ;MAAzDkE,iBAAA,CAATC,SAAS;MAAcD,iBAAA,CAAZE,YAAY;AAAKC,YAAAA,iBAAiB,GAAAC,wBAAA,CAAAJ,iBAAA,EAAAK,SAAA;IAErD,IAAIC,aAAa,GAAG,IAAI;AACxBzE,IAAAA,OAAO,CAACd,MAAM,GAAG,IAAIwF,MAAM,CAAC,MAAM;AAChC,MAAA,IAAInI,GAAU,GAAGoH,SAAS,CAACM,GAAG,EAAE;AAEhC1H,MAAAA,GAAG,CAACyF,IAAI,CAAC2C,QAAQ,CAAC;AAClB,MAAA,MAAMC,OAAO,GAAGjG,UAAU,EAAE;MAC5BM,UAAU,CAAC,IAAI,CAAC;MAEhBe,OAAO,CAACzD,GAAG,GAAGA,GAAG,GAAGsI,KAAK,CAACtI,GAAG,CAAC;AAC9B,MAAA,MAAM4D,QAAQ,GAAGH,OAAO,CAACG,QAAQ;AAEjC,MAAA,IAAIsE,aAAa,EAAE;AACjB,QAAA,MAAMjI,GAAG,GAAGD,GAAG,CAAClB,MAAM;AACtB,QAAA,KAAK,IAAIqB,CAAC,GAAGF,GAAG,EAAEE,CAAC,EAAE,GAAI;UACvB,MAAMoI,IAAI,GAAG,IAAI,CAACC,aAAa,CAAC/E,OAAO,EAAEtD,CAAC,EAAE+E,IAAI,CAAC;UACjDqD,IAAI,CAAClE,SAAS,GAAG,IAAI,CAACR,iBAAiB,CAAC,gBAAgB,CAAC;UACzD0E,IAAI,CAAC3F,UAAU,GAAG,IAAI,CAACiB,iBAAiB,CAAC,iBAAiB,CAAC;AAC3D0E,UAAAA,IAAI,CAACvG,UAAU,GAAGyB,OAAO,CAACzB,UAAU;AACpC4B,UAAAA,QAAQ,CAACzD,CAAC,CAAC,GAAGoI,IAAI;AACpB,QAAA;AACA,QAAA,MAAME,WAAW,GAAG7E,QAAQ,CAAC,CAAC,CAAC;AAE/B,QAAA,IAAI6E,WAAW,EAAE;AACf,UAAA,IAAI,CAACzH,SAAS,CAACU,SAAS,EAAE;AAC1B,UAAA,IAAI,CAACV,SAAS,CAACU,SAAS,EAAE;AAC5B,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAACV,SAAS,CAAC0H,IAAI,EAAE;AACvB,QAAA;AACF,MAAA,CAAC,MAEI;AACH,QAAA,MAAMC,MAAM,GAAG/E,QAAQ,CAAC9E,MAAM;AAC9B,QAAA,MAAM8J,MAAM,GAAG5I,GAAG,CAAClB,MAAM;QACzB,MAAM+J,MAAM,GAAGC,IAAI,CAACC,GAAG,CAACJ,MAAM,EAAEC,MAAM,CAAC;QACvC,MAAMI,WAA0B,GAAG,EAAE;AACrC,QAAA,IAAI,CAACvF,OAAO,CAAC4D,MAAM,EAAE;UAEnB,IAAIuB,MAAM,GAAGD,MAAM,EAAE;AACnB,YAAA,KAAK,IAAIxI,CAAC,GAAGwI,MAAM,GAAG,CAAC,EAAExI,CAAC,IAAIyI,MAAM,EAAEzI,CAAC,EAAE,EAAE;AACzC,cAAA,IAAI,CAAC8I,aAAa,CAACrF,QAAQ,EAAEzD,CAAC,CAAC;AACjC,YAAA;AACF,UAAA;UAEA,IAAIwI,MAAM,GAAGC,MAAM,EAAE;AACnB,YAAA,MAAMM,SAAS,GAAGtF,QAAQ,CAAC/D,EAAE,CAAC,EAAE,CAAC,EAAEwE,SAAS,IAAIZ,OAAO,CAACb,UAAU;AAClE,YAAA,KAAK,IAAIzC,CAAC,GAAGyI,MAAM,GAAG,CAAC,EAAEzI,CAAC,IAAIwI,MAAM,EAAExI,CAAC,EAAE,EAAE;AACzC,cAAA,IAAI,CAACgJ,aAAa,CAAC1F,OAAO,EAAEtD,CAAC,EAAE+E,IAAI,EAAE8D,WAAW,EAAEE,SAAS,EAAEnB,iBAAiB,CAAC;AACjF,YAAA;AACF,UAAA;AACA,UAAA,KAAK,IAAI5H,CAAC,GAAG0I,MAAM,EAAE1I,CAAC,EAAE,GAAI;AAC1B,YAAA,MAAM+D,KAAK,GAAGN,QAAQ,CAACzD,CAAC,CAAC;AACzB6I,YAAAA,WAAW,CAAC7I,CAAC,CAAC,GAAG+D,KAAK;AACtB,YAAA,IAAI,CAACkF,YAAY,CAAClF,KAAK,EAAElE,GAAG,CAACG,CAAC,CAAC,EAAEoG,OAAO,EAAEpG,CAAC,EAAE2G,SAAS,CAAC;AACzD,UAAA;AACF,QAAA,CAAC,MAEI;UACH,IAAIuC,CAAC,GAAG,CAAC;YACPC,EAAE,GAAGX,MAAM,GAAG,CAAC;YACfY,EAAE,GAAGX,MAAM,GAAG,CAAC;AAEjB,UAAA,OAAOS,CAAC,IAAIC,EAAE,IAAID,CAAC,IAAIE,EAAE,EAAE;AACzB,YAAA,MAAMrF,KAAK,GAAGN,QAAQ,CAACyF,CAAC,CAAC;AACzB,YAAA,MAAMG,GAAG,GAAGtF,KAAK,CAACuF,GAAG;YACrB,MAAMC,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAClG,OAAO,EAAE4F,CAAC,EAAEnE,IAAI,CAAC;AACnD,YAAA,MAAMuE,GAAG,GAAGhG,OAAO,CAAC4D,MAAM,CAACqC,QAAQ,CAAC;YACpC,IAAIF,GAAG,KAAKC,GAAG,EAAE;AACfT,cAAAA,WAAW,CAACK,CAAC,CAAC,GAAGnF,KAAK;AACtB,cAAA,IAAI,CAACkF,YAAY,CAAClF,KAAK,EAAElE,GAAG,CAACqJ,CAAC,CAAC,EAAE9C,OAAO,EAAE8C,CAAC,EAAEvC,SAAS,CAAC;AACvDuC,cAAAA,CAAC,EAAE;AACL,YAAA,CAAC,MAAM;AACL,cAAA;AACF,YAAA;AACF,UAAA;AAEA,UAAA,OAAOA,CAAC,IAAIC,EAAE,IAAID,CAAC,IAAIE,EAAE,EAAE;AACzB,YAAA,MAAMrF,KAAK,GAAGN,QAAQ,CAAC0F,EAAE,CAAC;AAC1B,YAAA,MAAME,GAAG,GAAGtF,KAAK,CAACuF,GAAG;YACrB,MAAMC,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAClG,OAAO,EAAE8F,EAAE,EAAErE,IAAI,CAAC;AACpD,YAAA,MAAMuE,GAAG,GAAGhG,OAAO,CAAC4D,MAAM,CAACqC,QAAQ,CAAC;YACpC,IAAIF,GAAG,KAAKC,GAAG,EAAE;AACfT,cAAAA,WAAW,CAACO,EAAE,CAAC,GAAGrF,KAAK;AACvB,cAAA,IAAI,CAACkF,YAAY,CAAClF,KAAK,EAAElE,GAAG,CAACuJ,EAAE,CAAC,EAAEhD,OAAO,EAAEgD,EAAE,EAAEzC,SAAS,CAAC;AACzDwC,cAAAA,EAAE,EAAE;AACJC,cAAAA,EAAE,EAAE;AACN,YAAA,CAAC,MAAM;AACL,cAAA;AACF,YAAA;AACF,UAAA;UAEA,IAAIF,CAAC,GAAGC,EAAE,EAAE;YACV,IAAID,CAAC,IAAIE,EAAE,EAAE;cAGX,MAAMK,WAAW,GAAGP,CAAC,GAAG,CAAC,GAAGzF,QAAQ,CAAC/D,EAAE,CAAC,EAAE,CAAC,EAAEwE,SAAS,IAAIZ,OAAO,CAACb,UAAU,GAAGa,OAAO,CAACb,UAAU;cACjG,KAAK,IAAIzC,CAAC,GAAGoJ,EAAE,EAAEpJ,CAAC,IAAIkJ,CAAC,EAAElJ,CAAC,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAACgJ,aAAa,CAAC1F,OAAO,EAAEtD,CAAC,EAAE+E,IAAI,EAAE8D,WAAW,EAAEY,WAAW,EAAE7B,iBAAiB,CAAC;AACnF,cAAA;AACF,YAAA;AACF,UAAA,CAAC,MAEI,IAAIsB,CAAC,GAAGE,EAAE,EAAE;YACf,IAAIF,CAAC,IAAIC,EAAE,EAAE;cACX,KAAK,IAAInJ,CAAC,GAAGmJ,EAAE,EAAEnJ,CAAC,IAAIkJ,CAAC,EAAElJ,CAAC,EAAE,EAAE;AAC5B,gBAAA,IAAI,CAAC8I,aAAa,CAACrF,QAAQ,EAAEzD,CAAC,CAAC;AACjC,cAAA;AACF,YAAA;AACF,UAAA,CAAC,MAEI;YACH,IAAI0J,EAAE,GAAGR,CAAC;AACRS,cAAAA,EAAE,GAAGT,CAAC;AACR,YAAA,MAAMU,MAAM,GAAGR,EAAE,GAAGO,EAAE,GAAG,CAAC;AAE1B,YAAA,MAAME,OAAO,GAAG,IAAIC,GAAG,EAAe;YACtC,KAAK,IAAI9J,CAAC,GAAG2J,EAAE,EAAE3J,CAAC,IAAIoJ,EAAE,EAAEpJ,CAAC,EAAE,EAAE;cAE7B,MAAMuJ,QAAQ,GAAG,IAAI,CAACC,WAAW,CAAClG,OAAO,EAAEtD,CAAC,EAAE+E,IAAI,CAAC;AACnD,cAAA,MAAMuE,GAAG,GAAGhG,OAAO,CAAC4D,MAAM,CAACqC,QAAQ,CAAC;AACpCM,cAAAA,OAAO,CAACE,GAAG,CAACT,GAAG,EAAEtJ,CAAC,CAAC;AACrB,YAAA;YAEA,IAAIgK,UAAU,GAAG,EAAE;YACnB,IAAIC,OAAO,GAAG,KAAK;AACnB,YAAA,MAAMC,QAAQ,GAAG,IAAIC,KAAK,CAASP,MAAM,CAAC,CAACQ,IAAI,CAAC,EAAE,CAAC;YACnD,KAAK,IAAIpK,CAAC,GAAG0J,EAAE,EAAE1J,CAAC,IAAImJ,EAAE,EAAEnJ,CAAC,EAAE,EAAE;AAC7B,cAAA,MAAMsJ,GAAG,GAAG7F,QAAQ,CAACzD,CAAC,CAAC,CAACsJ,GAAG;AAC3B,cAAA,MAAMe,IAAI,GAAGR,OAAO,CAACtC,GAAG,CAAC+B,GAAG,CAAC;cAE7B,IAAIe,IAAI,IAAI,IAAI,EAAE;AAChB,gBAAA,IAAI,CAACvB,aAAa,CAACrF,QAAQ,EAAEzD,CAAC,CAAC;AAC/B,gBAAA;AACF,cAAA;AACA,cAAA,MAAM+D,KAAK,GAAGN,QAAQ,CAACzD,CAAC,CAAC;AAEzB6I,cAAAA,WAAW,CAACwB,IAAI,CAAC,GAAGtG,KAAK;AACzB,cAAA,IAAI,CAACkF,YAAY,CAAClF,KAAK,EAAElE,GAAG,CAACwK,IAAI,CAAC,EAAEjE,OAAO,EAAEiE,IAAI,EAAE1D,SAAS,CAAC;AAC7DuD,cAAAA,QAAQ,CAACG,IAAI,GAAGV,EAAE,CAAC,GAAG3J,CAAC;AAEvB6J,cAAAA,OAAO,CAACS,MAAM,CAAChB,GAAG,CAAC;cAEnB,IAAIe,IAAI,GAAGL,UAAU,EAAE;AACrBC,gBAAAA,OAAO,GAAG,IAAI;AAChB,cAAA,CAAC,MAAM;AACLD,gBAAAA,UAAU,GAAGK,IAAI;AACnB,cAAA;AACF,YAAA;YAEA,IAAI,CAACJ,OAAO,EAAE;AAEZJ,cAAAA,OAAO,CAACU,OAAO,CAAC,CAACvK,CAAC,EAAEsJ,GAAG,KAAK;AAC1B,gBAAA,MAAMjI,MAAM,GAAGrB,CAAC,KAAK,CAAC,GAAGsD,OAAO,CAACb,UAAU,GAAGoG,WAAW,CAAC7I,CAAC,GAAG,CAAC,CAAC,CAACkE,SAAS;AAC1E,gBAAA,IAAI,CAAC8E,aAAa,CAAC1F,OAAO,EAAEtD,CAAC,EAAE+E,IAAI,EAAE8D,WAAW,EAAExH,MAAM,EAAEuG,iBAAiB,CAAC;AAC9E,cAAA,CAAC,CAAC;AACJ,YAAA,CAAC,MAAM;AAEL,cAAA,MAAM4C,IAAI,GAAG5K,MAAM,CAACsK,QAAQ,CAAC;gBAC3BO,MAAM,GAAGD,IAAI,CAAC7L,MAAM;cAEtB,IAAI+L,EAAU,EAEZC,EAAU;AAEZ,cAAA,KAAKD,EAAE,GAAGf,EAAE,EAAEgB,EAAE,GAAG,CAAC,EAAED,EAAE,IAAItB,EAAE,EAAEsB,EAAE,EAAE,EAAE;AACpC,gBAAA,MAAME,IAAI,GAAGV,QAAQ,CAACQ,EAAE,CAAC;AAEzB,gBAAA,IAAIE,IAAI,KAAK,EAAE,EAAE;AACf,kBAAA,MAAMvJ,MAAM,GAAGqJ,EAAE,KAAK,CAAC,GAAGpH,OAAO,CAACb,UAAU,GAAGoG,WAAW,CAAC6B,EAAE,GAAG,CAAC,CAAC,CAACxG,SAAS;AAC5E,kBAAA,IAAI,CAAC8E,aAAa,CAAC1F,OAAO,EAAEoH,EAAE,EAAE3F,IAAI,EAAE8D,WAAW,EAAExH,MAAM,EAAEuG,iBAAiB,CAAC;AAC7E,kBAAA;AACF,gBAAA;AAGA,gBAAA,MAAMiD,SAAS,GAAGL,IAAI,CAACG,EAAE,CAAC,GAAGhB,EAAE;gBAE/B,IAAIe,EAAE,KAAKG,SAAS,EAAE;AACpBF,kBAAAA,EAAE,IAAIF,MAAM,IAAIE,EAAE,EAAE;AACpB,kBAAA;AACF,gBAAA;AAGA,gBAAA,IAAItJ,MAAM,GAAGqJ,EAAE,KAAK,CAAC,GAAGpH,OAAO,CAACb,UAAU,GAAGoG,WAAW,CAAC6B,EAAE,GAAG,CAAC,CAAC,CAACxG,SAAS;AAC1E,gBAAA,MAAMH,KAAK,GAAG8E,WAAW,CAAC6B,EAAE,CAAC;AAE7B,gBAAA,MAAQjI,UAAU,GAA4BsB,KAAK,CAA3CtB,UAAU;kBAAEyB,SAAS,GAAiBH,KAAK,CAA/BG,SAAS;kBAAErC,UAAU,GAAKkC,KAAK,CAApBlC,UAAU;gBAEzC,IAAIwC,KAAK,GAAG5B,UAAU;kBACpBqI,IAAS;gBACX,GAAG;AACDA,kBAAAA,IAAI,GAAG,IAAI,CAACC,OAAO,CAAC1G,KAAK,CAAC;kBAC1B,IAAI,CAACJ,WAAW,CAACpC,UAAU,EAAEwC,KAAK,EAAEhD,MAAM,CAAC;AAE3CA,kBAAAA,MAAM,GAAGgD,KAAK;kBACd,IAAIA,KAAK,KAAKH,SAAS,EAAE;AACzBG,kBAAAA,KAAK,GAAGyG,IAAI;AACd,gBAAA,CAAC,QAAQ,IAAI;AACf,cAAA;AACF,YAAA;AACF,UAAA;AACF,QAAA;QACAxH,OAAO,CAACG,QAAQ,GAAGoF,WAAW;AAChC,MAAA;AACAd,MAAAA,aAAa,GAAG,KAAK;MACrBxF,UAAU,CAAC2F,OAAO,CAAC;AAEnB,MAAA,OAAO8C,SAAS,IAAI;AAClB,QAAA,IAAIA,SAAS,EAAE;AACb,UAAA,KAAK,IAAIhL,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGsD,OAAO,CAACG,QAAQ,CAAC9E,MAAM,EAAEqB,CAAC,EAAE,EAAE;AAChD,YAAA,MAAMoI,IAAI,GAAG9E,OAAO,CAACG,QAAQ,CAACzD,CAAC,CAAC;AAChCoI,YAAAA,IAAI,CAAC5F,MAAM,CAACyI,OAAO,EAAE;AACvB,UAAA;AACF,QAAA;MACF,CAAC;AACH,IAAA,CAAC,CAAC;AACF,IAAA,OAAO3H,OAAO,CAACG,QAAQ,CAAC,CAAC,CAAC,IAAIH,OAAO;AACvC,EAAA;AAEA0F,EAAAA,aAAaA,CACX1F,OAAgB,EAChBtD,CAAS,EACTkL,UAAe,EACfrC,WAA0B,EAC1BxH,MAAW,EACXuG,iBAAsB,EACtB;IACA,MAAMQ,IAAI,GAAG,IAAI,CAACC,aAAa,CAAC/E,OAAO,EAAEtD,CAAC,EAAEkL,UAAU,CAAC;AACvDrC,IAAAA,WAAW,CAAC7I,CAAC,CAAC,GAAGoI,IAAI;AACrB,IAAA,IAAIlE,SAAS,GAAG,IAAI,CAACJ,YAAY,CAAC,gBAAgB,CAAC;IACnD,IAAI,CAAC3B,YAAY,CAACmB,OAAO,CAACzB,UAAU,EAAEqC,SAAS,EAAE7C,MAAM,CAAC;AAExD,IAAA,IAAIoB,UAAU,GAAG,IAAI,CAACqB,YAAY,CAAC,iBAAiB,CAAC;IACrD,IAAI,CAAC3B,YAAY,CAACmB,OAAO,CAACzB,UAAU,EAAEY,UAAU,EAAEpB,MAAM,CAAC;IAEzD+G,IAAI,CAAC3F,UAAU,GAAGA,UAAU;IAC5B2F,IAAI,CAAClE,SAAS,GAAGA,SAAS;AAE1B,IAAA,IAAI,CAACrD,SAAS,GAAGyC,OAAO,CAAC0D,KAAK,CAACnG,SAAS;AAIxC,IAAA,IAAI,CAACA,SAAS,CAAC2C,MAAM,CAACoE,iBAAiB,CAAC;AAExC,IAAA,IAAI,CAAC/G,SAAS,CAACsK,cAAc,GAAG,KAAK;AACrCC,IAAAA,cAAc,CAAC,MAAM;AACnB,MAAA,IAAI,CAAClK,OAAO,CAACoC,OAAO,CAACzB,UAAU,EAAEyB,OAAO,CAAC0D,KAAK,EAAEvE,UAAU,EAAE2F,IAAI,CAAC;AACnE,IAAA,CAAC,EAAEA,IAAI,CAAC5F,MAAM,CAAC;AACjB,EAAA;AAEAsG,EAAAA,aAAaA,CAACrF,QAAuB,EAAEzD,CAAS,EAAE;AAChD,IAAA,MAAM+D,KAAK,GAAGN,QAAQ,CAACzD,CAAC,CAAC;AACzB,IAAA,IAAI,CAACqL,eAAe,CAACtH,KAAK,CAAC;AAC3B,IAAA,IAAI,CAACuH,MAAM,CAACvH,KAAK,CAACtB,UAAU,CAAC;AAC7B,IAAA,IAAI,CAAC6I,MAAM,CAACvH,KAAK,CAACG,SAAS,CAAC;AAE5BH,IAAAA,KAAK,CAACvB,MAAM,CAACyI,OAAO,EAAE;AACxB,EAAA;EAEAhC,YAAYA,CAAClF,KAAkB,EAAEgB,IAAS,EAAEqB,OAAuC,EAAEpG,CAAS,EAAE2G,SAAkB,EAAE;AAClH,IAAA,IAAI,OAAOP,OAAO,KAAK,QAAQ,EAAE;AAC/BrC,MAAAA,KAAK,CAACgB,IAAI,CAACqB,OAAO,CAAC,GAAGrB,IAAI;AAC1B,MAAA,IAAI4B,SAAS,EAAE;AACb5C,QAAAA,KAAK,CAACgB,IAAI,CAAC4B,SAAS,CAAC,GAAG3G,CAAC;AAC3B,MAAA;AACF,IAAA,CAAC,MAAM;MACL2G,SAAS,GAAGA,SAAS,IAAIjG,SAAS;AAClCqD,MAAAA,KAAK,CAACgB,IAAI,CAAC4B,SAAS,CAAC,GAAG3G,CAAC;AAC3B,IAAA;AACF,EAAA;AAEAuL,EAAAA,SAAS,GAAG,CAAC;AACblD,EAAAA,aAAaA,CAAC/E,OAAgB,EAAEtD,CAAS,EAAEkL,UAAe,EAAE;AAC1D,IAAA,IAAIM,WAAwB;AAC5B,IAAA,IAAIzG,IAAsB;IAsB1B,MAAM0G,KAAK,GAAG,IAAIC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;IACjCD,KAAK,CAACA,KAAK,GAAG,IAAI;AAClBL,IAAAA,cAAc,CAAC,MAAM;MACnBK,KAAK,CAAClE,GAAG,EAAE;IACb,CAAC,EAAE,IAAI,CAAC;IAGRxC,IAAI,GAAG,IAAI,CAACyE,WAAW,CAAClG,OAAO,EAAEtD,CAAC,EAAEkL,UAAU,CAAC;AAC/CM,IAAAA,WAAW,GAAG;AACZG,MAAAA,EAAE,EAAE,IAAI,CAACJ,SAAS,EAAE;MACpBvK,WAAW,EAAEpD,QAAQ,CAACO,OAAO;AAC7B0D,MAAAA,UAAU,EAAE,IAAI;AAChBY,MAAAA,UAAU,EAAE,IAAI;AAChByB,MAAAA,SAAS,EAAE,IAAI;MACfZ,OAAO;AACPgG,MAAAA,GAAG,EAAEhG,OAAO,CAAC4D,MAAM,GAAGnC,IAAI,CAAC;AAC3BvC,MAAAA,MAAM,EAAE,IAAI;AACZuC,MAAAA;KACD;IACDyG,WAAW,CAAChJ,MAAM,GAAGiJ,KAAK;AAC1B,IAAA,OAAOD,WAAW;AACpB,EAAA;AAEAhC,EAAAA,WAAWA,CAAClG,OAAgB,EAAEtD,CAAS,EAAEkL,UAAe,EAAE;AACxD,IAAA,MAAQrL,GAAG,GAAuCyD,OAAO,CAAjDzD,GAAG;MAAEuG,OAAO,GAA8B9C,OAAO,CAA5C8C,OAAO;MAAEC,IAAI,GAAwB/C,OAAO,CAAnC+C,IAAI;MAAEY,SAAS,GAAa3D,OAAO,CAA7B2D,SAAS;MAAEC,MAAM,GAAK5D,OAAO,CAAlB4D,MAAM;AAC7C,IAAA,IAAIP,SAAS,GAAGrD,OAAO,CAACqD,SAAS;AACjC,IAAA,IAAI5B,IAAsB;AAC1B,IAAA,IAAI,OAAOqB,OAAO,KAAK,QAAQ,EAAE;AAC/BrB,MAAAA,IAAI,GAAG6G,UAAU,CACfjF,SAAS,GACL;AACE,QAAA,CAACP,OAAO,GAAGvG,GAAG,CAACG,CAAC,CAAC;AACjB,QAAA,CAAC2G,SAAS,GAAG3G;AACf,OAAC,GACD;AACE,QAAA,CAACoG,OAAO,GAAGvG,GAAG,CAACG,CAAC;AAClB,OAAC,EACLiC,UAAU,EACZ,CAAC;AACH,IAAA,CAAC,MAAM;MACL0E,SAAS,GAAGA,SAAS,IAAIjG,SAAS;AAClC,MAAA,MAAMmL,OAAO,GAAG;AAAE,QAAA,CAAClF,SAAS,GAAG3G;OAAG;MAClC+E,IAAI,GAAG6G,UAAU,CAACC,OAAO,EAAE5J,UAAU,EAAE,CAAC;MACxC,MAAM6J,YAAY,GAAG,IAAItE,QAAQ,CAAC,MAAMpB,OAAO,CAACa,SAAS,CAACM,GAAG,EAAE,CAACL,MAAM,GAAGnC,IAAI,CAAC4B,SAAS,CAAC,GAAG3G,CAAC,CAAC,CAAC,CAAC;MAC/F,MAAMoH,KAAK,GAAGrC,IAAI,CAACO,IAAI,CAAC+B,IAAI,CAAC,CAACD,KAAK;AACnC,MAAA,KAAK,IAAIpH,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAGqG,IAAI,CAAC1H,MAAM,EAAEqB,CAAC,EAAE,EAAE;AACpC,QAAA,MAAM2D,IAAI,GAAG0C,IAAI,CAACrG,CAAC,CAAC;AACpB6L,QAAAA,OAAO,CAAClI,IAAI,CAAC,GAAGvE,SAAS;AACzBgI,QAAAA,KAAK,CAAC2C,GAAG,CAACpG,IAAI,EAAE,IAAI6D,QAAQ,CAAC,MAAMsE,YAAY,CAACvE,GAAG,EAAE,CAAC5D,IAAI,CAAC,CAAC,CAAC;AAC/D,MAAA;AACF,IAAA;AAEAoI,IAAAA,MAAM,CAACC,cAAc,CAACjH,IAAI,EAAEmG,UAAU,CAAC;AACvC,IAAA,OAAOnG,IAAI;AACb,EAAA;AAEAC,EAAAA,OAAOA,GAAG;AACR,IAAA,MAAAiH,qBAAA,GAAiB,IAAI,CAACrK,GAAG,CAAChD,KAAK,CAACW,UAAU,CAAChB,QAAQ,CAACkD,WAAW,CAAC;MAAxDV,IAAI,GAAAkL,qBAAA,CAAJlL,IAAI;IACZ,OAAOA,IAAI,CAACgE,IAAI,IAAIhE,IAAI,CAACiG,KAAK,CAACjC,IAAI;AACrC,EAAA;AAUAa,EAAAA,aAAaA,CACXb,IAAW,EACXhE,IAAS,EACTuI,GAAW,EACXxK,KAAU,EACVqG,aAAsB,EACtB+G,IAAa,EACbC,KAAc,EACd;AACA,IAAA,IAAID,IAAI,EAAE;MACR,IAAI,CAACE,OAAO,CAACrL,IAAI,EAAEuI,GAAG,EAAExK,KAAK,EAAEqN,KAAK,CAAC;AACvC,IAAA,CAAC,MAAM,IAAI,OAAOrN,KAAK,KAAK,UAAU,EAAE;MACtC,IAAIkJ,MAAM,CAAC,MAAM;AACf,QAAA,MAAMqE,GAAG,GAAGvN,KAAK,EAAE;QACnB,IAAI,CAACsN,OAAO,CAACrL,IAAI,EAAEuI,GAAG,EAAE+C,GAAG,EAAEF,KAAK,CAAC;AACrC,MAAA,CAAC,CAAC;IACJ,CAAC,MAAM,IAAIhH,aAAa,EAAE;MACxB,IAAI6C,MAAM,CAAC,MAAM;AACf,QAAA,MAAMqE,GAAG,GAAGtH,IAAI,CAACjG,KAAK,CAAC;QACvB,IAAI,CAACsN,OAAO,CAACrL,IAAI,EAAEuI,GAAG,EAAE+C,GAAG,EAAEF,KAAK,CAAC;AACrC,MAAA,CAAC,CAAC;AACJ,IAAA,CAAC,MAEI;MACH,IAAI,CAACC,OAAO,CAACrL,IAAI,EAAEuI,GAAG,EAAExK,KAAK,EAAEqN,KAAK,CAAC;AACvC,IAAA;AACF,EAAA;EAEApG,iBAAiB,GAAiC,IAAI,CAACH,aAAa,CAAC0G,IAAI,CAAC,IAAI,CAAC;AAE/ErH,EAAAA,8BAA8BA,CAACsH,iBAAwC,EAAE3K,GAAe,EAAE;AAGxF,IAAA,IAAIxD,SAAuB,EAAEoO,MAAc,EAAEzI,KAAU;AAEvD,IAAA,MAAM0I,IAAI,GAAIF,iBAAiB,CAASG,SAAS,YAAYC,KAAK;AAClE,IAAA,IAAIF,IAAI,EAAE;AACRrO,MAAAA,SAAS,GAAGmO,iBAAwB;AACpCxI,MAAAA,KAAK,GAAG3F,SAAS,CAACwO,GAAG,EAAE;AACzB,IAAA,CAAC,MAAM;AACLJ,MAAAA,MAAM,GAAGD,iBAA2B;AACpC,MAAA,MAAMM,UAAU,GAAGL,MAAM,CAACK,UAAU;MAEpC9I,KAAK,GAAG6H,UAAU,CAAC,EAAE,EAAE3J,UAAU,EAAE,EAAE,IAAI,CAAC;AAC1C8J,MAAAA,MAAM,CAACC,cAAc,CAACjI,KAAK,EAAE8I,UAAU,CAAC;AAC1C,IAAA;AAEA,IAAA,MAAM9L,IAAmB,GAAG;MAC1BC,WAAW,EAAEyL,IAAI,GAAG7O,QAAQ,CAACQ,SAAS,GAAGR,QAAQ,CAACS,QAAQ;MAC1DwD,UAAU,EAAED,GAAG,CAACC,UAAU;AAC1BY,MAAAA,UAAU,EAAE,IAAI;AAChByB,MAAAA,SAAS,EAAE,IAAI;AACfa,MAAAA,IAAI,EAAEhB,KAAK;AACXlD,MAAAA,SAAS,EAAE2L,MAAM,GAAGA,MAAM,CAAC,IAAI,CAAC,GAAIzI,KAAK,CAAC,IAAI,CAAC,CAAY,IAAI;KAChE;AACD,IAAA,IAAI,CAAC6B,aAAa,GAAG,CAACb,IAAI,EAAE+H,CAAC,EAAExD,GAAG,EAAExK,KAAK,EAAEqG,aAAa,EAAE+G,IAAI,EAAEC,KAAK,KAAK;AACxE,MAAA,IAAID,IAAI,EAAE;QACRnI,KAAK,CAACuB,IAAI,CAACC,GAAG,CAAC,CAAC+D,GAAG,CAAC,GAAGxK,KAAK;MAC9B,CAAC,MAEI,IAAIqG,aAAa,EAAE;QACtB4H,WAAW,CAAChI,IAAI,EAAEjG,KAAK,EAAEiF,KAAK,EAAEuF,GAAG,CAAC;AACtC,MAAA,CAAC,MAEI;AACH,QAAA,MAAM0D,IAAI,GAAGjJ,KAAK,CAACuB,IAAI,CAAC+B,IAAI,CAAC;AAC7B,QAAA,MAAMD,KAA0B,GAAG4F,IAAI,CAAC5F,KAAK;AAC7C,QAAA,IAAI,OAAOtI,KAAK,KAAK,UAAU,EAAE;AAC/B,UAAA,MAAMmO,QAAQ,GAAG,IAAIzF,QAAQ,CAAC1I,KAAK,CAAC;AACpCsI,UAAAA,KAAK,CAAC2C,GAAG,CAACT,GAAG,EAAE2D,QAAe,CAAC;UAC/BlJ,KAAK,CAACuB,IAAI,CAACC,GAAG,CAAC,CAAC+D,GAAG,CAAC,GAAGlK,SAAS;AAClC,QAAA,CAAC,MAEI;AACHgI,UAAAA,KAAK,CAAC2C,GAAG,CAACT,GAAG,EAAE;YAAE/B,GAAG,EAAEA,MAAMzI;AAAM,WAAW,CAAC;UAC9CiF,KAAK,CAACuB,IAAI,CAACC,GAAG,CAAC,CAAC+D,GAAG,CAAC,GAAGxK,KAAK;AAC9B,QAAA;AACF,MAAA;IACF,CAAC;IACDiC,IAAI,CAACmD,SAAS,GAAG,IAAI,CAACR,iBAAiB,CAAC,iBAAiB,CAAC;AAC1D,IAAA,OAAO3C,IAAI;AACb,EAAA;AACA2E,EAAAA,KAAKA,CAACX,IAAS,EAAEmI,UAA2B,EAAE;AAC5C,IAAA,OAAO,IAAIxG,QAAQ,CAAC,MAAM,EAAE,CAAA,mBAAA,EAAsBwG,UAAU,CAAA,WAAA,CAAa,CAAC,CAACZ,IAAI,CAAClN,SAAS,EAAE2F,IAAI,CAAC;AAClG,EAAA;EAEAF,eAAeA,CAACjD,GAAe,EAAE;AAC/B,IAAA,MAAQE,WAAW,GAAKF,GAAG,CAAnBE,WAAW;AACnB,IAAA,MAAMqL,OAAO,GAAG,IAAI,CAACtM,SAAS,CAACuB,KAAK;IACpC,MAAMgL,QAAQ,GAAG,IAAI,CAACvM,SAAS,CAACwM,OAAO,EAAE;AACzC,IAAA,MAAMvO,KAAK,GAAGsO,QAAQ,CAACtO,KAAwB;AAC/C,IAAA,MAAMwO,MAAM,GAAGH,OAAO,CAACrO,KAAK,KAAK,MAAM;AACvC,IAAA,MAAMyO,IAAI,GAAGJ,OAAO,CAACrO,KAAK,KAAK,IAAI;AACnC,IAAA,MAAM0O,SAAS,GAAG1L,WAAW,EAAEd,WAAW,GAAGnD,OAAO;AACpD,IAAA,MAAMkH,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;AAE3B,IAAA,MAAMyI,MAAM,GAAG3O,KAAK,KAAK,IAAI;AAC7B,IAAA,MAAMqG,aAAa,GAAG,CAACsI,MAAM,IAAIrI,OAAO,CAACC,GAAG,CAACN,IAAI,CAACO,IAAI,CAACC,GAAG,CAAC,EAAEzG,KAAK,CAAC;AACnE,IAAA,MAAMkI,KAAK,GAAGpF,GAAG,CAAChD,KAAK,CAACW,UAAU,CAAChB,QAAQ,CAACmD,iBAAiB,CAAC,EAAEX,IAAI;AACpE,IAAA,MAAM2M,MAAc,GAAG;AACrB1M,MAAAA,WAAW,EAAEsM,MAAM,GAAG1P,QAAQ,CAACI,IAAI,GAAGuP,IAAI,GAAG3P,QAAQ,CAACE,EAAE,GAAGF,QAAQ,CAACG,IAAI;AAExEwF,MAAAA,QAAQ,EAAE,IAAI,CAAC1C,SAAS,CAAC0C,QAAQ,EAAE;AACnC1B,MAAAA,UAAU,EAAE,IAAI;AAChBY,MAAAA,UAAU,EAAE,IAAI;AAChByB,MAAAA,SAAS,EAAE,IAAI;AACfyJ,MAAAA,SAAS,EAAE,IAAI;AACfC,MAAAA,OAAO,EAAEJ,SAAS,GAAG1L,WAAW,GAAG,IAAI;AACvCiG,MAAAA,aAAa,EAAE,IAAI;AACnBvF,MAAAA,MAAM,EAAE,IAAI;AACZwE,MAAAA;KACD;AACD,IAAA,IAAI6G,MAAkB;IAEtB,QAAQV,OAAO,CAACrO,KAAK;AACnB,MAAA,KAAK,IAAI;AACP,QAAA,IAAIqG,aAAa,EAAE;UAEjBiG,cAAc,CAAC,MAAMrG,IAAI,CAACjG,KAAK,CAAC,EAAE,IAAI,CAAC;UAEvC,MAAQsI,KAAK,GAAKrC,IAAI,CAACO,IAAI,CAAC+B,IAAI,CAAC,CAAzBD,KAAK;AACbyG,UAAAA,MAAM,GAAGzG,KAAK,CAACG,GAAG,CAACzI,KAAK,CAAC;AAC3B,QAAA,CAAC,MAAM;UACL,MAAMgP,EAAE,GAAG,IAAI,CAACpI,KAAK,CAACX,IAAI,EAAEjG,KAAK,CAAC;AAElC+O,UAAAA,MAAM,GAAG,IAAIrG,QAAQ,CAACsG,EAAE,CAAC;AAC3B,QAAA;AACA,QAAA;AACF,MAAA,KAAK,MAAM;AAET,QAAA,IAAIL,MAAM,EAAE;AACVI,UAAAA,MAAM,GAAG,IAAIrG,QAAQ,CAAC,MAAM;AAC1B,YAAA,IAAInD,KAAK,GAAGqJ,MAAM,CAACE,OAAO;AAC1B,YAAA,OAAOvJ,KAAK,EAAE;AACZ,cAAA,IAAIA,KAAK,CAACsJ,SAAS,CAACpG,GAAG,EAAE,EAAE;AACzB,gBAAA,OAAO,KAAK;AACd,cAAA;AAEA,cAAA,IAAIlD,KAAK,CAACrD,WAAW,KAAKpD,QAAQ,CAACE,EAAE,EAAE;AACrC,gBAAA;AACF,cAAA;cACAuG,KAAK,GAAGA,KAAK,CAACuJ,OAAO;AACvB,YAAA;AACA,YAAA,OAAO,IAAI;AACb,UAAA,CAAC,CAAC;AACJ,QAAA,CAAC,MAEI;AACH,UAAA,MAAME,EAAE,GAAG3I,aAAa,GAAG,IAAI,GAAG,IAAI,CAACO,KAAK,CAACX,IAAI,EAAEjG,KAAK,CAAC;AACzD+O,UAAAA,MAAM,GAAG,IAAIrG,QAAQ,CAAC,MAAM;AAC1B,YAAA,IAAInD,KAAK,GAAGqJ,MAAM,CAACE,OAAO;AAC1B,YAAA,OAAOvJ,KAAK,EAAE;AACZ,cAAA,IAAIA,KAAK,CAACsJ,SAAS,CAACpG,GAAG,EAAE,EAAE;AACzB,gBAAA,OAAO,KAAK;AACd,cAAA;AAEA,cAAA,IAAIlD,KAAK,CAACrD,WAAW,KAAKpD,QAAQ,CAACE,EAAE,EAAE;AACrC,gBAAA;AACF,cAAA;cACAuG,KAAK,GAAGA,KAAK,CAACuJ,OAAO;AACvB,YAAA;YACA,OAAOzI,aAAa,GAAGJ,IAAI,CAACjG,KAAK,CAAC,GAAGgP,EAAE,EAAE;AAC3C,UAAA,CAAC,CAAC;AACJ,QAAA;AACA,QAAA;AACF,MAAA,KAAK,MAAM;AACTD,QAAAA,MAAM,GAAG,IAAIrG,QAAQ,CAAC,MAAM;AAC1B,UAAA,IAAInD,KAAK,GAAGqJ,MAAM,CAACE,OAAO;AAC1B,UAAA,OAAOvJ,KAAK,EAAE;AACZ,YAAA,IAAIA,KAAK,CAACsJ,SAAS,CAACpG,GAAG,EAAE,EAAE;AACzB,cAAA,OAAO,KAAK;AACd,YAAA;YACAlD,KAAK,GAAGA,KAAK,CAACuJ,OAAO;AACvB,UAAA;AACA,UAAA,OAAO,IAAI;AACb,QAAA,CAAC,CAAC;AACF,QAAA;AAGJ;IAEAF,MAAM,CAACC,SAAS,GAAGE,MAAM;AAEzBH,IAAAA,MAAM,CAACxJ,SAAS,GAAG,IAAI,CAACR,iBAAiB,CAAC,CAAA,EAAGyJ,OAAO,CAACrO,KAAK,CAAA,MAAA,CAAQ,CAAC;AAEnE,IAAA,MAAMiP,EAAE,GAAGvL,MAAM,CACf,CAAC;AAAEgD,MAAAA;AAAI,KAAC,KAAK;AAEX,MAAA,IAAIA,GAAG,EAAE;QACP,IAAIkI,MAAM,CAAC3F,aAAa,EAAE;AACxB,UAAA,IAAI,CAAClH,SAAS,CAACU,SAAS,EAAE;AAC1B,UAAA,IAAI,CAACV,SAAS,CAACU,SAAS,EAAE;AAC5B,QAAA,CAAC,MAEI;AAEH,UAAA,IAAI,CAACV,SAAS,GAAG6M,MAAM,CAAC1G,KAAK,CAACnG,SAAS;UAIvC,IAAI,CAACA,SAAS,CAAC2C,MAAM,CAACkK,MAAM,CAACnK,QAAQ,CAAC;AACtC,UAAA,IAAI,CAAC1C,SAAS,CAACsK,cAAc,GAAG,KAAK;AAOrC,UAAA,IAAI,CAACjK,OAAO,CAACwM,MAAM,CAAC7L,UAAU,EAAE6L,MAAM,CAAC1G,KAAK,EAAE0G,MAAM,CAACjL,UAAU,EAAEiL,MAAM,CAAC;AAC1E,QAAA;AACF,MAAA,CAAC,MAEI;QACH,IAAIA,MAAM,CAAC3F,aAAa,EAAE;AAExB,UAAA,IAAI,CAAClH,SAAS,CAAC0H,IAAI,EAAE;AACvB,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAAC8C,eAAe,CAACqC,MAAM,CAAC;AAC9B,QAAA;AACF,MAAA;MACAA,MAAM,CAAC3F,aAAa,GAAG,KAAK;AAC9B,IAAA,CAAC,EACD,CAAC8F,MAAM,CACT,CAAC;IACDH,MAAM,CAAClL,MAAM,GAAGuL,EAAE;AAClB,IAAA,OAAOL,MAAM;AACf,EAAA;EAEArC,eAAeA,CAACtK,IAAe,EAAE;AAC/B,IAAA,MAAQ0B,UAAU,GAA4B1B,IAAI,CAA1C0B,UAAU;MAAEyB,SAAS,GAAiBnD,IAAI,CAA9BmD,SAAS;MAAErC,UAAU,GAAKd,IAAI,CAAnBc,UAAU;AACzC,IAAA,IAAIwC,KAAK,GAAG5B,UAAU,GAAG,IAAI,CAACsI,OAAO,CAACtI,UAAU,CAAC,GAAG,IAAI,CAACuL,UAAU,CAACnM,UAAU,CAAC;IAC/E,OAAOwC,KAAK,KAAKH,SAAS,EAAE;AAC1B,MAAA,MAAM4G,IAAI,GAAG,IAAI,CAACC,OAAO,CAAC1G,KAAK,CAAC;MAChC,IAAI,CAACiH,MAAM,CAACjH,KAAK,EAAExC,UAAU,EAAEY,UAAU,CAAC;AAC1C4B,MAAAA,KAAK,GAAGyG,IAAI;AACd,IAAA;AACF,EAAA;EAKAhF,cAAcA,CAAClB,KAAU,EAAE;AACzB,IAAA,OAAO,CAAC,EAAE;AAER,MAAA,IAAI,CAAC,IAAI,CAAC/D,SAAS,CAACuB,KAAK,CAACC,IAAI,GAAG1E,SAAS,CAACsQ,IAAI,MAAM,CAAC,EAAE;AACtD,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,CAACpN,SAAS,CAACU,SAAS,EAAE;AAC1B,MAAA,IAAI,CAAC2M,aAAa,CAACtJ,KAAK,CAAC;AAEzB,MAAA,IAAI,CAAC,IAAI,CAAC/D,SAAS,CAACuB,KAAK,CAACC,IAAI,GAAG1E,SAAS,CAACwQ,OAAO,MAAM,CAAC,EAAE;AACzD,QAAA;AACF,MAAA;AAEA,MAAA,IAAI,CAACtN,SAAS,CAACU,SAAS,EAAE;AAC5B,IAAA;AACF,EAAA;EAOAsE,UAAUA,CAACjB,KAAU,EAAE;AACrB,IAAA,IAAI,CAACsJ,aAAa,CAACtJ,KAAK,CAAC;AACzB,IAAA,IAAI,CAAC/D,SAAS,CAACU,SAAS,EAAE;AAC5B,EAAA;EAYA2M,aAAaA,CAACtJ,KAAU,EAAE;IACxB,IAAI0E,GAAW,EAAE8E,EAAO;AACxB,IAAA,MAAMrJ,IAAI,GAAG,IAAI,CAACC,OAAO,EAAE;AAC3B,IAAA,OAAO,CAAC,IAAI,CAACnE,SAAS,CAACuB,KAAK,CAACC,IAAI,GAAG1E,SAAS,CAACwQ,OAAO,MAAM,CAAC,EAAE;MAE5D,IAAI7E,GAAG,IAAI,IAAI,EAAE;AACfA,QAAAA,GAAG,GAAG,IAAI,CAACzI,SAAS,CAACuB,KAAK,CAACtD,KAAY;AACzC,MAAA,CAAC,MAEI,IAAIsP,EAAE,IAAI,IAAI,EAAE;AACnBA,QAAAA,EAAE,GAAG,GAAG;AACV,MAAA,CAAC,MAEI;QACH,MAAAC,sBAAA,GAAiC,IAAI,CAACxN,SAAS,CAAC4D,KAAK,CAAC,EAAE,CAAC;UAAA6J,sBAAA,GAAAxL,cAAA,CAAAuL,sBAAA,EAAA,CAAA,CAAA;AAAlD1J,UAAAA,QAAQ,GAAA2J,sBAAA,CAAA,CAAA,CAAA;AAAExP,UAAAA,KAAK,GAAAwP,sBAAA,CAAA,CAAA,CAAA;AAAEnC,UAAAA,KAAK,GAAAmC,sBAAA,CAAA,CAAA,CAAA;QAC7B,MAAMC,MAAM,GAAGxJ,IAAI,CAACO,IAAI,CAACC,GAAG,CAAC,CAACzG,KAAK,CAAC;AACpC,QAAA,MAAMoN,IAAI,GAAG,OAAOqC,MAAM,KAAK,UAAU;QAEzC,IAAI5J,QAAQ,KAAK,SAAS,EAAE;AAC1B,UAAA,MAAMQ,aAAa,GAAGC,OAAO,CAACC,GAAG,CAACN,IAAI,CAACO,IAAI,CAACC,GAAG,CAAC,EAAEzG,KAAK,CAAC;AACxD,UAAA,MAAMgP,EAAE,GAAG5B,IAAI,GAAGqC,MAAM,GAAGpJ,aAAa,GAAGrG,KAAK,GAAG,IAAI,CAAC4G,KAAK,CAACX,IAAI,EAAEjG,KAAK,CAAC;AAC1E,UAAA,IAAI,CAAC8G,aAAa,CAACb,IAAI,EAAEH,KAAK,EAAE0E,GAAG,EAAEwE,EAAE,EAAE3I,aAAa,EAAE+G,IAAI,EAAEC,KAAK,CAAC;AACtE,QAAA,CAAC,MAEI,IAAIxH,QAAQ,KAAK,QAAQ,EAAE;AAC9B,UAAA,IAAI,CAACiB,aAAa,CAACb,IAAI,EAAEH,KAAK,EAAE0E,GAAG,EAAExK,KAAK,EAAE,KAAK,EAAEoN,IAAI,EAAEC,KAAK,CAAC;AACjE,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAACvG,aAAa,CAACb,IAAI,EAAEH,KAAK,EAAE0E,GAAG,EAAExK,KAAK,EAAE,KAAK,EAAEoN,IAAI,EAAEC,KAAK,CAAC;AACjE,QAAA;AACA7C,QAAAA,GAAG,GAAG,IAAI;AACV8E,QAAAA,EAAE,GAAG,IAAI;AACX,MAAA;AACA,MAAA,IAAI,CAACvN,SAAS,CAACU,SAAS,EAAE;AAC5B,IAAA;AACF,EAAA;EACAiN,MAAMA,CAACC,GAAa,EAAE;AACpB1C,IAAAA,MAAM,CAAC2C,MAAM,CAAC,IAAI,EAAED,GAAG,CAAC;IACxB,IAAI,CAACA,GAAG,GAAGA,GAAG;AAChB,EAAA;EAEA9I,UAAUA,CAAChC,IAAY,EAAE;IACvB,OAAO;MACLA,IAAI;MACJgL,KAAK,EAAE,EAAE;AACTC,MAAAA,WAAW,EAAE;KACd;AACH,EAAA;EAEA7D,OAAOA,CAAChK,IAAS,EAAE;IACjB,OAAOA,IAAI,CAAC6N,WAAW;AACzB,EAAA;EAEAZ,UAAUA,CAACjN,IAAS,EAAE;IACpB,OAAOA,IAAI,CAACiN,UAAU;AACxB,EAAA;EAEAlK,YAAYA,CAACH,IAAY,EAAE;IACzB,OAAO;MACLA,IAAI;AACJiL,MAAAA,WAAW,EAAE;KACd;AACH,EAAA;AAEA3K,EAAAA,WAAWA,CAACjB,MAAW,EAAEjC,IAAS,EAAEN,IAAS,EAAE;IAC7C,OAAO,IAAI,CAACoO,aAAa,CAAC7L,MAAM,EAAEjC,IAAI,EAAEN,IAAI,CAAC;AAC/C,EAAA;AACAoO,EAAAA,aAAaA,CAAC7L,MAAW,EAAEjC,IAAS,EAAEN,IAAS,EAAE;AAC/C,IAAA,IAAIA,IAAI,EAAE;AACR,MAAA,MAAMqK,IAAI,GAAGrK,IAAI,CAACmO,WAAW;MAC7BnO,IAAI,CAACmO,WAAW,GAAG7N,IAAI;MACvBA,IAAI,CAAC6N,WAAW,GAAG9D,IAAI;AACzB,IAAA,CAAC,MAAM;AACL,MAAA,MAAMA,IAAI,GAAG9H,MAAM,CAACgL,UAAU;MAC9BhL,MAAM,CAACgL,UAAU,GAAGjN,IAAI;MACxBA,IAAI,CAAC6N,WAAW,GAAG9D,IAAI;AACzB,IAAA;AACF,EAAA;AAEAQ,EAAAA,MAAMA,CAACvK,IAAS,EAAEiC,MAAY,EAAEvC,IAAU,EAAE;IAC1C,OAAO,IAAI,CAACqO,aAAa,CAAC/N,IAAI,EAAEiC,MAAM,EAAEvC,IAAI,CAAC;AAC/C,EAAA;AAEAqO,EAAAA,aAAaA,CAAC/N,IAAS,EAAEiC,MAAW,EAAElB,WAAgB,EAAE;AACtD,IAAA,MAAMgJ,IAAI,GAAG/J,IAAI,CAAC6N,WAAW;AAC7B,IAAA,IAAI9M,WAAW,EAAE;MACfA,WAAW,CAAC8M,WAAW,GAAG9D,IAAI;AAChC,IAAA;AACA,IAAA,IAAI9H,MAAM,CAACgL,UAAU,KAAKjN,IAAI,EAAE;MAC9BiC,MAAM,CAACgL,UAAU,GAAGlD,IAAI;AAC1B,IAAA;AACF,EAAA;EAEAsB,OAAOA,CAACrL,IAAS,EAAEuI,GAAW,EAAExK,KAAU,EAAEqN,KAAc,EAAE;AAC1DpL,IAAAA,IAAI,CAAC4N,KAAK,CAACrF,GAAG,CAAC,GAAGxK,KAAK;AACzB,EAAA;AACF;;ACjmCO,MAAMiQ,SAAS,CAAC;AAErBC,EAAAA,OAAO,GAAG,CAAC;AAEXC,EAAAA,GAAG,GAAG9E,KAAK,CAAC+E,IAAI,CAAC;IAAEvQ,MAAM,EAAE,IAAI,CAACqQ;GAAS,EAAE,MAAM,GAAG,CAAC,CAACvI,IAAI,CAAC,EAAE,CAAC;EAE9D,OAAO0I,KAAK,GAAG,CAAA,OAAA,EAAUC,IAAI,CAACC,GAAG,EAAE,CAAA,CAAE;EACrC,OAAOC,QAAQ,GAAG,CAAA,UAAA,EAAaF,IAAI,CAACC,GAAG,EAAE,CAAA,CAAE;AAK3CE,EAAAA,UAAU,GAAG,KAAK;AAElB5H,EAAAA,YAAY,GAAG,IAAI;EAInBD,SAAS,GAAa,CAAC,CAAC,CAAC;AAEzB1H,EAAAA,CAAC,GAAG,CAAC;AAELwP,EAAAA,aAAa,GAAY,EAAE;AAS3BC,EAAAA,aAAa,GAAG,IAAIC,KAAK,EAAS;AAElC9O,EAAAA,WAAWA,CACD+O,IAAU,EACXxE,cAAuB,EAC9B;IAAA,IAAA,CAFQwE,IAAU,GAAVA,IAAU;IAAA,IAAA,CACXxE,cAAuB,GAAvBA,cAAuB;AAE9B,IAAA,IAAIA,cAAc,EAAE;MAClB,IAAI,CAACyE,QAAQ,CAACjS,SAAS,CAAC2E,MAAM,EAAE,EAAE,CAAC;MACnC,IAAI,CAACqF,YAAY,GAAG,IAAI;AAM1B,IAAA;AACF,EAAA;AACAkI,EAAAA,OAAOA,GAAG;AACR,IAAA,MAAMzN,KAAK,GAAG,IAAI,CAACA,KAAK;IACxB,IAAI,CAACb,SAAS,EAAE;AAChB,IAAA,OAAOa,KAAK;AACd,EAAA;EAEAoB,MAAMA,CAACsM,SAA4C,EAAE;IACnD,IAAI,CAAC1N,KAAK,GAAGhD,SAAS;IACtB,IAAI,CAACmQ,UAAU,GAAG,KAAK;IACvB,IAAI,CAAC5H,YAAY,GAAG,IAAI;AACxB,IAAA,IAAI,CAACD,SAAS,GAAG,CAAC,CAAC,CAAC;AACpBqE,IAAAA,MAAM,CAAC2C,MAAM,CAAC,IAAI,EAAEoB,SAAS,CAAC;AAChC,EAAA;EACAvM,QAAQA,CAACwM,IAA0B,EAAsB;AACvD,IAAA,MAAMC,IAAI,GAAG;MACXhQ,CAAC,EAAE,IAAI,CAACA,CAAC;AACTyP,MAAAA,aAAa,EAAE,IAAI,CAACA,aAAa,CAACQ,KAAK;KACxC;AACD,IAAA,IAAIF,IAAI,EAAE;AACR,MAAA,KAAK,MAAMG,CAAC,IAAIH,IAAI,EAAE;AACpBC,QAAAA,IAAI,CAACE,CAAC,CAAC,GAAG,IAAI,CAACA,CAAC,CAAC;QACjB,IAAIA,CAAC,KAAK,WAAW,EAAE;UACrBF,IAAI,CAACE,CAAC,CAAC,GAAG,IAAI,CAACA,CAAC,CAAC,CAACC,KAAK,EAAE;AAC3B,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,OAAOH,IAAI;AACb,EAAA;AAEAzH,EAAAA,IAAIA,GAAG;AACL,IAAA,MAAM6H,YAAY,GAAG,IAAI,CAAC1I,SAAS,CAAC,IAAI,CAACA,SAAS,CAAC/I,MAAM,GAAG,CAAC,CAAC;IAC9D,IAAI4Q,UAAU,GAAG,KAAK;IAEtB,IAAIc,YAAY,GAAG,CAAA,CAAE;IACrB,IAAI,CAACjO,KAAK,GAAGhD,SAAS;AACtB,IAAA,OAAO,CAAC,EAAE;MACR,MAAMyH,IAAI,GAAG,IAAI,CAACyJ,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;MAE9B,IAAI6G,IAAI,KAAK,IAAI,EAAE;AACjB0I,QAAAA,UAAU,GAAG,IAAI;AACjBc,QAAAA,YAAY,IAAIxJ,IAAI;QACpB,IAAI,CAAC7G,CAAC,EAAE;AACR,QAAA;AACF,MAAA;MAEA,IAAI,CAACuP,UAAU,EAAE;AACfc,QAAAA,YAAY,IAAIxJ,IAAI;QACpB,IAAI,CAAC7G,CAAC,EAAE;AACR,QAAA;AACF,MAAA;AAEAuP,MAAAA,UAAU,GAAG,KAAK;AAElB,MAAA,MAAAgB,kBAAA,GAA+B,IAAI,CAACC,YAAY,EAAE;QAA1C1R,KAAK,GAAAyR,kBAAA,CAALzR,KAAK;QAAE2R,WAAW,GAAAF,kBAAA,CAAXE,WAAW;AAC1B,MAAA,MAAMC,OAAO,GAAG5R,KAAK,CAACH,MAAM;AAC5B,MAAA,IAAI8R,WAAW,EAAE;MACjB,IAAIC,OAAO,GAAGN,YAAY,EAAE;AAC1BC,QAAAA,YAAY,IAAIvR,KAAK;AACvB,MAAA,CAAC,MAEI;AAGH,QAAA,KAAK,IAAIkB,CAAC,GAAG,IAAI,CAAC0H,SAAS,CAAC/I,MAAM,GAAG,CAAC,EAAEqB,CAAC,IAAI,CAAC,EAAEA,CAAC,EAAE,EAAE;AACnD,UAAA,MAAM2Q,MAAM,GAAG,IAAI,CAACjJ,SAAS,CAAC1H,CAAC,CAAC;UAEhC,IAAI0Q,OAAO,KAAKC,MAAM,EAAE;UAGxB,IAAID,OAAO,GAAGC,MAAM,EAAE;YACpB,MAAMzL,WAAW,CAAC,CAAA,YAAA,CAAc,CAAC;AACnC,UAAA;AAGA,UAAA,IAAI,IAAI,CAAC0L,sBAAsB,EAAE,EAAE;AACjC,YAAA;AACF,UAAA;AAEA,UAAA,IAAI,CAAClJ,SAAS,CAACrI,GAAG,EAAE;AAEpB,UAAA,IAAI,CAAC,IAAI,CAAC+C,KAAK,EAAE;YACf,IAAI,CAACwN,QAAQ,CAACjS,SAAS,CAACgF,MAAM,EAAEkO,MAAM,CAACF,MAAM,CAAC,CAAC;AACjD,UAAA,CAAC,MAAM;AACL,YAAA,IAAI,CAAClB,aAAa,CAAC5Q,IAAI,CAAC;cACtBwD,IAAI,EAAE1E,SAAS,CAACgF,MAAM;AACtBmO,cAAAA,QAAQ,EAAEnT,SAAS,CAACA,SAAS,CAACgF,MAAM,CAAC;cACrC7D,KAAK,EAAE+R,MAAM,CAACF,MAAM;AACtB,aAAC,CAAC;AACJ,UAAA;AACF,QAAA;AACA,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,IAAI,CAAC,IAAI,CAACvO,KAAK,EAAE;MACf,IAAI,CAACb,SAAS,EAAE;AAClB,IAAA;AACA,IAAA,OAAO8O,YAAY;AACrB,EAAA;EAEAU,OAAOA,CAACT,IAAY,EAAE;AAEpB,IAAA,IAAI,CAACA,IAAI,GAAG,IAAI,GAAGA,IAAI,CAACU,OAAO,EAAE,GAAG,CAAA,EAAA,EAAKjC,SAAS,CAACI,KAAK,CAAA,CAAE;AAC5D,EAAA;AAEA8B,EAAAA,QAAQA,GAAG;IACT,GAAG;MACD,IAAI,CAAC1P,SAAS,EAAE;MAChB2P,OAAO,CAACC,GAAG,CAAC,QAAQ,EAAExT,SAAS,CAAC,IAAI,CAACyE,KAAK,EAAEC,IAAI,CAAC,EAAE+O,IAAI,CAACC,SAAS,CAAC,IAAI,CAACjP,KAAK,EAAEtD,KAAK,IAAI,EAAE,CAAC,CAAC;AAC7F,IAAA,CAAC,QAAQ,CAAC,IAAI,CAACoD,KAAK,EAAE;AACxB,EAAA;AAEAA,EAAAA,KAAKA,GAAG;AAEN,IAAA,IAAI,CAAC,IAAI,CAACE,KAAK,EAAE,OAAO,KAAK;AAC7B,IAAA,OAAO,IAAI,CAACA,KAAK,CAACC,IAAI,GAAG1E,SAAS,CAAC2T,UAAU,IAAI,IAAI,CAAClP,KAAK,CAACtD,KAAK,KAAKiQ,SAAS,CAACI,KAAK;AAEvF,EAAA;AAEQS,EAAAA,QAAQA,CAACvN,IAAe,EAAEvD,KAAe,EAAE;IACjD,IAAI,CAACsD,KAAK,GAAG;MACXC,IAAI;AACJyO,MAAAA,QAAQ,EAAEnT,SAAS,CAAC0E,IAAI,CAAC;AACzBvD,MAAAA;KACD;IACD,IAAI,CAAC6I,YAAY,GAAG,KAAK;AAC3B,EAAA;AAEOpG,EAAAA,SAASA,GAAU;IACxB,IAAI;AAEF,MAAA,IAAI,IAAI,CAACW,KAAK,EAAE,EAAE;QAChB,OAAO,IAAI,CAACE,KAAK;AACnB,MAAA;MACA,IAAI,CAACA,KAAK,GAAGhD,SAAgB;AAC7B,MAAA,IAAI,IAAI,CAACqQ,aAAa,CAAC3P,GAAG,EAAE;QAC1B,MAAMsI,IAAI,GAAG,IAAI,CAACqH,aAAa,CAAC8B,KAAK,EAAG;QACxC,IAAI,CAAC3B,QAAQ,CAACxH,IAAI,CAAC/F,IAAI,EAAE+F,IAAI,CAACtJ,KAAK,CAAC;QACpC,OAAO,IAAI,CAACsD,KAAK;AACnB,MAAA;MACAoP,KAAK,EAAE,OAAO,CAAC,EAAE;QACf,IAAI,IAAI,CAACjC,UAAU,EAAE;UACnB,IAAI,CAACkC,IAAI,EAAE;AAEb,QAAA,CAAC,MAAM;UACL,MAAM5K,IAAI,GAAG,IAAI,CAACyJ,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;AAC9B,UAAA,QAAQ6G,IAAI;AACV,YAAA,KAAK,IAAI;AACT,YAAA,KAAK,GAAG;AAEN,cAAA;AAEF,YAAA,KAAK,IAAI;cACP,IAAI,CAAC6K,OAAO,EAAE;cAEd,IAAI,CAACnC,UAAU,GAAG,IAAI;AACtB,cAAA;AACF,YAAA,KAAK,GAAG;cACN,IAAI,CAACoC,UAAU,EAAE;AACjB,cAAA;AACF,YAAA,KAAK,GAAG;cACN,IAAI,CAACC,IAAI,EAAE;AACX,cAAA;AACF,YAAA,KAAK,GAAG;AACR,YAAA,KAAK,GAAG;AACN,cAAA,IAAI,CAACnM,GAAG,CAACoB,IAAI,CAAC;AACd,cAAA;AACF,YAAA,KAAK,GAAG;AACN,cAAA,MAAMgL,UAAU,GAAG,IAAI,CAACC,KAAK,EAAE;cAC/B,IAAI,CAAClC,QAAQ,CAACjS,SAAS,CAACwI,YAAY,EAAE0L,UAAU,CAAC;AACjD,cAAA;AACF,YAAA,KAAK,GAAG;AACN,cAAA,MAAME,OAAO,GAAG,IAAI,CAACC,OAAO,CAACnL,IAAI,CAAC;AAClC,cAAA,IAAIkL,OAAO,EAAE;AACf,YAAA,KAAK,GAAG;cACN,IAAI,CAACnC,QAAQ,CAACjS,SAAS,CAACsU,SAAS,EAAE,GAAG,CAAC;AACvC,cAAA;AACF,YAAA;AACE,cAAA,IAAIC,KAAK,CAACrL,IAAI,CAAC,EAAE;AACf,gBAAA,IAAI,CAACsL,MAAM,CAACtL,IAAI,CAAC;AACjB,gBAAA;AACF,cAAA;cACA,IAAI,OAAOA,IAAI,KAAK,QAAQ,IAAIuL,aAAa,CAACvL,IAAI,EAAE,CAAC,CAAC,EAAE;AACtD,gBAAA,IAAI,CAACwL,UAAU,CAACxL,IAAI,CAAC;AACvB,cAAA;AACA,cAAA;AACJ;UAEA,IAAI,CAAC7G,CAAC,EAAE;AACV,QAAA;QAGA,IAAI,IAAI,CAACoC,KAAK,EAAE;AACd,UAAA;AACF,QAAA;AACF,MAAA;MACA,OAAO,IAAI,CAACA,KAAK;IACnB,CAAC,CAAC,OAAOkQ,KAAK,EAAE;AACdpB,MAAAA,OAAO,CAACoB,KAAK,CAACA,KAAK,CAAC;MACpB,OAAO,IAAI,CAAClQ,KAAK;AACnB,IAAA,CAAC,SAAS;MACR,IAAI,CAACoN,aAAa,CAAC3Q,IAAI,CAAC,IAAI,CAACuD,KAAK,CAAC;AACrC,IAAA;AACF,EAAA;AAEAiL,EAAAA,OAAOA,GAAG;IACR,IAAIvO,KAAK,GAAG,EAAE;IACd,IAAI,CAACsD,KAAK,GAAG,IAAI;AACjB,IAAA,OAAO,CAAC,EAAE;MACR,MAAMyE,IAAI,GAAG,IAAI,CAACyJ,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;MAC9B,IAAI6G,IAAI,KAAK,IAAI,EAAE;AACjB,QAAA;AACF,MAAA;AACA/H,MAAAA,KAAK,IAAI+H,IAAI;MACb,IAAI,CAAC7G,CAAC,EAAE;AACV,IAAA;AACAlB,IAAAA,KAAK,GAAGA,KAAK,CAACyT,IAAI,EAAE;IACpB,IAAI,CAAC3C,QAAQ,CAACjS,SAAS,CAAC2T,UAAU,EAAExS,KAAK,IAAI,IAAI,CAAC;IAClD,OAAO,IAAI,CAACsD,KAAK;AACnB,EAAA;AASO2E,EAAAA,KAAKA,GAAG;IACb,IAAI,CAAC3E,KAAK,GAAG,IAAI;IACjB,IAAItD,KAAK,GAAG,EAAE;AACd,IAAA,OAAO,CAAC,EAAE;MACR,MAAM+H,IAAI,GAAG,IAAI,CAACyJ,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;AAC9B,MAAA,IAAI6G,IAAI,KAAK,GAAG,IAAIA,IAAI,KAAK,IAAI,EAAE;AACjC,QAAA,IAAI,CAAC+I,QAAQ,CAACjS,SAAS,CAAC2T,UAAU,EAAExS,KAAK,CAACyT,IAAI,EAAE,CAAC;QACjD,OAAO,IAAI,CAACnQ,KAAK;AACnB,MAAA,CAAC,MAAM;AACLtD,QAAAA,KAAK,IAAI+H,IAAI;AACf,MAAA;MACA,IAAI,CAAC7G,CAAC,EAAE;AACV,IAAA;AACF,EAAA;AAEO8G,EAAAA,QAAQA,GAAG;AAChB,IAAA,IAAI9G,CAAC,GAAG,IAAI,CAACA,CAAC;AACd,IAAA,OAAO,IAAI,CAACsQ,IAAI,CAACtQ,CAAC,CAAC,KAAK,GAAG,IAAI,IAAI,CAACsQ,IAAI,CAACtQ,CAAC,CAAC,KAAK,IAAI,EAAE;AACpDA,MAAAA,CAAC,EAAE;AACL,IAAA;AACA,IAAA,OAAO,IAAI,CAACsQ,IAAI,CAACtQ,CAAC,CAAC;AACrB,EAAA;AAEQ2R,EAAAA,UAAUA,GAAG;IACnB,IAAI,CAAC/B,QAAQ,CAACjS,SAAS,CAAC6U,MAAM,EAAE,GAAG,CAAC;AACtC,EAAA;AACQZ,EAAAA,IAAIA,GAAG;IACb,IAAI,CAAChC,QAAQ,CAACjS,SAAS,CAACsQ,IAAI,EAAE,GAAG,CAAC;AACpC,EAAA;EACQ+D,OAAOA,CAACnL,IAAY,EAAE;IAC5B,IAAI4L,KAAK,GAAG,IAAI,CAACnC,IAAI,CAAC,IAAI,CAACtQ,CAAC,GAAG,CAAC,CAAC;IAEjC,IAAIyS,KAAK,KAAK,GAAG,EAAE;AACjB,MAAA,OAAO,KAAK;AACd,IAAA;IACA,IAAI,CAACzS,CAAC,EAAE;IACR,IAAIlB,KAAK,GAAG,IAAI;IAChB,IAAI4T,UAAU,GAAG,CAAC;AAClB,IAAA,OAAO,CAAC,EAAE;MACRD,KAAK,GAAG,IAAI,CAACnC,IAAI,CAAC,IAAI,CAACtQ,CAAC,GAAG,CAAC,CAAC;AAC7BlB,MAAAA,KAAK,IAAI2T,KAAK;MAEd,IAAI,CAACzS,CAAC,EAAE;MACR,IAAIyS,KAAK,KAAK,GAAG,EAAE;AACjBC,QAAAA,UAAU,EAAE;AACd,MAAA;MAEA,IAAID,KAAK,KAAK,GAAG,EAAE;QAEjB,IAAI,CAACC,UAAU,EAAE;AACf,UAAA;AACF,QAAA;AACAA,QAAAA,UAAU,EAAE;AACd,MAAA;AACF,IAAA;IACA,IAAI,CAAC9C,QAAQ,CAACjS,SAAS,CAAC2T,UAAU,EAAExS,KAAK,CAAC;AAC1C,IAAA,OAAO,IAAI;AACb,EAAA;AAEQgT,EAAAA,KAAKA,GAAG;AACd,IAAA,IAAIa,SAAiB;MACnBC,QAAgB;AAChBC,MAAAA,KAAK,GAAG,CAAC;AACT/T,MAAAA,KAAK,GAAG,EAAE;AACVgU,MAAAA,cAAc,GAAG,CAAC;AACpB,IAAA,OAAO,CAAC,EAAE;MACR,MAAMjM,IAAI,GAAG,IAAI,CAACyJ,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;MAC9B,MAAM+S,QAAQ,GAAG,IAAI,CAACzC,IAAI,CAAC,IAAI,CAACtQ,CAAC,GAAG,CAAC,CAAC;AAGtC,MAAA,IAAI2S,SAAS,KAAK,QAAQ,IAAI9L,IAAI,KAAK,IAAI,EAAE;AAC3C8L,QAAAA,SAAS,GAAG,IAAI;AAClB,MAAA,CAAC,MAAM,IAAIA,SAAS,KAAK,OAAO,IAAI9L,IAAI,KAAK,GAAG,IAAIkM,QAAQ,KAAK,GAAG,EAAE;AACpEJ,QAAAA,SAAS,GAAG,IAAI;QAChB7T,KAAK,IAAI,IAAI,CAACwR,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;QAC1B,IAAI,CAACA,CAAC,EAAE;MACV,CAAC,MAEI,IAAI4S,QAAQ,EAAE;QAEjB,IAAI/L,IAAI,KAAK+L,QAAQ,IAAIE,cAAc,GAAG,CAAC,KAAK,CAAC,EAAE;AACjDF,UAAAA,QAAQ,GAAG,IAAI;AACjB,QAAA;QACAE,cAAc,GAAGjM,IAAI,KAAK,IAAI,GAAGiM,cAAc,GAAG,CAAC,GAAG,CAAC;AACzD,MAAA,CAAC,MAAM;AAEL,QAAA,IAAIjM,IAAI,KAAK,GAAG,IAAIkM,QAAQ,KAAK,GAAG,EAAE;AACpCJ,UAAAA,SAAS,GAAG,QAAQ;UACpB7T,KAAK,IAAI,IAAI,CAACwR,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;UAC1B,IAAI,CAACA,CAAC,EAAE;QACV,CAAC,MAAM,IAAI6G,IAAI,KAAK,GAAG,IAAIkM,QAAQ,KAAK,GAAG,EAAE;AAC3CJ,UAAAA,SAAS,GAAG,OAAO;UACnB7T,KAAK,IAAI,IAAI,CAACwR,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;UAC1B,IAAI,CAACA,CAAC,EAAE;AACV,QAAA,CAAC,MAAM,IAAI6G,IAAI,KAAK,GAAG,IAAIA,IAAI,KAAK,GAAG,IAAIA,IAAI,KAAK,GAAG,EAAE;AACvD+L,UAAAA,QAAQ,GAAG/L,IAAI;AACjB,QAAA,CAAC,MAEI,IAAIA,IAAI,KAAK,GAAG,EAAE;AACrBgM,UAAAA,KAAK,EAAE;AACT,QAAA,CAAC,MAAM,IAAIhM,IAAI,KAAK,GAAG,EAAE;AACvBgM,UAAAA,KAAK,EAAE;AACT,QAAA;AACF,MAAA;MAEA,IAAIA,KAAK,KAAK,CAAC,IAAID,QAAQ,IAAI,IAAI,IAAID,SAAS,IAAI,IAAI,EAAE;AACxD,QAAA,OAAO7T,KAAK,CAACqR,KAAK,CAAC,CAAC,CAAC;AACvB,MAAA;MACArR,KAAK,IAAI,IAAI,CAACwR,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;MAC1B,IAAI,CAACA,CAAC,EAAE;AACV,IAAA;AACF,EAAA;AAEQ0R,EAAAA,OAAOA,GAAG;IAChB,IAAI5S,KAAK,GAAG,IAAI;AAChB,IAAA,IAAI2T,KAAK;AACT,IAAA,OAAO,CAAC,EAAE;MACRA,KAAK,GAAG,IAAI,CAACnC,IAAI,CAAC,IAAI,CAACtQ,CAAC,GAAG,CAAC,CAAC;MAC7B,IAAIyS,KAAK,KAAK,IAAI,EAAE;AAClB,QAAA;AACF,MAAA;AACA3T,MAAAA,KAAK,IAAI2T,KAAK;MAEd,IAAI,CAACzS,CAAC,EAAE;AACV,IAAA;IAEA,IAAI,IAAI,CAAC2H,YAAY,EAAE;AACrB,MAAA;AACF,IAAA;IACA,IAAI,CAACiI,QAAQ,CAACjS,SAAS,CAACwQ,OAAO,EAAErP,KAAK,CAAC;AACzC,EAAA;AACQ0R,EAAAA,YAAYA,GAAG;IACrB,IAAI1R,KAAK,GAAG,EAAE;AACd,IAAA,IAAI2T,KAAK;IACT,IAAIhC,WAAW,GAAG,KAAK;AAEvB,IAAA,OAAO,CAAC,EAAE;MACR,MAAMsC,QAAQ,GAAG,IAAI,CAACzC,IAAI,CAAC,IAAI,CAACtQ,CAAC,CAAC;AAElC,MAAA,QAAQ+S,QAAQ;AACd,QAAA,KAAK,IAAI;UACPN,KAAK,GAAG,IAAI,CAACxD,GAAG;AAChB,UAAA;AACF,QAAA,KAAK,GAAG;AACNwD,UAAAA,KAAK,GAAG,GAAG;AACX,UAAA;AACF,QAAA,KAAK,IAAI;AACPA,UAAAA,KAAK,GAAG,IAAI;AACZ,UAAA;AACF,QAAA;AACEA,UAAAA,KAAK,GAAG,EAAE;AACV,UAAA;AACJ;MAGA,IAAIA,KAAK,KAAK,IAAI,EAAE;AAClBhC,QAAAA,WAAW,GAAG,IAAI;AAClB,QAAA;AACF,MAAA;MACA,IAAI,CAACgC,KAAK,EAAE;AACV,QAAA;AACF,MAAA;AACA3T,MAAAA,KAAK,IAAI2T,KAAK;MACd,IAAI,CAACzS,CAAC,EAAE;AACV,IAAA;IACA,OAAO;MACLlB,KAAK;AACL2R,MAAAA;KACD;AACH,EAAA;AACQgB,EAAAA,IAAIA,GAAG;AACb,IAAA,MAAAuB,mBAAA,GAA+B,IAAI,CAACxC,YAAY,EAAE;MAA1C1R,KAAK,GAAAkU,mBAAA,CAALlU,KAAK;MAAE2R,WAAW,GAAAuC,mBAAA,CAAXvC,WAAW;AAC1B,IAAA,IAAIA,WAAW,EAAE;MAEf,IAAI,CAAClB,UAAU,GAAG,IAAI;AACtB,MAAA;AACF,IAAA;IAEA,IAAI,CAACA,UAAU,GAAG,KAAK;IAEvB,IAAI,IAAI,CAAC5H,YAAY,EAAE;MACrB,IAAI,CAACD,SAAS,CAAC,CAAC,CAAC,GAAG5I,KAAK,CAACH,MAAM;AAChC,MAAA;AACF,IAAA;AACA,IAAA,IAAI+R,OAAO,GAAG5R,KAAK,CAACH,MAAM;AAC1B,IAAA,MAAMsU,YAAY,GAAGvC,OAAO,GAAG,CAAC;AAChC,IAAA,MAAMwC,OAAO,GAAG,IAAI,CAACxL,SAAS,CAAC,IAAI,CAACA,SAAS,CAAC/I,MAAM,GAAG,CAAC,CAAC;IACzD,IAAI+R,OAAO,GAAGwC,OAAO,EAAE;AACrB,MAAA,IAAI,CAACxL,SAAS,CAAC7I,IAAI,CAAC6R,OAAO,CAAC;MAC5B,IAAI,CAACd,QAAQ,CAACjS,SAAS,CAAC2E,MAAM,EAAEoO,OAAO,CAAC;AACxC,MAAA,OAAOuC,YAAY;AACrB,IAAA;IACA,IAAIvC,OAAO,GAAGwC,OAAO,EAAE;MAErB,KAAK,IAAIlT,CAAC,GAAG,IAAI,CAAC0H,SAAS,CAAC/I,MAAM,EAAEqB,CAAC,EAAE,GAAI;AACzC,QAAA,MAAM2Q,MAAM,GAAG,IAAI,CAACjJ,SAAS,CAAC1H,CAAC,CAAC;QAEhC,IAAI0Q,OAAO,KAAKC,MAAM,EAAE;QAExB,IAAID,OAAO,GAAGC,MAAM,EAAE;UACpB,MAAMzL,WAAW,CAAC,SAAS,CAAC;AAC9B,QAAA;AAEA,QAAA,IAAI,IAAI,CAAC0L,sBAAsB,EAAE,EAAE;AACjC,UAAA;AACF,QAAA;AACA,QAAA,IAAI,CAAClJ,SAAS,CAACrI,GAAG,EAAE;AACpB,QAAA,IAAI,CAAC,IAAI,CAAC+C,KAAK,EAAE;UACf,IAAI,CAACwN,QAAQ,CAACjS,SAAS,CAACgF,MAAM,EAAEkO,MAAM,CAACF,MAAM,CAAC,CAAC;AACjD,QAAA,CAAC,MAEI;AACH,UAAA,IAAI,CAAClB,aAAa,CAAC5Q,IAAI,CAAC;YACtBwD,IAAI,EAAE1E,SAAS,CAACgF,MAAM;AACtBmO,YAAAA,QAAQ,EAAEnT,SAAS,CAACA,SAAS,CAACgF,MAAM,CAAC;YACrC7D,KAAK,EAAE+R,MAAM,CAACF,MAAM;AACtB,WAAC,CAAC;AACJ,QAAA;AACF,MAAA;AACA,MAAA,OAAOsC,YAAY;AACrB,IAAA;AAEA,IAAA,OAAOA,YAAY;AACrB,EAAA;AAEQrC,EAAAA,sBAAsBA,GAAG;IAC/B,MAAMuC,GAAG,GAAG,IAAI,CAACzL,SAAS,CAAC/I,MAAM,KAAK,CAAC;AACvC,IAAA,IAAIwU,GAAG,EAAE;AACP,MAAA,IAAI,CAAC,IAAI,CAAC/Q,KAAK,EAAE;QAEf,IAAI,IAAI,CAAC+I,cAAc,EAAE;UACvB,IAAI,CAACyE,QAAQ,CAACjS,SAAS,CAACgF,MAAM,EAAE,EAAE,CAAC;AACrC,QAAA,CAAC,MAAM;UACL,IAAI,CAACiN,QAAQ,CAACjS,SAAS,CAAC2T,UAAU,EAAEvC,SAAS,CAACI,KAAK,CAAC;AACtD,QAAA;AACF,MAAA,CAAC,MAAM;QACL,IAAI,IAAI,CAAChE,cAAc,EAAE;AACvB,UAAA,IAAI,CAACsE,aAAa,CAAC5Q,IAAI,CAAC;YACtBwD,IAAI,EAAE1E,SAAS,CAACgF,MAAM;AACtBmO,YAAAA,QAAQ,EAAEnT,SAAS,CAACA,SAAS,CAACgF,MAAM,CAAC;AACrC7D,YAAAA,KAAK,EAAE;AACT,WAAC,CAAC;AACJ,QAAA,CAAC,MAAM;AACL,UAAA,IAAI,CAAC2Q,aAAa,CAAC5Q,IAAI,CAAC;YACtBwD,IAAI,EAAE1E,SAAS,CAAC2T,UAAU;AAC1BR,YAAAA,QAAQ,EAAEnT,SAAS,CAACA,SAAS,CAAC2T,UAAU,CAAC;YACzCxS,KAAK,EAAEiQ,SAAS,CAACI;AACnB,WAAC,CAAC;AACJ,QAAA;AACF,MAAA;AACF,IAAA;AACA,IAAA,OAAOgE,GAAG;AACZ,EAAA;EAEQd,UAAUA,CAACxL,IAAY,EAAE;IAC/B,IAAI/H,KAAK,GAAG+H,IAAI;AAChB,IAAA,IAAI4L,KAAK;AACT,IAAA,OAAO,CAAC,EAAE;MACRA,KAAK,GAAG,IAAI,CAACnC,IAAI,CAAC,IAAI,CAACtQ,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAA,IAAI,OAAOyS,KAAK,KAAK,QAAQ,IAAI,CAACL,aAAa,CAACK,KAAK,EAAE,CAAC,CAAC,EAAE;AACzD,QAAA;AACF,MAAA;AACA3T,MAAAA,KAAK,IAAI2T,KAAK;MACd,IAAI,CAACzS,CAAC,EAAE;AACV,IAAA;IACA,IAAIlB,KAAK,KAAKiQ,SAAS,CAACI,KAAK,IAAI,IAAI,CAAChE,cAAc,EAAE;MACpD,IAAI,CAACyE,QAAQ,CAACjS,SAAS,CAACgF,MAAM,EAAE,EAAE,CAAC;AACnC,MAAA;AACF,IAAA;IAEA,IAAIyQ,SAAS,GACXtU,KAAK,KAAK,MAAM,GACZ,IAAI,GACJA,KAAK,KAAK,WAAW,GACnBM,SAAS,GACTN,KAAK,KAAK,OAAO,GACf,KAAK,GACLA,KAAK,KAAK,MAAM,GACd,IAAI,GACJA,KAAK;IACjB,IAAI,CAAC8Q,QAAQ,CAACjS,SAAS,CAAC2T,UAAU,EAAE8B,SAAS,CAAC;AAChD,EAAA;EACQ3N,GAAGA,CAACoB,IAAY,EAAE;IACxB,IAAI/H,KAAK,GAAG,EAAE;AACd,IAAA,IAAI2T,KAAK;IACT,IAAIY,wBAAwB,GAAG,CAAC;AAChC,IAAA,OAAO,CAAC,EAAE;MACRZ,KAAK,GAAG,IAAI,CAACnC,IAAI,CAAC,IAAI,CAACtQ,CAAC,GAAG,CAAC,CAAC;MAC7B,MAAMsT,SAAS,GAAGD,wBAAwB;MAC1C,IAAIZ,KAAK,KAAK,IAAI,EAAE;AAClBY,QAAAA,wBAAwB,EAAE;AAC5B,MAAA,CAAC,MAAM;AACLA,QAAAA,wBAAwB,GAAG,CAAC;AAC9B,MAAA;MACA,IAAI,CAACrT,CAAC,EAAE;MAIR,IAAIyS,KAAK,KAAK5L,IAAI,IAAIyM,SAAS,GAAG,CAAC,KAAK,CAAC,EAAE;AACzC,QAAA;AACF,MAAA;AACAxU,MAAAA,KAAK,IAAI2T,KAAK;AAChB,IAAA;IACA,IAAI,CAAC7C,QAAQ,CAACjS,SAAS,CAAC2T,UAAU,EAAExS,KAAK,CAAC;AAC5C,EAAA;EACQqT,MAAMA,CAACtL,IAAY,EAAE;IAC3B,IAAI/H,KAAK,GAAG+H,IAAI;AAChB,IAAA,IAAI4L,KAAK;AACT,IAAA,OAAO,CAAC,EAAE;MACRA,KAAK,GAAG,IAAI,CAACnC,IAAI,CAAC,IAAI,CAACtQ,CAAC,GAAG,CAAC,CAAC;AAC7B,MAAA,IAAI,CAACkS,KAAK,CAACO,KAAK,CAAC,EAAE;AACjB,QAAA;AACF,MAAA;AACA3T,MAAAA,KAAK,IAAI2T,KAAK;MACd,IAAI,CAACzS,CAAC,EAAE;AACV,IAAA;IACA,IAAI,CAAC4P,QAAQ,CAACjS,SAAS,CAAC2T,UAAU,EAAEiC,MAAM,CAACzU,KAAK,CAAC,CAAC;AACpD,EAAA;AACQ0U,EAAAA,GAAGA,GAAG;IACZ,IAAI,CAAC5D,QAAQ,CAACjS,SAAS,CAAC8V,GAAG,EAAE,aAAa,CAAC;AAC7C,EAAA;AAEAC,EAAAA,MAAM,GAAG,WAAW;AAEpBvH,EAAAA,KAAK,GAAG,CAAC;EACT1H,KAAK,GAAIkK,KAAyB,IAA+C;AAC/E,IAAA,MAAM7P,KAAK,GAAG,IAAI,CAACsD,KAAK,CAACtD,KAAK;IAC9B,MAAM6U,aAAa,GAAG,IAAI,CAACvR,KAAK,CAACC,IAAI,GAAG1E,SAAS,CAACwI,YAAY;AAC9D,IAAA,MAAMyN,YAAY,GAAG,OAAO9U,KAAK,KAAK,QAAQ,IAAIA,KAAK,CAAC+U,OAAO,CAAC,IAAI,CAACH,MAAM,CAAC,KAAK,CAAC;IAClF,MAAM/O,QAAkB,GAAGgP,aAAa,GAAG,SAAS,GAAGC,YAAY,GAAG,QAAQ,GAAGxU,SAAS;AAE1F,IAAA,IAAI,IAAI,CAACuQ,IAAI,IAAIiE,YAAY,EAAE;AAC7B,MAAA,MAAMzH,KAAK,GAAGoH,MAAM,CAACzU,KAAK,CAACqR,KAAK,CAAC,IAAI,CAACuD,MAAM,CAAC/U,MAAM,CAAC,CAAC;AACrD,MAAA,MAAM0N,GAAG,GAAG,IAAI,CAACsD,IAAI,CAAC;AACpB,QAAA,GAAGhB,KAAK;QACR+E,MAAM,EAAE,IAAI,CAACA,MAAM;AACnB1T,QAAAA,CAAC,EAAEmM;AACL,OAAC,CAAC;AAEF,MAAA,OAAO,CAACxH,QAAQ,EAAE0H,GAAG,EAAEF,KAAK,CAAC;IAC/B,CAAC,MAEI,IAAIwH,aAAa,EAAE;AACtB,MAAA,OAAO,CAAChP,QAAQ,EAAE7F,KAAK,CAAC;AAC1B,IAAA;AAEA,IAAA,OAAO,CAAC6F,QAAQ,EAAE7F,KAAK,CAAC;EAC1B,CAAC;EAEDgV,IAAIA,CAACC,SAA4B,EAAE;AACjC,IAAA,IAAI,OAAOA,SAAS,KAAK,QAAQ,EAAE;AACjC,MAAA,IAAI,CAAChD,OAAO,CAACgD,SAAS,CAAC;AACzB,IAAA,CAAC,MAAM;MACL,IAAIzD,IAAI,GAAG,EAAE;AACb,MAAA,KAAK,IAAItQ,CAAC,GAAG,CAAC,EAAEA,CAAC,GAAG+T,SAAS,CAACpV,MAAM,GAAG,CAAC,EAAEqB,CAAC,EAAE,EAAE;AAC7C,QAAA,MAAMgU,QAAQ,GAAGD,SAAS,CAAC/T,CAAC,CAAC;QAC7BsQ,IAAI,IAAI0D,QAAQ,GAAG,CAAA,EAAG,IAAI,CAACN,MAAM,CAAA,EAAG1T,CAAC,CAAA,CAAE;AACzC,MAAA;AACA,MAAA,IAAI,CAAC+Q,OAAO,CAACT,IAAI,GAAGyD,SAAS,CAACA,SAAS,CAACpV,MAAM,GAAG,CAAC,CAAC,CAAC;AACtD,IAAA;AACF,EAAA;AACF;;ACznBO,SAASsV,IAAIA,CAACF,SAA+B,EAAE,GAAGG,MAAa,EAAE;AACtE,EAAA,MAAMC,EAAU,GAAG,SAASA,EAAEA,CAACC,KAAc,EAAE;AAC7C,IAAA,MAAMvT,SAAS,GAAG,IAAIkO,SAAS,CAAC,CAAC;AAAE/O,MAAAA;AAAE,KAAC,KAAK;MACzC,OAAOkU,MAAM,CAAClU,CAAC,CAAC;IAClB,CAAC,EAAEoU,KAAK,CAAC;IACTvT,SAAS,CAACiT,IAAI,CAAC3J,KAAK,CAAC+E,IAAI,CAAC6E,SAAS,CAAC,CAAC;AACrC,IAAA,OAAOlT,SAAS;EAClB,CAAC;AACDsT,EAAAA,EAAE,CAACtH,UAAU,GAAGF,KAAK,CAAC0H,OAAO;AAC7B,EAAA,OAAOF,EAAE;AACX;AAGO,SAASG,YAAYA,CAACC,MAAwB,EAAE;AAErD,EAAA,OAAO,SAAS/H,MAAMA,CAAIgI,IAAkB,EAAErT,IAAS,EAAE;AACvD,IAAA,MAAMsT,KAAK,GAAGD,IAAI,CAAC5H,GAAG,EAAE;IACxB,MAAM/L,SAAoB,GAAG4T,KAAK,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC;AAC/C,IAAA,MAAMC,IAAI,GAAG,IAAI/T,WAAW,CAACE,SAAS,CAAC;AACvC6T,IAAAA,IAAI,CAAClG,MAAM,CAAC+F,MAAM,CAAC;AAEnB,IAAA,MAAMnT,aAA4B,GAAG;MACnCJ,WAAW,EAAEpD,QAAQ,CAACQ,SAAS;AAC/ByD,MAAAA,UAAU,EAAEV,IAAI;AAChB4D,MAAAA,IAAI,EAAE0P,KAAK;AACX5T,MAAAA;KACD;AAED6T,IAAAA,IAAI,CAACxT,OAAO,CAACC,IAAI,EAAEC,aAAa,CAAC;AAEjC,IAAA,OAAO,CAACA,aAAa,EAAEqT,KAAK,CAAC;EAC/B,CAAC;AACH;;;;"}