@sortedyuan/maybecode 0.3.2 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (295) hide show
  1. package/README.md +166 -55
  2. package/README.zh-CN.md +267 -0
  3. package/dist/application.d.ts +40 -34
  4. package/dist/application.d.ts.map +1 -1
  5. package/dist/application.js +290 -170
  6. package/dist/application.js.map +1 -1
  7. package/dist/args.d.ts +2 -2
  8. package/dist/args.d.ts.map +1 -1
  9. package/dist/args.js +50 -27
  10. package/dist/args.js.map +1 -1
  11. package/dist/bin.js +82 -71
  12. package/dist/bin.js.map +4 -4
  13. package/dist/cli/chunk-3IORPKBL.js +3572 -0
  14. package/dist/cli/chunk-3IORPKBL.js.map +7 -0
  15. package/dist/cli/{chunk-LVTRXPDS.js → chunk-4B2Z6KW7.js} +1547 -1536
  16. package/dist/cli/chunk-4B2Z6KW7.js.map +7 -0
  17. package/dist/cli/{chunk-JT6VBKOM.js → chunk-4WG6JIJJ.js} +127 -33
  18. package/dist/cli/{chunk-JT6VBKOM.js.map → chunk-4WG6JIJJ.js.map} +3 -3
  19. package/dist/cli/{chunk-K5JWPNSY.js → chunk-5SLWALZK.js} +3521 -16164
  20. package/dist/cli/chunk-5SLWALZK.js.map +7 -0
  21. package/dist/cli/chunk-MNBYXL5Y.js +132 -0
  22. package/dist/cli/chunk-MNBYXL5Y.js.map +7 -0
  23. package/dist/cli/{chunk-F4XRPLUM.js → chunk-SLWLUEHQ.js} +226 -86
  24. package/dist/cli/chunk-SLWLUEHQ.js.map +7 -0
  25. package/dist/cli/chunk-UQDZ55LQ.js +199 -0
  26. package/dist/cli/chunk-UQDZ55LQ.js.map +7 -0
  27. package/dist/cli/{chunk-7ISOHFS7.js → chunk-WMSG5ZTR.js} +717 -388
  28. package/dist/cli/chunk-WMSG5ZTR.js.map +7 -0
  29. package/dist/cli/chunk-WVIRS76R.js +4057 -0
  30. package/dist/cli/chunk-WVIRS76R.js.map +7 -0
  31. package/dist/cli/{chunk-HOU5ITUK.js → chunk-XTEMRAQW.js} +1 -1
  32. package/dist/cli/chunk-XTEMRAQW.js.map +7 -0
  33. package/dist/cli/chunk-Z3BOPBVU.js +91 -0
  34. package/dist/cli/chunk-Z3BOPBVU.js.map +7 -0
  35. package/dist/cli/{configured-WHY3GGAJ.js → configured-ACNM6TRQ.js} +10 -9
  36. package/dist/cli/{file-type-R2T7TBHI.js → file-type-HLHPV7WC.js} +817 -13
  37. package/dist/cli/file-type-HLHPV7WC.js.map +7 -0
  38. package/dist/cli/mcp-auth-XD5U7WCV.js +74 -0
  39. package/dist/cli/mcp-auth-XD5U7WCV.js.map +7 -0
  40. package/dist/cli/onboarding-WQWCPYEO.js +530 -0
  41. package/dist/cli/onboarding-WQWCPYEO.js.map +7 -0
  42. package/dist/cli/onboarding-check-HRRI5OJ7.js +32 -0
  43. package/dist/cli/onboarding-check-HRRI5OJ7.js.map +7 -0
  44. package/dist/cli/{retained-tui-VJ3VX4R3.js → retained-tui-QF5VMYLC.js} +788 -332
  45. package/dist/cli/retained-tui-QF5VMYLC.js.map +7 -0
  46. package/dist/cli/{sixel-LWTCM76G.js → sixel-ISZ4FZ3U.js} +37 -37
  47. package/dist/cli/{sixel-LWTCM76G.js.map → sixel-ISZ4FZ3U.js.map} +1 -1
  48. package/dist/cli/{team-T7G7PPNN.js → team-O2I5BXHM.js} +7 -6
  49. package/dist/cli/{team-v2-JGBBQ7FR.js → team-v2-YYO2G7DJ.js} +816 -390
  50. package/dist/cli/team-v2-YYO2G7DJ.js.map +7 -0
  51. package/dist/cli/{web-server-FOMNPY7Q.js → web-server-SXMH6FGA.js} +55 -19
  52. package/dist/cli/web-server-SXMH6FGA.js.map +7 -0
  53. package/dist/cli/{web-ui-COB6PKC5.js → web-ui-UWQUFE4W.js} +7 -6
  54. package/dist/config-schema.json +337 -0
  55. package/dist/configured.d.ts +18 -11
  56. package/dist/configured.d.ts.map +1 -1
  57. package/dist/configured.js +213 -390
  58. package/dist/configured.js.map +1 -1
  59. package/dist/controller.d.ts +19 -18
  60. package/dist/controller.d.ts.map +1 -1
  61. package/dist/delegation-commands.d.ts +1 -1
  62. package/dist/delegation-commands.d.ts.map +1 -1
  63. package/dist/delegation-commands.js +8 -8
  64. package/dist/delegation-commands.js.map +1 -1
  65. package/dist/errors.d.ts +2 -1
  66. package/dist/errors.d.ts.map +1 -1
  67. package/dist/errors.js +2 -1
  68. package/dist/errors.js.map +1 -1
  69. package/dist/events.d.ts +8 -6
  70. package/dist/events.d.ts.map +1 -1
  71. package/dist/fork-picker.d.ts.map +1 -1
  72. package/dist/fork-picker.js +19 -5
  73. package/dist/fork-picker.js.map +1 -1
  74. package/dist/git-request.d.ts +6 -6
  75. package/dist/git-request.d.ts.map +1 -1
  76. package/dist/git-request.js +28 -15
  77. package/dist/git-request.js.map +1 -1
  78. package/dist/goal-commands.d.ts +1 -1
  79. package/dist/goal-commands.d.ts.map +1 -1
  80. package/dist/goal-commands.js +12 -5
  81. package/dist/goal-commands.js.map +1 -1
  82. package/dist/index.d.ts +5 -37
  83. package/dist/index.d.ts.map +1 -1
  84. package/dist/index.js +3 -36
  85. package/dist/index.js.map +1 -1
  86. package/dist/instructions.d.ts +2 -7
  87. package/dist/instructions.d.ts.map +1 -1
  88. package/dist/instructions.js +7 -15
  89. package/dist/instructions.js.map +1 -1
  90. package/dist/keymap.d.ts +2 -2
  91. package/dist/keymap.d.ts.map +1 -1
  92. package/dist/keymap.js +2 -2
  93. package/dist/keymap.js.map +1 -1
  94. package/dist/maybecode-config.schema.json +1765 -0
  95. package/dist/mcp-auth.d.ts +1 -1
  96. package/dist/mcp-auth.d.ts.map +1 -1
  97. package/dist/mcp-auth.js +11 -8
  98. package/dist/mcp-auth.js.map +1 -1
  99. package/dist/mcp-commands.d.ts.map +1 -1
  100. package/dist/mcp-commands.js +18 -4
  101. package/dist/mcp-commands.js.map +1 -1
  102. package/dist/mcp-interaction-ui.d.ts.map +1 -1
  103. package/dist/mcp-interaction-ui.js +11 -4
  104. package/dist/mcp-interaction-ui.js.map +1 -1
  105. package/dist/media-history.d.ts +1 -1
  106. package/dist/media-history.d.ts.map +1 -1
  107. package/dist/media-history.js +8 -2
  108. package/dist/media-history.js.map +1 -1
  109. package/dist/model-picker.d.ts.map +1 -1
  110. package/dist/model-picker.js +10 -11
  111. package/dist/model-picker.js.map +1 -1
  112. package/dist/model-transition.d.ts +11 -0
  113. package/dist/model-transition.d.ts.map +1 -0
  114. package/dist/model-transition.js +48 -0
  115. package/dist/model-transition.js.map +1 -0
  116. package/dist/model.d.ts +2 -2
  117. package/dist/model.d.ts.map +1 -1
  118. package/dist/model.js +8 -4
  119. package/dist/model.js.map +1 -1
  120. package/dist/onboarding-check.d.ts +3 -0
  121. package/dist/onboarding-check.d.ts.map +1 -0
  122. package/dist/onboarding-check.js +22 -0
  123. package/dist/onboarding-check.js.map +1 -0
  124. package/dist/onboarding.d.ts +6 -0
  125. package/dist/onboarding.d.ts.map +1 -0
  126. package/dist/onboarding.js +463 -0
  127. package/dist/onboarding.js.map +1 -0
  128. package/dist/plugins/application.d.ts +6 -4
  129. package/dist/plugins/application.d.ts.map +1 -1
  130. package/dist/plugins/application.js +106 -52
  131. package/dist/plugins/application.js.map +1 -1
  132. package/dist/plugins/instructions.d.ts +1 -1
  133. package/dist/plugins/instructions.d.ts.map +1 -1
  134. package/dist/plugins/instructions.js +24 -11
  135. package/dist/plugins/instructions.js.map +1 -1
  136. package/dist/plugins/resources.d.ts +2 -2
  137. package/dist/plugins/resources.d.ts.map +1 -1
  138. package/dist/plugins/resources.js +22 -12
  139. package/dist/plugins/resources.js.map +1 -1
  140. package/dist/policy.d.ts +1 -1
  141. package/dist/policy.d.ts.map +1 -1
  142. package/dist/policy.js +59 -11
  143. package/dist/policy.js.map +1 -1
  144. package/dist/run.d.ts +2 -0
  145. package/dist/run.d.ts.map +1 -1
  146. package/dist/run.js +38 -33
  147. package/dist/run.js.map +1 -1
  148. package/dist/runtime-instructions.d.ts +1 -1
  149. package/dist/runtime-instructions.d.ts.map +1 -1
  150. package/dist/runtime-instructions.js +15 -7
  151. package/dist/runtime-instructions.js.map +1 -1
  152. package/dist/session-navigation.d.ts +6 -0
  153. package/dist/session-navigation.d.ts.map +1 -0
  154. package/dist/session-navigation.js +64 -0
  155. package/dist/session-navigation.js.map +1 -0
  156. package/dist/session-picker.d.ts +1 -1
  157. package/dist/session-picker.d.ts.map +1 -1
  158. package/dist/session-picker.js +23 -32
  159. package/dist/session-picker.js.map +1 -1
  160. package/dist/settings.d.ts +718 -0
  161. package/dist/settings.d.ts.map +1 -0
  162. package/dist/settings.js +14 -0
  163. package/dist/settings.js.map +1 -0
  164. package/dist/skills.d.ts +1 -1
  165. package/dist/skills.d.ts.map +1 -1
  166. package/dist/skills.js +10 -12
  167. package/dist/skills.js.map +1 -1
  168. package/dist/slash-commands.d.ts +2 -2
  169. package/dist/slash-commands.d.ts.map +1 -1
  170. package/dist/slash-commands.js +149 -67
  171. package/dist/slash-commands.js.map +1 -1
  172. package/dist/team-execution.d.ts +10 -0
  173. package/dist/team-execution.d.ts.map +1 -0
  174. package/dist/team-execution.js +29 -0
  175. package/dist/team-execution.js.map +1 -0
  176. package/dist/team-patches.d.ts.map +1 -1
  177. package/dist/team-patches.js +149 -52
  178. package/dist/team-patches.js.map +1 -1
  179. package/dist/team-plan.d.ts +2 -2
  180. package/dist/team-plan.d.ts.map +1 -1
  181. package/dist/team-plan.js +115 -34
  182. package/dist/team-plan.js.map +1 -1
  183. package/dist/team-recovery.d.ts +1 -1
  184. package/dist/team-recovery.d.ts.map +1 -1
  185. package/dist/team-recovery.js +40 -10
  186. package/dist/team-recovery.js.map +1 -1
  187. package/dist/team-v2.d.ts.map +1 -1
  188. package/dist/team-v2.js +335 -104
  189. package/dist/team-v2.js.map +1 -1
  190. package/dist/team-verification.d.ts +4 -2
  191. package/dist/team-verification.d.ts.map +1 -1
  192. package/dist/team-verification.js +300 -97
  193. package/dist/team-verification.js.map +1 -1
  194. package/dist/team.d.ts +2 -2
  195. package/dist/team.d.ts.map +1 -1
  196. package/dist/team.js +172 -62
  197. package/dist/team.js.map +1 -1
  198. package/dist/terminal-web.d.ts +1 -0
  199. package/dist/terminal-web.d.ts.map +1 -1
  200. package/dist/terminal-web.js +28 -10
  201. package/dist/terminal-web.js.map +1 -1
  202. package/dist/ui/actions.d.ts.map +1 -1
  203. package/dist/ui/actions.js.map +1 -1
  204. package/dist/ui/retained-tui.d.ts.map +1 -1
  205. package/dist/ui/retained-tui.js +231 -173
  206. package/dist/ui/retained-tui.js.map +1 -1
  207. package/dist/ui/{prototype-view.d.ts → terminal-view.d.ts} +7 -7
  208. package/dist/ui/terminal-view.d.ts.map +1 -0
  209. package/dist/ui/{prototype-view.js → terminal-view.js} +185 -98
  210. package/dist/ui/terminal-view.js.map +1 -0
  211. package/dist/web-commands.d.ts.map +1 -1
  212. package/dist/web-commands.js +160 -57
  213. package/dist/web-commands.js.map +1 -1
  214. package/dist/web-extension.d.ts.map +1 -1
  215. package/dist/web-extension.js +14 -4
  216. package/dist/web-extension.js.map +1 -1
  217. package/dist/web-server.d.ts.map +1 -1
  218. package/dist/web-server.js +2 -1
  219. package/dist/web-server.js.map +1 -1
  220. package/dist/web-ui.d.ts.map +1 -1
  221. package/dist/web-ui.js +167 -40
  222. package/dist/web-ui.js.map +1 -1
  223. package/dist/workspace-configuration.d.ts +7 -0
  224. package/dist/workspace-configuration.d.ts.map +1 -0
  225. package/dist/workspace-configuration.js +134 -0
  226. package/dist/workspace-configuration.js.map +1 -0
  227. package/dist/workspace-state.d.ts +20 -0
  228. package/dist/workspace-state.d.ts.map +1 -0
  229. package/dist/workspace-state.js +2 -0
  230. package/dist/workspace-state.js.map +1 -0
  231. package/dist/workspace.d.ts +26 -43
  232. package/dist/workspace.d.ts.map +1 -1
  233. package/dist/workspace.js +261 -323
  234. package/dist/workspace.js.map +1 -1
  235. package/package.json +21 -31
  236. package/dist/cli/chunk-7ISOHFS7.js.map +0 -7
  237. package/dist/cli/chunk-F4XRPLUM.js.map +0 -7
  238. package/dist/cli/chunk-H7SNBFO4.js +0 -5522
  239. package/dist/cli/chunk-H7SNBFO4.js.map +0 -7
  240. package/dist/cli/chunk-HOU5ITUK.js.map +0 -7
  241. package/dist/cli/chunk-K5JWPNSY.js.map +0 -7
  242. package/dist/cli/chunk-LVTRXPDS.js.map +0 -7
  243. package/dist/cli/chunk-VAZMCNBB.js +0 -686
  244. package/dist/cli/chunk-VAZMCNBB.js.map +0 -7
  245. package/dist/cli/chunk-WOFEI42C.js +0 -7820
  246. package/dist/cli/chunk-WOFEI42C.js.map +0 -7
  247. package/dist/cli/file-type-R2T7TBHI.js.map +0 -7
  248. package/dist/cli/mcp-auth-UNRHSIKJ.js +0 -63
  249. package/dist/cli/mcp-auth-UNRHSIKJ.js.map +0 -7
  250. package/dist/cli/retained-tui-VJ3VX4R3.js.map +0 -7
  251. package/dist/cli/team-v2-JGBBQ7FR.js.map +0 -7
  252. package/dist/cli/tui-SA74DKMA.js +0 -1705
  253. package/dist/cli/tui-SA74DKMA.js.map +0 -7
  254. package/dist/cli/web-server-FOMNPY7Q.js.map +0 -7
  255. package/dist/delegation.d.ts +0 -2
  256. package/dist/delegation.d.ts.map +0 -1
  257. package/dist/delegation.js +0 -2
  258. package/dist/delegation.js.map +0 -1
  259. package/dist/history-memory.d.ts +0 -2
  260. package/dist/history-memory.d.ts.map +0 -1
  261. package/dist/history-memory.js +0 -2
  262. package/dist/history-memory.js.map +0 -1
  263. package/dist/subagent-budget.d.ts +0 -2
  264. package/dist/subagent-budget.d.ts.map +0 -1
  265. package/dist/subagent-budget.js +0 -2
  266. package/dist/subagent-budget.js.map +0 -1
  267. package/dist/subagent-files.d.ts +0 -2
  268. package/dist/subagent-files.d.ts.map +0 -1
  269. package/dist/subagent-files.js +0 -2
  270. package/dist/subagent-files.js.map +0 -1
  271. package/dist/subagent-host.d.ts +0 -2
  272. package/dist/subagent-host.d.ts.map +0 -1
  273. package/dist/subagent-host.js +0 -2
  274. package/dist/subagent-host.js.map +0 -1
  275. package/dist/subagent-instructions.d.ts +0 -2
  276. package/dist/subagent-instructions.d.ts.map +0 -1
  277. package/dist/subagent-instructions.js +0 -2
  278. package/dist/subagent-instructions.js.map +0 -1
  279. package/dist/subagents.d.ts +0 -2
  280. package/dist/subagents.d.ts.map +0 -1
  281. package/dist/subagents.js +0 -2
  282. package/dist/subagents.js.map +0 -1
  283. package/dist/summarizer.d.ts +0 -2
  284. package/dist/summarizer.d.ts.map +0 -1
  285. package/dist/summarizer.js +0 -2
  286. package/dist/summarizer.js.map +0 -1
  287. package/dist/tui.d.ts +0 -7
  288. package/dist/tui.d.ts.map +0 -1
  289. package/dist/tui.js +0 -1109
  290. package/dist/tui.js.map +0 -1
  291. package/dist/ui/prototype-view.d.ts.map +0 -1
  292. package/dist/ui/prototype-view.js.map +0 -1
  293. /package/dist/cli/{configured-WHY3GGAJ.js.map → configured-ACNM6TRQ.js.map} +0 -0
  294. /package/dist/cli/{team-T7G7PPNN.js.map → team-O2I5BXHM.js.map} +0 -0
  295. /package/dist/cli/{web-ui-COB6PKC5.js.map → web-ui-UWQUFE4W.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../src/ui/retained-tui.ts", "../../src/ui/terminal-view.ts", "../../src/keymap.ts", "../../src/ui/theme.ts", "../../src/ui/actions.ts", "../../src/mcp-interaction-ui.ts", "../../src/terminal-web.ts"],
4
+ "sourcesContent": ["import {\n FullscreenRenderer,\n NodeTerminalDriver,\n TuiRuntime,\n TerminalImages,\n createTerminalClipboard,\n type Clipboard,\n type RuntimeRenderer,\n type RuntimeTerminal,\n} from \"@sortedyuan/tui\";\nimport { TranscriptStore } from \"@sortedyuan/tui/transcript\";\nimport { omitUndefined } from \"@sortedyuan/may/core\";\nimport type { ApprovalRequest } from \"@sortedyuan/may/permissions\";\nimport { userInfo } from \"node:os\";\nimport type { SessionSummary } from \"@sortedyuan/may/session/catalog\";\nimport type { MaybeCodeController, MaybeCodeModelProfile, MaybeCodeReasoningEffortState } from \"../controller.js\";\nimport {\n createMaybeCodeSlashCommandSuggester,\n executeMaybeCodeSlashCommand,\n formatMaybeCodeMcpStatus,\n parseMaybeCodeSlashCommand,\n type MaybeCodeSlashCommandResult,\n} from \"../slash-commands.js\";\nimport { MaybeCodeTerminalView } from \"./terminal-view.js\";\nimport type { MaybeCodeEvent } from \"../events.js\";\nimport { presentMcpInteraction } from \"../mcp-interaction-ui.js\";\nimport { MaybeCodeTerminalWeb } from \"../terminal-web.js\";\nimport { formatGoal } from \"../goal-commands.js\";\nimport { delegationOrder, formatDelegationTree, renderDelegationTask } from \"../delegation-commands.js\";\nimport type { MaybeCodeKeymapOptions } from \"../keymap.js\";\n\nexport interface RunRetainedTerminalUIOptions {\n readonly terminal?: RuntimeTerminal;\n readonly renderer?: RuntimeRenderer;\n readonly clipboard?: Clipboard;\n readonly keymap?: MaybeCodeKeymapOptions;\n}\n\n/** Experimental retained-screen MaybeCode frontend. */\nexport async function runRetainedTerminalUI(\n app: MaybeCodeController,\n options: RunRetainedTerminalUIOptions = {},\n): Promise<void> {\n const terminal = options.terminal ?? new NodeTerminalDriver();\n const renderer = options.renderer ?? new FullscreenRenderer(terminal);\n const store = new TranscriptStore();\n const displayedSteering = new Set<string>();\n const images = new TerminalImages(undefined, terminal.imageSupport?.protocol, {\n cellSize: () => terminal.imageSupport?.cellSize,\n });\n try {\n const history = await app.history();\n for (const event of history)\n if (event.type === \"assistant.completed\" || event.type === \"input.submitted\")\n await images.prepare(event.message.content);\n for (const event of history)\n if (event.type === \"tool.completed\" && event.content) await images.prepare(event.content);\n store.loadHistory(history);\n for (const event of history) {\n if (event.type === \"input.submitted\" && event.inputId) displayedSteering.add(event.inputId);\n if (event.type === \"input.steering.delivered\")\n for (const inputId of event.inputIds) displayedSteering.add(inputId);\n }\n } catch (error) {\n await app.close();\n throw error;\n }\n\n let runtime: TuiRuntime | undefined;\n let closing = false;\n let eventFailure: unknown;\n const pendingRuns = new Set<Promise<void>>();\n const observeRun = (result: Promise<unknown>): void => {\n const pending = result\n .then(\n () => undefined,\n (error) => {\n if (!closing && !isCancellation(error)) store.appendNotice(\"error\", errorMessage(error));\n },\n )\n .finally(() => {\n pendingRuns.delete(pending);\n if (!closing) view.setStatus(app.isRunning ? \"Running\" : \"Ready\");\n });\n pendingRuns.add(pending);\n };\n let resolveExit!: () => void;\n const exited = new Promise<void>((resolve) => (resolveExit = resolve));\n const finish = (): void => {\n if (closing) return;\n closing = true;\n runtime?.stop();\n resolveExit();\n };\n const web = new MaybeCodeTerminalWeb(app, finish);\n const handleProcessSignal = (): void => {\n if (app.isRunning) app.cancel(\"Interrupted by process signal\");\n finish();\n };\n const view = new MaybeCodeTerminalView({\n isRunning: () => app.isRunning,\n permissionMode: () => app.permissionMode,\n clipboard: options.clipboard ?? createTerminalClipboard({ output: terminal }),\n keymap: options.keymap ?? omitUndefined({ leader: process.env.MAY_TUI_LEADER }),\n images,\n store,\n workspace: app.workspace,\n model: modelLabel(app),\n suggestions: createMaybeCodeSlashCommandSuggester(app),\n recordInput: (value) => !value.trimStart().startsWith(\"/\"),\n onInvalidate: () => runtime?.requestRender(),\n onCancel: () => {\n if (app.isRunning) {\n app.cancel(\"Interrupted\");\n view.setStatus(\"Cancelling\");\n } else {\n finish();\n }\n },\n onSubmit: async (value, accepted) => {\n if (value.trimStart().startsWith(\"/\")) {\n await handleCommand(value, app, store, view, finish, web, observeRun);\n return;\n }\n try {\n const run = await app.submit({ input: value });\n accepted?.();\n observeRun(run.result);\n } catch (error) {\n if (!isCancellation(error)) throw error;\n }\n },\n });\n process.on(\"SIGINT\", handleProcessSignal);\n process.on(\"SIGTERM\", handleProcessSignal);\n await refreshModelLabel(view, app);\n const refreshWorkspace = async () => {\n if (!app.getWorkspaceGit || closing) return;\n try {\n view.setWorkspaceGit(await app.getWorkspaceGit());\n } catch (error) {\n view.setWorkspaceGit({ path: app.workspace, status: \"error\", autoCommit: false, error: errorMessage(error) });\n }\n };\n await refreshWorkspace();\n let refreshingWorkspace = false;\n let workspaceTask: Promise<void> | undefined;\n const workspaceTimer = app.getWorkspaceGit\n ? setInterval(() => {\n if (refreshingWorkspace || closing) return;\n refreshingWorkspace = true;\n workspaceTask = refreshWorkspace()\n .catch((error) => {\n eventFailure = error;\n finish();\n })\n .finally(() => {\n refreshingWorkspace = false;\n });\n }, 2_000)\n : undefined;\n\n runtime = new TuiRuntime({ terminal, renderer, root: view });\n let eventTask: Promise<void> | undefined;\n try {\n runtime.start();\n eventTask = consumeEvents(app, store, view, () => closing, web.events, images, displayedSteering, finish).catch(\n (error) => {\n eventFailure = error;\n store.appendNotice(\"error\", `Event stream failed: ${errorMessage(error)}`);\n finish();\n },\n );\n await exited;\n } finally {\n closing = true;\n if (workspaceTimer) clearInterval(workspaceTimer);\n process.removeListener(\"SIGINT\", handleProcessSignal);\n process.removeListener(\"SIGTERM\", handleProcessSignal);\n runtime.stop();\n view.dispose();\n const results = await Promise.allSettled([\n web.close(),\n ...pendingRuns,\n ...(workspaceTask ? [workspaceTask] : []),\n ...(eventTask ? [eventTask] : []),\n ]);\n const failures = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n if (failures.length) {\n if (eventFailure !== undefined) failures.push(eventFailure);\n throw new AggregateError(failures, \"MaybeCode terminal failed to close\");\n }\n }\n if (eventFailure !== undefined) throw eventFailure;\n}\n\nasync function consumeEvents(\n app: MaybeCodeController,\n store: TranscriptStore,\n view: MaybeCodeTerminalView,\n isClosing: () => boolean,\n events: AsyncIterable<MaybeCodeEvent>,\n images: TerminalImages,\n displayedSteering: Set<string>,\n onStopped: () => void,\n): Promise<void> {\n const approvals = new Set<Promise<void>>();\n const approvalErrors: unknown[] = [];\n const trackApproval = (operation: Promise<void>, finish?: () => void): void => {\n const task = operation\n .catch((error) => {\n approvalErrors.push(error);\n onStopped();\n })\n .finally(() => {\n finish?.();\n approvals.delete(task);\n });\n approvals.add(task);\n };\n const interactions = new Map<string, AbortController>();\n const delegationStatus = new Map<string, string>();\n let lastGoalDisplay = \"\";\n try {\n for await (const event of events) {\n if (event.type === \"run.event\") {\n if (event.event.type === \"run.started\") {\n view.setStatus(\"Running\");\n const unread = app.application.agent\n .listSteeringInputs()\n .filter((input) => input.status === \"delivered\" && !displayedSteering.has(input.inputId));\n if (unread.length > 0) {\n const history = await app.history();\n const runId = event.event.runId;\n const runIndex = history.findIndex((item) => item.type === \"run.started\" && item.runId === runId);\n const submitted =\n runIndex < 0\n ? undefined\n : history\n .slice(0, runIndex)\n .reverse()\n .find((item) => item.type === \"input.submitted\");\n if (\n submitted?.type === \"input.submitted\" &&\n submitted.inputId &&\n unread.some((input) => input.inputId === submitted.inputId)\n ) {\n store.appendUser(\n submitted.message.content\n .filter((part) => part.type === \"text\")\n .map((part) => part.text)\n .join(\"\"),\n );\n displayedSteering.add(submitted.inputId);\n }\n }\n }\n if (event.event.type === \"input.received\") {\n for (const input of app.application.agent.listSteeringInputs()) {\n if (input.status === \"delivered\" && input.runId === event.event.runId) displayedSteering.add(input.inputId);\n }\n }\n // \u4E3B Run \u8BA9\u51FA\u65F6\u5B50\u4EFB\u52A1\u8FD8\u5728\u8FD0\u884C\uFF0C\u72B6\u6001\u4E0D\u80FD\u663E\u793A\u4E3A Ready\u3002\n if (\n event.event.type === \"run.completed\" ||\n event.event.type === \"run.yielded\" ||\n event.event.type === \"run.cancelled\"\n ) {\n view.setStatus(app.isRunning ? \"Delegating\" : \"Ready\");\n }\n if (event.event.type === \"run.failed\") view.setStatus(`Error: ${event.event.error.message}`);\n }\n if (event.type === \"permission-mode.changed\") {\n view.setStatus(event.mode === \"yolo\" ? \"YOLO enabled\" : \"YOLO disabled\");\n }\n if (event.type === \"run.event\" && event.event.type === \"model.completed\")\n await images.prepare(event.event.message.content);\n if (event.type === \"run.event\" && event.event.type === \"tool.completed\")\n await images.prepare(event.event.content);\n if (event.type === \"goal.changed\") {\n view.setStatus(`Goal ${event.goal.status}`);\n const display = `${event.goal.id}:${event.goal.status}:${event.goal.progress}`;\n if (display !== lastGoalDisplay) {\n lastGoalDisplay = display;\n store.appendNotice(\"info\", formatGoal(event.goal));\n }\n }\n if (event.type === \"delegation.started\" || event.type === \"delegation.finished\") {\n if (event.type === \"delegation.started\") delegationStatus.clear();\n const label = event.type === \"delegation.started\" ? \"Sub-agent request\" : \"Sub-agent request finished\";\n if (app.delegationNotifications === true)\n store.appendNotice(\"info\", `${label}\\n${formatDelegationTree(event.state)}`);\n view.setStatus(event.type === \"delegation.started\" ? \"Delegating\" : \"Ready\");\n } else if (event.type === \"delegation.updated\") {\n // \u540C\u4E00\u4EFB\u52A1\u7684\u91CD\u590D\u72B6\u6001\u4E0D\u663E\u793A\u3002\n for (const task of delegationOrder(event.state.tasks)) {\n const previous = delegationStatus.get(task.id);\n delegationStatus.set(task.id, task.status);\n if (app.delegationNotifications !== true || previous === task.status) continue;\n store.appendNotice(\n [\"failed\", \"cancelled\", \"recovery-required\"].includes(task.status) ? \"warning\" : \"info\",\n renderDelegationTask(task),\n );\n }\n }\n applyMaybeCodeEvent(store, event);\n if (event.type === \"mcp.interaction.requested\") {\n const controller = new AbortController();\n interactions.set(event.request.id, controller);\n const signal = AbortSignal.any([\n controller.signal,\n AbortSignal.timeout(Math.max(0, Math.ceil(event.request.expiresAt - Date.now()))),\n ]);\n trackApproval(\n presentMcpInteraction(\n event.request,\n app,\n (prompt, signal) => view.requestMcpInput(prompt, signal),\n signal,\n ).catch(() => {\n if (!isClosing() && !signal.aborted) {\n store.appendNotice(\"warning\", \"MCP interaction could not be completed\");\n app.cancel(\"User interaction is unavailable\");\n }\n }),\n () => {\n interactions.delete(event.request.id);\n },\n );\n } else if (event.type === \"mcp.interaction.settled\") interactions.get(event.requestId)?.abort();\n if (event.type === \"model.changed\") {\n await refreshModelLabel(view, app);\n }\n if (event.type === \"session.changed\" && event.resumed) {\n const history = await app.history();\n for (const event of history)\n if (event.type === \"assistant.completed\" || event.type === \"input.submitted\")\n await images.prepare(event.message.content);\n for (const event of history)\n if (event.type === \"tool.completed\" && event.content) await images.prepare(event.content);\n store.loadHistory(history);\n displayedSteering.clear();\n for (const event of history) {\n if (event.type === \"input.submitted\" && event.inputId) displayedSteering.add(event.inputId);\n if (event.type === \"input.steering.delivered\")\n for (const inputId of event.inputIds) displayedSteering.add(inputId);\n }\n store.appendNotice(\"info\", \"Session resumed\");\n continue;\n }\n if (event.type === \"permission.event\" && event.event.type === \"approval.requested\") {\n trackApproval(presentApproval(app, view, store, event.event.request, isClosing));\n } else if (\n event.type === \"permission.event\" &&\n (event.event.type === \"approval.resolved\" || event.event.type === \"approval.cancelled\")\n ) {\n view.dismissApproval(event.event.requestId);\n }\n if (event.type === \"delegation.event\" && event.event.type === \"permission.event\") {\n // \u5B50\u4EFB\u52A1\u5BA1\u6279\uFF1A\u5305\u5728\u5916\u5C42\u4E8B\u4EF6\u91CC\uFF0C\u540C\u6837\u9700\u8981\u754C\u9762\u4E0E\u8DEF\u7531\u3002\n const inner = event.event.event;\n if (inner.type === \"approval.requested\") {\n store.appendNotice(\"info\", `\u5B50\u4EFB\u52A1 ${event.taskId} \u8BF7\u6C42\u6279\u51C6 ${inner.request.tool.name}`);\n trackApproval(presentApproval(app, view, store, inner.request, isClosing));\n } else if (inner.type === \"approval.resolved\" || inner.type === \"approval.cancelled\") {\n view.dismissApproval(inner.requestId);\n }\n }\n }\n } finally {\n onStopped();\n for (const controller of interactions.values()) controller.abort();\n await Promise.all(approvals);\n if (approvalErrors.length) throw new AggregateError(approvalErrors, \"MaybeCode approval operations failed\");\n }\n}\n\n/** \u6253\u5F00\u5BA1\u6279\u5BF9\u8BDD\u6846\u5E76\u628A\u51B3\u5B9A\u4EA4\u56DE\u5BBF\u4E3B\uFF0C\u7531\u5BBF\u4E3B\u8DEF\u7531\u5230\u63D0\u51FA\u8BF7\u6C42\u7684 Session\u3002 */\nfunction presentApproval(\n app: MaybeCodeController,\n view: MaybeCodeTerminalView,\n store: TranscriptStore,\n request: ApprovalRequest,\n isClosing: () => boolean,\n): Promise<void> {\n return view\n .requestApproval(request)\n .then(async (decision) => {\n if (decision !== undefined && !isClosing()) {\n await app.resolveApproval(\n request.id,\n decision,\n decision === \"allow-persistent\" ? { createdBy: `local:${userInfo().username}` } : undefined,\n );\n }\n })\n .catch((error: unknown) => {\n if (!isClosing()) {\n store.appendNotice(\"error\", `Approval failed: ${errorMessage(error)}`);\n } else if (!isCancellation(error)) {\n throw error;\n }\n });\n}\n\nfunction applyMaybeCodeEvent(store: TranscriptStore, event: MaybeCodeEvent): void {\n switch (event.type) {\n case \"delegation.finished\":\n case \"delegation.started\":\n case \"delegation.updated\":\n case \"goal.changed\":\n case \"mcp.interaction.requested\":\n case \"mcp.interaction.settled\":\n case \"permission-mode.changed\":\n case \"session.forked\":\n case \"workspace.git.changed\":\n break;\n case \"run.event\":\n store.applyMayEvent(event.event);\n break;\n case \"delegation.event\":\n // \u5B50 Agent \u7684 Run \u4E0E\u5BA1\u6279\u4E8B\u4EF6\u8FDB\u5165\u540C\u4E00\u4E2A\u8BB0\u5F55\u6D41\uFF0CRun \u8EAB\u4EFD\u5F7C\u6B64\u72EC\u7ACB\u3002\n if (event.event.type === \"run.event\") store.applyMayEvent(event.event.event);\n else if (event.event.type === \"permission.event\") store.applyPermissionEvent(event.event.event);\n break;\n case \"permission.event\":\n store.applyPermissionEvent(event.event);\n break;\n case \"change.preview\":\n store.appendChangePreview(event.runId, event.step, event.toolCallId, event.preview);\n break;\n case \"session.changed\":\n store.reset(event.sessionId);\n store.appendNotice(\"info\", `Session ${event.resumed ? \"resumed\" : \"started\"}: ${event.sessionId}`);\n break;\n case \"model.changed\": {\n const profile = event.model.profile === undefined ? \"\" : ` profile ${event.model.profile}`;\n store.appendNotice(\"info\", `Model switched to${profile}: ${event.model.provider}/${event.model.model}`);\n break;\n }\n case \"model.default.changed\":\n store.appendNotice(\"info\", `Default model set to ${event.profile}`);\n break;\n case \"mcp.resource.updated\":\n store.appendNotice(\"info\", `MCP resource updated: ${event.serverId} ${event.uri}`);\n break;\n case \"mcp.resource.watch-closed\":\n store.appendNotice(\"info\", `MCP resource watch closed: ${event.serverId} ${event.uri} (${event.reason})`);\n break;\n case \"mcp.server.connected\":\n store.appendNotice(\"info\", `MCP server connected: ${event.serverId} ` + `(${event.toolNames.length} tools)`);\n break;\n case \"mcp.server.catalog-updated\":\n store.appendNotice(\"info\", `MCP catalog updated: ${event.serverId} (revision ${event.revision})`);\n break;\n case \"mcp.server.failed\":\n store.appendNotice(\"warning\", `MCP server failed: ${event.serverId}: ${event.diagnostic.message}`);\n break;\n case \"mcp.server.disconnected\":\n store.appendNotice(\"info\", `MCP server disconnected: ${event.serverId}`);\n break;\n case \"context.compacted\":\n store.appendNotice(\n \"info\",\n `Context compacted with ${event.strategy}: ` +\n `${event.before.messageCount} \u2192 ${event.after.messageCount} messages`,\n );\n break;\n case \"context.compaction.failed\":\n store.appendNotice(\"warning\", `Context compaction failed with ${event.strategy}: ${event.error.message}`);\n break;\n }\n}\n\nasync function handleCommand(\n input: string,\n app: MaybeCodeController,\n store: TranscriptStore,\n view: MaybeCodeTerminalView,\n finish: () => void,\n web: MaybeCodeTerminalWeb,\n observeRun: (result: Promise<unknown>) => void,\n): Promise<void> {\n const parsed = parseMaybeCodeSlashCommand(input);\n if (parsed.type === \"command\" && parsed.definition.name === \"/compact\" && parsed.arguments.length === 0) {\n store.appendNotice(\"info\", \"Pruning old tool results and summarizing context\");\n }\n const result = await executeMaybeCodeSlashCommand(input, app);\n if (result.type === \"web.requested\") {\n store.appendNotice(\"info\", `Web UI \u5DF2\u6253\u5F00\uFF1A${await web.open()}`);\n return;\n }\n await presentCommandResult(result, app, store, view, finish, observeRun);\n}\n\nasync function presentCommandResult(\n result: Exclude<MaybeCodeSlashCommandResult, { readonly type: \"web.requested\" }>,\n app: MaybeCodeController,\n store: TranscriptStore,\n view: MaybeCodeTerminalView,\n finish: () => void,\n observeRun: (result: Promise<unknown>) => void,\n): Promise<void> {\n switch (result.type) {\n case \"exit\":\n finish();\n break;\n case \"help\":\n store.appendNotice(\n \"info\",\n [\n ...result.commands.map((command) => `${command.usage} \u2014 ${command.description}`),\n ...view.displayCommands.map((command) => `${command.command} \u2014 ${command.description} (display only)`),\n ].join(\"\\n\"),\n );\n break;\n case \"instructions\":\n store.appendNotice(\"info\", result.instructions.effective);\n break;\n case \"mcp.run-started\":\n case \"skill.run-started\":\n case \"retry.started\":\n observeRun(result.run.result);\n break;\n case \"status\":\n store.appendNotice(\n \"info\",\n `Session: ${app.sessionId}\\nWorkspace: ${app.workspace}\\n` +\n `Permissions: ${app.permissionMode === \"yolo\" ? \"YOLO \u00B7 Auto-approve\" : \"Default\"}\\n` +\n `Model: ${await resolvedModelLabel(app)}${inspectionText(result.inspection)}`,\n );\n break;\n case \"display\":\n case \"mcp.display\":\n store.appendNotice(\"info\", result.text);\n break;\n case \"mcp.status\":\n store.appendNotice(\"info\", formatMaybeCodeMcpStatus(result.servers));\n break;\n case \"context\":\n store.appendNotice(\n \"info\",\n result.inspection === undefined\n ? \"Context inspection is unavailable\"\n : inspectionText(result.inspection).replace(/^\\n/u, \"\"),\n );\n break;\n case \"compacted\":\n store.appendNotice(\n \"info\",\n `Context ${result.result.changed ? \"compacted\" : \"unchanged\"} with ` +\n `${result.result.strategy}: ${result.result.before.messageCount} \u2192 ` +\n `${result.result.after.messageCount} messages`,\n );\n break;\n case \"session.created\":\n store.appendNotice(\"info\", `Created session ${result.sessionId}`);\n break;\n case \"session.selection.requested\":\n await runSessionDialog(view, app, store, result.sessions);\n break;\n case \"fork.selection.requested\": {\n const selection = await view.requestForkSelection(result.points, app.sessionId);\n if (selection) {\n if (!app.forkSession) throw new Error(\"Session \u5206\u652F\u80FD\u529B\u4E0D\u53EF\u7528\u3002\");\n const id = await app.forkSession(selection.pointId, selection.mode);\n store.appendNotice(\"info\", `Session \u5206\u652F\u5DF2\u521B\u5EFA\uFF1A${id}`);\n if (app.getWorkspaceGit) view.setWorkspaceGit(await app.getWorkspaceGit());\n }\n break;\n }\n case \"changes.selection.requested\":\n await view.requestChanges(result.diff, {\n ...(result.diff.runId && app.previewRestore\n ? { onRestore: async (path: string) => (await app.previewRestore!(result.diff.runId!, [path])).diff }\n : {}),\n ...(app.restoreFiles ? { onApply: (previewId: string) => app.restoreFiles!(previewId) } : {}),\n });\n break;\n case \"worktrees.display\":\n store.appendNotice(\n \"info\",\n result.worktrees.length\n ? result.worktrees\n .map((item) => `${item.id}\\n${item.path}\\n${item.branch} \u00B7 ${item.status} \u00B7 ${item.commit.slice(0, 12)}`)\n .join(\"\\n\\n\")\n : \"\u6CA1\u6709\u5DF2\u767B\u8BB0\u7684 worktree\u3002\",\n );\n break;\n case \"session.resumed\":\n store.appendNotice(\"info\", `Resumed session ${result.sessionId}`);\n break;\n case \"model.selection.requested\":\n await runModelDialog(view, app, store, result.models);\n break;\n case \"model.switched\":\n await refreshModelLabel(view, app);\n break;\n case \"model.not-found\":\n store.appendNotice(\"warning\", `No model profile starts with: ${result.query}`);\n break;\n case \"effort.selection.requested\":\n if (result.state.status !== \"known\") {\n store.appendNotice(\"warning\", reasoningEffortUnavailable(result.state));\n } else {\n await runEffortDialog(view, app, store, result.state);\n }\n break;\n case \"effort.changed\":\n view.setModel(modelLabel(app, result.state));\n store.appendNotice(\"info\", reasoningEffortChanged(result.state));\n break;\n case \"effort.not-found\":\n store.appendNotice(\"warning\", `No reasoning effort starts with: ${result.query}`);\n break;\n case \"usage\":\n store.appendNotice(\"warning\", `Usage: ${result.usage}`);\n break;\n case \"unknown\":\n store.appendNotice(\"warning\", `Unknown command: ${result.command}`);\n break;\n }\n}\n\nasync function runEffortDialog(\n view: MaybeCodeTerminalView,\n app: MaybeCodeController,\n store: TranscriptStore,\n state: MaybeCodeReasoningEffortState,\n): Promise<void> {\n const effort = await view.requestReasoningEffortSelection(state);\n if (effort === undefined) return;\n try {\n const changed = await app.setReasoningEffort(effort === \"default\" ? undefined : effort);\n view.setModel(modelLabel(app, changed));\n store.appendNotice(\"info\", reasoningEffortChanged(changed));\n } catch (error) {\n store.appendNotice(\"error\", errorMessage(error));\n }\n}\n\nasync function runModelDialog(\n view: MaybeCodeTerminalView,\n app: MaybeCodeController,\n store: TranscriptStore,\n initialModels: readonly MaybeCodeModelProfile[],\n): Promise<void> {\n let models = initialModels;\n while (true) {\n const action = await view.requestModelAction(models, app.application.modelInfo?.profile);\n if (action === undefined) return;\n try {\n if (action.type === \"switch\") {\n await app.switchModel(action.profile);\n await refreshModelLabel(view, app);\n return;\n }\n await app.setDefaultModel(action.profile);\n models = await app.listModels();\n } catch (error) {\n store.appendNotice(\"error\", errorMessage(error));\n models = await app.listModels();\n }\n }\n}\n\nasync function runSessionDialog(\n view: MaybeCodeTerminalView,\n app: MaybeCodeController,\n store: TranscriptStore,\n initialSessions: readonly SessionSummary[],\n): Promise<void> {\n let sessions = initialSessions;\n while (true) {\n const action = await view.requestSessionAction(sessions, app.sessionId);\n if (action === undefined) return;\n try {\n if (action.type === \"resume\") {\n await app.resumeSession(action.sessionId);\n store.appendNotice(\"info\", `Resumed session ${action.sessionId}`);\n return;\n }\n if (action.type === \"rename\") {\n await app.renameSession(action.sessionId, action.title);\n store.appendNotice(\"info\", `Renamed session to ${action.title}`);\n } else {\n const deleted = await app.deleteSession(action.sessionId);\n store.appendNotice(\n deleted ? \"info\" : \"warning\",\n deleted ? `Deleted session ${action.sessionId}` : `Session ${action.sessionId} was not found`,\n );\n }\n sessions = await app.listSessions();\n } catch (error) {\n store.appendNotice(\"error\", errorMessage(error));\n sessions = await app.listSessions();\n }\n }\n}\n\nfunction inspectionText(inspection: Awaited<ReturnType<MaybeCodeController[\"inspectContext\"]>>): string {\n if (inspection === undefined) return \"\\nContext: unavailable\";\n const window = inspection.contextWindowTokens === undefined ? \"\" : ` / ${inspection.contextWindowTokens}`;\n return `\\nContext: ~${inspection.effectiveTokens}${window} tokens, ` + `${inspection.messageCount} messages`;\n}\n\nfunction modelLabel(app: MaybeCodeController, effort: MaybeCodeReasoningEffortState | \"loading\" = \"loading\"): string {\n const info = app.application.modelInfo;\n if (info === undefined) return \"unknown \u00B7 effort: unknown\";\n const endpoint = `${info.provider}/${info.model}`;\n const model = info.profile === undefined ? endpoint : `${info.profile} (${endpoint})`;\n return `${model} \u00B7 effort: ${reasoningEffortLabel(effort)}`;\n}\n\nfunction reasoningEffortLabel(state: MaybeCodeReasoningEffortState | \"loading\"): string {\n if (state === \"loading\") return \"\u2026\";\n if (state.status === \"unsupported\") return \"n/a\";\n if (state.status === \"unknown\") return \"unknown\";\n return state.effectiveEffort ?? state.defaultEffort ?? \"default\";\n}\n\nasync function resolvedModelLabel(app: MaybeCodeController): Promise<string> {\n try {\n return modelLabel(app, await app.getReasoningEffort());\n } catch {\n return modelLabel(app, unknownReasoningEffort());\n }\n}\n\nasync function refreshModelLabel(view: MaybeCodeTerminalView, app: MaybeCodeController): Promise<void> {\n const identity = modelIdentity(app);\n const label = await resolvedModelLabel(app);\n if (identity === modelIdentity(app)) view.setModel(label);\n}\n\nfunction modelIdentity(app: MaybeCodeController): string {\n const model = app.application.modelInfo;\n return model === undefined ? \"\" : `${model.profile ?? \"\"}\\u0000${model.provider}\\u0000${model.model}`;\n}\n\nfunction unknownReasoningEffort(): MaybeCodeReasoningEffortState {\n return {\n status: \"unknown\",\n source: \"unknown\",\n efforts: [],\n overridden: false,\n };\n}\n\nfunction reasoningEffortUnavailable(state: MaybeCodeReasoningEffortState): string {\n return state.status === \"unsupported\"\n ? \"The active model does not support effort-based reasoning\"\n : \"Reasoning effort capability is unknown for the active model\";\n}\n\nfunction reasoningEffortChanged(state: MaybeCodeReasoningEffortState): string {\n const effort = state.effectiveEffort ?? \"provider/model default\";\n return `Reasoning effort: ${effort}${state.overridden ? \" (runtime override)\" : \"\"}`;\n}\n\nfunction isCancellation(error: unknown): boolean {\n return error instanceof Error && (error.name === \"AbortError\" || (\"code\" in error && error.code === \"RUN_CANCELLED\"));\n}\n\nfunction errorMessage(error: unknown): string {\n return error instanceof Error ? error.message : String(error);\n}\n", "import type { KeyStroke, Keymap } from \"@sortedyuan/tui/keybindings\";\nimport { omitUndefined } from \"@sortedyuan/may/core\";\nimport type { ApprovalDecision, ApprovalRequest } from \"@sortedyuan/may/permissions\";\nimport {\n Column,\n Dialog,\n Editor,\n EditorHistory,\n FocusManager,\n Panel,\n ScrollView,\n SelectList,\n Text,\n sanitizeTerminalText,\n styleText,\n type Component,\n type InteractiveComponent,\n type RenderResult,\n type RenderSize,\n type TuiTheme,\n type TerminalImages,\n type PointerEvent,\n type Clipboard,\n type EditorOptions,\n SessionForkPicker,\n WorkspaceDiffViewer,\n workspaceGitLabel,\n type SessionForkSelection,\n} from \"@sortedyuan/tui\";\nimport type { UiForkPoint, UiWorkspaceDiff, UiWorkspaceGit } from \"@sortedyuan/ui-client\";\nimport { TranscriptStore, TranscriptView } from \"@sortedyuan/tui/transcript\";\nimport type { ToolRendererRegistry } from \"@sortedyuan/tui/tool-renderers\";\nimport type { MaybeCodeSlashCommandSuggestion } from \"../slash-commands.js\";\nimport type { SessionSummary } from \"@sortedyuan/may/session/catalog\";\nimport type { MaybeCodeModelProfile, MaybeCodeReasoningEffortState } from \"../controller.js\";\nimport { createMaybeCodeKeymap, MAYBECODE_EDITOR_KEYBINDINGS, type MaybeCodeKeymapOptions } from \"../keymap.js\";\nimport { MAYBECODE_DARK_THEME } from \"./theme.js\";\nimport { MaybeCodeUiActionRegistry } from \"./actions.js\";\n\nexport interface MaybeCodeTerminalViewOptions {\n readonly isRunning?: () => boolean;\n readonly permissionMode?: () => import(\"../policy.js\").MaybeCodePermissionMode;\n readonly clipboard?: Clipboard;\n readonly keymap?: MaybeCodeKeymapOptions;\n readonly images?: TerminalImages;\n readonly store: TranscriptStore;\n readonly workspace: string;\n readonly model?: string;\n readonly theme?: TuiTheme;\n readonly toolRenderers?: ToolRendererRegistry;\n readonly uiActions?: MaybeCodeUiActionRegistry;\n readonly inputHistory?: EditorHistory;\n readonly recordInput?: (value: string) => boolean;\n readonly suggestions?: (input: string) => Promise<readonly MaybeCodeSlashCommandSuggestion[]>;\n readonly onSubmit: (value: string, accepted?: () => void) => void | Promise<void>;\n readonly onCancel?: () => void;\n readonly onInvalidate?: () => void;\n}\n\nexport type SessionDialogAction =\n | { readonly type: \"resume\"; readonly sessionId: string }\n | { readonly type: \"rename\"; readonly sessionId: string; readonly title: string }\n | { readonly type: \"delete\"; readonly sessionId: string };\n\nexport type ModelDialogAction =\n { readonly type: \"switch\"; readonly profile: string } | { readonly type: \"set-default\"; readonly profile: string };\n\n/** Retained MaybeCode view shared by the experimental terminal frontend. */\nexport class MaybeCodeTerminalView implements InteractiveComponent {\n private readonly focus = new FocusManager();\n private readonly keymap: Keymap;\n private readonly theme: TuiTheme;\n private readonly transcriptView: TranscriptView;\n private readonly transcript: ScrollView;\n private readonly uiActions: MaybeCodeUiActionRegistry;\n private readonly inputHistory: EditorHistory;\n private readonly editor: Editor;\n private readonly suggestionList: SelectList<MaybeCodeSlashCommandSuggestion>;\n private suggestions: readonly MaybeCodeSlashCommandSuggestion[] = [];\n private suggestionsVisible = false;\n private suggestionVersion = 0;\n private submissionTail: Promise<void> | undefined;\n private submissionEpoch = 0;\n private status = \"Ready\";\n private statusBeforeShortcut: string | undefined;\n private model: string;\n private workspace: string;\n private gitLabel = \"\";\n private readonly unsubscribe: () => void;\n private readonly approvalQueue: PendingApproval[] = [];\n private dialog: Dialog | undefined;\n private lastDialog: Dialog | undefined;\n private disposed = false;\n private pendingClipboard: Promise<void> = Promise.resolve();\n private readonly layout = new Column([]);\n private editorSize: RenderSize = { width: 1, height: 1 };\n private readonly editorRegion: Component = {\n render: (size) => {\n this.editorSize = size;\n return new Panel(this.editor, {\n borderStyle: this.focus.focusedId === \"editor\" ? this.theme.borderAccent : this.theme.border,\n }).render(size);\n },\n handlePointer: (event) => {\n if (event.type === \"down\") {\n if (event.button !== 0) return false;\n if (event.x < 1 || event.x >= this.editorSize.width - 1 || event.y < 1 || event.y >= this.editorSize.height - 1)\n return false;\n this.resetInputContext();\n this.focus.focus(\"editor\");\n this.transcriptView.clearSelection();\n }\n return this.editor.handlePointer({ ...event, x: event.x - 1, y: event.y - 1 });\n },\n };\n private readonly transcriptRegion: Component = {\n render: (size) => this.transcript.render(size),\n handlePointer: (event) => {\n if (event.type === \"down\") {\n if (event.button !== 0) return false;\n this.resetInputContext();\n this.editor.clearSelection();\n }\n return this.transcript.handlePointer(event);\n },\n };\n private dialogKind: \"approval\" | \"session\" | \"model\" | \"effort\" | \"mcp\" | \"fork\" | \"changes\" | undefined;\n private resolveVersionDialog: ((selection?: SessionForkSelection) => void) | undefined;\n private readonly mcpQuestions: Array<{ prompt: string; finish(value?: string): void }> = [];\n private resolveSessionDialog: ((action: SessionDialogAction | undefined) => void) | undefined;\n private resolveModelDialog: ((action: ModelDialogAction | undefined) => void) | undefined;\n private resolveEffortDialog: ((effort: string | undefined) => void) | undefined;\n private readonly baseView: InteractiveComponent = {\n render: (size) => this.renderBase(size),\n handleKey: (stroke) => this.handleBaseKey(stroke),\n handlePointer: (event) => this.layout.handlePointer(event),\n };\n\n constructor(private readonly options: MaybeCodeTerminalViewOptions) {\n this.keymap = createMaybeCodeKeymap(options.keymap);\n this.theme = options.theme ?? MAYBECODE_DARK_THEME;\n this.model = options.model ?? \"model: unknown\";\n this.workspace = options.workspace;\n this.transcriptView = new TranscriptView(options.store, {\n ...(options.images ? { images: options.images } : {}),\n theme: this.theme,\n assistantLabel: \"MaybeCode\",\n selectedToolDetailsHint: \"Enter details\",\n toolDetailsHint: `${this.shortcutHint(\"app.tools.toggle\")} all`,\n ...omitUndefined({ toolRenderers: options.toolRenderers }),\n });\n this.transcript = new ScrollView(this.transcriptView, {\n followEnd: true,\n onInvalidate: () => options.onInvalidate?.(),\n });\n this.inputHistory = options.inputHistory ?? new EditorHistory();\n this.uiActions =\n options.uiActions ??\n new MaybeCodeUiActionRegistry()\n .register({\n id: \"tools.toggle\",\n command: \"/details\",\n description: \"Toggle all tool execution details\",\n run: () => {\n this.preserveSelectedToolPosition();\n const visible = this.transcriptView.toggleToolDetails();\n return `Tool details ${visible ? \"shown\" : \"hidden\"}`;\n },\n })\n .register({\n id: \"thinking.toggle\",\n command: \"/thinking\",\n description: \"Toggle reasoning block visibility\",\n run: () => {\n this.preserveSelectedToolPosition();\n const visible = this.transcriptView.toggleReasoning();\n return `Thinking ${visible ? \"shown\" : \"hidden\"}`;\n },\n });\n this.editor = new Editor({\n ...this.editorOptions(),\n history: this.inputHistory,\n placeholder: \"Ask MaybeCode\u2026\",\n promptStyle: this.theme.accent,\n placeholderStyle: this.theme.dim,\n onSubmit: (value) => this.submit(value),\n onChange: (value) => this.refreshSuggestions(value),\n });\n this.suggestionList = new SelectList<MaybeCodeSlashCommandSuggestion>([], {\n selectedStyle: this.theme.selected,\n descriptionStyle: this.theme.muted,\n markerStyle: this.theme.accent,\n emptyLabel: \"No matching commands\",\n });\n this.suggestionList.setFocused(true);\n this.focus.register(\"transcript\", this.transcript);\n this.focus.register(\"editor\", this.editor);\n this.focus.focus(\"editor\");\n this.unsubscribe = options.store.subscribe(() => options.onInvalidate?.());\n }\n\n render(size: RenderSize): RenderResult {\n this.synchronizeDialog();\n return this.dialog?.render(size) ?? this.renderBase(size);\n }\n\n handleKey(stroke: KeyStroke): boolean {\n this.synchronizeDialog();\n if (this.dialog !== undefined) {\n const handled = this.dialog.handleKey(stroke);\n if (handled) return true;\n const shortcut = this.keymap.resolve(stroke, [\"dialog\"]);\n if (shortcut.type === \"action\" && shortcut.action === \"app.interrupt\") {\n this.submissionEpoch++;\n this.options.onCancel?.();\n return true;\n }\n return false;\n }\n return this.handleBaseKey(stroke);\n }\n\n handlePointer(event: PointerEvent): boolean {\n this.synchronizeDialog();\n return this.dialog?.handlePointer(event) ?? this.layout.handlePointer(event);\n }\n\n async waitForPendingClipboard(): Promise<void> {\n await this.pendingClipboard;\n await this.editor.waitForPendingClipboard();\n }\n\n private editorOptions(): Pick<EditorOptions, \"clipboard\" | \"onInvalidate\" | \"onError\" | \"keybindings\"> {\n return {\n keybindings: MAYBECODE_EDITOR_KEYBINDINGS,\n ...omitUndefined({ clipboard: this.options.clipboard }),\n onInvalidate: () => this.options.onInvalidate?.(),\n onError: (error) => this.setStatus(`Error: ${error instanceof Error ? error.message : String(error)}`),\n };\n }\n\n private shortcutHint(action: string): string {\n return (\n this.keymap\n .keysForAction(action)[0]\n ?.split(\" \")\n .map((key) =>\n key\n .split(\"+\")\n .map((part) => (part.length === 1 ? part.toUpperCase() : part[0]!.toUpperCase() + part.slice(1)))\n .join(\"+\"),\n )\n .join(\" \") ?? \"\"\n );\n }\n\n private resetInputContext(): void {\n this.keymap.reset();\n this.editor.resetKeybindings();\n this.clearShortcutHint();\n }\n\n private clearShortcutHint(): void {\n if (this.statusBeforeShortcut !== undefined && this.status.startsWith(\"Shortcut: \")) {\n this.status = this.statusBeforeShortcut;\n this.options.onInvalidate?.();\n }\n this.statusBeforeShortcut = undefined;\n }\n\n private synchronizeDialog(): void {\n if (this.lastDialog === this.dialog) return;\n this.lastDialog?.dispose();\n this.lastDialog = this.dialog;\n this.resetInputContext();\n this.transcript.clearPointerSelection();\n this.editor.setFocused(this.dialog === undefined && this.focus.focusedId === \"editor\");\n }\n\n requestApproval(request: ApprovalRequest): Promise<ApprovalDecision | undefined> {\n return new Promise((resolve) => {\n this.approvalQueue.push({ request, resolve });\n if (this.approvalQueue.length === 1) this.openCurrentApproval();\n });\n }\n\n requestMcpInput(prompt: string, signal: AbortSignal): Promise<string | undefined> {\n if (signal.aborted) return Promise.resolve(undefined);\n return new Promise((resolve) => {\n let settled = false;\n const abort = () => pending.finish();\n const pending = {\n prompt,\n finish: (value?: string) => {\n if (settled) return;\n settled = true;\n signal.removeEventListener(\"abort\", abort);\n const index = this.mcpQuestions.indexOf(pending);\n if (index >= 0) this.mcpQuestions.splice(index, 1);\n if (index === 0 && this.dialogKind === \"mcp\") {\n this.dialog = undefined;\n this.dialogKind = undefined;\n this.openCurrentApproval();\n }\n resolve(value);\n this.options.onInvalidate?.();\n },\n };\n this.mcpQuestions.push(pending);\n signal.addEventListener(\"abort\", abort, { once: true });\n this.openCurrentApproval();\n });\n }\n\n dismissApproval(requestId: string): boolean {\n const index = this.approvalQueue.findIndex((item) => item.request.id === requestId);\n if (index < 0) return false;\n const [approval] = this.approvalQueue.splice(index, 1);\n approval?.resolve(undefined);\n if (index === 0 && this.dialogKind === \"approval\") {\n this.dialog = undefined;\n this.dialogKind = undefined;\n this.openCurrentApproval();\n }\n this.options.onInvalidate?.();\n return true;\n }\n\n requestSessionAction(\n sessions: readonly SessionSummary[],\n currentSessionId: string,\n ): Promise<SessionDialogAction | undefined> {\n if (this.dialog !== undefined || this.resolveSessionDialog !== undefined) {\n return Promise.reject(new Error(\"Another dialog is already open\"));\n }\n return new Promise((resolve) => {\n this.resolveSessionDialog = resolve;\n const prompt = new SessionPrompt(\n sessions,\n currentSessionId,\n this.theme,\n (action) => {\n this.dialog = undefined;\n this.dialogKind = undefined;\n const complete = this.resolveSessionDialog;\n this.resolveSessionDialog = undefined;\n complete?.(action);\n this.openCurrentApproval();\n this.options.onInvalidate?.();\n },\n this.editorOptions(),\n this.options.keymap,\n );\n this.dialog = new Dialog(this.baseView, prompt, {\n open: true,\n title: \"Sessions\",\n width: 92,\n height: 18,\n dismissOnEscape: false,\n borderStyle: this.theme.borderAccent,\n titleStyle: this.theme.accent,\n });\n this.dialogKind = \"session\";\n this.synchronizeDialog();\n this.options.onInvalidate?.();\n });\n }\n\n requestModelAction(\n models: readonly MaybeCodeModelProfile[],\n currentProfile: string | undefined,\n ): Promise<ModelDialogAction | undefined> {\n if (this.dialog !== undefined || this.resolveModelDialog !== undefined) {\n return Promise.reject(new Error(\"Another dialog is already open\"));\n }\n return new Promise((resolve) => {\n this.resolveModelDialog = resolve;\n const prompt = new ModelPrompt(\n models,\n currentProfile,\n this.theme,\n (action) => {\n this.dialog = undefined;\n this.dialogKind = undefined;\n const complete = this.resolveModelDialog;\n this.resolveModelDialog = undefined;\n complete?.(action);\n this.openCurrentApproval();\n this.options.onInvalidate?.();\n },\n this.options.keymap,\n );\n this.dialog = new Dialog(this.baseView, prompt, {\n open: true,\n title: \"Models\",\n width: 82,\n height: 16,\n dismissOnEscape: false,\n borderStyle: this.theme.borderAccent,\n titleStyle: this.theme.accent,\n });\n this.dialogKind = \"model\";\n this.synchronizeDialog();\n this.options.onInvalidate?.();\n });\n }\n\n requestReasoningEffortSelection(state: MaybeCodeReasoningEffortState): Promise<string | undefined> {\n if (state.status !== \"known\" || this.dialog !== undefined || this.resolveEffortDialog !== undefined) {\n return state.status === \"known\"\n ? Promise.reject(new Error(\"Another dialog is already open\"))\n : Promise.resolve(undefined);\n }\n return new Promise((resolve) => {\n this.resolveEffortDialog = resolve;\n const prompt = new EffortPrompt(\n state,\n this.theme,\n (effort) => {\n this.dialog = undefined;\n this.dialogKind = undefined;\n const complete = this.resolveEffortDialog;\n this.resolveEffortDialog = undefined;\n complete?.(effort);\n this.openCurrentApproval();\n this.options.onInvalidate?.();\n },\n this.options.keymap,\n );\n this.dialog = new Dialog(this.baseView, prompt, {\n open: true,\n title: \"Reasoning effort\",\n width: 62,\n height: Math.min(16, state.efforts.length + 7),\n dismissOnEscape: false,\n borderStyle: this.theme.borderAccent,\n titleStyle: this.theme.accent,\n });\n this.dialogKind = \"effort\";\n this.synchronizeDialog();\n this.options.onInvalidate?.();\n });\n }\n\n setStatus(status: string): void {\n if (this.disposed) return;\n this.status = sanitizeTerminalText(status);\n this.options.onInvalidate?.();\n }\n\n setWorkspaceGit(workspace: UiWorkspaceGit): void {\n if (this.disposed) return;\n this.workspace = sanitizeTerminalText(workspace.path);\n this.gitLabel = workspaceGitLabel(workspace);\n this.options.onInvalidate?.();\n }\n\n requestForkSelection(\n points: readonly UiForkPoint[],\n currentSessionId: string,\n ): Promise<SessionForkSelection | undefined> {\n if (this.dialog) return Promise.reject(new Error(\"Another dialog is already open\"));\n return new Promise((resolve) => {\n this.resolveVersionDialog = resolve;\n const picker = new SessionForkPicker(points, {\n currentSessionId,\n theme: this.theme,\n onComplete: (selection) => this.completeVersionDialog(selection),\n });\n this.dialog = new Dialog(this.baseView, picker, {\n open: true,\n title: \"Session \u5206\u652F\",\n width: 100,\n height: 25,\n dismissOnEscape: false,\n borderStyle: this.theme.borderAccent,\n titleStyle: this.theme.accent,\n });\n this.dialogKind = \"fork\";\n this.synchronizeDialog();\n this.options.onInvalidate?.();\n });\n }\n\n requestChanges(\n diff: UiWorkspaceDiff,\n operations: {\n readonly onRestore?: (path: string) => Promise<UiWorkspaceDiff>;\n readonly onApply?: (previewId: string) => Promise<void>;\n } = {},\n ): Promise<void> {\n if (this.dialog) return Promise.reject(new Error(\"Another dialog is already open\"));\n return new Promise((resolve) => {\n this.resolveVersionDialog = () => resolve();\n const viewer = new WorkspaceDiffViewer(diff, {\n theme: this.theme,\n onClose: () => this.completeVersionDialog(),\n ...operations,\n onInvalidate: () => this.options.onInvalidate?.(),\n });\n this.dialog = new Dialog(this.baseView, viewer, {\n open: true,\n title: \"\u6587\u4EF6\u53D8\u5316\",\n width: 110,\n height: 30,\n dismissOnEscape: false,\n borderStyle: this.theme.borderAccent,\n titleStyle: this.theme.accent,\n });\n this.dialogKind = \"changes\";\n this.synchronizeDialog();\n this.options.onInvalidate?.();\n });\n }\n\n private completeVersionDialog(selection?: SessionForkSelection): void {\n this.dialog = undefined;\n this.dialogKind = undefined;\n const resolve = this.resolveVersionDialog;\n this.resolveVersionDialog = undefined;\n resolve?.(selection);\n this.openCurrentApproval();\n this.options.onInvalidate?.();\n }\n\n setModel(model: string): void {\n this.model = sanitizeTerminalText(model);\n this.options.onInvalidate?.();\n }\n\n get displayCommands(): readonly {\n readonly command: string;\n readonly description: string;\n }[] {\n return this.uiActions.listCommands();\n }\n\n dispose(): void {\n if (this.disposed) return;\n this.disposed = true;\n this.unsubscribe();\n this.transcript.dispose();\n this.editor.dispose?.();\n this.dialog?.dispose();\n if (this.lastDialog !== this.dialog) this.lastDialog?.dispose();\n this.focus.clear();\n this.dialog = undefined;\n this.dialogKind = undefined;\n for (const question of this.mcpQuestions.splice(0)) question.finish();\n this.resolveSessionDialog?.(undefined);\n this.resolveSessionDialog = undefined;\n this.resolveModelDialog?.(undefined);\n this.resolveModelDialog = undefined;\n this.resolveEffortDialog?.(undefined);\n this.resolveEffortDialog = undefined;\n this.resolveVersionDialog?.();\n this.resolveVersionDialog = undefined;\n this.suggestionVersion += 1;\n for (const approval of this.approvalQueue.splice(0)) {\n approval.resolve(undefined);\n }\n }\n\n private renderBase(size: RenderSize): RenderResult {\n const suggestionHeight = this.suggestionsVisible ? Math.min(7, this.suggestions.length + 2) : 0;\n this.layout.setItems([\n {\n height: 3,\n component: new HeaderView(this.workspace, this.model, this.theme),\n },\n { flex: 1, minHeight: 1, component: this.transcriptRegion },\n ...(suggestionHeight === 0\n ? []\n : [\n {\n height: suggestionHeight,\n component: new Panel(this.suggestionList, {\n title: \" Commands \",\n borderStyle: this.theme.border,\n titleStyle: this.theme.accent,\n }),\n },\n ]),\n {\n height: 4,\n component: this.editorRegion,\n },\n {\n height: 1,\n component: new FooterView(\n this.options.permissionMode?.() === \"yolo\",\n this.status,\n this.focus.focusedId,\n this.transcriptView.toolDetailsMode,\n this.transcriptView.showReasoning,\n this.theme,\n this.shortcutHint(\"app.reply.start\"),\n this.shortcutHint(\"app.tools.toggle\"),\n this.shortcutHint(\"app.thinking.toggle\"),\n this.gitLabel,\n ),\n },\n ]);\n return this.layout.render(size);\n }\n\n private handleBaseKey(stroke: KeyStroke): boolean {\n if (stroke.key === \"wheelup\" || stroke.key === \"wheeldown\") {\n this.resetInputContext();\n this.transcript.scrollBy(stroke.key === \"wheelup\" ? -3 : 3);\n return true;\n }\n if (\n this.focus.focusedId === \"editor\" &&\n this.editor.hasSelection &&\n stroke.ctrl &&\n stroke.key === \"c\" &&\n this.editor.handleKey(stroke)\n ) {\n this.keymap.reset();\n this.clearShortcutHint();\n return true;\n }\n const shortcut = this.keymap.resolve(\n stroke,\n this.transcriptView.hasSelection ? [\"global\", \"transcript.selection\"] : [\"global\"],\n );\n if (shortcut.type === \"pending\") {\n this.statusBeforeShortcut ??= this.status;\n this.status = `Shortcut: ${shortcut.completions.join(\" / \")}`;\n this.options.onInvalidate?.();\n return true;\n }\n this.clearShortcutHint();\n if (shortcut.type === \"action\") {\n if (shortcut.action === \"app.selection.copy\") {\n const text = this.transcriptView.selectedText;\n if (this.options.clipboard === undefined) {\n this.setStatus(\"Error: Clipboard is unavailable\");\n } else {\n this.pendingClipboard = this.options.clipboard.writeText(text).then(\n () => this.setStatus(\"Copied\"),\n (error) => this.setStatus(`Error: ${error instanceof Error ? error.message : String(error)}`),\n );\n }\n return true;\n }\n if (shortcut.action === \"app.interrupt\") {\n this.submissionEpoch++;\n this.options.onCancel?.();\n return true;\n }\n if (shortcut.action === \"app.focus.next\" || shortcut.action === \"app.focus.previous\") {\n if (!(stroke.key === \"tab\" && this.suggestionsVisible && !stroke.shift)) {\n this.resetInputContext();\n this.transcript.clearPointerSelection();\n this.editor.clearSelection();\n const changed =\n shortcut.action === \"app.focus.previous\" ? this.focus.focusPrevious() : this.focus.focusNext();\n if (this.focus.focusedId === \"transcript\") this.ensureSelectedToolVisible();\n return changed;\n }\n }\n if (shortcut.action === \"app.reply.start\") {\n if (this.transcriptView.revealLatestReply()) {\n this.transcript.scrollToAnchor(() => this.transcriptView.latestReplyAnchor);\n this.setStatus(\"Reply start\");\n } else {\n this.setStatus(\"No final reply yet\");\n }\n return true;\n }\n if (shortcut.action === \"app.tools.toggle\") {\n this.executeUiAction(\"tools.toggle\");\n return true;\n }\n if (shortcut.action === \"app.thinking.toggle\") {\n this.executeUiAction(\"thinking.toggle\");\n return true;\n }\n }\n if (this.focus.focusedId === \"editor\" && this.editor.value.startsWith(\"/\")) {\n if (stroke.key === \"escape\" && this.suggestionsVisible) {\n this.hideSuggestions();\n return true;\n }\n if (\n this.suggestionsVisible &&\n isSuggestionNavigation(stroke.key) &&\n stroke.key !== \"home\" &&\n stroke.key !== \"end\" &&\n !stroke.shift &&\n !stroke.ctrl &&\n !stroke.alt\n ) {\n return this.suggestionList.handleKey(stroke);\n }\n if (stroke.key === \"tab\" && !stroke.shift) {\n this.completeSuggestion(false);\n return true;\n }\n if (\n stroke.key === \"enter\" &&\n this.suggestionsVisible &&\n !stroke.shift &&\n !stroke.ctrl &&\n !stroke.alt &&\n !stroke.meta\n ) {\n this.completeSuggestion(true);\n return true;\n }\n }\n const transcriptInteraction =\n stroke.key === \"j\" ||\n stroke.key === \"k\" ||\n stroke.key === \"enter\" ||\n stroke.key === \"space\" ||\n stroke.text === \" \";\n const togglesSelectedTool =\n this.focus.focusedId === \"transcript\" &&\n (stroke.key === \"enter\" || stroke.key === \"space\" || stroke.text === \" \");\n if (togglesSelectedTool) this.preserveSelectedToolPosition();\n const handled = this.focus.dispatch(stroke);\n if (handled && this.focus.focusedId === \"editor\") this.transcript.clearPointerSelection();\n if (handled && this.focus.focusedId === \"transcript\" && transcriptInteraction) {\n this.ensureSelectedToolVisible();\n if (stroke.key === \"enter\" || stroke.key === \"space\" || stroke.text === \" \") {\n this.status = \"Selected tool details toggled\";\n }\n }\n return handled;\n }\n\n private submit(value: string, completeCommand = true): void {\n if (this.disposed || value.trim() === \"\") return;\n this.inputHistory.record(value);\n this.editor.setValue(\"\");\n this.hideSuggestions();\n this.setStatus(\"Running\");\n const epoch = this.submissionEpoch;\n const submit = () =>\n this.disposed || epoch !== this.submissionEpoch\n ? undefined\n : this.resolveSubmission(value, completeCommand, epoch);\n const previous = this.submissionTail;\n const pending = (previous ? previous.then(submit) : Promise.resolve(submit()))\n .then(\n (status) => {\n if (epoch === this.submissionEpoch)\n this.setStatus(status ?? (this.options.isRunning?.() ? \"Running\" : \"Ready\"));\n },\n (error: unknown) => {\n if (this.disposed || epoch !== this.submissionEpoch) return;\n if (this.editor.value === \"\") this.editor.setValue(value);\n this.setStatus(`Error: ${error instanceof Error ? error.message : String(error)}`);\n },\n )\n .finally(() => {\n if (this.submissionTail === pending) this.submissionTail = undefined;\n });\n this.submissionTail = pending;\n }\n\n private async resolveSubmission(value: string, completeCommand: boolean, epoch: number): Promise<string | undefined> {\n let submission = value;\n if (completeCommand && value.startsWith(\"/\")) {\n const suggestions = await this.suggestionsFor(value);\n submission = suggestions.length === 1 ? suggestions[0]!.value : value;\n }\n if (this.disposed || epoch !== this.submissionEpoch) return undefined;\n const uiResult = this.uiActions.executeCommand(submission);\n if (uiResult.matched) return uiResult.status;\n this.transcript.scrollToEnd();\n let recorded = false;\n const recordAcceptedInput = (): void => {\n if (recorded) return;\n recorded = true;\n if (this.options.recordInput?.(submission) ?? true) {\n this.options.store.appendUser(submission);\n }\n };\n await this.options.onSubmit(submission, recordAcceptedInput);\n recordAcceptedInput();\n return undefined;\n }\n\n private refreshSuggestions(value: string): void {\n const version = ++this.suggestionVersion;\n if (!value.startsWith(\"/\")) {\n this.hideSuggestions();\n return;\n }\n void this.suggestionsFor(value).then(\n (suggestions) => {\n if (version !== this.suggestionVersion || value !== this.editor.value) return;\n this.suggestions = suggestions;\n this.suggestionList.setItems(\n suggestions.map((suggestion) => ({\n value: suggestion,\n label: suggestion.label,\n ...(suggestion.description === undefined ? {} : { description: suggestion.description }),\n })),\n );\n this.suggestionsVisible = suggestions.length > 0;\n this.options.onInvalidate?.();\n },\n () => {\n if (version === this.suggestionVersion) this.hideSuggestions();\n },\n );\n }\n\n private completeSuggestion(execute: boolean): void {\n const selected = this.suggestionList.selectedItem?.value ?? this.suggestions[0];\n if (selected === undefined) return;\n if (execute) {\n this.hideSuggestions();\n this.editor.setValue(\"\");\n this.submit(selected.value, false);\n return;\n }\n const completion = commonPrefix(\n this.editor.value,\n this.suggestions.map((suggestion) => suggestion.value),\n );\n if (completion !== undefined) this.editor.setValue(completion);\n }\n\n private hideSuggestions(): void {\n this.suggestions = [];\n this.suggestionsVisible = false;\n this.suggestionList.setItems([]);\n this.options.onInvalidate?.();\n }\n\n private openCurrentApproval(): void {\n if (this.disposed) return;\n if (this.dialog !== undefined) return;\n const pending = this.approvalQueue[0];\n if (pending === undefined) {\n this.dialog = undefined;\n const question = this.mcpQuestions[0];\n if (question !== undefined) {\n this.dialog = new Dialog(\n this.baseView,\n new McpInputPrompt(question.prompt, question.finish, this.editorOptions(), this.options.keymap),\n {\n open: true,\n title: \"MCP user interaction \u2014 untrusted server\",\n width: 92,\n height: 24,\n dismissOnEscape: false,\n borderStyle: this.theme.warning,\n titleStyle: this.theme.warning,\n },\n );\n this.dialogKind = \"mcp\";\n this.synchronizeDialog();\n this.options.onInvalidate?.();\n }\n return;\n }\n const prompt = new ApprovalPrompt(\n pending.request,\n this.theme,\n (decision) => {\n const current = this.approvalQueue.shift();\n this.dialog = undefined;\n this.dialogKind = undefined;\n current?.resolve(decision);\n this.openCurrentApproval();\n this.options.onInvalidate?.();\n },\n this.options.keymap,\n );\n this.dialog = new Dialog(this.baseView, prompt, {\n open: true,\n title: `Approval: ${sanitizeTerminalText(pending.request.tool.name)}`,\n width: 72,\n height: pending.request.grantKey === undefined ? 10 : 11,\n dismissOnEscape: false,\n borderStyle: this.theme.warning,\n titleStyle: this.theme.warning,\n });\n this.dialogKind = \"approval\";\n this.synchronizeDialog();\n this.options.onInvalidate?.();\n }\n\n private ensureSelectedToolVisible(): void {\n const anchor = this.transcriptView.selectedToolAnchor;\n if (anchor !== undefined) this.transcript.ensureVisible(anchor, 2);\n }\n\n private preserveSelectedToolPosition(): void {\n const anchor = this.transcriptView.selectedToolAnchor;\n if (anchor === undefined) {\n this.transcript.detachFromEnd();\n return;\n }\n this.transcript.preserveAnchor(anchor, () => this.transcriptView.selectedToolAnchor);\n }\n\n private executeUiAction(id: string): void {\n const status = this.uiActions.execute(id);\n if (status !== undefined) this.setStatus(status);\n }\n\n private async suggestionsFor(value: string): Promise<readonly MaybeCodeSlashCommandSuggestion[]> {\n const local = this.uiActions.suggestions(value);\n const controller = await (this.options.suggestions?.(value) ?? Promise.resolve([]));\n const seen = new Set<string>();\n return [...local, ...controller].filter((suggestion) => {\n if (seen.has(suggestion.value)) return false;\n seen.add(suggestion.value);\n return true;\n });\n }\n}\n\ninterface PendingApproval {\n readonly request: ApprovalRequest;\n readonly resolve: (decision: ApprovalDecision | undefined) => void;\n}\n\nclass ModelPrompt implements InteractiveComponent {\n private readonly list: SelectList<MaybeCodeModelProfile>;\n private readonly keymap: Keymap;\n private readonly layout = new Column([], { gap: 1 });\n\n constructor(\n models: readonly MaybeCodeModelProfile[],\n currentProfile: string | undefined,\n theme: TuiTheme,\n private readonly complete: (action: ModelDialogAction | undefined) => void,\n keymapOptions: MaybeCodeKeymapOptions = {},\n ) {\n this.keymap = createMaybeCodeKeymap(keymapOptions);\n const currentIndex = models.findIndex((model) => model.name === currentProfile);\n this.list = new SelectList(\n models.map((model) => ({\n value: model,\n label: `${model.name === currentProfile ? \"* \" : \"\"}${model.name}` + `${model.isDefault ? \" [default]\" : \"\"}`,\n description: `${model.provider}/${model.model} \u00B7 ${model.adapter}`,\n })),\n {\n onSelect: (item) => this.complete({ type: \"switch\", profile: item.value.name }),\n onCancel: () => this.complete(undefined),\n selectedIndex: Math.max(0, currentIndex),\n selectedStyle: theme.selected,\n descriptionStyle: theme.muted,\n markerStyle: theme.accent,\n emptyLabel: \"No model profiles configured\",\n },\n );\n this.list.setFocused(true);\n }\n\n render(size: RenderSize): RenderResult {\n this.layout.setItems([\n { flex: 1, minHeight: 1, component: this.list },\n {\n height: 1,\n component: new Text(\n `${promptShortcut(this.keymap, \"list.accept\", \"select\")} select \u00B7 ${promptShortcut(this.keymap, \"model.default.set\", \"modelPicker\")} set default \u00B7 ${promptShortcut(this.keymap, \"list.cancel\", \"select\")} close`,\n ),\n },\n ]);\n return this.layout.render(size);\n }\n\n handlePointer(event: PointerEvent): boolean {\n return this.layout.handlePointer(event);\n }\n\n handleKey(stroke: KeyStroke): boolean {\n const result = this.keymap.resolve(stroke, [\"select\", \"modelPicker\"]);\n if (result.type === \"pending\") return true;\n if (result.type === \"action\" && result.action === \"model.default.set\") {\n const selected = this.list.selectedItem?.value;\n if (selected === undefined) return false;\n this.complete({ type: \"set-default\", profile: selected.name });\n return true;\n }\n return result.type === \"action\" && result.action.startsWith(\"list.\")\n ? this.list.performAction(result.action)\n : false;\n }\n}\n\nclass EffortPrompt implements InteractiveComponent {\n private readonly list: SelectList<string>;\n private readonly keymap: Keymap;\n private readonly layout = new Column([], { gap: 1 });\n\n constructor(\n state: MaybeCodeReasoningEffortState,\n theme: TuiTheme,\n private readonly complete: (effort: string | undefined) => void,\n keymapOptions: MaybeCodeKeymapOptions = {},\n ) {\n this.keymap = createMaybeCodeKeymap(keymapOptions);\n const efforts = [\"default\", ...state.efforts];\n const currentIndex = state.overridden ? efforts.indexOf(state.effectiveEffort ?? \"\") : 0;\n this.list = new SelectList(\n efforts.map((effort) => ({\n value: effort,\n label: `${effort === efforts[currentIndex] ? \"* \" : \"\"}${effort}`,\n description:\n effort === \"default\"\n ? `Clear override \u00B7 default ${state.defaultEffort ?? \"is provider-defined\"}`\n : `Capability source: ${state.source}`,\n })),\n {\n onSelect: (item) => this.complete(item.value),\n onCancel: () => this.complete(undefined),\n selectedIndex: Math.max(0, currentIndex),\n selectedStyle: theme.selected,\n descriptionStyle: theme.muted,\n markerStyle: theme.accent,\n },\n );\n this.list.setFocused(true);\n }\n\n render(size: RenderSize): RenderResult {\n this.layout.setItems([\n { flex: 1, minHeight: 1, component: this.list },\n {\n height: 1,\n component: new Text(\n `${promptShortcut(this.keymap, \"list.accept\", \"select\")} select \u00B7 ${promptShortcut(this.keymap, \"list.cancel\", \"select\")} close`,\n ),\n },\n ]);\n return this.layout.render(size);\n }\n\n handlePointer(event: PointerEvent): boolean {\n return this.layout.handlePointer(event);\n }\n\n handleKey(stroke: KeyStroke): boolean {\n const result = this.keymap.resolve(stroke, [\"select\"]);\n return result.type === \"action\" ? this.list.performAction(result.action) : result.type === \"pending\";\n }\n}\n\nclass ApprovalPrompt implements InteractiveComponent {\n private readonly choices: SelectList<ApprovalDecision>;\n private readonly keymap: Keymap;\n private readonly layout = new Column([], { gap: 1 });\n\n constructor(\n private readonly request: ApprovalRequest,\n private readonly theme: TuiTheme,\n private readonly decide: (decision: ApprovalDecision) => void,\n keymapOptions: MaybeCodeKeymapOptions = {},\n ) {\n this.keymap = createMaybeCodeKeymap(keymapOptions);\n this.choices = new SelectList(\n [\n { value: \"allow\", label: \"Allow once\", description: promptShortcut(this.keymap, \"approval.allow\", \"approval\") },\n ...(request.grantKey === undefined\n ? []\n : [\n {\n value: \"allow-session\" as const,\n label: \"Allow matching calls for this session\",\n description: promptShortcut(this.keymap, \"approval.allowSession\", \"approval\"),\n },\n ]),\n {\n value: \"deny\",\n label: \"Deny\",\n description: `${promptShortcut(this.keymap, \"approval.deny\", \"approval\")} / ${promptShortcut(this.keymap, \"list.cancel\", \"select\")}`,\n },\n ...(request.persistent\n ? [{ value: \"allow-persistent\" as const, label: \"\u4FDD\u5B58\u5141\u8BB8\u89C4\u5219\", description: request.persistent.description }]\n : []),\n ],\n {\n onSelect: (item) => this.decide(item.value),\n onCancel: () => this.decide(\"deny\"),\n selectedStyle: this.theme.selected,\n descriptionStyle: this.theme.muted,\n markerStyle: this.theme.accent,\n },\n );\n this.choices.setFocused(true);\n }\n\n render(size: RenderSize): RenderResult {\n const input = truncate(sanitizeTerminalText(stringify(this.request.input)), 1_200);\n this.layout.setItems([\n {\n height: 1,\n component: new Text(`Tool: ${sanitizeTerminalText(this.request.tool.name)}`),\n },\n { flex: 1, minHeight: 1, component: new Text(input) },\n {\n height: (this.request.grantKey === undefined ? 2 : 3) + (this.request.persistent ? 2 : 0),\n component: this.choices,\n },\n ]);\n return this.layout.render(size);\n }\n\n handlePointer(event: PointerEvent): boolean {\n return this.layout.handlePointer(event);\n }\n\n handleKey(stroke: KeyStroke): boolean {\n const result = this.keymap.resolve(stroke, [\"select\", \"approval\"]);\n if (result.type === \"pending\") return true;\n if (result.type === \"action\" && result.action === \"approval.allow\") {\n this.decide(\"allow\");\n return true;\n }\n if (result.type === \"action\" && result.action === \"approval.allowSession\" && this.request.grantKey !== undefined) {\n this.decide(\"allow-session\");\n return true;\n }\n if (result.type === \"action\" && result.action === \"approval.deny\") {\n this.decide(\"deny\");\n return true;\n }\n return result.type === \"action\" && result.action.startsWith(\"list.\")\n ? this.choices.performAction(result.action)\n : false;\n }\n}\n\ntype SessionMode = \"browse\" | \"search\" | \"rename\" | \"delete\";\n\nclass SessionPrompt implements InteractiveComponent {\n private mode: SessionMode = \"browse\";\n private query = \"\";\n private status = \"\";\n private readonly list: SelectList<SessionSummary>;\n private readonly input: Editor;\n private readonly keymap: Keymap;\n private readonly layout = new Column([], { gap: 1 });\n private readonly listRegion: Component = {\n render: (size) => this.list.render(size),\n handlePointer: (event) => (this.mode === \"browse\" || this.mode === \"search\") && this.list.handlePointer(event),\n };\n\n constructor(\n private readonly sessions: readonly SessionSummary[],\n private readonly currentSessionId: string,\n private readonly theme: TuiTheme,\n private readonly complete: (action: SessionDialogAction | undefined) => void,\n editorOptions: Pick<EditorOptions, \"clipboard\" | \"onInvalidate\" | \"onError\" | \"keybindings\">,\n keymapOptions: MaybeCodeKeymapOptions = {},\n ) {\n this.keymap = createMaybeCodeKeymap(keymapOptions);\n this.list = new SelectList<SessionSummary>([], {\n onSelect: () => this.resumeSelected(),\n onCancel: () => this.complete(undefined),\n selectedStyle: this.theme.selected,\n descriptionStyle: this.theme.muted,\n markerStyle: this.theme.accent,\n emptyLabel: \"No matching sessions\",\n });\n this.list.setFocused(true);\n this.input = new Editor({\n ...editorOptions,\n prompt: \"> \",\n onChange: (value) => {\n if (this.mode !== \"search\") return;\n this.query = value;\n this.refreshList();\n },\n onSubmit: (value) => {\n if (this.mode !== \"rename\") return;\n const session = this.list.selectedItem?.value;\n const title = value.replace(/\\s+/gu, \" \").trim();\n if (session === undefined || title === \"\") {\n this.status = \"Session title cannot be empty\";\n return;\n }\n this.complete({ type: \"rename\", sessionId: session.id, title });\n },\n });\n this.refreshList();\n }\n\n render(size: RenderSize): RenderResult {\n this.layout.setItems([\n { height: 1, component: new Text(this.heading()) },\n { flex: 1, minHeight: 1, component: this.listRegion },\n { height: 2, component: this.footer() },\n ]);\n return this.layout.render(size);\n }\n\n handlePointer(event: PointerEvent): boolean {\n return this.layout.handlePointer(event);\n }\n\n dispose(): void {\n this.input.dispose();\n }\n\n handleKey(stroke: KeyStroke): boolean {\n const contexts =\n this.mode === \"browse\"\n ? [\"select\", \"sessionPicker\"]\n : [this.mode === \"search\" ? \"sessionSearch\" : this.mode === \"rename\" ? \"sessionRename\" : \"sessionDelete\"];\n const result = this.keymap.resolve(stroke, contexts);\n if (result.type === \"pending\") return true;\n if (result.type === \"action\") {\n switch (result.action) {\n case \"list.cancel\":\n if (this.mode !== \"browse\") return this.setMode(\"browse\");\n this.complete(undefined);\n return true;\n case \"list.up\":\n case \"list.down\":\n case \"list.pageUp\":\n case \"list.pageDown\":\n case \"list.home\":\n case \"list.end\":\n case \"list.accept\":\n return this.list.performAction(result.action);\n case \"search.start\":\n this.setMode(\"search\");\n this.status = \"Type to filter by id, title, or preview\";\n this.input.setValue(\"\");\n return true;\n case \"search.finish\":\n return this.resumeSelected();\n case \"session.rename.start\":\n return this.beginRename();\n case \"session.rename.accept\":\n this.input.performAction(\"editor.submit\");\n return true;\n case \"session.delete.request\":\n return this.beginDelete();\n case \"session.delete.cancel\":\n return this.setMode(\"browse\");\n case \"session.delete.accept\":\n return this.deleteSelected();\n case \"text.clear\":\n this.input.setValue(\"\");\n return true;\n case \"text.backspace\":\n this.input.performAction(\"editor.backspace\");\n return true;\n }\n }\n return (this.mode === \"search\" || this.mode === \"rename\") && this.input.handleKey(stroke);\n }\n\n private footer(): InteractiveComponent {\n if (this.mode === \"search\" || this.mode === \"rename\") return this.input;\n return {\n render: (size) =>\n new Text(\n this.mode === \"delete\"\n ? `${this.status}\\n${promptShortcut(this.keymap, \"session.delete.accept\", \"sessionDelete\")} delete / ${promptShortcut(this.keymap, \"session.delete.cancel\", \"sessionDelete\")} cancel`\n : `${this.status}\\n${promptShortcut(this.keymap, \"list.accept\", \"select\")} resume \u00B7 ${promptShortcut(this.keymap, \"search.start\", \"sessionPicker\")} search \u00B7 ${promptShortcut(this.keymap, \"session.rename.start\", \"sessionPicker\")} rename \u00B7 ${promptShortcut(this.keymap, \"session.delete.request\", \"sessionPicker\")} delete \u00B7 ${promptShortcut(this.keymap, \"list.cancel\", \"select\")} close`,\n ).render(size),\n handleKey: () => false,\n };\n }\n\n private heading(): string {\n if (this.mode === \"search\") return `Search sessions: ${this.query || \"\u2026\"}`;\n if (this.mode === \"rename\") return \"Rename selected session\";\n if (this.mode === \"delete\") return \"Delete selected session?\";\n return `${this.sessions.length} session${this.sessions.length === 1 ? \"\" : \"s\"}`;\n }\n\n private refreshList(): void {\n const query = this.query.trim().toLowerCase();\n const filtered =\n query === \"\"\n ? this.sessions\n : this.sessions.filter((session) =>\n [session.id, session.title, session.preview]\n .filter((value): value is string => value !== undefined)\n .some((value) => value.toLowerCase().includes(query)),\n );\n this.list.setItems(\n filtered.map((session) => ({\n value: session,\n label: `${session.id === this.currentSessionId ? \"* \" : \"\"}${session.title ?? session.id}`,\n description:\n session.preview ?? (session.turnCount === undefined ? \"No recorded turns\" : `${session.turnCount} turns`),\n })),\n );\n this.status = filtered.length === 0 ? \"No matching sessions\" : this.status;\n }\n\n private resumeSelected(): boolean {\n const session = this.list.selectedItem?.value;\n if (session === undefined) return false;\n this.complete({ type: \"resume\", sessionId: session.id });\n return true;\n }\n\n private beginRename(): boolean {\n const session = this.list.selectedItem?.value;\n if (session === undefined) return false;\n this.setMode(\"rename\");\n this.status = \"Enter a new title\";\n this.input.setValue(session.title ?? \"\");\n return true;\n }\n\n private beginDelete(): boolean {\n const session = this.list.selectedItem?.value;\n if (session === undefined) return false;\n if (session.id === this.currentSessionId) {\n this.status = \"The active session cannot be deleted\";\n return true;\n }\n this.setMode(\"delete\");\n this.status = `Delete ${sanitizeTerminalText(session.title ?? session.id)}?`;\n return true;\n }\n\n private deleteSelected(): boolean {\n const session = this.list.selectedItem?.value;\n if (session === undefined || session.id === this.currentSessionId) {\n return this.setMode(\"browse\");\n }\n this.complete({ type: \"delete\", sessionId: session.id });\n return true;\n }\n\n private setMode(mode: SessionMode): boolean {\n const resetSearch = this.mode === \"search\" && mode !== \"search\";\n this.mode = mode;\n this.status = \"\";\n this.keymap.reset();\n this.input.resetKeybindings();\n this.input.setFocused(mode === \"search\" || mode === \"rename\");\n this.list.setFocused(false);\n this.list.setFocused(mode === \"browse\" || mode === \"search\");\n if (resetSearch) {\n this.query = \"\";\n this.refreshList();\n }\n return true;\n }\n}\n\nclass HeaderView implements Component {\n constructor(\n private readonly workspace: string,\n private readonly model: string,\n private readonly theme: TuiTheme,\n ) {}\n\n render(size: RenderSize): RenderResult {\n const title =\n `${styleText(\"\u25C6\", this.theme.accent)} ` +\n `${styleText(\"MaybeCode\", this.theme.accent)} ` +\n styleText(sanitizeTerminalText(this.model), this.theme.muted);\n const workspace =\n `${styleText(\"workspace\", this.theme.dim)} ` + styleText(sanitizeTerminalText(this.workspace), this.theme.muted);\n const divider = styleText(\"\u2500\".repeat(size.width), this.theme.border);\n return new Text(`${title}\\n${workspace}\\n${divider}`, { wrap: false }).render(size);\n }\n}\n\nclass FooterView implements Component {\n constructor(\n private readonly yolo: boolean,\n private readonly status: string,\n private readonly focus: string | undefined,\n private readonly details: \"all\" | \"off\" | \"custom\",\n private readonly reasoning: boolean,\n private readonly theme: TuiTheme,\n private readonly replyHint: string,\n private readonly detailsHint: string,\n private readonly thinkingHint: string,\n private readonly gitLabel: string,\n ) {}\n\n render(size: RenderSize): RenderResult {\n const statusStyle = /^error/iu.test(this.status)\n ? this.theme.error\n : /running|cancell/iu.test(this.status)\n ? this.theme.warning\n : this.theme.success;\n const value =\n (this.gitLabel ? `${styleText(this.gitLabel, this.theme.accent)} ` : \"\") +\n (this.yolo ? `${styleText(\"YOLO \u00B7 Auto-approve\", this.theme.warning)} ` : \"\") +\n `${styleText(\"\u25CF\", statusStyle)} ${styleText(this.status, statusStyle)} ` +\n `${styleText(this.focus ?? \"none\", this.theme.muted)} ` +\n `${styleText(this.replyHint, this.theme.dim)} reply ` +\n (this.focus === \"transcript\"\n ? `${styleText(\"J/K\", this.theme.dim)} tools ` +\n `${styleText(\"Enter\", this.theme.dim)} toggle ` +\n `${styleText(\"\u2191/\u2193\", this.theme.dim)} scroll ` +\n `${styleText(\"Tab\", this.theme.dim)} editor`\n : `${styleText(this.detailsHint, this.theme.dim)} details:${this.details} ` +\n `${styleText(this.thinkingHint, this.theme.dim)} thinking:${this.reasoning ? \"on\" : \"off\"} ` +\n `${styleText(\"Ctrl+C\", this.theme.dim)} copy/cancel`);\n return new Text(value, { wrap: false }).render(size);\n }\n}\n\nfunction stringify(value: unknown): string {\n if (typeof value === \"string\") return value;\n try {\n return JSON.stringify(value, null, 2) ?? String(value);\n } catch {\n return String(value);\n }\n}\n\nfunction truncate(value: string, maximum: number): string {\n return value.length <= maximum ? value : `${value.slice(0, maximum - 1)}\u2026`;\n}\n\nfunction isSuggestionNavigation(key: string): boolean {\n return key === \"up\" || key === \"down\" || key === \"pageup\" || key === \"pagedown\" || key === \"home\" || key === \"end\";\n}\n\nfunction commonPrefix(input: string, values: readonly string[]): string | undefined {\n const candidates = values.filter((value) => value.startsWith(input));\n const first = candidates[0];\n if (first === undefined) return undefined;\n let length = first.length;\n for (const value of candidates.slice(1)) {\n length = Math.min(length, value.length);\n let index = input.length;\n while (index < length && value[index] === first[index]) index += 1;\n length = index;\n }\n return first.slice(0, length);\n}\n\n/** Ephemeral editor, deliberately without EditorHistory or TranscriptStore writes. */\nclass McpInputPrompt implements InteractiveComponent {\n private readonly body: ScrollView;\n private readonly editor: Editor;\n private readonly layout = new Column([]);\n private readonly keymap: Keymap;\n private reviewPageSize = 1;\n constructor(\n prompt: string,\n private readonly complete: (value?: string) => void,\n editorOptions: Pick<EditorOptions, \"clipboard\" | \"onInvalidate\" | \"onError\" | \"keybindings\">,\n keymapOptions: MaybeCodeKeymapOptions = {},\n ) {\n this.keymap = createMaybeCodeKeymap(keymapOptions);\n this.body = new ScrollView(new Text(sanitizeTerminalText(prompt)));\n this.body.setFocused(true);\n this.editor = new Editor({ ...editorOptions, prompt: \"> \", onSubmit: (value) => complete(value) });\n this.editor.setFocused(true);\n }\n render(size: RenderSize): RenderResult {\n this.reviewPageSize = Math.max(1, size.height - 5);\n this.layout.setItems([\n { flex: 1, minHeight: 1, component: this.body },\n { height: 4, component: this.editor },\n {\n height: 1,\n component: new Text(\n `${promptShortcut(this.keymap, \"request.pageUp\", \"mcpInput\")}/${promptShortcut(this.keymap, \"request.pageDown\", \"mcpInput\")} review request | Enter continue | ${promptShortcut(this.keymap, \"request.cancel\", \"mcpInput\")} cancel`,\n ),\n },\n ]);\n return this.layout.render(size);\n }\n handlePointer(event: PointerEvent): boolean {\n return this.layout.handlePointer(event);\n }\n dispose(): void {\n this.editor.dispose();\n this.body.dispose();\n }\n handleKey(stroke: KeyStroke): boolean {\n const result = this.keymap.resolve(stroke, [\"mcpInput\"]);\n if (result.type === \"pending\") return true;\n if (result.type === \"action\") {\n switch (result.action) {\n case \"request.cancel\":\n this.complete();\n return true;\n case \"request.pageUp\":\n this.body.scrollBy(-this.reviewPageSize);\n return true;\n case \"request.pageDown\":\n this.body.scrollBy(this.reviewPageSize);\n return true;\n case \"request.scrollUp\":\n this.body.scrollBy(-3);\n return true;\n case \"request.scrollDown\":\n this.body.scrollBy(3);\n return true;\n }\n }\n return this.editor.handleKey(stroke);\n }\n}\n\nfunction promptShortcut(keymap: Keymap, action: string, context: string): string {\n return keymap.keysForAction(action, context).join(\" / \");\n}\n", "import {\n Keymap,\n formatKeySequence,\n mergeKeyBindings,\n parseKeySequence,\n type KeyBindingDefinition,\n} from \"@sortedyuan/tui/keybindings\";\nimport { DEFAULT_EDITOR_KEYBINDINGS } from \"@sortedyuan/tui\";\n\nexport const MAYBECODE_KEY_ACTIONS = [\n \"app.interrupt\",\n \"app.tools.toggle\",\n \"app.thinking.toggle\",\n \"app.reply.start\",\n \"app.focus.next\",\n \"app.focus.previous\",\n \"app.selection.copy\",\n \"list.up\",\n \"list.down\",\n \"list.pageUp\",\n \"list.pageDown\",\n \"list.home\",\n \"list.end\",\n \"list.accept\",\n \"list.cancel\",\n \"preview.toggle\",\n \"search.start\",\n \"search.finish\",\n \"text.backspace\",\n \"text.clear\",\n \"session.rename.start\",\n \"session.rename.accept\",\n \"session.delete.request\",\n \"session.delete.accept\",\n \"session.delete.cancel\",\n \"model.default.set\",\n \"approval.allow\",\n \"approval.allowSession\",\n \"approval.deny\",\n \"request.cancel\",\n \"request.pageUp\",\n \"request.pageDown\",\n \"request.scrollUp\",\n \"request.scrollDown\",\n] as const;\n\nexport type MaybeCodeKeyAction = (typeof MAYBECODE_KEY_ACTIONS)[number];\n\nexport const MAYBECODE_EDITOR_KEYBINDINGS: readonly KeyBindingDefinition[] = [\n { context: \"editor\", keys: \"ctrl+j\", action: \"editor.newline\" },\n];\n\nexport const MAYBECODE_DEFAULT_KEYBINDINGS: readonly KeyBindingDefinition[] = [\n { context: \"global\", keys: \"ctrl+c\", action: \"app.interrupt\" },\n { context: \"dialog\", keys: \"ctrl+c\", action: \"app.interrupt\" },\n { context: \"global\", keys: \"<leader> d\", action: \"app.tools.toggle\" },\n { context: \"global\", keys: \"<leader> t\", action: \"app.thinking.toggle\" },\n { context: \"global\", keys: \"<leader> r\", action: \"app.reply.start\" },\n { context: \"global\", keys: \"tab\", action: \"app.focus.next\" },\n { context: \"global\", keys: \"shift+tab\", action: \"app.focus.previous\" },\n { context: \"transcript.selection\", keys: \"ctrl+c\", action: \"app.selection.copy\" },\n { context: \"select\", keys: \"up\", action: \"list.up\" },\n { context: \"select\", keys: \"down\", action: \"list.down\" },\n { context: \"select\", keys: \"pageup\", action: \"list.pageUp\" },\n { context: \"select\", keys: \"pagedown\", action: \"list.pageDown\" },\n { context: \"select\", keys: \"home\", action: \"list.home\" },\n { context: \"select\", keys: \"end\", action: \"list.end\" },\n { context: \"select\", keys: \"enter\", action: \"list.accept\" },\n { context: \"select\", keys: \"escape\", action: \"list.cancel\" },\n\n { context: \"sessionPicker\", keys: \"space\", action: \"preview.toggle\" },\n { context: \"sessionPicker\", keys: \"/\", action: \"search.start\" },\n { context: \"sessionPicker\", keys: \"d\", action: \"session.delete.request\" },\n { context: \"sessionPicker\", keys: \"r\", action: \"session.rename.start\" },\n\n { context: \"modelPicker\", keys: \"d\", action: \"model.default.set\" },\n\n { context: \"approval\", keys: \"a\", action: \"approval.allow\" },\n { context: \"approval\", keys: \"s\", action: \"approval.allowSession\" },\n { context: \"approval\", keys: \"d\", action: \"approval.deny\" },\n\n { context: \"mcpInput\", keys: \"escape\", action: \"request.cancel\" },\n { context: \"mcpInput\", keys: \"pageup\", action: \"request.pageUp\" },\n { context: \"mcpInput\", keys: \"pagedown\", action: \"request.pageDown\" },\n { context: \"mcpInput\", keys: \"wheelup\", action: \"request.scrollUp\" },\n { context: \"mcpInput\", keys: \"wheeldown\", action: \"request.scrollDown\" },\n\n { context: \"sessionSearch\", keys: \"escape\", action: \"list.cancel\" },\n { context: \"sessionSearch\", keys: \"enter\", action: \"search.finish\" },\n { context: \"sessionSearch\", keys: \"backspace\", action: \"text.backspace\" },\n { context: \"sessionSearch\", keys: \"ctrl+u\", action: \"text.clear\" },\n { context: \"sessionSearch\", keys: \"up\", action: \"list.up\" },\n { context: \"sessionSearch\", keys: \"down\", action: \"list.down\" },\n { context: \"sessionSearch\", keys: \"pageup\", action: \"list.pageUp\" },\n { context: \"sessionSearch\", keys: \"pagedown\", action: \"list.pageDown\" },\n\n { context: \"sessionRename\", keys: \"escape\", action: \"list.cancel\" },\n { context: \"sessionRename\", keys: \"enter\", action: \"session.rename.accept\" },\n { context: \"sessionRename\", keys: \"backspace\", action: \"text.backspace\" },\n { context: \"sessionRename\", keys: \"ctrl+u\", action: \"text.clear\" },\n\n { context: \"sessionDelete\", keys: \"y\", action: \"session.delete.accept\" },\n { context: \"sessionDelete\", keys: \"n\", action: \"session.delete.cancel\" },\n { context: \"sessionDelete\", keys: \"escape\", action: \"session.delete.cancel\" },\n];\n\nexport interface MaybeCodeKeymapOptions {\n readonly leader?: string;\n readonly bindings?: readonly KeyBindingDefinition[];\n}\n\nexport function createMaybeCodeKeymap(options: MaybeCodeKeymapOptions = {}): Keymap {\n const leader = options.leader ?? \"ctrl+g\";\n const sequence = parseKeySequence(leader);\n if (sequence.length !== 1 || (!sequence[0]!.ctrl && !sequence[0]!.alt && !sequence[0]!.meta)) {\n throw new Error(\"MaybeCode leader must be one modified key, for example ctrl+g\");\n }\n const leaderKey = formatKeySequence(sequence);\n if (\n mergeKeyBindings(DEFAULT_EDITOR_KEYBINDINGS, MAYBECODE_EDITOR_KEYBINDINGS).some(\n (binding) => formatKeySequence(parseKeySequence(binding.keys)) === leaderKey,\n )\n ) {\n throw new Error(\"MaybeCode leader conflicts with a text editing shortcut\");\n }\n return new Keymap(mergeKeyBindings(MAYBECODE_DEFAULT_KEYBINDINGS, options.bindings, { leader }), {\n actions: MAYBECODE_KEY_ACTIONS,\n leader,\n chordTimeoutMs: null,\n });\n}\n", "import { DEFAULT_DARK_THEME, type TuiTheme } from \"@sortedyuan/tui\";\n\n/** MaybeCode's restrained dark palette. Applications may replace it later. */\nexport const MAYBECODE_DARK_THEME: TuiTheme = {\n ...DEFAULT_DARK_THEME,\n name: \"maybecode-dark\",\n accent: { foreground: \"#7dd3fc\", bold: true },\n muted: { foreground: \"#94a3b8\" },\n dim: { foreground: \"#64748b\" },\n success: { foreground: \"#86efac\" },\n warning: { foreground: \"#fde047\" },\n error: { foreground: \"#fb7185\" },\n border: { foreground: \"#475569\" },\n borderAccent: { foreground: \"#38bdf8\" },\n selected: { foreground: \"#f8fafc\", background: \"#1e3a5f\", bold: true },\n userMessage: { foreground: \"#f8fafc\", bold: true },\n assistantLabel: { foreground: \"#7dd3fc\", bold: true },\n thinking: { foreground: \"#94a3b8\", italic: true },\n toolTitle: { foreground: \"#93c5fd\", bold: true },\n toolOutput: { foreground: \"#e2e8f0\" },\n toolPending: { foreground: \"#fde047\" },\n toolSuccess: { foreground: \"#86efac\" },\n toolError: { foreground: \"#fb7185\" },\n diffAdded: { foreground: \"#86efac\" },\n diffRemoved: { foreground: \"#fda4af\" },\n diffContext: { foreground: \"#94a3b8\" },\n markdown: {\n heading: { foreground: \"#7dd3fc\", bold: true },\n link: { foreground: \"#93c5fd\", underline: true },\n linkUrl: { foreground: \"#64748b\" },\n code: { foreground: \"#fde68a\" },\n codeBlock: { foreground: \"#e2e8f0\" },\n codeBlockBorder: { foreground: \"#475569\" },\n quote: { foreground: \"#cbd5e1\", italic: true },\n quoteBorder: { foreground: \"#38bdf8\" },\n horizontalRule: { foreground: \"#475569\" },\n listBullet: { foreground: \"#38bdf8\" },\n },\n};\n", "import type { MaybeCodeSlashCommandSuggestion } from \"../slash-commands.js\";\n\nexport interface MaybeCodeUiAction {\n readonly id: string;\n readonly command: `/${string}`;\n readonly description: string;\n readonly run: () => string;\n}\n\nexport type MaybeCodeUiCommandResult =\n { readonly matched: false } | { readonly matched: true; readonly status: string };\n\n/** Instance-scoped display actions; these never enter the agent controller. */\nexport class MaybeCodeUiActionRegistry {\n private readonly actions = new Map<string, MaybeCodeUiAction>();\n private readonly commands = new Map<string, MaybeCodeUiAction>();\n\n register(action: MaybeCodeUiAction): this {\n if (action.id.trim() === \"\") throw new Error(\"UI action id cannot be empty\");\n if (!/^\\/[\\w-]+$/u.test(action.command)) {\n throw new Error(`Invalid UI action command: ${action.command}`);\n }\n if (this.actions.has(action.id)) throw new Error(`Duplicate UI action: ${action.id}`);\n if (this.commands.has(action.command)) {\n throw new Error(`Duplicate UI command: ${action.command}`);\n }\n this.actions.set(action.id, action);\n this.commands.set(action.command, action);\n return this;\n }\n\n listCommands(): readonly {\n readonly command: string;\n readonly description: string;\n }[] {\n return [...this.actions.values()].map((action) => ({\n command: action.command,\n description: action.description,\n }));\n }\n\n execute(id: string): string | undefined {\n return this.actions.get(id)?.run();\n }\n\n executeCommand(input: string): MaybeCodeUiCommandResult {\n const [command = \"\", ...arguments_] = input.trim().split(/\\s+/u);\n const action = this.commands.get(command.toLowerCase());\n if (action === undefined) return { matched: false };\n return arguments_.length === 0\n ? { matched: true, status: action.run() }\n : { matched: true, status: `Usage: ${action.command}` };\n }\n\n suggestions(input: string): readonly MaybeCodeSlashCommandSuggestion[] {\n if (!input.startsWith(\"/\") || /\\s/u.test(input)) return [];\n const prefix = input.toLowerCase();\n return [...this.actions.values()]\n .filter((action) => action.command.startsWith(prefix))\n .map((action) => ({\n value: action.command,\n label: action.command,\n description: action.description,\n }));\n }\n}\n", "import { sanitizeTerminalText } from \"@sortedyuan/tui\";\nimport type { McpInteractionRequest } from \"@sortedyuan/mcp\";\nimport type { MaybeCodeController } from \"./controller.js\";\n\n/** Shared ephemeral UI flow: no history, default acceptance, navigation, or model calls. */\nexport async function presentMcpInteraction(\n request: McpInteractionRequest,\n app: MaybeCodeController,\n ask: (prompt: string, signal: AbortSignal) => Promise<string | undefined>,\n signal: AbortSignal,\n): Promise<void> {\n if (app.respondMcpInteraction === undefined) return;\n const header = sanitizeTerminalText(\n `MCP server: ${request.serverId}\\nSession: ${request.owner.sessionId}\\n` +\n `Request: ${request.requestId}\\n${request.params.message}\\n`,\n );\n const question = async (prompt: string) => {\n signal.throwIfAborted();\n const answer = await ask(sanitizeTerminalText(prompt), signal);\n signal.throwIfAborted();\n return answer;\n };\n let error = \"\";\n while (!signal.aborted) {\n if (request.params.mode === \"review\") {\n let data = request.params.data;\n let edited = false;\n for (;;) {\n const choice = (\n await question(\n `${header}\\nHost review: ${request.params.kind}\\n${JSON.stringify(data, null, 2)}\\n${error}` +\n `Type allow to approve${request.params.editable ? \", edit to change the JSON\" : \"\"}, decline, or cancel: `,\n )\n )\n ?.trim()\n .toLowerCase();\n if (choice === \"edit\" && request.params.editable) {\n try {\n const input = await question(\n `${header}\\nEnter the replacement JSON document (reviewed again before sending), or cancel: `,\n );\n if (input === undefined || input.trim() === \"cancel\") {\n app.respondMcpInteraction(request.id, { action: \"cancel\" });\n return;\n }\n if (Buffer.byteLength(input) > 48 * 1024) throw new Error();\n data = JSON.parse(input);\n edited = true;\n error = \"\";\n } catch {\n error = \"Invalid JSON or document too large.\\n\";\n }\n continue;\n }\n app.respondMcpInteraction(request.id, {\n action: choice === \"allow\" ? \"accept\" : choice === \"decline\" ? \"decline\" : \"cancel\",\n ...(choice !== \"allow\" || !edited ? {} : { content: { json: JSON.stringify(data) } }),\n });\n return;\n }\n }\n if (request.params.mode === \"url\") {\n let url: URL;\n try {\n url = new URL(request.params.url);\n if (![\"https:\", \"http:\"].includes(url.protocol) || url.username || url.password) throw new Error(\"Unsafe URL\");\n } catch {\n app.respondMcpInteraction(request.id, { action: \"decline\" });\n return;\n }\n const consent = await question(\n `${header}\\nExternal host: ${url.host}\\nURL: ${request.params.url}\\n` +\n \"This is an untrusted external website, not MCP client login. Nothing opens automatically.\\n\" +\n \"Type accept to consent, decline to refuse, or cancel to dismiss: \",\n );\n if (consent?.trim().toLowerCase() !== \"accept\") {\n app.respondMcpInteraction(request.id, {\n action: consent?.trim().toLowerCase() === \"decline\" ? \"decline\" : \"cancel\",\n });\n return;\n }\n const resume = await question(\n `${header}\\nOpen the displayed URL yourself if you wish.\\n` +\n \"After interacting with the website, type retry to resume the original request, or cancel: \",\n );\n app.respondMcpInteraction(request.id, { action: resume?.trim().toLowerCase() === \"retry\" ? \"accept\" : \"cancel\" });\n return;\n }\n const answer = await question(\n `${header}\\nNever enter passwords, API keys, tokens or payment credentials.\\n` +\n `Requested form (untrusted):\\n${JSON.stringify(request.params.requestedSchema, null, 2)}\\n${error}` +\n \"Enter a JSON object, decline, or cancel: \",\n );\n if (answer === undefined || [\"decline\", \"cancel\"].includes(answer.trim().toLowerCase())) {\n app.respondMcpInteraction(request.id, {\n action: answer?.trim().toLowerCase() === \"decline\" ? \"decline\" : \"cancel\",\n });\n return;\n }\n let content: Record<string, string | number | boolean | string[]>;\n try {\n if (Buffer.byteLength(answer) > 64 * 1024) throw new Error();\n const parsed: unknown = JSON.parse(answer);\n if (parsed === null || typeof parsed !== \"object\" || Array.isArray(parsed)) throw new Error();\n content = parsed as typeof content;\n } catch {\n error = \"Invalid JSON object or response too large.\\n\";\n continue;\n }\n const review = await question(\n `${header}\\nReview what will be sent ONLY to this server:\\n${JSON.stringify(content, null, 2)}\\n` +\n \"Type send to submit, edit to replace, decline, or cancel: \",\n );\n const action = review?.trim().toLowerCase();\n if (action === \"edit\") continue;\n if (action !== \"send\") {\n app.respondMcpInteraction(request.id, { action: action === \"decline\" ? \"decline\" : \"cancel\" });\n return;\n }\n try {\n app.respondMcpInteraction(request.id, { action: \"accept\", content });\n return;\n } catch {\n error = \"The response does not satisfy the form; please correct it.\\n\";\n }\n }\n}\n", "import { randomBytes } from \"node:crypto\";\nimport open from \"open\";\nimport { AsyncEventQueue, isStreamingMayEvent } from \"@sortedyuan/may/core\";\nimport type { MaybeCodeController } from \"./controller.js\";\nimport type { MaybeCodeEvent } from \"./events.js\";\nimport { createMaybeCodeWebHost, startMaybeCodeWebServer } from \"./web-ui.js\";\n\nfunction eventQueue() {\n return new AsyncEventQueue<MaybeCodeEvent>({\n maxBufferedValues: 1024,\n isDroppable: (event) =>\n event.type === \"mcp.resource.updated\" || (event.type === \"run.event\" && isStreamingMayEvent(event.event)),\n });\n}\n\nexport class MaybeCodeTerminalWeb {\n private readonly terminalEvents = eventQueue();\n private readonly webEvents = eventQueue();\n private readonly host;\n private readonly relay: Promise<void>;\n private failure: unknown;\n private starting: ReturnType<typeof startMaybeCodeWebServer> | undefined;\n private closing: Promise<void> | undefined;\n readonly events: AsyncIterable<MaybeCodeEvent>;\n\n constructor(\n private readonly app: MaybeCodeController,\n private readonly exit?: () => void,\n ) {\n this.host = createMaybeCodeWebHost(app, { events: this.webEvents, closeApplication: false, terminal: true });\n this.events = this.readTerminalEvents();\n this.relay = this.forwardEvents().catch((error) => {\n this.failure = error;\n });\n }\n\n private async forwardEvents(): Promise<void> {\n try {\n for await (const event of this.app.events) {\n this.terminalEvents.push(event);\n this.webEvents.push(event);\n }\n } catch (error) {\n this.failure = error;\n throw error;\n } finally {\n this.terminalEvents.close();\n this.webEvents.close();\n }\n }\n\n private async *readTerminalEvents(): AsyncIterable<MaybeCodeEvent> {\n for await (const event of this.terminalEvents) yield event;\n if (this.failure !== undefined) throw this.failure;\n }\n\n async open(): Promise<string> {\n const server = await this.startServer();\n const url = server.createLoginUrl();\n try {\n await open(url);\n } catch {\n throw new Error(\"\u65E0\u6CD5\u6253\u5F00\u9ED8\u8BA4\u6D4F\u89C8\u5668\uFF0C\u8BF7\u68C0\u67E5\u7CFB\u7EDF\u6D4F\u89C8\u5668\u8BBE\u7F6E\u540E\u91CD\u65B0\u6267\u884C /web\u3002\");\n }\n return server.url;\n }\n\n async startServer(): ReturnType<typeof startMaybeCodeWebServer> {\n if (this.closing) throw new Error(\"MaybeCode \u6B63\u5728\u5173\u95ED\u3002\");\n this.starting ??= startMaybeCodeWebServer(this.host, {\n token: randomBytes(32).toString(\"base64url\"),\n port: 0,\n browserLogin: true,\n exit: () => {\n if (this.exit) this.exit();\n else this.beginClose();\n },\n });\n const server = await this.starting;\n if (this.closing) throw new Error(\"MaybeCode \u6B63\u5728\u5173\u95ED\u3002\");\n return server;\n }\n\n close(): Promise<void> {\n this.beginClose();\n return this.closing!.then(() => {\n if (this.failure !== undefined) throw this.failure;\n });\n }\n\n private beginClose(): void {\n this.closing ??= this.closeOwnedResources().catch((error) => {\n this.failure = error;\n });\n }\n\n private async closeOwnedResources(): Promise<void> {\n const results = await Promise.allSettled([\n this.app.close(),\n this.starting ? this.starting.then((server) => server.close()) : this.host.close(),\n ]);\n await this.relay;\n const failures = results.flatMap((result) => (result.status === \"rejected\" ? [result.reason] : []));\n if (this.failure !== undefined) failures.push(this.failure);\n if (failures.length) throw new AggregateError(failures, \"\u5173\u95ED MaybeCode \u65F6\u53D1\u751F\u9519\u8BEF\u3002\");\n }\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAWA,SAAS,iBAAAA,sBAAqB;AAE9B,SAAS,gBAAgB;;;ACZzB,SAAS,qBAAqB;;;ACQvB,IAAM,wBAAwB;AAAA,EACnC;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACF;AAIO,IAAM,+BAAgE;AAAA,EAC3E,EAAE,SAAS,UAAU,MAAM,UAAU,QAAQ,iBAAiB;AAChE;AAEO,IAAM,gCAAiE;AAAA,EAC5E,EAAE,SAAS,UAAU,MAAM,UAAU,QAAQ,gBAAgB;AAAA,EAC7D,EAAE,SAAS,UAAU,MAAM,UAAU,QAAQ,gBAAgB;AAAA,EAC7D,EAAE,SAAS,UAAU,MAAM,cAAc,QAAQ,mBAAmB;AAAA,EACpE,EAAE,SAAS,UAAU,MAAM,cAAc,QAAQ,sBAAsB;AAAA,EACvE,EAAE,SAAS,UAAU,MAAM,cAAc,QAAQ,kBAAkB;AAAA,EACnE,EAAE,SAAS,UAAU,MAAM,OAAO,QAAQ,iBAAiB;AAAA,EAC3D,EAAE,SAAS,UAAU,MAAM,aAAa,QAAQ,qBAAqB;AAAA,EACrE,EAAE,SAAS,wBAAwB,MAAM,UAAU,QAAQ,qBAAqB;AAAA,EAChF,EAAE,SAAS,UAAU,MAAM,MAAM,QAAQ,UAAU;AAAA,EACnD,EAAE,SAAS,UAAU,MAAM,QAAQ,QAAQ,YAAY;AAAA,EACvD,EAAE,SAAS,UAAU,MAAM,UAAU,QAAQ,cAAc;AAAA,EAC3D,EAAE,SAAS,UAAU,MAAM,YAAY,QAAQ,gBAAgB;AAAA,EAC/D,EAAE,SAAS,UAAU,MAAM,QAAQ,QAAQ,YAAY;AAAA,EACvD,EAAE,SAAS,UAAU,MAAM,OAAO,QAAQ,WAAW;AAAA,EACrD,EAAE,SAAS,UAAU,MAAM,SAAS,QAAQ,cAAc;AAAA,EAC1D,EAAE,SAAS,UAAU,MAAM,UAAU,QAAQ,cAAc;AAAA,EAE3D,EAAE,SAAS,iBAAiB,MAAM,SAAS,QAAQ,iBAAiB;AAAA,EACpE,EAAE,SAAS,iBAAiB,MAAM,KAAK,QAAQ,eAAe;AAAA,EAC9D,EAAE,SAAS,iBAAiB,MAAM,KAAK,QAAQ,yBAAyB;AAAA,EACxE,EAAE,SAAS,iBAAiB,MAAM,KAAK,QAAQ,uBAAuB;AAAA,EAEtE,EAAE,SAAS,eAAe,MAAM,KAAK,QAAQ,oBAAoB;AAAA,EAEjE,EAAE,SAAS,YAAY,MAAM,KAAK,QAAQ,iBAAiB;AAAA,EAC3D,EAAE,SAAS,YAAY,MAAM,KAAK,QAAQ,wBAAwB;AAAA,EAClE,EAAE,SAAS,YAAY,MAAM,KAAK,QAAQ,gBAAgB;AAAA,EAE1D,EAAE,SAAS,YAAY,MAAM,UAAU,QAAQ,iBAAiB;AAAA,EAChE,EAAE,SAAS,YAAY,MAAM,UAAU,QAAQ,iBAAiB;AAAA,EAChE,EAAE,SAAS,YAAY,MAAM,YAAY,QAAQ,mBAAmB;AAAA,EACpE,EAAE,SAAS,YAAY,MAAM,WAAW,QAAQ,mBAAmB;AAAA,EACnE,EAAE,SAAS,YAAY,MAAM,aAAa,QAAQ,qBAAqB;AAAA,EAEvE,EAAE,SAAS,iBAAiB,MAAM,UAAU,QAAQ,cAAc;AAAA,EAClE,EAAE,SAAS,iBAAiB,MAAM,SAAS,QAAQ,gBAAgB;AAAA,EACnE,EAAE,SAAS,iBAAiB,MAAM,aAAa,QAAQ,iBAAiB;AAAA,EACxE,EAAE,SAAS,iBAAiB,MAAM,UAAU,QAAQ,aAAa;AAAA,EACjE,EAAE,SAAS,iBAAiB,MAAM,MAAM,QAAQ,UAAU;AAAA,EAC1D,EAAE,SAAS,iBAAiB,MAAM,QAAQ,QAAQ,YAAY;AAAA,EAC9D,EAAE,SAAS,iBAAiB,MAAM,UAAU,QAAQ,cAAc;AAAA,EAClE,EAAE,SAAS,iBAAiB,MAAM,YAAY,QAAQ,gBAAgB;AAAA,EAEtE,EAAE,SAAS,iBAAiB,MAAM,UAAU,QAAQ,cAAc;AAAA,EAClE,EAAE,SAAS,iBAAiB,MAAM,SAAS,QAAQ,wBAAwB;AAAA,EAC3E,EAAE,SAAS,iBAAiB,MAAM,aAAa,QAAQ,iBAAiB;AAAA,EACxE,EAAE,SAAS,iBAAiB,MAAM,UAAU,QAAQ,aAAa;AAAA,EAEjE,EAAE,SAAS,iBAAiB,MAAM,KAAK,QAAQ,wBAAwB;AAAA,EACvE,EAAE,SAAS,iBAAiB,MAAM,KAAK,QAAQ,wBAAwB;AAAA,EACvE,EAAE,SAAS,iBAAiB,MAAM,UAAU,QAAQ,wBAAwB;AAC9E;AAOO,SAAS,sBAAsB,UAAkC,CAAC,GAAW;AAClF,QAAM,SAAS,QAAQ,UAAU;AACjC,QAAM,WAAW,iBAAiB,MAAM;AACxC,MAAI,SAAS,WAAW,KAAM,CAAC,SAAS,CAAC,EAAG,QAAQ,CAAC,SAAS,CAAC,EAAG,OAAO,CAAC,SAAS,CAAC,EAAG,MAAO;AAC5F,UAAM,IAAI,MAAM,+DAA+D;AAAA,EACjF;AACA,QAAM,YAAY,kBAAkB,QAAQ;AAC5C,MACE,iBAAiB,4BAA4B,4BAA4B,EAAE;AAAA,IACzE,CAAC,YAAY,kBAAkB,iBAAiB,QAAQ,IAAI,CAAC,MAAM;AAAA,EACrE,GACA;AACA,UAAM,IAAI,MAAM,yDAAyD;AAAA,EAC3E;AACA,SAAO,IAAI,OAAO,iBAAiB,+BAA+B,QAAQ,UAAU,EAAE,OAAO,CAAC,GAAG;AAAA,IAC/F,SAAS;AAAA,IACT;AAAA,IACA,gBAAgB;AAAA,EAClB,CAAC;AACH;AAnBgB;;;AC5GT,IAAM,uBAAiC;AAAA,EAC5C,GAAG;AAAA,EACH,MAAM;AAAA,EACN,QAAQ,EAAE,YAAY,WAAW,MAAM,KAAK;AAAA,EAC5C,OAAO,EAAE,YAAY,UAAU;AAAA,EAC/B,KAAK,EAAE,YAAY,UAAU;AAAA,EAC7B,SAAS,EAAE,YAAY,UAAU;AAAA,EACjC,SAAS,EAAE,YAAY,UAAU;AAAA,EACjC,OAAO,EAAE,YAAY,UAAU;AAAA,EAC/B,QAAQ,EAAE,YAAY,UAAU;AAAA,EAChC,cAAc,EAAE,YAAY,UAAU;AAAA,EACtC,UAAU,EAAE,YAAY,WAAW,YAAY,WAAW,MAAM,KAAK;AAAA,EACrE,aAAa,EAAE,YAAY,WAAW,MAAM,KAAK;AAAA,EACjD,gBAAgB,EAAE,YAAY,WAAW,MAAM,KAAK;AAAA,EACpD,UAAU,EAAE,YAAY,WAAW,QAAQ,KAAK;AAAA,EAChD,WAAW,EAAE,YAAY,WAAW,MAAM,KAAK;AAAA,EAC/C,YAAY,EAAE,YAAY,UAAU;AAAA,EACpC,aAAa,EAAE,YAAY,UAAU;AAAA,EACrC,aAAa,EAAE,YAAY,UAAU;AAAA,EACrC,WAAW,EAAE,YAAY,UAAU;AAAA,EACnC,WAAW,EAAE,YAAY,UAAU;AAAA,EACnC,aAAa,EAAE,YAAY,UAAU;AAAA,EACrC,aAAa,EAAE,YAAY,UAAU;AAAA,EACrC,UAAU;AAAA,IACR,SAAS,EAAE,YAAY,WAAW,MAAM,KAAK;AAAA,IAC7C,MAAM,EAAE,YAAY,WAAW,WAAW,KAAK;AAAA,IAC/C,SAAS,EAAE,YAAY,UAAU;AAAA,IACjC,MAAM,EAAE,YAAY,UAAU;AAAA,IAC9B,WAAW,EAAE,YAAY,UAAU;AAAA,IACnC,iBAAiB,EAAE,YAAY,UAAU;AAAA,IACzC,OAAO,EAAE,YAAY,WAAW,QAAQ,KAAK;AAAA,IAC7C,aAAa,EAAE,YAAY,UAAU;AAAA,IACrC,gBAAgB,EAAE,YAAY,UAAU;AAAA,IACxC,YAAY,EAAE,YAAY,UAAU;AAAA,EACtC;AACF;;;ACzBO,IAAM,4BAAN,MAAgC;AAAA,EAbvC,OAauC;AAAA;AAAA;AAAA,EACpB,UAAU,oBAAI,IAA+B;AAAA,EAC7C,WAAW,oBAAI,IAA+B;AAAA,EAE/D,SAAS,QAAiC;AACxC,QAAI,OAAO,GAAG,KAAK,MAAM,GAAI,OAAM,IAAI,MAAM,8BAA8B;AAC3E,QAAI,CAAC,cAAc,KAAK,OAAO,OAAO,GAAG;AACvC,YAAM,IAAI,MAAM,8BAA8B,OAAO,OAAO,EAAE;AAAA,IAChE;AACA,QAAI,KAAK,QAAQ,IAAI,OAAO,EAAE,EAAG,OAAM,IAAI,MAAM,wBAAwB,OAAO,EAAE,EAAE;AACpF,QAAI,KAAK,SAAS,IAAI,OAAO,OAAO,GAAG;AACrC,YAAM,IAAI,MAAM,yBAAyB,OAAO,OAAO,EAAE;AAAA,IAC3D;AACA,SAAK,QAAQ,IAAI,OAAO,IAAI,MAAM;AAClC,SAAK,SAAS,IAAI,OAAO,SAAS,MAAM;AACxC,WAAO;AAAA,EACT;AAAA,EAEA,eAGI;AACF,WAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,EAAE,IAAI,CAAC,YAAY;AAAA,MACjD,SAAS,OAAO;AAAA,MAChB,aAAa,OAAO;AAAA,IACtB,EAAE;AAAA,EACJ;AAAA,EAEA,QAAQ,IAAgC;AACtC,WAAO,KAAK,QAAQ,IAAI,EAAE,GAAG,IAAI;AAAA,EACnC;AAAA,EAEA,eAAe,OAAyC;AACtD,UAAM,CAAC,UAAU,IAAI,GAAG,UAAU,IAAI,MAAM,KAAK,EAAE,MAAM,MAAM;AAC/D,UAAM,SAAS,KAAK,SAAS,IAAI,QAAQ,YAAY,CAAC;AACtD,QAAI,WAAW,OAAW,QAAO,EAAE,SAAS,MAAM;AAClD,WAAO,WAAW,WAAW,IACzB,EAAE,SAAS,MAAM,QAAQ,OAAO,IAAI,EAAE,IACtC,EAAE,SAAS,MAAM,QAAQ,UAAU,OAAO,OAAO,GAAG;AAAA,EAC1D;AAAA,EAEA,YAAY,OAA2D;AACrE,QAAI,CAAC,MAAM,WAAW,GAAG,KAAK,MAAM,KAAK,KAAK,EAAG,QAAO,CAAC;AACzD,UAAM,SAAS,MAAM,YAAY;AACjC,WAAO,CAAC,GAAG,KAAK,QAAQ,OAAO,CAAC,EAC7B,OAAO,CAAC,WAAW,OAAO,QAAQ,WAAW,MAAM,CAAC,EACpD,IAAI,CAAC,YAAY;AAAA,MAChB,OAAO,OAAO;AAAA,MACd,OAAO,OAAO;AAAA,MACd,aAAa,OAAO;AAAA,IACtB,EAAE;AAAA,EACN;AACF;;;AHGO,IAAM,wBAAN,MAA4D;AAAA,EAsEjE,YAA6B,SAAuC;AAAvC;AAC3B,SAAK,SAAS,sBAAsB,QAAQ,MAAM;AAClD,SAAK,QAAQ,QAAQ,SAAS;AAC9B,SAAK,QAAQ,QAAQ,SAAS;AAC9B,SAAK,YAAY,QAAQ;AACzB,SAAK,iBAAiB,IAAI,eAAe,QAAQ,OAAO;AAAA,MACtD,GAAI,QAAQ,SAAS,EAAE,QAAQ,QAAQ,OAAO,IAAI,CAAC;AAAA,MACnD,OAAO,KAAK;AAAA,MACZ,gBAAgB;AAAA,MAChB,yBAAyB;AAAA,MACzB,iBAAiB,GAAG,KAAK,aAAa,kBAAkB,CAAC;AAAA,MACzD,GAAG,cAAc,EAAE,eAAe,QAAQ,cAAc,CAAC;AAAA,IAC3D,CAAC;AACD,SAAK,aAAa,IAAI,WAAW,KAAK,gBAAgB;AAAA,MACpD,WAAW;AAAA,MACX,cAAc,6BAAM,QAAQ,eAAe,GAA7B;AAAA,IAChB,CAAC;AACD,SAAK,eAAe,QAAQ,gBAAgB,IAAI,cAAc;AAC9D,SAAK,YACH,QAAQ,aACR,IAAI,0BAA0B,EAC3B,SAAS;AAAA,MACR,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,aAAa;AAAA,MACb,KAAK,6BAAM;AACT,aAAK,6BAA6B;AAClC,cAAM,UAAU,KAAK,eAAe,kBAAkB;AACtD,eAAO,gBAAgB,UAAU,UAAU,QAAQ;AAAA,MACrD,GAJK;AAAA,IAKP,CAAC,EACA,SAAS;AAAA,MACR,IAAI;AAAA,MACJ,SAAS;AAAA,MACT,aAAa;AAAA,MACb,KAAK,6BAAM;AACT,aAAK,6BAA6B;AAClC,cAAM,UAAU,KAAK,eAAe,gBAAgB;AACpD,eAAO,YAAY,UAAU,UAAU,QAAQ;AAAA,MACjD,GAJK;AAAA,IAKP,CAAC;AACL,SAAK,SAAS,IAAI,OAAO;AAAA,MACvB,GAAG,KAAK,cAAc;AAAA,MACtB,SAAS,KAAK;AAAA,MACd,aAAa;AAAA,MACb,aAAa,KAAK,MAAM;AAAA,MACxB,kBAAkB,KAAK,MAAM;AAAA,MAC7B,UAAU,wBAAC,UAAU,KAAK,OAAO,KAAK,GAA5B;AAAA,MACV,UAAU,wBAAC,UAAU,KAAK,mBAAmB,KAAK,GAAxC;AAAA,IACZ,CAAC;AACD,SAAK,iBAAiB,IAAI,WAA4C,CAAC,GAAG;AAAA,MACxE,eAAe,KAAK,MAAM;AAAA,MAC1B,kBAAkB,KAAK,MAAM;AAAA,MAC7B,aAAa,KAAK,MAAM;AAAA,MACxB,YAAY;AAAA,IACd,CAAC;AACD,SAAK,eAAe,WAAW,IAAI;AACnC,SAAK,MAAM,SAAS,cAAc,KAAK,UAAU;AACjD,SAAK,MAAM,SAAS,UAAU,KAAK,MAAM;AACzC,SAAK,MAAM,MAAM,QAAQ;AACzB,SAAK,cAAc,QAAQ,MAAM,UAAU,MAAM,QAAQ,eAAe,CAAC;AAAA,EAC3E;AAAA,EA7D6B;AAAA,EA1I/B,OAoEmE;AAAA;AAAA;AAAA,EAChD,QAAQ,IAAI,aAAa;AAAA,EACzB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACT,cAA0D,CAAC;AAAA,EAC3D,qBAAqB;AAAA,EACrB,oBAAoB;AAAA,EACpB;AAAA,EACA,kBAAkB;AAAA,EAClB,SAAS;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACF;AAAA,EACA,gBAAmC,CAAC;AAAA,EAC7C;AAAA,EACA;AAAA,EACA,WAAW;AAAA,EACX,mBAAkC,QAAQ,QAAQ;AAAA,EACzC,SAAS,IAAI,OAAO,CAAC,CAAC;AAAA,EAC/B,aAAyB,EAAE,OAAO,GAAG,QAAQ,EAAE;AAAA,EACtC,eAA0B;AAAA,IACzC,QAAQ,wBAAC,SAAS;AAChB,WAAK,aAAa;AAClB,aAAO,IAAI,MAAM,KAAK,QAAQ;AAAA,QAC5B,aAAa,KAAK,MAAM,cAAc,WAAW,KAAK,MAAM,eAAe,KAAK,MAAM;AAAA,MACxF,CAAC,EAAE,OAAO,IAAI;AAAA,IAChB,GALQ;AAAA,IAMR,eAAe,wBAAC,UAAU;AACxB,UAAI,MAAM,SAAS,QAAQ;AACzB,YAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,YAAI,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,WAAW,QAAQ,KAAK,MAAM,IAAI,KAAK,MAAM,KAAK,KAAK,WAAW,SAAS;AAC5G,iBAAO;AACT,aAAK,kBAAkB;AACvB,aAAK,MAAM,MAAM,QAAQ;AACzB,aAAK,eAAe,eAAe;AAAA,MACrC;AACA,aAAO,KAAK,OAAO,cAAc,EAAE,GAAG,OAAO,GAAG,MAAM,IAAI,GAAG,GAAG,MAAM,IAAI,EAAE,CAAC;AAAA,IAC/E,GAVe;AAAA,EAWjB;AAAA,EACiB,mBAA8B;AAAA,IAC7C,QAAQ,wBAAC,SAAS,KAAK,WAAW,OAAO,IAAI,GAArC;AAAA,IACR,eAAe,wBAAC,UAAU;AACxB,UAAI,MAAM,SAAS,QAAQ;AACzB,YAAI,MAAM,WAAW,EAAG,QAAO;AAC/B,aAAK,kBAAkB;AACvB,aAAK,OAAO,eAAe;AAAA,MAC7B;AACA,aAAO,KAAK,WAAW,cAAc,KAAK;AAAA,IAC5C,GAPe;AAAA,EAQjB;AAAA,EACQ;AAAA,EACA;AAAA,EACS,eAAwE,CAAC;AAAA,EAClF;AAAA,EACA;AAAA,EACA;AAAA,EACS,WAAiC;AAAA,IAChD,QAAQ,wBAAC,SAAS,KAAK,WAAW,IAAI,GAA9B;AAAA,IACR,WAAW,wBAAC,WAAW,KAAK,cAAc,MAAM,GAArC;AAAA,IACX,eAAe,wBAAC,UAAU,KAAK,OAAO,cAAc,KAAK,GAA1C;AAAA,EACjB;AAAA,EAiEA,OAAO,MAAgC;AACrC,SAAK,kBAAkB;AACvB,WAAO,KAAK,QAAQ,OAAO,IAAI,KAAK,KAAK,WAAW,IAAI;AAAA,EAC1D;AAAA,EAEA,UAAU,QAA4B;AACpC,SAAK,kBAAkB;AACvB,QAAI,KAAK,WAAW,QAAW;AAC7B,YAAM,UAAU,KAAK,OAAO,UAAU,MAAM;AAC5C,UAAI,QAAS,QAAO;AACpB,YAAM,WAAW,KAAK,OAAO,QAAQ,QAAQ,CAAC,QAAQ,CAAC;AACvD,UAAI,SAAS,SAAS,YAAY,SAAS,WAAW,iBAAiB;AACrE,aAAK;AACL,aAAK,QAAQ,WAAW;AACxB,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AACA,WAAO,KAAK,cAAc,MAAM;AAAA,EAClC;AAAA,EAEA,cAAc,OAA8B;AAC1C,SAAK,kBAAkB;AACvB,WAAO,KAAK,QAAQ,cAAc,KAAK,KAAK,KAAK,OAAO,cAAc,KAAK;AAAA,EAC7E;AAAA,EAEA,MAAM,0BAAyC;AAC7C,UAAM,KAAK;AACX,UAAM,KAAK,OAAO,wBAAwB;AAAA,EAC5C;AAAA,EAEQ,gBAA+F;AACrG,WAAO;AAAA,MACL,aAAa;AAAA,MACb,GAAG,cAAc,EAAE,WAAW,KAAK,QAAQ,UAAU,CAAC;AAAA,MACtD,cAAc,6BAAM,KAAK,QAAQ,eAAe,GAAlC;AAAA,MACd,SAAS,wBAAC,UAAU,KAAK,UAAU,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE,GAA5F;AAAA,IACX;AAAA,EACF;AAAA,EAEQ,aAAa,QAAwB;AAC3C,WACE,KAAK,OACF,cAAc,MAAM,EAAE,CAAC,GACtB,MAAM,GAAG,EACV;AAAA,MAAI,CAAC,QACJ,IACG,MAAM,GAAG,EACT,IAAI,CAAC,SAAU,KAAK,WAAW,IAAI,KAAK,YAAY,IAAI,KAAK,CAAC,EAAG,YAAY,IAAI,KAAK,MAAM,CAAC,CAAE,EAC/F,KAAK,GAAG;AAAA,IACb,EACC,KAAK,GAAG,KAAK;AAAA,EAEpB;AAAA,EAEQ,oBAA0B;AAChC,SAAK,OAAO,MAAM;AAClB,SAAK,OAAO,iBAAiB;AAC7B,SAAK,kBAAkB;AAAA,EACzB;AAAA,EAEQ,oBAA0B;AAChC,QAAI,KAAK,yBAAyB,UAAa,KAAK,OAAO,WAAW,YAAY,GAAG;AACnF,WAAK,SAAS,KAAK;AACnB,WAAK,QAAQ,eAAe;AAAA,IAC9B;AACA,SAAK,uBAAuB;AAAA,EAC9B;AAAA,EAEQ,oBAA0B;AAChC,QAAI,KAAK,eAAe,KAAK,OAAQ;AACrC,SAAK,YAAY,QAAQ;AACzB,SAAK,aAAa,KAAK;AACvB,SAAK,kBAAkB;AACvB,SAAK,WAAW,sBAAsB;AACtC,SAAK,OAAO,WAAW,KAAK,WAAW,UAAa,KAAK,MAAM,cAAc,QAAQ;AAAA,EACvF;AAAA,EAEA,gBAAgB,SAAiE;AAC/E,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,cAAc,KAAK,EAAE,SAAS,QAAQ,CAAC;AAC5C,UAAI,KAAK,cAAc,WAAW,EAAG,MAAK,oBAAoB;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,QAAgB,QAAkD;AAChF,QAAI,OAAO,QAAS,QAAO,QAAQ,QAAQ,MAAS;AACpD,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,UAAI,UAAU;AACd,YAAM,QAAQ,6BAAM,QAAQ,OAAO,GAArB;AACd,YAAM,UAAU;AAAA,QACd;AAAA,QACA,QAAQ,wBAAC,UAAmB;AAC1B,cAAI,QAAS;AACb,oBAAU;AACV,iBAAO,oBAAoB,SAAS,KAAK;AACzC,gBAAM,QAAQ,KAAK,aAAa,QAAQ,OAAO;AAC/C,cAAI,SAAS,EAAG,MAAK,aAAa,OAAO,OAAO,CAAC;AACjD,cAAI,UAAU,KAAK,KAAK,eAAe,OAAO;AAC5C,iBAAK,SAAS;AACd,iBAAK,aAAa;AAClB,iBAAK,oBAAoB;AAAA,UAC3B;AACA,kBAAQ,KAAK;AACb,eAAK,QAAQ,eAAe;AAAA,QAC9B,GAbQ;AAAA,MAcV;AACA,WAAK,aAAa,KAAK,OAAO;AAC9B,aAAO,iBAAiB,SAAS,OAAO,EAAE,MAAM,KAAK,CAAC;AACtD,WAAK,oBAAoB;AAAA,IAC3B,CAAC;AAAA,EACH;AAAA,EAEA,gBAAgB,WAA4B;AAC1C,UAAM,QAAQ,KAAK,cAAc,UAAU,CAAC,SAAS,KAAK,QAAQ,OAAO,SAAS;AAClF,QAAI,QAAQ,EAAG,QAAO;AACtB,UAAM,CAAC,QAAQ,IAAI,KAAK,cAAc,OAAO,OAAO,CAAC;AACrD,cAAU,QAAQ,MAAS;AAC3B,QAAI,UAAU,KAAK,KAAK,eAAe,YAAY;AACjD,WAAK,SAAS;AACd,WAAK,aAAa;AAClB,WAAK,oBAAoB;AAAA,IAC3B;AACA,SAAK,QAAQ,eAAe;AAC5B,WAAO;AAAA,EACT;AAAA,EAEA,qBACE,UACA,kBAC0C;AAC1C,QAAI,KAAK,WAAW,UAAa,KAAK,yBAAyB,QAAW;AACxE,aAAO,QAAQ,OAAO,IAAI,MAAM,gCAAgC,CAAC;AAAA,IACnE;AACA,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,uBAAuB;AAC5B,YAAM,SAAS,IAAI;AAAA,QACjB;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,CAAC,WAAW;AACV,eAAK,SAAS;AACd,eAAK,aAAa;AAClB,gBAAM,WAAW,KAAK;AACtB,eAAK,uBAAuB;AAC5B,qBAAW,MAAM;AACjB,eAAK,oBAAoB;AACzB,eAAK,QAAQ,eAAe;AAAA,QAC9B;AAAA,QACA,KAAK,cAAc;AAAA,QACnB,KAAK,QAAQ;AAAA,MACf;AACA,WAAK,SAAS,IAAI,OAAO,KAAK,UAAU,QAAQ;AAAA,QAC9C,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,aAAa,KAAK,MAAM;AAAA,QACxB,YAAY,KAAK,MAAM;AAAA,MACzB,CAAC;AACD,WAAK,aAAa;AAClB,WAAK,kBAAkB;AACvB,WAAK,QAAQ,eAAe;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,mBACE,QACA,gBACwC;AACxC,QAAI,KAAK,WAAW,UAAa,KAAK,uBAAuB,QAAW;AACtE,aAAO,QAAQ,OAAO,IAAI,MAAM,gCAAgC,CAAC;AAAA,IACnE;AACA,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,qBAAqB;AAC1B,YAAM,SAAS,IAAI;AAAA,QACjB;AAAA,QACA;AAAA,QACA,KAAK;AAAA,QACL,CAAC,WAAW;AACV,eAAK,SAAS;AACd,eAAK,aAAa;AAClB,gBAAM,WAAW,KAAK;AACtB,eAAK,qBAAqB;AAC1B,qBAAW,MAAM;AACjB,eAAK,oBAAoB;AACzB,eAAK,QAAQ,eAAe;AAAA,QAC9B;AAAA,QACA,KAAK,QAAQ;AAAA,MACf;AACA,WAAK,SAAS,IAAI,OAAO,KAAK,UAAU,QAAQ;AAAA,QAC9C,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,aAAa,KAAK,MAAM;AAAA,QACxB,YAAY,KAAK,MAAM;AAAA,MACzB,CAAC;AACD,WAAK,aAAa;AAClB,WAAK,kBAAkB;AACvB,WAAK,QAAQ,eAAe;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,gCAAgC,OAAmE;AACjG,QAAI,MAAM,WAAW,WAAW,KAAK,WAAW,UAAa,KAAK,wBAAwB,QAAW;AACnG,aAAO,MAAM,WAAW,UACpB,QAAQ,OAAO,IAAI,MAAM,gCAAgC,CAAC,IAC1D,QAAQ,QAAQ,MAAS;AAAA,IAC/B;AACA,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,sBAAsB;AAC3B,YAAM,SAAS,IAAI;AAAA,QACjB;AAAA,QACA,KAAK;AAAA,QACL,CAAC,WAAW;AACV,eAAK,SAAS;AACd,eAAK,aAAa;AAClB,gBAAM,WAAW,KAAK;AACtB,eAAK,sBAAsB;AAC3B,qBAAW,MAAM;AACjB,eAAK,oBAAoB;AACzB,eAAK,QAAQ,eAAe;AAAA,QAC9B;AAAA,QACA,KAAK,QAAQ;AAAA,MACf;AACA,WAAK,SAAS,IAAI,OAAO,KAAK,UAAU,QAAQ;AAAA,QAC9C,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ,KAAK,IAAI,IAAI,MAAM,QAAQ,SAAS,CAAC;AAAA,QAC7C,iBAAiB;AAAA,QACjB,aAAa,KAAK,MAAM;AAAA,QACxB,YAAY,KAAK,MAAM;AAAA,MACzB,CAAC;AACD,WAAK,aAAa;AAClB,WAAK,kBAAkB;AACvB,WAAK,QAAQ,eAAe;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,UAAU,QAAsB;AAC9B,QAAI,KAAK,SAAU;AACnB,SAAK,SAAS,qBAAqB,MAAM;AACzC,SAAK,QAAQ,eAAe;AAAA,EAC9B;AAAA,EAEA,gBAAgB,WAAiC;AAC/C,QAAI,KAAK,SAAU;AACnB,SAAK,YAAY,qBAAqB,UAAU,IAAI;AACpD,SAAK,WAAW,kBAAkB,SAAS;AAC3C,SAAK,QAAQ,eAAe;AAAA,EAC9B;AAAA,EAEA,qBACE,QACA,kBAC2C;AAC3C,QAAI,KAAK,OAAQ,QAAO,QAAQ,OAAO,IAAI,MAAM,gCAAgC,CAAC;AAClF,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,uBAAuB;AAC5B,YAAM,SAAS,IAAI,kBAAkB,QAAQ;AAAA,QAC3C;AAAA,QACA,OAAO,KAAK;AAAA,QACZ,YAAY,wBAAC,cAAc,KAAK,sBAAsB,SAAS,GAAnD;AAAA,MACd,CAAC;AACD,WAAK,SAAS,IAAI,OAAO,KAAK,UAAU,QAAQ;AAAA,QAC9C,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,aAAa,KAAK,MAAM;AAAA,QACxB,YAAY,KAAK,MAAM;AAAA,MACzB,CAAC;AACD,WAAK,aAAa;AAClB,WAAK,kBAAkB;AACvB,WAAK,QAAQ,eAAe;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEA,eACE,MACA,aAGI,CAAC,GACU;AACf,QAAI,KAAK,OAAQ,QAAO,QAAQ,OAAO,IAAI,MAAM,gCAAgC,CAAC;AAClF,WAAO,IAAI,QAAQ,CAAC,YAAY;AAC9B,WAAK,uBAAuB,MAAM,QAAQ;AAC1C,YAAM,SAAS,IAAI,oBAAoB,MAAM;AAAA,QAC3C,OAAO,KAAK;AAAA,QACZ,SAAS,6BAAM,KAAK,sBAAsB,GAAjC;AAAA,QACT,GAAG;AAAA,QACH,cAAc,6BAAM,KAAK,QAAQ,eAAe,GAAlC;AAAA,MAChB,CAAC;AACD,WAAK,SAAS,IAAI,OAAO,KAAK,UAAU,QAAQ;AAAA,QAC9C,MAAM;AAAA,QACN,OAAO;AAAA,QACP,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,iBAAiB;AAAA,QACjB,aAAa,KAAK,MAAM;AAAA,QACxB,YAAY,KAAK,MAAM;AAAA,MACzB,CAAC;AACD,WAAK,aAAa;AAClB,WAAK,kBAAkB;AACvB,WAAK,QAAQ,eAAe;AAAA,IAC9B,CAAC;AAAA,EACH;AAAA,EAEQ,sBAAsB,WAAwC;AACpE,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,UAAM,UAAU,KAAK;AACrB,SAAK,uBAAuB;AAC5B,cAAU,SAAS;AACnB,SAAK,oBAAoB;AACzB,SAAK,QAAQ,eAAe;AAAA,EAC9B;AAAA,EAEA,SAAS,OAAqB;AAC5B,SAAK,QAAQ,qBAAqB,KAAK;AACvC,SAAK,QAAQ,eAAe;AAAA,EAC9B;AAAA,EAEA,IAAI,kBAGA;AACF,WAAO,KAAK,UAAU,aAAa;AAAA,EACrC;AAAA,EAEA,UAAgB;AACd,QAAI,KAAK,SAAU;AACnB,SAAK,WAAW;AAChB,SAAK,YAAY;AACjB,SAAK,WAAW,QAAQ;AACxB,SAAK,OAAO,UAAU;AACtB,SAAK,QAAQ,QAAQ;AACrB,QAAI,KAAK,eAAe,KAAK,OAAQ,MAAK,YAAY,QAAQ;AAC9D,SAAK,MAAM,MAAM;AACjB,SAAK,SAAS;AACd,SAAK,aAAa;AAClB,eAAW,YAAY,KAAK,aAAa,OAAO,CAAC,EAAG,UAAS,OAAO;AACpE,SAAK,uBAAuB,MAAS;AACrC,SAAK,uBAAuB;AAC5B,SAAK,qBAAqB,MAAS;AACnC,SAAK,qBAAqB;AAC1B,SAAK,sBAAsB,MAAS;AACpC,SAAK,sBAAsB;AAC3B,SAAK,uBAAuB;AAC5B,SAAK,uBAAuB;AAC5B,SAAK,qBAAqB;AAC1B,eAAW,YAAY,KAAK,cAAc,OAAO,CAAC,GAAG;AACnD,eAAS,QAAQ,MAAS;AAAA,IAC5B;AAAA,EACF;AAAA,EAEQ,WAAW,MAAgC;AACjD,UAAM,mBAAmB,KAAK,qBAAqB,KAAK,IAAI,GAAG,KAAK,YAAY,SAAS,CAAC,IAAI;AAC9F,SAAK,OAAO,SAAS;AAAA,MACnB;AAAA,QACE,QAAQ;AAAA,QACR,WAAW,IAAI,WAAW,KAAK,WAAW,KAAK,OAAO,KAAK,KAAK;AAAA,MAClE;AAAA,MACA,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,KAAK,iBAAiB;AAAA,MAC1D,GAAI,qBAAqB,IACrB,CAAC,IACD;AAAA,QACE;AAAA,UACE,QAAQ;AAAA,UACR,WAAW,IAAI,MAAM,KAAK,gBAAgB;AAAA,YACxC,OAAO;AAAA,YACP,aAAa,KAAK,MAAM;AAAA,YACxB,YAAY,KAAK,MAAM;AAAA,UACzB,CAAC;AAAA,QACH;AAAA,MACF;AAAA,MACJ;AAAA,QACE,QAAQ;AAAA,QACR,WAAW,KAAK;AAAA,MAClB;AAAA,MACA;AAAA,QACE,QAAQ;AAAA,QACR,WAAW,IAAI;AAAA,UACb,KAAK,QAAQ,iBAAiB,MAAM;AAAA,UACpC,KAAK;AAAA,UACL,KAAK,MAAM;AAAA,UACX,KAAK,eAAe;AAAA,UACpB,KAAK,eAAe;AAAA,UACpB,KAAK;AAAA,UACL,KAAK,aAAa,iBAAiB;AAAA,UACnC,KAAK,aAAa,kBAAkB;AAAA,UACpC,KAAK,aAAa,qBAAqB;AAAA,UACvC,KAAK;AAAA,QACP;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO,KAAK,OAAO,OAAO,IAAI;AAAA,EAChC;AAAA,EAEQ,cAAc,QAA4B;AAChD,QAAI,OAAO,QAAQ,aAAa,OAAO,QAAQ,aAAa;AAC1D,WAAK,kBAAkB;AACvB,WAAK,WAAW,SAAS,OAAO,QAAQ,YAAY,KAAK,CAAC;AAC1D,aAAO;AAAA,IACT;AACA,QACE,KAAK,MAAM,cAAc,YACzB,KAAK,OAAO,gBACZ,OAAO,QACP,OAAO,QAAQ,OACf,KAAK,OAAO,UAAU,MAAM,GAC5B;AACA,WAAK,OAAO,MAAM;AAClB,WAAK,kBAAkB;AACvB,aAAO;AAAA,IACT;AACA,UAAM,WAAW,KAAK,OAAO;AAAA,MAC3B;AAAA,MACA,KAAK,eAAe,eAAe,CAAC,UAAU,sBAAsB,IAAI,CAAC,QAAQ;AAAA,IACnF;AACA,QAAI,SAAS,SAAS,WAAW;AAC/B,WAAK,yBAAyB,KAAK;AACnC,WAAK,SAAS,aAAa,SAAS,YAAY,KAAK,KAAK,CAAC;AAC3D,WAAK,QAAQ,eAAe;AAC5B,aAAO;AAAA,IACT;AACA,SAAK,kBAAkB;AACvB,QAAI,SAAS,SAAS,UAAU;AAC9B,UAAI,SAAS,WAAW,sBAAsB;AAC5C,cAAM,OAAO,KAAK,eAAe;AACjC,YAAI,KAAK,QAAQ,cAAc,QAAW;AACxC,eAAK,UAAU,iCAAiC;AAAA,QAClD,OAAO;AACL,eAAK,mBAAmB,KAAK,QAAQ,UAAU,UAAU,IAAI,EAAE;AAAA,YAC7D,MAAM,KAAK,UAAU,QAAQ;AAAA,YAC7B,CAAC,UAAU,KAAK,UAAU,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,UAC9F;AAAA,QACF;AACA,eAAO;AAAA,MACT;AACA,UAAI,SAAS,WAAW,iBAAiB;AACvC,aAAK;AACL,aAAK,QAAQ,WAAW;AACxB,eAAO;AAAA,MACT;AACA,UAAI,SAAS,WAAW,oBAAoB,SAAS,WAAW,sBAAsB;AACpF,YAAI,EAAE,OAAO,QAAQ,SAAS,KAAK,sBAAsB,CAAC,OAAO,QAAQ;AACvE,eAAK,kBAAkB;AACvB,eAAK,WAAW,sBAAsB;AACtC,eAAK,OAAO,eAAe;AAC3B,gBAAM,UACJ,SAAS,WAAW,uBAAuB,KAAK,MAAM,cAAc,IAAI,KAAK,MAAM,UAAU;AAC/F,cAAI,KAAK,MAAM,cAAc,aAAc,MAAK,0BAA0B;AAC1E,iBAAO;AAAA,QACT;AAAA,MACF;AACA,UAAI,SAAS,WAAW,mBAAmB;AACzC,YAAI,KAAK,eAAe,kBAAkB,GAAG;AAC3C,eAAK,WAAW,eAAe,MAAM,KAAK,eAAe,iBAAiB;AAC1E,eAAK,UAAU,aAAa;AAAA,QAC9B,OAAO;AACL,eAAK,UAAU,oBAAoB;AAAA,QACrC;AACA,eAAO;AAAA,MACT;AACA,UAAI,SAAS,WAAW,oBAAoB;AAC1C,aAAK,gBAAgB,cAAc;AACnC,eAAO;AAAA,MACT;AACA,UAAI,SAAS,WAAW,uBAAuB;AAC7C,aAAK,gBAAgB,iBAAiB;AACtC,eAAO;AAAA,MACT;AAAA,IACF;AACA,QAAI,KAAK,MAAM,cAAc,YAAY,KAAK,OAAO,MAAM,WAAW,GAAG,GAAG;AAC1E,UAAI,OAAO,QAAQ,YAAY,KAAK,oBAAoB;AACtD,aAAK,gBAAgB;AACrB,eAAO;AAAA,MACT;AACA,UACE,KAAK,sBACL,uBAAuB,OAAO,GAAG,KACjC,OAAO,QAAQ,UACf,OAAO,QAAQ,SACf,CAAC,OAAO,SACR,CAAC,OAAO,QACR,CAAC,OAAO,KACR;AACA,eAAO,KAAK,eAAe,UAAU,MAAM;AAAA,MAC7C;AACA,UAAI,OAAO,QAAQ,SAAS,CAAC,OAAO,OAAO;AACzC,aAAK,mBAAmB,KAAK;AAC7B,eAAO;AAAA,MACT;AACA,UACE,OAAO,QAAQ,WACf,KAAK,sBACL,CAAC,OAAO,SACR,CAAC,OAAO,QACR,CAAC,OAAO,OACR,CAAC,OAAO,MACR;AACA,aAAK,mBAAmB,IAAI;AAC5B,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM,wBACJ,OAAO,QAAQ,OACf,OAAO,QAAQ,OACf,OAAO,QAAQ,WACf,OAAO,QAAQ,WACf,OAAO,SAAS;AAClB,UAAM,sBACJ,KAAK,MAAM,cAAc,iBACxB,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,SAAS;AACvE,QAAI,oBAAqB,MAAK,6BAA6B;AAC3D,UAAM,UAAU,KAAK,MAAM,SAAS,MAAM;AAC1C,QAAI,WAAW,KAAK,MAAM,cAAc,SAAU,MAAK,WAAW,sBAAsB;AACxF,QAAI,WAAW,KAAK,MAAM,cAAc,gBAAgB,uBAAuB;AAC7E,WAAK,0BAA0B;AAC/B,UAAI,OAAO,QAAQ,WAAW,OAAO,QAAQ,WAAW,OAAO,SAAS,KAAK;AAC3E,aAAK,SAAS;AAAA,MAChB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAAA,EAEQ,OAAO,OAAe,kBAAkB,MAAY;AAC1D,QAAI,KAAK,YAAY,MAAM,KAAK,MAAM,GAAI;AAC1C,SAAK,aAAa,OAAO,KAAK;AAC9B,SAAK,OAAO,SAAS,EAAE;AACvB,SAAK,gBAAgB;AACrB,SAAK,UAAU,SAAS;AACxB,UAAM,QAAQ,KAAK;AACnB,UAAM,SAAS,6BACb,KAAK,YAAY,UAAU,KAAK,kBAC5B,SACA,KAAK,kBAAkB,OAAO,iBAAiB,KAAK,GAH3C;AAIf,UAAM,WAAW,KAAK;AACtB,UAAM,WAAW,WAAW,SAAS,KAAK,MAAM,IAAI,QAAQ,QAAQ,OAAO,CAAC,GACzE;AAAA,MACC,CAAC,WAAW;AACV,YAAI,UAAU,KAAK;AACjB,eAAK,UAAU,WAAW,KAAK,QAAQ,YAAY,IAAI,YAAY,QAAQ;AAAA,MAC/E;AAAA,MACA,CAAC,UAAmB;AAClB,YAAI,KAAK,YAAY,UAAU,KAAK,gBAAiB;AACrD,YAAI,KAAK,OAAO,UAAU,GAAI,MAAK,OAAO,SAAS,KAAK;AACxD,aAAK,UAAU,UAAU,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK,CAAC,EAAE;AAAA,MACnF;AAAA,IACF,EACC,QAAQ,MAAM;AACb,UAAI,KAAK,mBAAmB,QAAS,MAAK,iBAAiB;AAAA,IAC7D,CAAC;AACH,SAAK,iBAAiB;AAAA,EACxB;AAAA,EAEA,MAAc,kBAAkB,OAAe,iBAA0B,OAA4C;AACnH,QAAI,aAAa;AACjB,QAAI,mBAAmB,MAAM,WAAW,GAAG,GAAG;AAC5C,YAAM,cAAc,MAAM,KAAK,eAAe,KAAK;AACnD,mBAAa,YAAY,WAAW,IAAI,YAAY,CAAC,EAAG,QAAQ;AAAA,IAClE;AACA,QAAI,KAAK,YAAY,UAAU,KAAK,gBAAiB,QAAO;AAC5D,UAAM,WAAW,KAAK,UAAU,eAAe,UAAU;AACzD,QAAI,SAAS,QAAS,QAAO,SAAS;AACtC,SAAK,WAAW,YAAY;AAC5B,QAAI,WAAW;AACf,UAAM,sBAAsB,6BAAY;AACtC,UAAI,SAAU;AACd,iBAAW;AACX,UAAI,KAAK,QAAQ,cAAc,UAAU,KAAK,MAAM;AAClD,aAAK,QAAQ,MAAM,WAAW,UAAU;AAAA,MAC1C;AAAA,IACF,GAN4B;AAO5B,UAAM,KAAK,QAAQ,SAAS,YAAY,mBAAmB;AAC3D,wBAAoB;AACpB,WAAO;AAAA,EACT;AAAA,EAEQ,mBAAmB,OAAqB;AAC9C,UAAM,UAAU,EAAE,KAAK;AACvB,QAAI,CAAC,MAAM,WAAW,GAAG,GAAG;AAC1B,WAAK,gBAAgB;AACrB;AAAA,IACF;AACA,SAAK,KAAK,eAAe,KAAK,EAAE;AAAA,MAC9B,CAAC,gBAAgB;AACf,YAAI,YAAY,KAAK,qBAAqB,UAAU,KAAK,OAAO,MAAO;AACvE,aAAK,cAAc;AACnB,aAAK,eAAe;AAAA,UAClB,YAAY,IAAI,CAAC,gBAAgB;AAAA,YAC/B,OAAO;AAAA,YACP,OAAO,WAAW;AAAA,YAClB,GAAI,WAAW,gBAAgB,SAAY,CAAC,IAAI,EAAE,aAAa,WAAW,YAAY;AAAA,UACxF,EAAE;AAAA,QACJ;AACA,aAAK,qBAAqB,YAAY,SAAS;AAC/C,aAAK,QAAQ,eAAe;AAAA,MAC9B;AAAA,MACA,MAAM;AACJ,YAAI,YAAY,KAAK,kBAAmB,MAAK,gBAAgB;AAAA,MAC/D;AAAA,IACF;AAAA,EACF;AAAA,EAEQ,mBAAmB,SAAwB;AACjD,UAAM,WAAW,KAAK,eAAe,cAAc,SAAS,KAAK,YAAY,CAAC;AAC9E,QAAI,aAAa,OAAW;AAC5B,QAAI,SAAS;AACX,WAAK,gBAAgB;AACrB,WAAK,OAAO,SAAS,EAAE;AACvB,WAAK,OAAO,SAAS,OAAO,KAAK;AACjC;AAAA,IACF;AACA,UAAM,aAAa;AAAA,MACjB,KAAK,OAAO;AAAA,MACZ,KAAK,YAAY,IAAI,CAAC,eAAe,WAAW,KAAK;AAAA,IACvD;AACA,QAAI,eAAe,OAAW,MAAK,OAAO,SAAS,UAAU;AAAA,EAC/D;AAAA,EAEQ,kBAAwB;AAC9B,SAAK,cAAc,CAAC;AACpB,SAAK,qBAAqB;AAC1B,SAAK,eAAe,SAAS,CAAC,CAAC;AAC/B,SAAK,QAAQ,eAAe;AAAA,EAC9B;AAAA,EAEQ,sBAA4B;AAClC,QAAI,KAAK,SAAU;AACnB,QAAI,KAAK,WAAW,OAAW;AAC/B,UAAM,UAAU,KAAK,cAAc,CAAC;AACpC,QAAI,YAAY,QAAW;AACzB,WAAK,SAAS;AACd,YAAM,WAAW,KAAK,aAAa,CAAC;AACpC,UAAI,aAAa,QAAW;AAC1B,aAAK,SAAS,IAAI;AAAA,UAChB,KAAK;AAAA,UACL,IAAI,eAAe,SAAS,QAAQ,SAAS,QAAQ,KAAK,cAAc,GAAG,KAAK,QAAQ,MAAM;AAAA,UAC9F;AAAA,YACE,MAAM;AAAA,YACN,OAAO;AAAA,YACP,OAAO;AAAA,YACP,QAAQ;AAAA,YACR,iBAAiB;AAAA,YACjB,aAAa,KAAK,MAAM;AAAA,YACxB,YAAY,KAAK,MAAM;AAAA,UACzB;AAAA,QACF;AACA,aAAK,aAAa;AAClB,aAAK,kBAAkB;AACvB,aAAK,QAAQ,eAAe;AAAA,MAC9B;AACA;AAAA,IACF;AACA,UAAM,SAAS,IAAI;AAAA,MACjB,QAAQ;AAAA,MACR,KAAK;AAAA,MACL,CAAC,aAAa;AACZ,cAAM,UAAU,KAAK,cAAc,MAAM;AACzC,aAAK,SAAS;AACd,aAAK,aAAa;AAClB,iBAAS,QAAQ,QAAQ;AACzB,aAAK,oBAAoB;AACzB,aAAK,QAAQ,eAAe;AAAA,MAC9B;AAAA,MACA,KAAK,QAAQ;AAAA,IACf;AACA,SAAK,SAAS,IAAI,OAAO,KAAK,UAAU,QAAQ;AAAA,MAC9C,MAAM;AAAA,MACN,OAAO,aAAa,qBAAqB,QAAQ,QAAQ,KAAK,IAAI,CAAC;AAAA,MACnE,OAAO;AAAA,MACP,QAAQ,QAAQ,QAAQ,aAAa,SAAY,KAAK;AAAA,MACtD,iBAAiB;AAAA,MACjB,aAAa,KAAK,MAAM;AAAA,MACxB,YAAY,KAAK,MAAM;AAAA,IACzB,CAAC;AACD,SAAK,aAAa;AAClB,SAAK,kBAAkB;AACvB,SAAK,QAAQ,eAAe;AAAA,EAC9B;AAAA,EAEQ,4BAAkC;AACxC,UAAM,SAAS,KAAK,eAAe;AACnC,QAAI,WAAW,OAAW,MAAK,WAAW,cAAc,QAAQ,CAAC;AAAA,EACnE;AAAA,EAEQ,+BAAqC;AAC3C,UAAM,SAAS,KAAK,eAAe;AACnC,QAAI,WAAW,QAAW;AACxB,WAAK,WAAW,cAAc;AAC9B;AAAA,IACF;AACA,SAAK,WAAW,eAAe,QAAQ,MAAM,KAAK,eAAe,kBAAkB;AAAA,EACrF;AAAA,EAEQ,gBAAgB,IAAkB;AACxC,UAAM,SAAS,KAAK,UAAU,QAAQ,EAAE;AACxC,QAAI,WAAW,OAAW,MAAK,UAAU,MAAM;AAAA,EACjD;AAAA,EAEA,MAAc,eAAe,OAAoE;AAC/F,UAAM,QAAQ,KAAK,UAAU,YAAY,KAAK;AAC9C,UAAM,aAAa,OAAO,KAAK,QAAQ,cAAc,KAAK,KAAK,QAAQ,QAAQ,CAAC,CAAC;AACjF,UAAM,OAAO,oBAAI,IAAY;AAC7B,WAAO,CAAC,GAAG,OAAO,GAAG,UAAU,EAAE,OAAO,CAAC,eAAe;AACtD,UAAI,KAAK,IAAI,WAAW,KAAK,EAAG,QAAO;AACvC,WAAK,IAAI,WAAW,KAAK;AACzB,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AACF;AAOA,IAAM,cAAN,MAAkD;AAAA,EAKhD,YACE,QACA,gBACA,OACiB,UACjB,gBAAwC,CAAC,GACzC;AAFiB;AAGjB,SAAK,SAAS,sBAAsB,aAAa;AACjD,UAAM,eAAe,OAAO,UAAU,CAAC,UAAU,MAAM,SAAS,cAAc;AAC9E,SAAK,OAAO,IAAI;AAAA,MACd,OAAO,IAAI,CAAC,WAAW;AAAA,QACrB,OAAO;AAAA,QACP,OAAO,GAAG,MAAM,SAAS,iBAAiB,OAAO,EAAE,GAAG,MAAM,IAAI,GAAQ,MAAM,YAAY,eAAe,EAAE;AAAA,QAC3G,aAAa,GAAG,MAAM,QAAQ,IAAI,MAAM,KAAK,SAAM,MAAM,OAAO;AAAA,MAClE,EAAE;AAAA,MACF;AAAA,QACE,UAAU,wBAAC,SAAS,KAAK,SAAS,EAAE,MAAM,UAAU,SAAS,KAAK,MAAM,KAAK,CAAC,GAApE;AAAA,QACV,UAAU,6BAAM,KAAK,SAAS,MAAS,GAA7B;AAAA,QACV,eAAe,KAAK,IAAI,GAAG,YAAY;AAAA,QACvC,eAAe,MAAM;AAAA,QACrB,kBAAkB,MAAM;AAAA,QACxB,aAAa,MAAM;AAAA,QACnB,YAAY;AAAA,MACd;AAAA,IACF;AACA,SAAK,KAAK,WAAW,IAAI;AAAA,EAC3B;AAAA,EAtBmB;AAAA,EAv6BrB,OA85BkD;AAAA;AAAA;AAAA,EAC/B;AAAA,EACA;AAAA,EACA,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA,EA8BnD,OAAO,MAAgC;AACrC,SAAK,OAAO,SAAS;AAAA,MACnB,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,KAAK,KAAK;AAAA,MAC9C;AAAA,QACE,QAAQ;AAAA,QACR,WAAW,IAAI;AAAA,UACb,GAAG,eAAe,KAAK,QAAQ,eAAe,QAAQ,CAAC,gBAAa,eAAe,KAAK,QAAQ,qBAAqB,aAAa,CAAC,qBAAkB,eAAe,KAAK,QAAQ,eAAe,QAAQ,CAAC;AAAA,QAC3M;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO,KAAK,OAAO,OAAO,IAAI;AAAA,EAChC;AAAA,EAEA,cAAc,OAA8B;AAC1C,WAAO,KAAK,OAAO,cAAc,KAAK;AAAA,EACxC;AAAA,EAEA,UAAU,QAA4B;AACpC,UAAM,SAAS,KAAK,OAAO,QAAQ,QAAQ,CAAC,UAAU,aAAa,CAAC;AACpE,QAAI,OAAO,SAAS,UAAW,QAAO;AACtC,QAAI,OAAO,SAAS,YAAY,OAAO,WAAW,qBAAqB;AACrE,YAAM,WAAW,KAAK,KAAK,cAAc;AACzC,UAAI,aAAa,OAAW,QAAO;AACnC,WAAK,SAAS,EAAE,MAAM,eAAe,SAAS,SAAS,KAAK,CAAC;AAC7D,aAAO;AAAA,IACT;AACA,WAAO,OAAO,SAAS,YAAY,OAAO,OAAO,WAAW,OAAO,IAC/D,KAAK,KAAK,cAAc,OAAO,MAAM,IACrC;AAAA,EACN;AACF;AAEA,IAAM,eAAN,MAAmD;AAAA,EAKjD,YACE,OACA,OACiB,UACjB,gBAAwC,CAAC,GACzC;AAFiB;AAGjB,SAAK,SAAS,sBAAsB,aAAa;AACjD,UAAM,UAAU,CAAC,WAAW,GAAG,MAAM,OAAO;AAC5C,UAAM,eAAe,MAAM,aAAa,QAAQ,QAAQ,MAAM,mBAAmB,EAAE,IAAI;AACvF,SAAK,OAAO,IAAI;AAAA,MACd,QAAQ,IAAI,CAAC,YAAY;AAAA,QACvB,OAAO;AAAA,QACP,OAAO,GAAG,WAAW,QAAQ,YAAY,IAAI,OAAO,EAAE,GAAG,MAAM;AAAA,QAC/D,aACE,WAAW,YACP,+BAA4B,MAAM,iBAAiB,qBAAqB,KACxE,sBAAsB,MAAM,MAAM;AAAA,MAC1C,EAAE;AAAA,MACF;AAAA,QACE,UAAU,wBAAC,SAAS,KAAK,SAAS,KAAK,KAAK,GAAlC;AAAA,QACV,UAAU,6BAAM,KAAK,SAAS,MAAS,GAA7B;AAAA,QACV,eAAe,KAAK,IAAI,GAAG,YAAY;AAAA,QACvC,eAAe,MAAM;AAAA,QACrB,kBAAkB,MAAM;AAAA,QACxB,aAAa,MAAM;AAAA,MACrB;AAAA,IACF;AACA,SAAK,KAAK,WAAW,IAAI;AAAA,EAC3B;AAAA,EAzBmB;AAAA,EAv+BrB,OA+9BmD;AAAA;AAAA;AAAA,EAChC;AAAA,EACA;AAAA,EACA,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA,EAgCnD,OAAO,MAAgC;AACrC,SAAK,OAAO,SAAS;AAAA,MACnB,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,KAAK,KAAK;AAAA,MAC9C;AAAA,QACE,QAAQ;AAAA,QACR,WAAW,IAAI;AAAA,UACb,GAAG,eAAe,KAAK,QAAQ,eAAe,QAAQ,CAAC,gBAAa,eAAe,KAAK,QAAQ,eAAe,QAAQ,CAAC;AAAA,QAC1H;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO,KAAK,OAAO,OAAO,IAAI;AAAA,EAChC;AAAA,EAEA,cAAc,OAA8B;AAC1C,WAAO,KAAK,OAAO,cAAc,KAAK;AAAA,EACxC;AAAA,EAEA,UAAU,QAA4B;AACpC,UAAM,SAAS,KAAK,OAAO,QAAQ,QAAQ,CAAC,QAAQ,CAAC;AACrD,WAAO,OAAO,SAAS,WAAW,KAAK,KAAK,cAAc,OAAO,MAAM,IAAI,OAAO,SAAS;AAAA,EAC7F;AACF;AAEA,IAAM,iBAAN,MAAqD;AAAA,EAKnD,YACmB,SACA,OACA,QACjB,gBAAwC,CAAC,GACzC;AAJiB;AACA;AACA;AAGjB,SAAK,SAAS,sBAAsB,aAAa;AACjD,SAAK,UAAU,IAAI;AAAA,MACjB;AAAA,QACE,EAAE,OAAO,SAAS,OAAO,cAAc,aAAa,eAAe,KAAK,QAAQ,kBAAkB,UAAU,EAAE;AAAA,QAC9G,GAAI,QAAQ,aAAa,SACrB,CAAC,IACD;AAAA,UACE;AAAA,YACE,OAAO;AAAA,YACP,OAAO;AAAA,YACP,aAAa,eAAe,KAAK,QAAQ,yBAAyB,UAAU;AAAA,UAC9E;AAAA,QACF;AAAA,QACJ;AAAA,UACE,OAAO;AAAA,UACP,OAAO;AAAA,UACP,aAAa,GAAG,eAAe,KAAK,QAAQ,iBAAiB,UAAU,CAAC,MAAM,eAAe,KAAK,QAAQ,eAAe,QAAQ,CAAC;AAAA,QACpI;AAAA,QACA,GAAI,QAAQ,aACR,CAAC,EAAE,OAAO,oBAA6B,OAAO,wCAAU,aAAa,QAAQ,WAAW,YAAY,CAAC,IACrG,CAAC;AAAA,MACP;AAAA,MACA;AAAA,QACE,UAAU,wBAAC,SAAS,KAAK,OAAO,KAAK,KAAK,GAAhC;AAAA,QACV,UAAU,6BAAM,KAAK,OAAO,MAAM,GAAxB;AAAA,QACV,eAAe,KAAK,MAAM;AAAA,QAC1B,kBAAkB,KAAK,MAAM;AAAA,QAC7B,aAAa,KAAK,MAAM;AAAA,MAC1B;AAAA,IACF;AACA,SAAK,QAAQ,WAAW,IAAI;AAAA,EAC9B;AAAA,EApCmB;AAAA,EACA;AAAA,EACA;AAAA,EAjiCrB,OAyhCqD;AAAA;AAAA;AAAA,EAClC;AAAA,EACA;AAAA,EACA,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA,EAyCnD,OAAO,MAAgC;AACrC,UAAM,QAAQ,SAAS,qBAAqB,UAAU,KAAK,QAAQ,KAAK,CAAC,GAAG,IAAK;AACjF,SAAK,OAAO,SAAS;AAAA,MACnB;AAAA,QACE,QAAQ;AAAA,QACR,WAAW,IAAI,KAAK,SAAS,qBAAqB,KAAK,QAAQ,KAAK,IAAI,CAAC,EAAE;AAAA,MAC7E;AAAA,MACA,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,IAAI,KAAK,KAAK,EAAE;AAAA,MACpD;AAAA,QACE,SAAS,KAAK,QAAQ,aAAa,SAAY,IAAI,MAAM,KAAK,QAAQ,aAAa,IAAI;AAAA,QACvF,WAAW,KAAK;AAAA,MAClB;AAAA,IACF,CAAC;AACD,WAAO,KAAK,OAAO,OAAO,IAAI;AAAA,EAChC;AAAA,EAEA,cAAc,OAA8B;AAC1C,WAAO,KAAK,OAAO,cAAc,KAAK;AAAA,EACxC;AAAA,EAEA,UAAU,QAA4B;AACpC,UAAM,SAAS,KAAK,OAAO,QAAQ,QAAQ,CAAC,UAAU,UAAU,CAAC;AACjE,QAAI,OAAO,SAAS,UAAW,QAAO;AACtC,QAAI,OAAO,SAAS,YAAY,OAAO,WAAW,kBAAkB;AAClE,WAAK,OAAO,OAAO;AACnB,aAAO;AAAA,IACT;AACA,QAAI,OAAO,SAAS,YAAY,OAAO,WAAW,2BAA2B,KAAK,QAAQ,aAAa,QAAW;AAChH,WAAK,OAAO,eAAe;AAC3B,aAAO;AAAA,IACT;AACA,QAAI,OAAO,SAAS,YAAY,OAAO,WAAW,iBAAiB;AACjE,WAAK,OAAO,MAAM;AAClB,aAAO;AAAA,IACT;AACA,WAAO,OAAO,SAAS,YAAY,OAAO,OAAO,WAAW,OAAO,IAC/D,KAAK,QAAQ,cAAc,OAAO,MAAM,IACxC;AAAA,EACN;AACF;AAIA,IAAM,gBAAN,MAAoD;AAAA,EAalD,YACmB,UACA,kBACA,OACA,UACjB,eACA,gBAAwC,CAAC,GACzC;AANiB;AACA;AACA;AACA;AAIjB,SAAK,SAAS,sBAAsB,aAAa;AACjD,SAAK,OAAO,IAAI,WAA2B,CAAC,GAAG;AAAA,MAC7C,UAAU,6BAAM,KAAK,eAAe,GAA1B;AAAA,MACV,UAAU,6BAAM,KAAK,SAAS,MAAS,GAA7B;AAAA,MACV,eAAe,KAAK,MAAM;AAAA,MAC1B,kBAAkB,KAAK,MAAM;AAAA,MAC7B,aAAa,KAAK,MAAM;AAAA,MACxB,YAAY;AAAA,IACd,CAAC;AACD,SAAK,KAAK,WAAW,IAAI;AACzB,SAAK,QAAQ,IAAI,OAAO;AAAA,MACtB,GAAG;AAAA,MACH,QAAQ;AAAA,MACR,UAAU,wBAAC,UAAU;AACnB,YAAI,KAAK,SAAS,SAAU;AAC5B,aAAK,QAAQ;AACb,aAAK,YAAY;AAAA,MACnB,GAJU;AAAA,MAKV,UAAU,wBAAC,UAAU;AACnB,YAAI,KAAK,SAAS,SAAU;AAC5B,cAAM,UAAU,KAAK,KAAK,cAAc;AACxC,cAAM,QAAQ,MAAM,QAAQ,SAAS,GAAG,EAAE,KAAK;AAC/C,YAAI,YAAY,UAAa,UAAU,IAAI;AACzC,eAAK,SAAS;AACd;AAAA,QACF;AACA,aAAK,SAAS,EAAE,MAAM,UAAU,WAAW,QAAQ,IAAI,MAAM,CAAC;AAAA,MAChE,GATU;AAAA,IAUZ,CAAC;AACD,SAAK,YAAY;AAAA,EACnB;AAAA,EArCmB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAjoCrB,OAgnCoD;AAAA;AAAA;AAAA,EAC1C,OAAoB;AAAA,EACpB,QAAQ;AAAA,EACR,SAAS;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA,SAAS,IAAI,OAAO,CAAC,GAAG,EAAE,KAAK,EAAE,CAAC;AAAA,EAClC,aAAwB;AAAA,IACvC,QAAQ,wBAAC,SAAS,KAAK,KAAK,OAAO,IAAI,GAA/B;AAAA,IACR,eAAe,wBAAC,WAAW,KAAK,SAAS,YAAY,KAAK,SAAS,aAAa,KAAK,KAAK,cAAc,KAAK,GAA9F;AAAA,EACjB;AAAA,EA0CA,OAAO,MAAgC;AACrC,SAAK,OAAO,SAAS;AAAA,MACnB,EAAE,QAAQ,GAAG,WAAW,IAAI,KAAK,KAAK,QAAQ,CAAC,EAAE;AAAA,MACjD,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,KAAK,WAAW;AAAA,MACpD,EAAE,QAAQ,GAAG,WAAW,KAAK,OAAO,EAAE;AAAA,IACxC,CAAC;AACD,WAAO,KAAK,OAAO,OAAO,IAAI;AAAA,EAChC;AAAA,EAEA,cAAc,OAA8B;AAC1C,WAAO,KAAK,OAAO,cAAc,KAAK;AAAA,EACxC;AAAA,EAEA,UAAgB;AACd,SAAK,MAAM,QAAQ;AAAA,EACrB;AAAA,EAEA,UAAU,QAA4B;AACpC,UAAM,WACJ,KAAK,SAAS,WACV,CAAC,UAAU,eAAe,IAC1B,CAAC,KAAK,SAAS,WAAW,kBAAkB,KAAK,SAAS,WAAW,kBAAkB,eAAe;AAC5G,UAAM,SAAS,KAAK,OAAO,QAAQ,QAAQ,QAAQ;AACnD,QAAI,OAAO,SAAS,UAAW,QAAO;AACtC,QAAI,OAAO,SAAS,UAAU;AAC5B,cAAQ,OAAO,QAAQ;AAAA,QACrB,KAAK;AACH,cAAI,KAAK,SAAS,SAAU,QAAO,KAAK,QAAQ,QAAQ;AACxD,eAAK,SAAS,MAAS;AACvB,iBAAO;AAAA,QACT,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,KAAK,KAAK,cAAc,OAAO,MAAM;AAAA,QAC9C,KAAK;AACH,eAAK,QAAQ,QAAQ;AACrB,eAAK,SAAS;AACd,eAAK,MAAM,SAAS,EAAE;AACtB,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO,KAAK,eAAe;AAAA,QAC7B,KAAK;AACH,iBAAO,KAAK,YAAY;AAAA,QAC1B,KAAK;AACH,eAAK,MAAM,cAAc,eAAe;AACxC,iBAAO;AAAA,QACT,KAAK;AACH,iBAAO,KAAK,YAAY;AAAA,QAC1B,KAAK;AACH,iBAAO,KAAK,QAAQ,QAAQ;AAAA,QAC9B,KAAK;AACH,iBAAO,KAAK,eAAe;AAAA,QAC7B,KAAK;AACH,eAAK,MAAM,SAAS,EAAE;AACtB,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,MAAM,cAAc,kBAAkB;AAC3C,iBAAO;AAAA,MACX;AAAA,IACF;AACA,YAAQ,KAAK,SAAS,YAAY,KAAK,SAAS,aAAa,KAAK,MAAM,UAAU,MAAM;AAAA,EAC1F;AAAA,EAEQ,SAA+B;AACrC,QAAI,KAAK,SAAS,YAAY,KAAK,SAAS,SAAU,QAAO,KAAK;AAClE,WAAO;AAAA,MACL,QAAQ,wBAAC,SACP,IAAI;AAAA,QACF,KAAK,SAAS,WACV,GAAG,KAAK,MAAM;AAAA,EAAK,eAAe,KAAK,QAAQ,yBAAyB,eAAe,CAAC,aAAa,eAAe,KAAK,QAAQ,yBAAyB,eAAe,CAAC,YAC1K,GAAG,KAAK,MAAM;AAAA,EAAK,eAAe,KAAK,QAAQ,eAAe,QAAQ,CAAC,gBAAa,eAAe,KAAK,QAAQ,gBAAgB,eAAe,CAAC,gBAAa,eAAe,KAAK,QAAQ,wBAAwB,eAAe,CAAC,gBAAa,eAAe,KAAK,QAAQ,0BAA0B,eAAe,CAAC,gBAAa,eAAe,KAAK,QAAQ,eAAe,QAAQ,CAAC;AAAA,MAC3X,EAAE,OAAO,IAAI,GALP;AAAA,MAMR,WAAW,6BAAM,OAAN;AAAA,IACb;AAAA,EACF;AAAA,EAEQ,UAAkB;AACxB,QAAI,KAAK,SAAS,SAAU,QAAO,oBAAoB,KAAK,SAAS,QAAG;AACxE,QAAI,KAAK,SAAS,SAAU,QAAO;AACnC,QAAI,KAAK,SAAS,SAAU,QAAO;AACnC,WAAO,GAAG,KAAK,SAAS,MAAM,WAAW,KAAK,SAAS,WAAW,IAAI,KAAK,GAAG;AAAA,EAChF;AAAA,EAEQ,cAAoB;AAC1B,UAAM,QAAQ,KAAK,MAAM,KAAK,EAAE,YAAY;AAC5C,UAAM,WACJ,UAAU,KACN,KAAK,WACL,KAAK,SAAS;AAAA,MAAO,CAAC,YACpB,CAAC,QAAQ,IAAI,QAAQ,OAAO,QAAQ,OAAO,EACxC,OAAO,CAAC,UAA2B,UAAU,MAAS,EACtD,KAAK,CAAC,UAAU,MAAM,YAAY,EAAE,SAAS,KAAK,CAAC;AAAA,IACxD;AACN,SAAK,KAAK;AAAA,MACR,SAAS,IAAI,CAAC,aAAa;AAAA,QACzB,OAAO;AAAA,QACP,OAAO,GAAG,QAAQ,OAAO,KAAK,mBAAmB,OAAO,EAAE,GAAG,QAAQ,SAAS,QAAQ,EAAE;AAAA,QACxF,aACE,QAAQ,YAAY,QAAQ,cAAc,SAAY,sBAAsB,GAAG,QAAQ,SAAS;AAAA,MACpG,EAAE;AAAA,IACJ;AACA,SAAK,SAAS,SAAS,WAAW,IAAI,yBAAyB,KAAK;AAAA,EACtE;AAAA,EAEQ,iBAA0B;AAChC,UAAM,UAAU,KAAK,KAAK,cAAc;AACxC,QAAI,YAAY,OAAW,QAAO;AAClC,SAAK,SAAS,EAAE,MAAM,UAAU,WAAW,QAAQ,GAAG,CAAC;AACvD,WAAO;AAAA,EACT;AAAA,EAEQ,cAAuB;AAC7B,UAAM,UAAU,KAAK,KAAK,cAAc;AACxC,QAAI,YAAY,OAAW,QAAO;AAClC,SAAK,QAAQ,QAAQ;AACrB,SAAK,SAAS;AACd,SAAK,MAAM,SAAS,QAAQ,SAAS,EAAE;AACvC,WAAO;AAAA,EACT;AAAA,EAEQ,cAAuB;AAC7B,UAAM,UAAU,KAAK,KAAK,cAAc;AACxC,QAAI,YAAY,OAAW,QAAO;AAClC,QAAI,QAAQ,OAAO,KAAK,kBAAkB;AACxC,WAAK,SAAS;AACd,aAAO;AAAA,IACT;AACA,SAAK,QAAQ,QAAQ;AACrB,SAAK,SAAS,UAAU,qBAAqB,QAAQ,SAAS,QAAQ,EAAE,CAAC;AACzE,WAAO;AAAA,EACT;AAAA,EAEQ,iBAA0B;AAChC,UAAM,UAAU,KAAK,KAAK,cAAc;AACxC,QAAI,YAAY,UAAa,QAAQ,OAAO,KAAK,kBAAkB;AACjE,aAAO,KAAK,QAAQ,QAAQ;AAAA,IAC9B;AACA,SAAK,SAAS,EAAE,MAAM,UAAU,WAAW,QAAQ,GAAG,CAAC;AACvD,WAAO;AAAA,EACT;AAAA,EAEQ,QAAQ,MAA4B;AAC1C,UAAM,cAAc,KAAK,SAAS,YAAY,SAAS;AACvD,SAAK,OAAO;AACZ,SAAK,SAAS;AACd,SAAK,OAAO,MAAM;AAClB,SAAK,MAAM,iBAAiB;AAC5B,SAAK,MAAM,WAAW,SAAS,YAAY,SAAS,QAAQ;AAC5D,SAAK,KAAK,WAAW,KAAK;AAC1B,SAAK,KAAK,WAAW,SAAS,YAAY,SAAS,QAAQ;AAC3D,QAAI,aAAa;AACf,WAAK,QAAQ;AACb,WAAK,YAAY;AAAA,IACnB;AACA,WAAO;AAAA,EACT;AACF;AAEA,IAAM,aAAN,MAAsC;AAAA,EACpC,YACmB,WACA,OACA,OACjB;AAHiB;AACA;AACA;AAAA,EAChB;AAAA,EAHgB;AAAA,EACA;AAAA,EACA;AAAA,EA30CrB,OAu0CsC;AAAA;AAAA;AAAA,EAOpC,OAAO,MAAgC;AACrC,UAAM,QACJ,GAAG,UAAU,UAAK,KAAK,MAAM,MAAM,CAAC,IACjC,UAAU,aAAa,KAAK,MAAM,MAAM,CAAC,OAC5C,UAAU,qBAAqB,KAAK,KAAK,GAAG,KAAK,MAAM,KAAK;AAC9D,UAAM,YACJ,GAAG,UAAU,aAAa,KAAK,MAAM,GAAG,CAAC,OAAO,UAAU,qBAAqB,KAAK,SAAS,GAAG,KAAK,MAAM,KAAK;AAClH,UAAM,UAAU,UAAU,SAAI,OAAO,KAAK,KAAK,GAAG,KAAK,MAAM,MAAM;AACnE,WAAO,IAAI,KAAK,GAAG,KAAK;AAAA,EAAK,SAAS;AAAA,EAAK,OAAO,IAAI,EAAE,MAAM,MAAM,CAAC,EAAE,OAAO,IAAI;AAAA,EACpF;AACF;AAEA,IAAM,aAAN,MAAsC;AAAA,EACpC,YACmB,MACA,QACA,OACA,SACA,WACA,OACA,WACA,aACA,cACA,UACjB;AAViB;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AAAA,EAChB;AAAA,EAVgB;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EAr2CrB,OA01CsC;AAAA;AAAA;AAAA,EAcpC,OAAO,MAAgC;AACrC,UAAM,cAAc,WAAW,KAAK,KAAK,MAAM,IAC3C,KAAK,MAAM,QACX,oBAAoB,KAAK,KAAK,MAAM,IAClC,KAAK,MAAM,UACX,KAAK,MAAM;AACjB,UAAM,SACH,KAAK,WAAW,GAAG,UAAU,KAAK,UAAU,KAAK,MAAM,MAAM,CAAC,OAAO,OACrE,KAAK,OAAO,GAAG,UAAU,0BAAuB,KAAK,MAAM,OAAO,CAAC,OAAO,MAC3E,GAAG,UAAU,UAAK,WAAW,CAAC,IAAI,UAAU,KAAK,QAAQ,WAAW,CAAC,KAClE,UAAU,KAAK,SAAS,QAAQ,KAAK,MAAM,KAAK,CAAC,KACjD,UAAU,KAAK,WAAW,KAAK,MAAM,GAAG,CAAC,cAC3C,KAAK,UAAU,eACZ,GAAG,UAAU,OAAO,KAAK,MAAM,GAAG,CAAC,WAChC,UAAU,SAAS,KAAK,MAAM,GAAG,CAAC,YAClC,UAAU,iBAAO,KAAK,MAAM,GAAG,CAAC,YAChC,UAAU,OAAO,KAAK,MAAM,GAAG,CAAC,YACnC,GAAG,UAAU,KAAK,aAAa,KAAK,MAAM,GAAG,CAAC,YAAY,KAAK,OAAO,KACnE,UAAU,KAAK,cAAc,KAAK,MAAM,GAAG,CAAC,aAAa,KAAK,YAAY,OAAO,KAAK,KACtF,UAAU,UAAU,KAAK,MAAM,GAAG,CAAC;AAC5C,WAAO,IAAI,KAAK,OAAO,EAAE,MAAM,MAAM,CAAC,EAAE,OAAO,IAAI;AAAA,EACrD;AACF;AAEA,SAAS,UAAU,OAAwB;AACzC,MAAI,OAAO,UAAU,SAAU,QAAO;AACtC,MAAI;AACF,WAAO,KAAK,UAAU,OAAO,MAAM,CAAC,KAAK,OAAO,KAAK;AAAA,EACvD,QAAQ;AACN,WAAO,OAAO,KAAK;AAAA,EACrB;AACF;AAPS;AAST,SAAS,SAAS,OAAe,SAAyB;AACxD,SAAO,MAAM,UAAU,UAAU,QAAQ,GAAG,MAAM,MAAM,GAAG,UAAU,CAAC,CAAC;AACzE;AAFS;AAIT,SAAS,uBAAuB,KAAsB;AACpD,SAAO,QAAQ,QAAQ,QAAQ,UAAU,QAAQ,YAAY,QAAQ,cAAc,QAAQ,UAAU,QAAQ;AAC/G;AAFS;AAIT,SAAS,aAAa,OAAe,QAA+C;AAClF,QAAM,aAAa,OAAO,OAAO,CAAC,UAAU,MAAM,WAAW,KAAK,CAAC;AACnE,QAAM,QAAQ,WAAW,CAAC;AAC1B,MAAI,UAAU,OAAW,QAAO;AAChC,MAAI,SAAS,MAAM;AACnB,aAAW,SAAS,WAAW,MAAM,CAAC,GAAG;AACvC,aAAS,KAAK,IAAI,QAAQ,MAAM,MAAM;AACtC,QAAI,QAAQ,MAAM;AAClB,WAAO,QAAQ,UAAU,MAAM,KAAK,MAAM,MAAM,KAAK,EAAG,UAAS;AACjE,aAAS;AAAA,EACX;AACA,SAAO,MAAM,MAAM,GAAG,MAAM;AAC9B;AAZS;AAeT,IAAM,iBAAN,MAAqD;AAAA,EAMnD,YACE,QACiB,UACjB,eACA,gBAAwC,CAAC,GACzC;AAHiB;AAIjB,SAAK,SAAS,sBAAsB,aAAa;AACjD,SAAK,OAAO,IAAI,WAAW,IAAI,KAAK,qBAAqB,MAAM,CAAC,CAAC;AACjE,SAAK,KAAK,WAAW,IAAI;AACzB,SAAK,SAAS,IAAI,OAAO,EAAE,GAAG,eAAe,QAAQ,MAAM,UAAU,wBAAC,UAAU,SAAS,KAAK,GAAzB,YAA2B,CAAC;AACjG,SAAK,OAAO,WAAW,IAAI;AAAA,EAC7B;AAAA,EATmB;AAAA,EAx6CrB,OAg6CqD;AAAA;AAAA;AAAA,EAClC;AAAA,EACA;AAAA,EACA,SAAS,IAAI,OAAO,CAAC,CAAC;AAAA,EACtB;AAAA,EACT,iBAAiB;AAAA,EAazB,OAAO,MAAgC;AACrC,SAAK,iBAAiB,KAAK,IAAI,GAAG,KAAK,SAAS,CAAC;AACjD,SAAK,OAAO,SAAS;AAAA,MACnB,EAAE,MAAM,GAAG,WAAW,GAAG,WAAW,KAAK,KAAK;AAAA,MAC9C,EAAE,QAAQ,GAAG,WAAW,KAAK,OAAO;AAAA,MACpC;AAAA,QACE,QAAQ;AAAA,QACR,WAAW,IAAI;AAAA,UACb,GAAG,eAAe,KAAK,QAAQ,kBAAkB,UAAU,CAAC,IAAI,eAAe,KAAK,QAAQ,oBAAoB,UAAU,CAAC,sCAAsC,eAAe,KAAK,QAAQ,kBAAkB,UAAU,CAAC;AAAA,QAC5N;AAAA,MACF;AAAA,IACF,CAAC;AACD,WAAO,KAAK,OAAO,OAAO,IAAI;AAAA,EAChC;AAAA,EACA,cAAc,OAA8B;AAC1C,WAAO,KAAK,OAAO,cAAc,KAAK;AAAA,EACxC;AAAA,EACA,UAAgB;AACd,SAAK,OAAO,QAAQ;AACpB,SAAK,KAAK,QAAQ;AAAA,EACpB;AAAA,EACA,UAAU,QAA4B;AACpC,UAAM,SAAS,KAAK,OAAO,QAAQ,QAAQ,CAAC,UAAU,CAAC;AACvD,QAAI,OAAO,SAAS,UAAW,QAAO;AACtC,QAAI,OAAO,SAAS,UAAU;AAC5B,cAAQ,OAAO,QAAQ;AAAA,QACrB,KAAK;AACH,eAAK,SAAS;AACd,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,KAAK,SAAS,CAAC,KAAK,cAAc;AACvC,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,KAAK,SAAS,KAAK,cAAc;AACtC,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,KAAK,SAAS,EAAE;AACrB,iBAAO;AAAA,QACT,KAAK;AACH,eAAK,KAAK,SAAS,CAAC;AACpB,iBAAO;AAAA,MACX;AAAA,IACF;AACA,WAAO,KAAK,OAAO,UAAU,MAAM;AAAA,EACrC;AACF;AAEA,SAAS,eAAe,QAAgB,QAAgB,SAAyB;AAC/E,SAAO,OAAO,cAAc,QAAQ,OAAO,EAAE,KAAK,KAAK;AACzD;AAFS;;;AI59CT,eAAsB,sBACpB,SACA,KACA,KACA,QACe;AACf,MAAI,IAAI,0BAA0B,OAAW;AAC7C,QAAM,SAAS;AAAA,IACb,eAAe,QAAQ,QAAQ;AAAA,WAAc,QAAQ,MAAM,SAAS;AAAA,WACtD,QAAQ,SAAS;AAAA,EAAK,QAAQ,OAAO,OAAO;AAAA;AAAA,EAC5D;AACA,QAAM,WAAW,8BAAO,WAAmB;AACzC,WAAO,eAAe;AACtB,UAAM,SAAS,MAAM,IAAI,qBAAqB,MAAM,GAAG,MAAM;AAC7D,WAAO,eAAe;AACtB,WAAO;AAAA,EACT,GALiB;AAMjB,MAAI,QAAQ;AACZ,SAAO,CAAC,OAAO,SAAS;AACtB,QAAI,QAAQ,OAAO,SAAS,UAAU;AACpC,UAAI,OAAO,QAAQ,OAAO;AAC1B,UAAI,SAAS;AACb,iBAAS;AACP,cAAM,UACJ,MAAM;AAAA,UACJ,GAAG,MAAM;AAAA,eAAkB,QAAQ,OAAO,IAAI;AAAA,EAAK,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAAA,EAAK,KAAK,wBAChE,QAAQ,OAAO,WAAW,8BAA8B,EAAE;AAAA,QACtF,IAEE,KAAK,EACN,YAAY;AACf,YAAI,WAAW,UAAU,QAAQ,OAAO,UAAU;AAChD,cAAI;AACF,kBAAM,QAAQ,MAAM;AAAA,cAClB,GAAG,MAAM;AAAA;AAAA,YACX;AACA,gBAAI,UAAU,UAAa,MAAM,KAAK,MAAM,UAAU;AACpD,kBAAI,sBAAsB,QAAQ,IAAI,EAAE,QAAQ,SAAS,CAAC;AAC1D;AAAA,YACF;AACA,gBAAI,OAAO,WAAW,KAAK,IAAI,KAAK,KAAM,OAAM,IAAI,MAAM;AAC1D,mBAAO,KAAK,MAAM,KAAK;AACvB,qBAAS;AACT,oBAAQ;AAAA,UACV,QAAQ;AACN,oBAAQ;AAAA,UACV;AACA;AAAA,QACF;AACA,YAAI,sBAAsB,QAAQ,IAAI;AAAA,UACpC,QAAQ,WAAW,UAAU,WAAW,WAAW,YAAY,YAAY;AAAA,UAC3E,GAAI,WAAW,WAAW,CAAC,SAAS,CAAC,IAAI,EAAE,SAAS,EAAE,MAAM,KAAK,UAAU,IAAI,EAAE,EAAE;AAAA,QACrF,CAAC;AACD;AAAA,MACF;AAAA,IACF;AACA,QAAI,QAAQ,OAAO,SAAS,OAAO;AACjC,UAAI;AACJ,UAAI;AACF,cAAM,IAAI,IAAI,QAAQ,OAAO,GAAG;AAChC,YAAI,CAAC,CAAC,UAAU,OAAO,EAAE,SAAS,IAAI,QAAQ,KAAK,IAAI,YAAY,IAAI,SAAU,OAAM,IAAI,MAAM,YAAY;AAAA,MAC/G,QAAQ;AACN,YAAI,sBAAsB,QAAQ,IAAI,EAAE,QAAQ,UAAU,CAAC;AAC3D;AAAA,MACF;AACA,YAAM,UAAU,MAAM;AAAA,QACpB,GAAG,MAAM;AAAA,iBAAoB,IAAI,IAAI;AAAA,OAAU,QAAQ,OAAO,GAAG;AAAA;AAAA;AAAA,MAGnE;AACA,UAAI,SAAS,KAAK,EAAE,YAAY,MAAM,UAAU;AAC9C,YAAI,sBAAsB,QAAQ,IAAI;AAAA,UACpC,QAAQ,SAAS,KAAK,EAAE,YAAY,MAAM,YAAY,YAAY;AAAA,QACpE,CAAC;AACD;AAAA,MACF;AACA,YAAM,SAAS,MAAM;AAAA,QACnB,GAAG,MAAM;AAAA;AAAA;AAAA,MAEX;AACA,UAAI,sBAAsB,QAAQ,IAAI,EAAE,QAAQ,QAAQ,KAAK,EAAE,YAAY,MAAM,UAAU,WAAW,SAAS,CAAC;AAChH;AAAA,IACF;AACA,UAAM,SAAS,MAAM;AAAA,MACnB,GAAG,MAAM;AAAA;AAAA;AAAA,EACyB,KAAK,UAAU,QAAQ,OAAO,iBAAiB,MAAM,CAAC,CAAC;AAAA,EAAK,KAAK;AAAA,IAErG;AACA,QAAI,WAAW,UAAa,CAAC,WAAW,QAAQ,EAAE,SAAS,OAAO,KAAK,EAAE,YAAY,CAAC,GAAG;AACvF,UAAI,sBAAsB,QAAQ,IAAI;AAAA,QACpC,QAAQ,QAAQ,KAAK,EAAE,YAAY,MAAM,YAAY,YAAY;AAAA,MACnE,CAAC;AACD;AAAA,IACF;AACA,QAAI;AACJ,QAAI;AACF,UAAI,OAAO,WAAW,MAAM,IAAI,KAAK,KAAM,OAAM,IAAI,MAAM;AAC3D,YAAM,SAAkB,KAAK,MAAM,MAAM;AACzC,UAAI,WAAW,QAAQ,OAAO,WAAW,YAAY,MAAM,QAAQ,MAAM,EAAG,OAAM,IAAI,MAAM;AAC5F,gBAAU;AAAA,IACZ,QAAQ;AACN,cAAQ;AACR;AAAA,IACF;AACA,UAAM,SAAS,MAAM;AAAA,MACnB,GAAG,MAAM;AAAA;AAAA,EAAoD,KAAK,UAAU,SAAS,MAAM,CAAC,CAAC;AAAA;AAAA,IAE/F;AACA,UAAM,SAAS,QAAQ,KAAK,EAAE,YAAY;AAC1C,QAAI,WAAW,OAAQ;AACvB,QAAI,WAAW,QAAQ;AACrB,UAAI,sBAAsB,QAAQ,IAAI,EAAE,QAAQ,WAAW,YAAY,YAAY,SAAS,CAAC;AAC7F;AAAA,IACF;AACA,QAAI;AACF,UAAI,sBAAsB,QAAQ,IAAI,EAAE,QAAQ,UAAU,QAAQ,CAAC;AACnE;AAAA,IACF,QAAQ;AACN,cAAQ;AAAA,IACV;AAAA,EACF;AACF;AAzHsB;;;ACLtB,SAAS,mBAAmB;AAC5B,OAAO,UAAU;AACjB,SAAS,iBAAiB,2BAA2B;AAKrD,SAAS,aAAa;AACpB,SAAO,IAAI,gBAAgC;AAAA,IACzC,mBAAmB;AAAA,IACnB,aAAa,wBAAC,UACZ,MAAM,SAAS,0BAA2B,MAAM,SAAS,eAAe,oBAAoB,MAAM,KAAK,GAD5F;AAAA,EAEf,CAAC;AACH;AANS;AAQF,IAAM,uBAAN,MAA2B;AAAA,EAUhC,YACmB,KACA,MACjB;AAFiB;AACA;AAEjB,SAAK,OAAO,uBAAuB,KAAK,EAAE,QAAQ,KAAK,WAAW,kBAAkB,OAAO,UAAU,KAAK,CAAC;AAC3G,SAAK,SAAS,KAAK,mBAAmB;AACtC,SAAK,QAAQ,KAAK,cAAc,EAAE,MAAM,CAAC,UAAU;AACjD,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EARmB;AAAA,EACA;AAAA,EA3BrB,OAekC;AAAA;AAAA;AAAA,EACf,iBAAiB,WAAW;AAAA,EAC5B,YAAY,WAAW;AAAA,EACvB;AAAA,EACA;AAAA,EACT;AAAA,EACA;AAAA,EACA;AAAA,EACC;AAAA,EAaT,MAAc,gBAA+B;AAC3C,QAAI;AACF,uBAAiB,SAAS,KAAK,IAAI,QAAQ;AACzC,aAAK,eAAe,KAAK,KAAK;AAC9B,aAAK,UAAU,KAAK,KAAK;AAAA,MAC3B;AAAA,IACF,SAAS,OAAO;AACd,WAAK,UAAU;AACf,YAAM;AAAA,IACR,UAAE;AACA,WAAK,eAAe,MAAM;AAC1B,WAAK,UAAU,MAAM;AAAA,IACvB;AAAA,EACF;AAAA,EAEA,OAAe,qBAAoD;AACjE,qBAAiB,SAAS,KAAK,eAAgB,OAAM;AACrD,QAAI,KAAK,YAAY,OAAW,OAAM,KAAK;AAAA,EAC7C;AAAA,EAEA,MAAM,OAAwB;AAC5B,UAAM,SAAS,MAAM,KAAK,YAAY;AACtC,UAAM,MAAM,OAAO,eAAe;AAClC,QAAI;AACF,YAAM,KAAK,GAAG;AAAA,IAChB,QAAQ;AACN,YAAM,IAAI,MAAM,mKAAiC;AAAA,IACnD;AACA,WAAO,OAAO;AAAA,EAChB;AAAA,EAEA,MAAM,cAA0D;AAC9D,QAAI,KAAK,QAAS,OAAM,IAAI,MAAM,0CAAiB;AACnD,SAAK,aAAa,wBAAwB,KAAK,MAAM;AAAA,MACnD,OAAO,YAAY,EAAE,EAAE,SAAS,WAAW;AAAA,MAC3C,MAAM;AAAA,MACN,cAAc;AAAA,MACd,MAAM,6BAAM;AACV,YAAI,KAAK,KAAM,MAAK,KAAK;AAAA,YACpB,MAAK,WAAW;AAAA,MACvB,GAHM;AAAA,IAIR,CAAC;AACD,UAAM,SAAS,MAAM,KAAK;AAC1B,QAAI,KAAK,QAAS,OAAM,IAAI,MAAM,0CAAiB;AACnD,WAAO;AAAA,EACT;AAAA,EAEA,QAAuB;AACrB,SAAK,WAAW;AAChB,WAAO,KAAK,QAAS,KAAK,MAAM;AAC9B,UAAI,KAAK,YAAY,OAAW,OAAM,KAAK;AAAA,IAC7C,CAAC;AAAA,EACH;AAAA,EAEQ,aAAmB;AACzB,SAAK,YAAY,KAAK,oBAAoB,EAAE,MAAM,CAAC,UAAU;AAC3D,WAAK,UAAU;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,MAAc,sBAAqC;AACjD,UAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,MACvC,KAAK,IAAI,MAAM;AAAA,MACf,KAAK,WAAW,KAAK,SAAS,KAAK,CAAC,WAAW,OAAO,MAAM,CAAC,IAAI,KAAK,KAAK,MAAM;AAAA,IACnF,CAAC;AACD,UAAM,KAAK;AACX,UAAM,WAAW,QAAQ,QAAQ,CAAC,WAAY,OAAO,WAAW,aAAa,CAAC,OAAO,MAAM,IAAI,CAAC,CAAE;AAClG,QAAI,KAAK,YAAY,OAAW,UAAS,KAAK,KAAK,OAAO;AAC1D,QAAI,SAAS,OAAQ,OAAM,IAAI,eAAe,UAAU,6DAAqB;AAAA,EAC/E;AACF;;;ANnEA,eAAsB,sBACpB,KACA,UAAwC,CAAC,GAC1B;AACf,QAAM,WAAW,QAAQ,YAAY,IAAI,mBAAmB;AAC5D,QAAM,WAAW,QAAQ,YAAY,IAAI,mBAAmB,QAAQ;AACpE,QAAM,QAAQ,IAAI,gBAAgB;AAClC,QAAM,oBAAoB,oBAAI,IAAY;AAC1C,QAAM,SAAS,IAAI,eAAe,QAAW,SAAS,cAAc,UAAU;AAAA,IAC5E,UAAU,6BAAM,SAAS,cAAc,UAA7B;AAAA,EACZ,CAAC;AACD,MAAI;AACF,UAAM,UAAU,MAAM,IAAI,QAAQ;AAClC,eAAW,SAAS;AAClB,UAAI,MAAM,SAAS,yBAAyB,MAAM,SAAS;AACzD,cAAM,OAAO,QAAQ,MAAM,QAAQ,OAAO;AAC9C,eAAW,SAAS;AAClB,UAAI,MAAM,SAAS,oBAAoB,MAAM,QAAS,OAAM,OAAO,QAAQ,MAAM,OAAO;AAC1F,UAAM,YAAY,OAAO;AACzB,eAAW,SAAS,SAAS;AAC3B,UAAI,MAAM,SAAS,qBAAqB,MAAM,QAAS,mBAAkB,IAAI,MAAM,OAAO;AAC1F,UAAI,MAAM,SAAS;AACjB,mBAAW,WAAW,MAAM,SAAU,mBAAkB,IAAI,OAAO;AAAA,IACvE;AAAA,EACF,SAAS,OAAO;AACd,UAAM,IAAI,MAAM;AAChB,UAAM;AAAA,EACR;AAEA,MAAI;AACJ,MAAI,UAAU;AACd,MAAI;AACJ,QAAM,cAAc,oBAAI,IAAmB;AAC3C,QAAM,aAAa,wBAAC,WAAmC;AACrD,UAAM,UAAU,OACb;AAAA,MACC,MAAM;AAAA,MACN,CAAC,UAAU;AACT,YAAI,CAAC,WAAW,CAAC,eAAe,KAAK,EAAG,OAAM,aAAa,SAAS,aAAa,KAAK,CAAC;AAAA,MACzF;AAAA,IACF,EACC,QAAQ,MAAM;AACb,kBAAY,OAAO,OAAO;AAC1B,UAAI,CAAC,QAAS,MAAK,UAAU,IAAI,YAAY,YAAY,OAAO;AAAA,IAClE,CAAC;AACH,gBAAY,IAAI,OAAO;AAAA,EACzB,GAbmB;AAcnB,MAAI;AACJ,QAAM,SAAS,IAAI,QAAc,CAAC,YAAa,cAAc,OAAQ;AACrE,QAAM,SAAS,6BAAY;AACzB,QAAI,QAAS;AACb,cAAU;AACV,aAAS,KAAK;AACd,gBAAY;AAAA,EACd,GALe;AAMf,QAAM,MAAM,IAAI,qBAAqB,KAAK,MAAM;AAChD,QAAM,sBAAsB,6BAAY;AACtC,QAAI,IAAI,UAAW,KAAI,OAAO,+BAA+B;AAC7D,WAAO;AAAA,EACT,GAH4B;AAI5B,QAAM,OAAO,IAAI,sBAAsB;AAAA,IACrC,WAAW,6BAAM,IAAI,WAAV;AAAA,IACX,gBAAgB,6BAAM,IAAI,gBAAV;AAAA,IAChB,WAAW,QAAQ,aAAa,wBAAwB,EAAE,QAAQ,SAAS,CAAC;AAAA,IAC5E,QAAQ,QAAQ,UAAUC,eAAc,EAAE,QAAQ,QAAQ,IAAI,eAAe,CAAC;AAAA,IAC9E;AAAA,IACA;AAAA,IACA,WAAW,IAAI;AAAA,IACf,OAAO,WAAW,GAAG;AAAA,IACrB,aAAa,qCAAqC,GAAG;AAAA,IACrD,aAAa,wBAAC,UAAU,CAAC,MAAM,UAAU,EAAE,WAAW,GAAG,GAA5C;AAAA,IACb,cAAc,6BAAM,SAAS,cAAc,GAA7B;AAAA,IACd,UAAU,6BAAM;AACd,UAAI,IAAI,WAAW;AACjB,YAAI,OAAO,aAAa;AACxB,aAAK,UAAU,YAAY;AAAA,MAC7B,OAAO;AACL,eAAO;AAAA,MACT;AAAA,IACF,GAPU;AAAA,IAQV,UAAU,8BAAO,OAAO,aAAa;AACnC,UAAI,MAAM,UAAU,EAAE,WAAW,GAAG,GAAG;AACrC,cAAM,cAAc,OAAO,KAAK,OAAO,MAAM,QAAQ,KAAK,UAAU;AACpE;AAAA,MACF;AACA,UAAI;AACF,cAAM,MAAM,MAAM,IAAI,OAAO,EAAE,OAAO,MAAM,CAAC;AAC7C,mBAAW;AACX,mBAAW,IAAI,MAAM;AAAA,MACvB,SAAS,OAAO;AACd,YAAI,CAAC,eAAe,KAAK,EAAG,OAAM;AAAA,MACpC;AAAA,IACF,GAZU;AAAA,EAaZ,CAAC;AACD,UAAQ,GAAG,UAAU,mBAAmB;AACxC,UAAQ,GAAG,WAAW,mBAAmB;AACzC,QAAM,kBAAkB,MAAM,GAAG;AACjC,QAAM,mBAAmB,mCAAY;AACnC,QAAI,CAAC,IAAI,mBAAmB,QAAS;AACrC,QAAI;AACF,WAAK,gBAAgB,MAAM,IAAI,gBAAgB,CAAC;AAAA,IAClD,SAAS,OAAO;AACd,WAAK,gBAAgB,EAAE,MAAM,IAAI,WAAW,QAAQ,SAAS,YAAY,OAAO,OAAO,aAAa,KAAK,EAAE,CAAC;AAAA,IAC9G;AAAA,EACF,GAPyB;AAQzB,QAAM,iBAAiB;AACvB,MAAI,sBAAsB;AAC1B,MAAI;AACJ,QAAM,iBAAiB,IAAI,kBACvB,YAAY,MAAM;AAChB,QAAI,uBAAuB,QAAS;AACpC,0BAAsB;AACtB,oBAAgB,iBAAiB,EAC9B,MAAM,CAAC,UAAU;AAChB,qBAAe;AACf,aAAO;AAAA,IACT,CAAC,EACA,QAAQ,MAAM;AACb,4BAAsB;AAAA,IACxB,CAAC;AAAA,EACL,GAAG,GAAK,IACR;AAEJ,YAAU,IAAI,WAAW,EAAE,UAAU,UAAU,MAAM,KAAK,CAAC;AAC3D,MAAI;AACJ,MAAI;AACF,YAAQ,MAAM;AACd,gBAAY,cAAc,KAAK,OAAO,MAAM,MAAM,SAAS,IAAI,QAAQ,QAAQ,mBAAmB,MAAM,EAAE;AAAA,MACxG,CAAC,UAAU;AACT,uBAAe;AACf,cAAM,aAAa,SAAS,wBAAwB,aAAa,KAAK,CAAC,EAAE;AACzE,eAAO;AAAA,MACT;AAAA,IACF;AACA,UAAM;AAAA,EACR,UAAE;AACA,cAAU;AACV,QAAI,eAAgB,eAAc,cAAc;AAChD,YAAQ,eAAe,UAAU,mBAAmB;AACpD,YAAQ,eAAe,WAAW,mBAAmB;AACrD,YAAQ,KAAK;AACb,SAAK,QAAQ;AACb,UAAM,UAAU,MAAM,QAAQ,WAAW;AAAA,MACvC,IAAI,MAAM;AAAA,MACV,GAAG;AAAA,MACH,GAAI,gBAAgB,CAAC,aAAa,IAAI,CAAC;AAAA,MACvC,GAAI,YAAY,CAAC,SAAS,IAAI,CAAC;AAAA,IACjC,CAAC;AACD,UAAM,WAAW,QAAQ,QAAQ,CAAC,WAAY,OAAO,WAAW,aAAa,CAAC,OAAO,MAAM,IAAI,CAAC,CAAE;AAClG,QAAI,SAAS,QAAQ;AACnB,UAAI,iBAAiB,OAAW,UAAS,KAAK,YAAY;AAC1D,YAAM,IAAI,eAAe,UAAU,oCAAoC;AAAA,IACzE;AAAA,EACF;AACA,MAAI,iBAAiB,OAAW,OAAM;AACxC;AA3JsB;AA6JtB,eAAe,cACb,KACA,OACA,MACA,WACA,QACA,QACA,mBACA,WACe;AACf,QAAM,YAAY,oBAAI,IAAmB;AACzC,QAAM,iBAA4B,CAAC;AACnC,QAAM,gBAAgB,wBAAC,WAA0B,WAA8B;AAC7E,UAAM,OAAO,UACV,MAAM,CAAC,UAAU;AAChB,qBAAe,KAAK,KAAK;AACzB,gBAAU;AAAA,IACZ,CAAC,EACA,QAAQ,MAAM;AACb,eAAS;AACT,gBAAU,OAAO,IAAI;AAAA,IACvB,CAAC;AACH,cAAU,IAAI,IAAI;AAAA,EACpB,GAXsB;AAYtB,QAAM,eAAe,oBAAI,IAA6B;AACtD,QAAM,mBAAmB,oBAAI,IAAoB;AACjD,MAAI,kBAAkB;AACtB,MAAI;AACF,qBAAiB,SAAS,QAAQ;AAChC,UAAI,MAAM,SAAS,aAAa;AAC9B,YAAI,MAAM,MAAM,SAAS,eAAe;AACtC,eAAK,UAAU,SAAS;AACxB,gBAAM,SAAS,IAAI,YAAY,MAC5B,mBAAmB,EACnB,OAAO,CAAC,UAAU,MAAM,WAAW,eAAe,CAAC,kBAAkB,IAAI,MAAM,OAAO,CAAC;AAC1F,cAAI,OAAO,SAAS,GAAG;AACrB,kBAAM,UAAU,MAAM,IAAI,QAAQ;AAClC,kBAAM,QAAQ,MAAM,MAAM;AAC1B,kBAAM,WAAW,QAAQ,UAAU,CAAC,SAAS,KAAK,SAAS,iBAAiB,KAAK,UAAU,KAAK;AAChG,kBAAM,YACJ,WAAW,IACP,SACA,QACG,MAAM,GAAG,QAAQ,EACjB,QAAQ,EACR,KAAK,CAAC,SAAS,KAAK,SAAS,iBAAiB;AACvD,gBACE,WAAW,SAAS,qBACpB,UAAU,WACV,OAAO,KAAK,CAAC,UAAU,MAAM,YAAY,UAAU,OAAO,GAC1D;AACA,oBAAM;AAAA,gBACJ,UAAU,QAAQ,QACf,OAAO,CAAC,SAAS,KAAK,SAAS,MAAM,EACrC,IAAI,CAAC,SAAS,KAAK,IAAI,EACvB,KAAK,EAAE;AAAA,cACZ;AACA,gCAAkB,IAAI,UAAU,OAAO;AAAA,YACzC;AAAA,UACF;AAAA,QACF;AACA,YAAI,MAAM,MAAM,SAAS,kBAAkB;AACzC,qBAAW,SAAS,IAAI,YAAY,MAAM,mBAAmB,GAAG;AAC9D,gBAAI,MAAM,WAAW,eAAe,MAAM,UAAU,MAAM,MAAM,MAAO,mBAAkB,IAAI,MAAM,OAAO;AAAA,UAC5G;AAAA,QACF;AAEA,YACE,MAAM,MAAM,SAAS,mBACrB,MAAM,MAAM,SAAS,iBACrB,MAAM,MAAM,SAAS,iBACrB;AACA,eAAK,UAAU,IAAI,YAAY,eAAe,OAAO;AAAA,QACvD;AACA,YAAI,MAAM,MAAM,SAAS,aAAc,MAAK,UAAU,UAAU,MAAM,MAAM,MAAM,OAAO,EAAE;AAAA,MAC7F;AACA,UAAI,MAAM,SAAS,2BAA2B;AAC5C,aAAK,UAAU,MAAM,SAAS,SAAS,iBAAiB,eAAe;AAAA,MACzE;AACA,UAAI,MAAM,SAAS,eAAe,MAAM,MAAM,SAAS;AACrD,cAAM,OAAO,QAAQ,MAAM,MAAM,QAAQ,OAAO;AAClD,UAAI,MAAM,SAAS,eAAe,MAAM,MAAM,SAAS;AACrD,cAAM,OAAO,QAAQ,MAAM,MAAM,OAAO;AAC1C,UAAI,MAAM,SAAS,gBAAgB;AACjC,aAAK,UAAU,QAAQ,MAAM,KAAK,MAAM,EAAE;AAC1C,cAAM,UAAU,GAAG,MAAM,KAAK,EAAE,IAAI,MAAM,KAAK,MAAM,IAAI,MAAM,KAAK,QAAQ;AAC5E,YAAI,YAAY,iBAAiB;AAC/B,4BAAkB;AAClB,gBAAM,aAAa,QAAQ,WAAW,MAAM,IAAI,CAAC;AAAA,QACnD;AAAA,MACF;AACA,UAAI,MAAM,SAAS,wBAAwB,MAAM,SAAS,uBAAuB;AAC/E,YAAI,MAAM,SAAS,qBAAsB,kBAAiB,MAAM;AAChE,cAAM,QAAQ,MAAM,SAAS,uBAAuB,sBAAsB;AAC1E,YAAI,IAAI,4BAA4B;AAClC,gBAAM,aAAa,QAAQ,GAAG,KAAK;AAAA,EAAK,qBAAqB,MAAM,KAAK,CAAC,EAAE;AAC7E,aAAK,UAAU,MAAM,SAAS,uBAAuB,eAAe,OAAO;AAAA,MAC7E,WAAW,MAAM,SAAS,sBAAsB;AAE9C,mBAAW,QAAQ,gBAAgB,MAAM,MAAM,KAAK,GAAG;AACrD,gBAAM,WAAW,iBAAiB,IAAI,KAAK,EAAE;AAC7C,2BAAiB,IAAI,KAAK,IAAI,KAAK,MAAM;AACzC,cAAI,IAAI,4BAA4B,QAAQ,aAAa,KAAK,OAAQ;AACtE,gBAAM;AAAA,YACJ,CAAC,UAAU,aAAa,mBAAmB,EAAE,SAAS,KAAK,MAAM,IAAI,YAAY;AAAA,YACjF,qBAAqB,IAAI;AAAA,UAC3B;AAAA,QACF;AAAA,MACF;AACA,0BAAoB,OAAO,KAAK;AAChC,UAAI,MAAM,SAAS,6BAA6B;AAC9C,cAAM,aAAa,IAAI,gBAAgB;AACvC,qBAAa,IAAI,MAAM,QAAQ,IAAI,UAAU;AAC7C,cAAM,SAAS,YAAY,IAAI;AAAA,UAC7B,WAAW;AAAA,UACX,YAAY,QAAQ,KAAK,IAAI,GAAG,KAAK,KAAK,MAAM,QAAQ,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC;AAAA,QAClF,CAAC;AACD;AAAA,UACE;AAAA,YACE,MAAM;AAAA,YACN;AAAA,YACA,CAAC,QAAQC,YAAW,KAAK,gBAAgB,QAAQA,OAAM;AAAA,YACvD;AAAA,UACF,EAAE,MAAM,MAAM;AACZ,gBAAI,CAAC,UAAU,KAAK,CAAC,OAAO,SAAS;AACnC,oBAAM,aAAa,WAAW,wCAAwC;AACtE,kBAAI,OAAO,iCAAiC;AAAA,YAC9C;AAAA,UACF,CAAC;AAAA,UACD,MAAM;AACJ,yBAAa,OAAO,MAAM,QAAQ,EAAE;AAAA,UACtC;AAAA,QACF;AAAA,MACF,WAAW,MAAM,SAAS,0BAA2B,cAAa,IAAI,MAAM,SAAS,GAAG,MAAM;AAC9F,UAAI,MAAM,SAAS,iBAAiB;AAClC,cAAM,kBAAkB,MAAM,GAAG;AAAA,MACnC;AACA,UAAI,MAAM,SAAS,qBAAqB,MAAM,SAAS;AACrD,cAAM,UAAU,MAAM,IAAI,QAAQ;AAClC,mBAAWC,UAAS;AAClB,cAAIA,OAAM,SAAS,yBAAyBA,OAAM,SAAS;AACzD,kBAAM,OAAO,QAAQA,OAAM,QAAQ,OAAO;AAC9C,mBAAWA,UAAS;AAClB,cAAIA,OAAM,SAAS,oBAAoBA,OAAM,QAAS,OAAM,OAAO,QAAQA,OAAM,OAAO;AAC1F,cAAM,YAAY,OAAO;AACzB,0BAAkB,MAAM;AACxB,mBAAWA,UAAS,SAAS;AAC3B,cAAIA,OAAM,SAAS,qBAAqBA,OAAM,QAAS,mBAAkB,IAAIA,OAAM,OAAO;AAC1F,cAAIA,OAAM,SAAS;AACjB,uBAAW,WAAWA,OAAM,SAAU,mBAAkB,IAAI,OAAO;AAAA,QACvE;AACA,cAAM,aAAa,QAAQ,iBAAiB;AAC5C;AAAA,MACF;AACA,UAAI,MAAM,SAAS,sBAAsB,MAAM,MAAM,SAAS,sBAAsB;AAClF,sBAAc,gBAAgB,KAAK,MAAM,OAAO,MAAM,MAAM,SAAS,SAAS,CAAC;AAAA,MACjF,WACE,MAAM,SAAS,uBACd,MAAM,MAAM,SAAS,uBAAuB,MAAM,MAAM,SAAS,uBAClE;AACA,aAAK,gBAAgB,MAAM,MAAM,SAAS;AAAA,MAC5C;AACA,UAAI,MAAM,SAAS,sBAAsB,MAAM,MAAM,SAAS,oBAAoB;AAEhF,cAAM,QAAQ,MAAM,MAAM;AAC1B,YAAI,MAAM,SAAS,sBAAsB;AACvC,gBAAM,aAAa,QAAQ,sBAAO,MAAM,MAAM,6BAAS,MAAM,QAAQ,KAAK,IAAI,EAAE;AAChF,wBAAc,gBAAgB,KAAK,MAAM,OAAO,MAAM,SAAS,SAAS,CAAC;AAAA,QAC3E,WAAW,MAAM,SAAS,uBAAuB,MAAM,SAAS,sBAAsB;AACpF,eAAK,gBAAgB,MAAM,SAAS;AAAA,QACtC;AAAA,MACF;AAAA,IACF;AAAA,EACF,UAAE;AACA,cAAU;AACV,eAAW,cAAc,aAAa,OAAO,EAAG,YAAW,MAAM;AACjE,UAAM,QAAQ,IAAI,SAAS;AAC3B,QAAI,eAAe,OAAQ,OAAM,IAAI,eAAe,gBAAgB,sCAAsC;AAAA,EAC5G;AACF;AAnLe;AAsLf,SAAS,gBACP,KACA,MACA,OACA,SACA,WACe;AACf,SAAO,KACJ,gBAAgB,OAAO,EACvB,KAAK,OAAO,aAAa;AACxB,QAAI,aAAa,UAAa,CAAC,UAAU,GAAG;AAC1C,YAAM,IAAI;AAAA,QACR,QAAQ;AAAA,QACR;AAAA,QACA,aAAa,qBAAqB,EAAE,WAAW,SAAS,SAAS,EAAE,QAAQ,GAAG,IAAI;AAAA,MACpF;AAAA,IACF;AAAA,EACF,CAAC,EACA,MAAM,CAAC,UAAmB;AACzB,QAAI,CAAC,UAAU,GAAG;AAChB,YAAM,aAAa,SAAS,oBAAoB,aAAa,KAAK,CAAC,EAAE;AAAA,IACvE,WAAW,CAAC,eAAe,KAAK,GAAG;AACjC,YAAM;AAAA,IACR;AAAA,EACF,CAAC;AACL;AAzBS;AA2BT,SAAS,oBAAoB,OAAwB,OAA6B;AAChF,UAAQ,MAAM,MAAM;AAAA,IAClB,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH;AAAA,IACF,KAAK;AACH,YAAM,cAAc,MAAM,KAAK;AAC/B;AAAA,IACF,KAAK;AAEH,UAAI,MAAM,MAAM,SAAS,YAAa,OAAM,cAAc,MAAM,MAAM,KAAK;AAAA,eAClE,MAAM,MAAM,SAAS,mBAAoB,OAAM,qBAAqB,MAAM,MAAM,KAAK;AAC9F;AAAA,IACF,KAAK;AACH,YAAM,qBAAqB,MAAM,KAAK;AACtC;AAAA,IACF,KAAK;AACH,YAAM,oBAAoB,MAAM,OAAO,MAAM,MAAM,MAAM,YAAY,MAAM,OAAO;AAClF;AAAA,IACF,KAAK;AACH,YAAM,MAAM,MAAM,SAAS;AAC3B,YAAM,aAAa,QAAQ,WAAW,MAAM,UAAU,YAAY,SAAS,KAAK,MAAM,SAAS,EAAE;AACjG;AAAA,IACF,KAAK,iBAAiB;AACpB,YAAM,UAAU,MAAM,MAAM,YAAY,SAAY,KAAK,YAAY,MAAM,MAAM,OAAO;AACxF,YAAM,aAAa,QAAQ,oBAAoB,OAAO,KAAK,MAAM,MAAM,QAAQ,IAAI,MAAM,MAAM,KAAK,EAAE;AACtG;AAAA,IACF;AAAA,IACA,KAAK;AACH,YAAM,aAAa,QAAQ,wBAAwB,MAAM,OAAO,EAAE;AAClE;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,yBAAyB,MAAM,QAAQ,IAAI,MAAM,GAAG,EAAE;AACjF;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,8BAA8B,MAAM,QAAQ,IAAI,MAAM,GAAG,KAAK,MAAM,MAAM,GAAG;AACxG;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,yBAAyB,MAAM,QAAQ,KAAU,MAAM,UAAU,MAAM,SAAS;AAC3G;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,wBAAwB,MAAM,QAAQ,cAAc,MAAM,QAAQ,GAAG;AAChG;AAAA,IACF,KAAK;AACH,YAAM,aAAa,WAAW,sBAAsB,MAAM,QAAQ,KAAK,MAAM,WAAW,OAAO,EAAE;AACjG;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,4BAA4B,MAAM,QAAQ,EAAE;AACvE;AAAA,IACF,KAAK;AACH,YAAM;AAAA,QACJ;AAAA,QACA,0BAA0B,MAAM,QAAQ,KACnC,MAAM,OAAO,YAAY,WAAM,MAAM,MAAM,YAAY;AAAA,MAC9D;AACA;AAAA,IACF,KAAK;AACH,YAAM,aAAa,WAAW,kCAAkC,MAAM,QAAQ,KAAK,MAAM,MAAM,OAAO,EAAE;AACxG;AAAA,EACJ;AACF;AAnES;AAqET,eAAe,cACb,OACA,KACA,OACA,MACA,QACA,KACA,YACe;AACf,QAAM,SAAS,2BAA2B,KAAK;AAC/C,MAAI,OAAO,SAAS,aAAa,OAAO,WAAW,SAAS,cAAc,OAAO,UAAU,WAAW,GAAG;AACvG,UAAM,aAAa,QAAQ,kDAAkD;AAAA,EAC/E;AACA,QAAM,SAAS,MAAM,6BAA6B,OAAO,GAAG;AAC5D,MAAI,OAAO,SAAS,iBAAiB;AACnC,UAAM,aAAa,QAAQ,kCAAc,MAAM,IAAI,KAAK,CAAC,EAAE;AAC3D;AAAA,EACF;AACA,QAAM,qBAAqB,QAAQ,KAAK,OAAO,MAAM,QAAQ,UAAU;AACzE;AAnBe;AAqBf,eAAe,qBACb,QACA,KACA,OACA,MACA,QACA,YACe;AACf,UAAQ,OAAO,MAAM;AAAA,IACnB,KAAK;AACH,aAAO;AACP;AAAA,IACF,KAAK;AACH,YAAM;AAAA,QACJ;AAAA,QACA;AAAA,UACE,GAAG,OAAO,SAAS,IAAI,CAAC,YAAY,GAAG,QAAQ,KAAK,WAAM,QAAQ,WAAW,EAAE;AAAA,UAC/E,GAAG,KAAK,gBAAgB,IAAI,CAAC,YAAY,GAAG,QAAQ,OAAO,WAAM,QAAQ,WAAW,iBAAiB;AAAA,QACvG,EAAE,KAAK,IAAI;AAAA,MACb;AACA;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,OAAO,aAAa,SAAS;AACxD;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AAAA,IACL,KAAK;AACH,iBAAW,OAAO,IAAI,MAAM;AAC5B;AAAA,IACF,KAAK;AACH,YAAM;AAAA,QACJ;AAAA,QACA,YAAY,IAAI,SAAS;AAAA,aAAgB,IAAI,SAAS;AAAA,eACpC,IAAI,mBAAmB,SAAS,2BAAwB,SAAS;AAAA,SACvE,MAAM,mBAAmB,GAAG,CAAC,GAAG,eAAe,OAAO,UAAU,CAAC;AAAA,MAC/E;AACA;AAAA,IACF,KAAK;AAAA,IACL,KAAK;AACH,YAAM,aAAa,QAAQ,OAAO,IAAI;AACtC;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,yBAAyB,OAAO,OAAO,CAAC;AACnE;AAAA,IACF,KAAK;AACH,YAAM;AAAA,QACJ;AAAA,QACA,OAAO,eAAe,SAClB,sCACA,eAAe,OAAO,UAAU,EAAE,QAAQ,QAAQ,EAAE;AAAA,MAC1D;AACA;AAAA,IACF,KAAK;AACH,YAAM;AAAA,QACJ;AAAA,QACA,WAAW,OAAO,OAAO,UAAU,cAAc,WAAW,SACvD,OAAO,OAAO,QAAQ,KAAK,OAAO,OAAO,OAAO,YAAY,WAC5D,OAAO,OAAO,MAAM,YAAY;AAAA,MACvC;AACA;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,mBAAmB,OAAO,SAAS,EAAE;AAChE;AAAA,IACF,KAAK;AACH,YAAM,iBAAiB,MAAM,KAAK,OAAO,OAAO,QAAQ;AACxD;AAAA,IACF,KAAK,4BAA4B;AAC/B,YAAM,YAAY,MAAM,KAAK,qBAAqB,OAAO,QAAQ,IAAI,SAAS;AAC9E,UAAI,WAAW;AACb,YAAI,CAAC,IAAI,YAAa,OAAM,IAAI,MAAM,0DAAkB;AACxD,cAAM,KAAK,MAAM,IAAI,YAAY,UAAU,SAAS,UAAU,IAAI;AAClE,cAAM,aAAa,QAAQ,+CAAiB,EAAE,EAAE;AAChD,YAAI,IAAI,gBAAiB,MAAK,gBAAgB,MAAM,IAAI,gBAAgB,CAAC;AAAA,MAC3E;AACA;AAAA,IACF;AAAA,IACA,KAAK;AACH,YAAM,KAAK,eAAe,OAAO,MAAM;AAAA,QACrC,GAAI,OAAO,KAAK,SAAS,IAAI,iBACzB,EAAE,WAAW,8BAAO,UAAkB,MAAM,IAAI,eAAgB,OAAO,KAAK,OAAQ,CAAC,IAAI,CAAC,GAAG,MAAhF,aAAqF,IAClG,CAAC;AAAA,QACL,GAAI,IAAI,eAAe,EAAE,SAAS,wBAAC,cAAsB,IAAI,aAAc,SAAS,GAAlD,WAAoD,IAAI,CAAC;AAAA,MAC7F,CAAC;AACD;AAAA,IACF,KAAK;AACH,YAAM;AAAA,QACJ;AAAA,QACA,OAAO,UAAU,SACb,OAAO,UACJ,IAAI,CAAC,SAAS,GAAG,KAAK,EAAE;AAAA,EAAK,KAAK,IAAI;AAAA,EAAK,KAAK,MAAM,SAAM,KAAK,MAAM,SAAM,KAAK,OAAO,MAAM,GAAG,EAAE,CAAC,EAAE,EACvG,KAAK,MAAM,IACd;AAAA,MACN;AACA;AAAA,IACF,KAAK;AACH,YAAM,aAAa,QAAQ,mBAAmB,OAAO,SAAS,EAAE;AAChE;AAAA,IACF,KAAK;AACH,YAAM,eAAe,MAAM,KAAK,OAAO,OAAO,MAAM;AACpD;AAAA,IACF,KAAK;AACH,YAAM,kBAAkB,MAAM,GAAG;AACjC;AAAA,IACF,KAAK;AACH,YAAM,aAAa,WAAW,iCAAiC,OAAO,KAAK,EAAE;AAC7E;AAAA,IACF,KAAK;AACH,UAAI,OAAO,MAAM,WAAW,SAAS;AACnC,cAAM,aAAa,WAAW,2BAA2B,OAAO,KAAK,CAAC;AAAA,MACxE,OAAO;AACL,cAAM,gBAAgB,MAAM,KAAK,OAAO,OAAO,KAAK;AAAA,MACtD;AACA;AAAA,IACF,KAAK;AACH,WAAK,SAAS,WAAW,KAAK,OAAO,KAAK,CAAC;AAC3C,YAAM,aAAa,QAAQ,uBAAuB,OAAO,KAAK,CAAC;AAC/D;AAAA,IACF,KAAK;AACH,YAAM,aAAa,WAAW,oCAAoC,OAAO,KAAK,EAAE;AAChF;AAAA,IACF,KAAK;AACH,YAAM,aAAa,WAAW,UAAU,OAAO,KAAK,EAAE;AACtD;AAAA,IACF,KAAK;AACH,YAAM,aAAa,WAAW,oBAAoB,OAAO,OAAO,EAAE;AAClE;AAAA,EACJ;AACF;AA/He;AAiIf,eAAe,gBACb,MACA,KACA,OACA,OACe;AACf,QAAM,SAAS,MAAM,KAAK,gCAAgC,KAAK;AAC/D,MAAI,WAAW,OAAW;AAC1B,MAAI;AACF,UAAM,UAAU,MAAM,IAAI,mBAAmB,WAAW,YAAY,SAAY,MAAM;AACtF,SAAK,SAAS,WAAW,KAAK,OAAO,CAAC;AACtC,UAAM,aAAa,QAAQ,uBAAuB,OAAO,CAAC;AAAA,EAC5D,SAAS,OAAO;AACd,UAAM,aAAa,SAAS,aAAa,KAAK,CAAC;AAAA,EACjD;AACF;AAfe;AAiBf,eAAe,eACb,MACA,KACA,OACA,eACe;AACf,MAAI,SAAS;AACb,SAAO,MAAM;AACX,UAAM,SAAS,MAAM,KAAK,mBAAmB,QAAQ,IAAI,YAAY,WAAW,OAAO;AACvF,QAAI,WAAW,OAAW;AAC1B,QAAI;AACF,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,YAAY,OAAO,OAAO;AACpC,cAAM,kBAAkB,MAAM,GAAG;AACjC;AAAA,MACF;AACA,YAAM,IAAI,gBAAgB,OAAO,OAAO;AACxC,eAAS,MAAM,IAAI,WAAW;AAAA,IAChC,SAAS,OAAO;AACd,YAAM,aAAa,SAAS,aAAa,KAAK,CAAC;AAC/C,eAAS,MAAM,IAAI,WAAW;AAAA,IAChC;AAAA,EACF;AACF;AAvBe;AAyBf,eAAe,iBACb,MACA,KACA,OACA,iBACe;AACf,MAAI,WAAW;AACf,SAAO,MAAM;AACX,UAAM,SAAS,MAAM,KAAK,qBAAqB,UAAU,IAAI,SAAS;AACtE,QAAI,WAAW,OAAW;AAC1B,QAAI;AACF,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,cAAc,OAAO,SAAS;AACxC,cAAM,aAAa,QAAQ,mBAAmB,OAAO,SAAS,EAAE;AAChE;AAAA,MACF;AACA,UAAI,OAAO,SAAS,UAAU;AAC5B,cAAM,IAAI,cAAc,OAAO,WAAW,OAAO,KAAK;AACtD,cAAM,aAAa,QAAQ,sBAAsB,OAAO,KAAK,EAAE;AAAA,MACjE,OAAO;AACL,cAAM,UAAU,MAAM,IAAI,cAAc,OAAO,SAAS;AACxD,cAAM;AAAA,UACJ,UAAU,SAAS;AAAA,UACnB,UAAU,mBAAmB,OAAO,SAAS,KAAK,WAAW,OAAO,SAAS;AAAA,QAC/E;AAAA,MACF;AACA,iBAAW,MAAM,IAAI,aAAa;AAAA,IACpC,SAAS,OAAO;AACd,YAAM,aAAa,SAAS,aAAa,KAAK,CAAC;AAC/C,iBAAW,MAAM,IAAI,aAAa;AAAA,IACpC;AAAA,EACF;AACF;AAhCe;AAkCf,SAAS,eAAe,YAAgF;AACtG,MAAI,eAAe,OAAW,QAAO;AACrC,QAAM,SAAS,WAAW,wBAAwB,SAAY,KAAK,MAAM,WAAW,mBAAmB;AACvG,SAAO;AAAA,YAAe,WAAW,eAAe,GAAG,MAAM,YAAiB,WAAW,YAAY;AACnG;AAJS;AAMT,SAAS,WAAW,KAA0B,SAAoD,WAAmB;AACnH,QAAM,OAAO,IAAI,YAAY;AAC7B,MAAI,SAAS,OAAW,QAAO;AAC/B,QAAM,WAAW,GAAG,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,QAAM,QAAQ,KAAK,YAAY,SAAY,WAAW,GAAG,KAAK,OAAO,KAAK,QAAQ;AAClF,SAAO,GAAG,KAAK,iBAAc,qBAAqB,MAAM,CAAC;AAC3D;AANS;AAQT,SAAS,qBAAqB,OAA0D;AACtF,MAAI,UAAU,UAAW,QAAO;AAChC,MAAI,MAAM,WAAW,cAAe,QAAO;AAC3C,MAAI,MAAM,WAAW,UAAW,QAAO;AACvC,SAAO,MAAM,mBAAmB,MAAM,iBAAiB;AACzD;AALS;AAOT,eAAe,mBAAmB,KAA2C;AAC3E,MAAI;AACF,WAAO,WAAW,KAAK,MAAM,IAAI,mBAAmB,CAAC;AAAA,EACvD,QAAQ;AACN,WAAO,WAAW,KAAK,uBAAuB,CAAC;AAAA,EACjD;AACF;AANe;AAQf,eAAe,kBAAkB,MAA6B,KAAyC;AACrG,QAAM,WAAW,cAAc,GAAG;AAClC,QAAM,QAAQ,MAAM,mBAAmB,GAAG;AAC1C,MAAI,aAAa,cAAc,GAAG,EAAG,MAAK,SAAS,KAAK;AAC1D;AAJe;AAMf,SAAS,cAAc,KAAkC;AACvD,QAAM,QAAQ,IAAI,YAAY;AAC9B,SAAO,UAAU,SAAY,KAAK,GAAG,MAAM,WAAW,EAAE,KAAS,MAAM,QAAQ,KAAS,MAAM,KAAK;AACrG;AAHS;AAKT,SAAS,yBAAwD;AAC/D,SAAO;AAAA,IACL,QAAQ;AAAA,IACR,QAAQ;AAAA,IACR,SAAS,CAAC;AAAA,IACV,YAAY;AAAA,EACd;AACF;AAPS;AAST,SAAS,2BAA2B,OAA8C;AAChF,SAAO,MAAM,WAAW,gBACpB,6DACA;AACN;AAJS;AAMT,SAAS,uBAAuB,OAA8C;AAC5E,QAAM,SAAS,MAAM,mBAAmB;AACxC,SAAO,qBAAqB,MAAM,GAAG,MAAM,aAAa,wBAAwB,EAAE;AACpF;AAHS;AAKT,SAAS,eAAe,OAAyB;AAC/C,SAAO,iBAAiB,UAAU,MAAM,SAAS,gBAAiB,UAAU,SAAS,MAAM,SAAS;AACtG;AAFS;AAIT,SAAS,aAAa,OAAwB;AAC5C,SAAO,iBAAiB,QAAQ,MAAM,UAAU,OAAO,KAAK;AAC9D;AAFS;",
6
+ "names": ["omitUndefined", "omitUndefined", "signal", "event"]
7
+ }