@gatanot/qualia_web 0.1.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 (224) hide show
  1. package/build/client/_app/immutable/assets/0.BlmLthUu.css +1 -0
  2. package/build/client/_app/immutable/assets/0.BlmLthUu.css.br +0 -0
  3. package/build/client/_app/immutable/assets/0.BlmLthUu.css.gz +0 -0
  4. package/build/client/_app/immutable/assets/2.C6F1hpzI.css +1 -0
  5. package/build/client/_app/immutable/assets/2.C6F1hpzI.css.br +0 -0
  6. package/build/client/_app/immutable/assets/2.C6F1hpzI.css.gz +0 -0
  7. package/build/client/_app/immutable/assets/3.D8sLuVpx.css +1 -0
  8. package/build/client/_app/immutable/assets/3.D8sLuVpx.css.br +0 -0
  9. package/build/client/_app/immutable/assets/3.D8sLuVpx.css.gz +0 -0
  10. package/build/client/_app/immutable/assets/4.1xWrYHn4.css +1 -0
  11. package/build/client/_app/immutable/assets/4.1xWrYHn4.css.br +0 -0
  12. package/build/client/_app/immutable/assets/4.1xWrYHn4.css.gz +0 -0
  13. package/build/client/_app/immutable/assets/5.K6sy6bnZ.css +1 -0
  14. package/build/client/_app/immutable/assets/5.K6sy6bnZ.css.br +0 -0
  15. package/build/client/_app/immutable/assets/5.K6sy6bnZ.css.gz +0 -0
  16. package/build/client/_app/immutable/assets/ChatInput.CmxPxwkj.css +1 -0
  17. package/build/client/_app/immutable/assets/ChatInput.CmxPxwkj.css.br +0 -0
  18. package/build/client/_app/immutable/assets/ChatInput.CmxPxwkj.css.gz +0 -0
  19. package/build/client/_app/immutable/assets/KaTeX_AMS-Regular.BQhdFMY1.woff2 +0 -0
  20. package/build/client/_app/immutable/assets/KaTeX_AMS-Regular.DMm9YOAa.woff +0 -0
  21. package/build/client/_app/immutable/assets/KaTeX_AMS-Regular.DRggAlZN.ttf +0 -0
  22. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Bold.ATXxdsX0.ttf +0 -0
  23. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Bold.BEiXGLvX.woff +0 -0
  24. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Bold.Dq_IR9rO.woff2 +0 -0
  25. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Regular.CTRA-rTL.woff +0 -0
  26. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Regular.Di6jR-x-.woff2 +0 -0
  27. package/build/client/_app/immutable/assets/KaTeX_Caligraphic-Regular.wX97UBjC.ttf +0 -0
  28. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Bold.BdnERNNW.ttf +0 -0
  29. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Bold.BsDP51OF.woff +0 -0
  30. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Bold.CL6g_b3V.woff2 +0 -0
  31. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Regular.CB_wures.ttf +0 -0
  32. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Regular.CTYiF6lA.woff2 +0 -0
  33. package/build/client/_app/immutable/assets/KaTeX_Fraktur-Regular.Dxdc4cR9.woff +0 -0
  34. package/build/client/_app/immutable/assets/KaTeX_Main-Bold.Cx986IdX.woff2 +0 -0
  35. package/build/client/_app/immutable/assets/KaTeX_Main-Bold.Jm3AIy58.woff +0 -0
  36. package/build/client/_app/immutable/assets/KaTeX_Main-Bold.waoOVXN0.ttf +0 -0
  37. package/build/client/_app/immutable/assets/KaTeX_Main-BoldItalic.DxDJ3AOS.woff2 +0 -0
  38. package/build/client/_app/immutable/assets/KaTeX_Main-BoldItalic.DzxPMmG6.ttf +0 -0
  39. package/build/client/_app/immutable/assets/KaTeX_Main-BoldItalic.SpSLRI95.woff +0 -0
  40. package/build/client/_app/immutable/assets/KaTeX_Main-Italic.3WenGoN9.ttf +0 -0
  41. package/build/client/_app/immutable/assets/KaTeX_Main-Italic.BMLOBm91.woff +0 -0
  42. package/build/client/_app/immutable/assets/KaTeX_Main-Italic.NWA7e6Wa.woff2 +0 -0
  43. package/build/client/_app/immutable/assets/KaTeX_Main-Regular.B22Nviop.woff2 +0 -0
  44. package/build/client/_app/immutable/assets/KaTeX_Main-Regular.Dr94JaBh.woff +0 -0
  45. package/build/client/_app/immutable/assets/KaTeX_Main-Regular.ypZvNtVU.ttf +0 -0
  46. package/build/client/_app/immutable/assets/KaTeX_Math-BoldItalic.B3XSjfu4.ttf +0 -0
  47. package/build/client/_app/immutable/assets/KaTeX_Math-BoldItalic.CZnvNsCZ.woff2 +0 -0
  48. package/build/client/_app/immutable/assets/KaTeX_Math-BoldItalic.iY-2wyZ7.woff +0 -0
  49. package/build/client/_app/immutable/assets/KaTeX_Math-Italic.DA0__PXp.woff +0 -0
  50. package/build/client/_app/immutable/assets/KaTeX_Math-Italic.flOr_0UB.ttf +0 -0
  51. package/build/client/_app/immutable/assets/KaTeX_Math-Italic.t53AETM-.woff2 +0 -0
  52. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Bold.CFMepnvq.ttf +0 -0
  53. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Bold.D1sUS0GD.woff2 +0 -0
  54. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Bold.DbIhKOiC.woff +0 -0
  55. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Italic.C3H0VqGB.woff2 +0 -0
  56. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Italic.DN2j7dab.woff +0 -0
  57. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Italic.YYjJ1zSn.ttf +0 -0
  58. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Regular.BNo7hRIc.ttf +0 -0
  59. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Regular.CS6fqUqJ.woff +0 -0
  60. package/build/client/_app/immutable/assets/KaTeX_SansSerif-Regular.DDBCnlJ7.woff2 +0 -0
  61. package/build/client/_app/immutable/assets/KaTeX_Script-Regular.C5JkGWo-.ttf +0 -0
  62. package/build/client/_app/immutable/assets/KaTeX_Script-Regular.D3wIWfF6.woff2 +0 -0
  63. package/build/client/_app/immutable/assets/KaTeX_Script-Regular.D5yQViql.woff +0 -0
  64. package/build/client/_app/immutable/assets/KaTeX_Size1-Regular.C195tn64.woff +0 -0
  65. package/build/client/_app/immutable/assets/KaTeX_Size1-Regular.Dbsnue_I.ttf +0 -0
  66. package/build/client/_app/immutable/assets/KaTeX_Size1-Regular.mCD8mA8B.woff2 +0 -0
  67. package/build/client/_app/immutable/assets/KaTeX_Size2-Regular.B7gKUWhC.ttf +0 -0
  68. package/build/client/_app/immutable/assets/KaTeX_Size2-Regular.Dy4dx90m.woff2 +0 -0
  69. package/build/client/_app/immutable/assets/KaTeX_Size2-Regular.oD1tc_U0.woff +0 -0
  70. package/build/client/_app/immutable/assets/KaTeX_Size3-Regular.CTq5MqoE.woff +0 -0
  71. package/build/client/_app/immutable/assets/KaTeX_Size3-Regular.DgpXs0kz.ttf +0 -0
  72. package/build/client/_app/immutable/assets/KaTeX_Size4-Regular.BF-4gkZK.woff +0 -0
  73. package/build/client/_app/immutable/assets/KaTeX_Size4-Regular.DWFBv043.ttf +0 -0
  74. package/build/client/_app/immutable/assets/KaTeX_Size4-Regular.Dl5lxZxV.woff2 +0 -0
  75. package/build/client/_app/immutable/assets/KaTeX_Typewriter-Regular.C0xS9mPB.woff +0 -0
  76. package/build/client/_app/immutable/assets/KaTeX_Typewriter-Regular.CO6r4hn1.woff2 +0 -0
  77. package/build/client/_app/immutable/assets/KaTeX_Typewriter-Regular.D3Ib7_Hf.ttf +0 -0
  78. package/build/client/_app/immutable/chunks/B39M1lOz.js +3 -0
  79. package/build/client/_app/immutable/chunks/B39M1lOz.js.br +0 -0
  80. package/build/client/_app/immutable/chunks/B39M1lOz.js.gz +0 -0
  81. package/build/client/_app/immutable/chunks/BMcRbUT8.js +3 -0
  82. package/build/client/_app/immutable/chunks/BMcRbUT8.js.br +0 -0
  83. package/build/client/_app/immutable/chunks/BMcRbUT8.js.gz +0 -0
  84. package/build/client/_app/immutable/chunks/BN2zEB6w.js +1 -0
  85. package/build/client/_app/immutable/chunks/BN2zEB6w.js.br +0 -0
  86. package/build/client/_app/immutable/chunks/BN2zEB6w.js.gz +0 -0
  87. package/build/client/_app/immutable/chunks/BVDlhZK_.js +1 -0
  88. package/build/client/_app/immutable/chunks/BVDlhZK_.js.br +2 -0
  89. package/build/client/_app/immutable/chunks/BVDlhZK_.js.gz +0 -0
  90. package/build/client/_app/immutable/chunks/CxmPiQW9.js +1 -0
  91. package/build/client/_app/immutable/chunks/CxmPiQW9.js.br +0 -0
  92. package/build/client/_app/immutable/chunks/CxmPiQW9.js.gz +0 -0
  93. package/build/client/_app/immutable/chunks/DAIlYrs_.js +1 -0
  94. package/build/client/_app/immutable/chunks/DAIlYrs_.js.br +0 -0
  95. package/build/client/_app/immutable/chunks/DAIlYrs_.js.gz +0 -0
  96. package/build/client/_app/immutable/chunks/Ir23lSxH.js +329 -0
  97. package/build/client/_app/immutable/chunks/Ir23lSxH.js.br +0 -0
  98. package/build/client/_app/immutable/chunks/Ir23lSxH.js.gz +0 -0
  99. package/build/client/_app/immutable/chunks/gZTJ0hjf.js +1 -0
  100. package/build/client/_app/immutable/chunks/gZTJ0hjf.js.br +0 -0
  101. package/build/client/_app/immutable/chunks/gZTJ0hjf.js.gz +0 -0
  102. package/build/client/_app/immutable/chunks/idCMFvY6.js +1 -0
  103. package/build/client/_app/immutable/chunks/idCMFvY6.js.br +2 -0
  104. package/build/client/_app/immutable/chunks/idCMFvY6.js.gz +0 -0
  105. package/build/client/_app/immutable/chunks/kNaey6uv.js +1 -0
  106. package/build/client/_app/immutable/chunks/kNaey6uv.js.br +0 -0
  107. package/build/client/_app/immutable/chunks/kNaey6uv.js.gz +0 -0
  108. package/build/client/_app/immutable/chunks/xihTtKlq.js +1 -0
  109. package/build/client/_app/immutable/chunks/xihTtKlq.js.br +1 -0
  110. package/build/client/_app/immutable/chunks/xihTtKlq.js.gz +0 -0
  111. package/build/client/_app/immutable/entry/app.CAKAEcgA.js +2 -0
  112. package/build/client/_app/immutable/entry/app.CAKAEcgA.js.br +0 -0
  113. package/build/client/_app/immutable/entry/app.CAKAEcgA.js.gz +0 -0
  114. package/build/client/_app/immutable/entry/start.BSM2k8tg.js +1 -0
  115. package/build/client/_app/immutable/entry/start.BSM2k8tg.js.br +0 -0
  116. package/build/client/_app/immutable/entry/start.BSM2k8tg.js.gz +0 -0
  117. package/build/client/_app/immutable/nodes/0.fnpvsEAN.js +1 -0
  118. package/build/client/_app/immutable/nodes/0.fnpvsEAN.js.br +0 -0
  119. package/build/client/_app/immutable/nodes/0.fnpvsEAN.js.gz +0 -0
  120. package/build/client/_app/immutable/nodes/1.CLtaTeie.js +1 -0
  121. package/build/client/_app/immutable/nodes/1.CLtaTeie.js.br +0 -0
  122. package/build/client/_app/immutable/nodes/1.CLtaTeie.js.gz +0 -0
  123. package/build/client/_app/immutable/nodes/2.BwxFyRtn.js +1 -0
  124. package/build/client/_app/immutable/nodes/2.BwxFyRtn.js.br +0 -0
  125. package/build/client/_app/immutable/nodes/2.BwxFyRtn.js.gz +0 -0
  126. package/build/client/_app/immutable/nodes/3.D2KZBL5g.js +4 -0
  127. package/build/client/_app/immutable/nodes/3.D2KZBL5g.js.br +0 -0
  128. package/build/client/_app/immutable/nodes/3.D2KZBL5g.js.gz +0 -0
  129. package/build/client/_app/immutable/nodes/4.B6LN5K9i.js +1 -0
  130. package/build/client/_app/immutable/nodes/4.B6LN5K9i.js.br +0 -0
  131. package/build/client/_app/immutable/nodes/4.B6LN5K9i.js.gz +0 -0
  132. package/build/client/_app/immutable/nodes/5.CVHYq0o4.js +10 -0
  133. package/build/client/_app/immutable/nodes/5.CVHYq0o4.js.br +0 -0
  134. package/build/client/_app/immutable/nodes/5.CVHYq0o4.js.gz +0 -0
  135. package/build/client/_app/version.json +1 -0
  136. package/build/client/_app/version.json.br +0 -0
  137. package/build/client/_app/version.json.gz +0 -0
  138. package/build/client/robots.txt +3 -0
  139. package/build/client/robots.txt.br +0 -0
  140. package/build/client/robots.txt.gz +0 -0
  141. package/build/env.js +70 -0
  142. package/build/env.js.map +1 -0
  143. package/build/handler.js +17 -0
  144. package/build/handler.js.map +1 -0
  145. package/build/index.js +140 -0
  146. package/build/index.js.map +1 -0
  147. package/build/server/chunks/0-CF_dr3E0.js +9 -0
  148. package/build/server/chunks/0-CF_dr3E0.js.map +1 -0
  149. package/build/server/chunks/1-CVoEVbhQ.js +9 -0
  150. package/build/server/chunks/1-CVoEVbhQ.js.map +1 -0
  151. package/build/server/chunks/2-BzhQC8cX.js +38 -0
  152. package/build/server/chunks/2-BzhQC8cX.js.map +1 -0
  153. package/build/server/chunks/3-CukYFw9L.js +9 -0
  154. package/build/server/chunks/3-CukYFw9L.js.map +1 -0
  155. package/build/server/chunks/4-4e_Gaah7.js +9 -0
  156. package/build/server/chunks/4-4e_Gaah7.js.map +1 -0
  157. package/build/server/chunks/5-B4fCEv4c.js +9 -0
  158. package/build/server/chunks/5-B4fCEv4c.js.map +1 -0
  159. package/build/server/chunks/ChatInput-GWTgCE1t.js +122 -0
  160. package/build/server/chunks/ChatInput-GWTgCE1t.js.map +1 -0
  161. package/build/server/chunks/_layout.svelte-MrMdtdjr.js +232 -0
  162. package/build/server/chunks/_layout.svelte-MrMdtdjr.js.map +1 -0
  163. package/build/server/chunks/_page.svelte-CfQFFres.js +64 -0
  164. package/build/server/chunks/_page.svelte-CfQFFres.js.map +1 -0
  165. package/build/server/chunks/_page.svelte-CgTaVEr0.js +189 -0
  166. package/build/server/chunks/_page.svelte-CgTaVEr0.js.map +1 -0
  167. package/build/server/chunks/_page.svelte-DEDJBB4D.js +602 -0
  168. package/build/server/chunks/_page.svelte-DEDJBB4D.js.map +1 -0
  169. package/build/server/chunks/_page.svelte-OC4xDCWu.js +67 -0
  170. package/build/server/chunks/_page.svelte-OC4xDCWu.js.map +1 -0
  171. package/build/server/chunks/_server.ts-BG3v883h.js +115 -0
  172. package/build/server/chunks/_server.ts-BG3v883h.js.map +1 -0
  173. package/build/server/chunks/_server.ts-C1hU_FnX.js +28 -0
  174. package/build/server/chunks/_server.ts-C1hU_FnX.js.map +1 -0
  175. package/build/server/chunks/_server.ts-CJOrsy4y.js +30 -0
  176. package/build/server/chunks/_server.ts-CJOrsy4y.js.map +1 -0
  177. package/build/server/chunks/_server.ts-Co2FAQm2.js +43 -0
  178. package/build/server/chunks/_server.ts-Co2FAQm2.js.map +1 -0
  179. package/build/server/chunks/_server.ts-D6NGuqud.js +106 -0
  180. package/build/server/chunks/_server.ts-D6NGuqud.js.map +1 -0
  181. package/build/server/chunks/_server.ts-DaHUgm60.js +26 -0
  182. package/build/server/chunks/_server.ts-DaHUgm60.js.map +1 -0
  183. package/build/server/chunks/_server.ts-DiHyx5ij.js +64 -0
  184. package/build/server/chunks/_server.ts-DiHyx5ij.js.map +1 -0
  185. package/build/server/chunks/_server.ts-GB-Qo389.js +73 -0
  186. package/build/server/chunks/_server.ts-GB-Qo389.js.map +1 -0
  187. package/build/server/chunks/_server.ts-K359HUPL.js +32 -0
  188. package/build/server/chunks/_server.ts-K359HUPL.js.map +1 -0
  189. package/build/server/chunks/_server.ts-e4VKCo3M.js +54 -0
  190. package/build/server/chunks/_server.ts-e4VKCo3M.js.map +1 -0
  191. package/build/server/chunks/_server.ts-nr6qwbTw.js +42 -0
  192. package/build/server/chunks/_server.ts-nr6qwbTw.js.map +1 -0
  193. package/build/server/chunks/chat-confirm-BW2aJ2qz.js +5 -0
  194. package/build/server/chunks/chat-confirm-BW2aJ2qz.js.map +1 -0
  195. package/build/server/chunks/chat-steering-DTefLITL.js +5 -0
  196. package/build/server/chunks/chat-steering-DTefLITL.js.map +1 -0
  197. package/build/server/chunks/client-BoLIct8q.js +69 -0
  198. package/build/server/chunks/client-BoLIct8q.js.map +1 -0
  199. package/build/server/chunks/config-d3FC8naq.js +4907 -0
  200. package/build/server/chunks/config-d3FC8naq.js.map +1 -0
  201. package/build/server/chunks/error.svelte-BpxjjtfZ.js +65 -0
  202. package/build/server/chunks/error.svelte-BpxjjtfZ.js.map +1 -0
  203. package/build/server/chunks/gateway-DWcUFfHo.js +478 -0
  204. package/build/server/chunks/gateway-DWcUFfHo.js.map +1 -0
  205. package/build/server/chunks/handler-BAQYBQgy.js +1454 -0
  206. package/build/server/chunks/handler-BAQYBQgy.js.map +1 -0
  207. package/build/server/chunks/hooks.server-C6heBR7o.js +35 -0
  208. package/build/server/chunks/hooks.server-C6heBR7o.js.map +1 -0
  209. package/build/server/chunks/index.js-N7Sh42pC.js +11584 -0
  210. package/build/server/chunks/index.js-N7Sh42pC.js.map +1 -0
  211. package/build/server/chunks/manifest.js-D2rH2GXr.js +143 -0
  212. package/build/server/chunks/manifest.js-D2rH2GXr.js.map +1 -0
  213. package/build/server/chunks/markdown-BYqQ8bKF.js +78593 -0
  214. package/build/server/chunks/markdown-BYqQ8bKF.js.map +1 -0
  215. package/build/server/chunks/prompts-tcGD1LCs.js +37 -0
  216. package/build/server/chunks/prompts-tcGD1LCs.js.map +1 -0
  217. package/build/server/chunks/session-store-B1Aop0Qn.js +50 -0
  218. package/build/server/chunks/session-store-B1Aop0Qn.js.map +1 -0
  219. package/build/server/chunks/stores-D_6JNTkz.js +36 -0
  220. package/build/server/chunks/stores-D_6JNTkz.js.map +1 -0
  221. package/build/shims.js +33 -0
  222. package/build/shims.js.map +1 -0
  223. package/handler.d.ts +8 -0
  224. package/package.json +46 -0
@@ -0,0 +1,65 @@
1
+ import 'node:module';
2
+ import { e as escape_html, l as getContext } from './index.js-N7Sh42pC.js';
3
+ import './client-BoLIct8q.js';
4
+
5
+ //#endregion
6
+ //#region ../../node_modules/@sveltejs/kit/src/runtime/app/state/server.js
7
+ function context() {
8
+ return getContext("__request__");
9
+ }
10
+ //#endregion
11
+ //#region ../../node_modules/@sveltejs/kit/src/runtime/app/state/index.js
12
+ /**
13
+ * A read-only reactive object with information about the current page, serving several use cases:
14
+ * - retrieving the combined `data` of all pages/layouts anywhere in your component tree (also see [loading data](https://svelte.dev/docs/kit/load))
15
+ * - retrieving the current value of the `form` prop anywhere in your component tree (also see [form actions](https://svelte.dev/docs/kit/form-actions))
16
+ * - retrieving the page state that was set through `goto`, `pushState` or `replaceState` (also see [goto](https://svelte.dev/docs/kit/$app-navigation#goto) and [shallow routing](https://svelte.dev/docs/kit/shallow-routing))
17
+ * - retrieving metadata such as the URL you're on, the current route and its parameters, and whether or not there was an error
18
+ *
19
+ * ```svelte
20
+ * <!--- file: +layout.svelte --->
21
+ * <script>
22
+ * import { page } from '$app/state';
23
+ * <\/script>
24
+ *
25
+ * <p>Currently at {page.url.pathname}</p>
26
+ *
27
+ * {#if page.error}
28
+ * <span class="red">Problem detected</span>
29
+ * {:else}
30
+ * <span class="small">All systems operational</span>
31
+ * {/if}
32
+ * ```
33
+ *
34
+ * Changes to `page` are available exclusively with runes. (The legacy reactivity syntax will not reflect any changes)
35
+ *
36
+ * ```svelte
37
+ * <!--- file: +page.svelte --->
38
+ * <script>
39
+ * import { page } from '$app/state';
40
+ * const id = $derived(page.params.id); // This will correctly update id for usage on this page
41
+ * $: badId = page.params.id; // Do not use; will never update after initial load
42
+ * <\/script>
43
+ * ```
44
+ *
45
+ * On the server, values can only be read during rendering (in other words _not_ in e.g. `load` functions). In the browser, the values can be read at any time.
46
+ *
47
+ * @type {import('@sveltejs/kit').Page}
48
+ */
49
+ var page = {
50
+ get error() {
51
+ return context().page.error;
52
+ },
53
+ get status() {
54
+ return context().page.status;
55
+ }};
56
+ //#endregion
57
+ //#region ../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte
58
+ function Error$1($$renderer, $$props) {
59
+ $$renderer.component(($$renderer) => {
60
+ $$renderer.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`);
61
+ });
62
+ }
63
+
64
+ export { Error$1 as default };
65
+ //# sourceMappingURL=error.svelte-BpxjjtfZ.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error.svelte-BpxjjtfZ.js","sources":["../../../.svelte-kit/output/server/entries/fallbacks/error.svelte.js"],"sourcesContent":["import \"../../chunks/environment.js\";\nimport { U as escape_html, nt as getContext } from \"../../chunks/dev.js\";\nimport { i as navigating$1, r as stores } from \"../../chunks/client.js\";\nObject.defineProperty({\n\tget from() {\n\t\treturn navigating$1.current ? navigating$1.current.from : null;\n\t},\n\tget to() {\n\t\treturn navigating$1.current ? navigating$1.current.to : null;\n\t},\n\tget type() {\n\t\treturn navigating$1.current ? navigating$1.current.type : null;\n\t},\n\tget willUnload() {\n\t\treturn navigating$1.current ? navigating$1.current.willUnload : null;\n\t},\n\tget delta() {\n\t\treturn navigating$1.current ? navigating$1.current.delta : null;\n\t},\n\tget complete() {\n\t\treturn navigating$1.current ? navigating$1.current.complete : null;\n\t}\n}, \"current\", { get() {\n\tthrow new Error(\"Replace navigating.current.<prop> with navigating.<prop>\");\n} });\nstores.updated.check;\n//#endregion\n//#region ../../node_modules/@sveltejs/kit/src/runtime/app/state/server.js\nfunction context() {\n\treturn getContext(\"__request__\");\n}\n//#endregion\n//#region ../../node_modules/@sveltejs/kit/src/runtime/app/state/index.js\n/**\n* A read-only reactive object with information about the current page, serving several use cases:\n* - retrieving the combined `data` of all pages/layouts anywhere in your component tree (also see [loading data](https://svelte.dev/docs/kit/load))\n* - retrieving the current value of the `form` prop anywhere in your component tree (also see [form actions](https://svelte.dev/docs/kit/form-actions))\n* - retrieving the page state that was set through `goto`, `pushState` or `replaceState` (also see [goto](https://svelte.dev/docs/kit/$app-navigation#goto) and [shallow routing](https://svelte.dev/docs/kit/shallow-routing))\n* - retrieving metadata such as the URL you're on, the current route and its parameters, and whether or not there was an error\n*\n* ```svelte\n* <!--- file: +layout.svelte --->\n* <script>\n* \timport { page } from '$app/state';\n* <\\/script>\n*\n* <p>Currently at {page.url.pathname}</p>\n*\n* {#if page.error}\n* \t<span class=\"red\">Problem detected</span>\n* {:else}\n* \t<span class=\"small\">All systems operational</span>\n* {/if}\n* ```\n*\n* Changes to `page` are available exclusively with runes. (The legacy reactivity syntax will not reflect any changes)\n*\n* ```svelte\n* <!--- file: +page.svelte --->\n* <script>\n* \timport { page } from '$app/state';\n* \tconst id = $derived(page.params.id); // This will correctly update id for usage on this page\n* \t$: badId = page.params.id; // Do not use; will never update after initial load\n* <\\/script>\n* ```\n*\n* On the server, values can only be read during rendering (in other words _not_ in e.g. `load` functions). In the browser, the values can be read at any time.\n*\n* @type {import('@sveltejs/kit').Page}\n*/\nvar page = {\n\tget data() {\n\t\treturn context().page.data;\n\t},\n\tget error() {\n\t\treturn context().page.error;\n\t},\n\tget form() {\n\t\treturn context().page.form;\n\t},\n\tget params() {\n\t\treturn context().page.params;\n\t},\n\tget route() {\n\t\treturn context().page.route;\n\t},\n\tget state() {\n\t\treturn context().page.state;\n\t},\n\tget status() {\n\t\treturn context().page.status;\n\t},\n\tget url() {\n\t\treturn context().page.url;\n\t}\n};\n//#endregion\n//#region ../../node_modules/@sveltejs/kit/src/runtime/components/svelte-5/error.svelte\nfunction Error$1($$renderer, $$props) {\n\t$$renderer.component(($$renderer) => {\n\t\t$$renderer.push(`<h1>${escape_html(page.status)}</h1> <p>${escape_html(page.error?.message)}</p>`);\n\t});\n}\n//#endregion\nexport { Error$1 as default };\n"],"names":[],"mappings":";;;;AA0BA;AACA;AACA,SAAS,OAAO,GAAG;AACnB,CAAC,OAAO,UAAU,CAAC,aAAa,CAAC;AACjC;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,IAAI,IAAI,GAAG;AACX,CAGC,IAAI,KAAK,GAAG;AACb,EAAE,OAAO,OAAO,EAAE,CAAC,IAAI,CAAC,KAAK;AAC7B,CAAC,CAAC;AACF,CAYC,IAAI,MAAM,GAAG;AACd,EAAE,OAAO,OAAO,EAAE,CAAC,IAAI,CAAC,MAAM;AAC9B,CAAC,CAID,CAAC;AACD;AACA;AACA,SAAS,OAAO,CAAC,UAAU,EAAE,OAAO,EAAE;AACtC,CAAC,UAAU,CAAC,SAAS,CAAC,CAAC,UAAU,KAAK;AACtC,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC,SAAS,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,EAAE,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC;AACpG,CAAC,CAAC,CAAC;AACH;;;;"}
@@ -0,0 +1,478 @@
1
+ import { _ as __require } from './index.js-N7Sh42pC.js';
2
+ import { r as readConfig, b as getProviderForModel, d as getActiveModel, e as createProvider, c as createStorage, s as sessionLock, T as ToolRegistry, C as CORE_TOOLS, S as SCHEDULING_TOOLS, h as createSearchHistoryTool, i as ContextBuilder, f as getContextWindow, A as AgentLoop, j as AgentLogger, a as getDataPath, g as getDataDir } from './config-d3FC8naq.js';
3
+ import { existsSync, readFileSync, mkdirSync, writeFileSync, renameSync } from 'node:fs';
4
+
5
+ //#region ../core/dist/gateway/dispatcher.js
6
+ var GatewayDispatcher = class {
7
+ adapters = /* @__PURE__ */ new Map();
8
+ started = false;
9
+ inboundHandler = null;
10
+ onInbound(handler) {
11
+ this.inboundHandler = handler;
12
+ for (const adapter of this.adapters.values()) if (adapter.capabilities.receive) this.setupAdapterMessageHandler(adapter);
13
+ }
14
+ register(adapter) {
15
+ this.adapters.set(adapter.name, adapter);
16
+ if (adapter.capabilities.receive && this.inboundHandler) this.setupAdapterMessageHandler(adapter);
17
+ }
18
+ setupAdapterMessageHandler(adapter) {
19
+ const handler = this.inboundHandler;
20
+ adapter.onMessage = async (msg) => {
21
+ await handler(msg, adapter, async (text) => {
22
+ await adapter.send(msg.chatId, text);
23
+ });
24
+ };
25
+ }
26
+ unregister(name) {
27
+ this.adapters.delete(name);
28
+ }
29
+ async start() {
30
+ if (this.started) return;
31
+ this.started = true;
32
+ for (const [name, adapter] of this.adapters) try {
33
+ if (!await adapter.connect()) console.error(`[gateway] ${name} connect failed`);
34
+ } catch (e) {
35
+ console.error(`[gateway] ${name} connect error:`, e.message);
36
+ }
37
+ }
38
+ async stop() {
39
+ this.started = false;
40
+ for (const [, adapter] of this.adapters) try {
41
+ await adapter.disconnect();
42
+ } catch {}
43
+ }
44
+ async notify(notification, options) {
45
+ for (const [, adapter] of this.adapters) {
46
+ if (!adapter.capabilities.notify) continue;
47
+ if (options?.adapterFilter && !options.adapterFilter(adapter)) continue;
48
+ try {
49
+ const target = options?.chatId ?? "";
50
+ const text = `**${notification.title}**\n\n${notification.body}`;
51
+ await adapter.send(target, text);
52
+ } catch (e) {
53
+ console.error(`[gateway] notify via ${adapter.name} failed:`, e.message);
54
+ }
55
+ }
56
+ }
57
+ async send(adapterName, chatId, text) {
58
+ const adapter = this.adapters.get(adapterName);
59
+ if (!adapter) return false;
60
+ return (await adapter.send(chatId, text)).success;
61
+ }
62
+ };
63
+ //#endregion
64
+ //#region ../core/dist/gateway/adapters/email.js
65
+ async function sendSmtp(config, subject, body) {
66
+ const { smtpHost, smtpPort, smtpSecure, user, password, from, to } = config;
67
+ const auth = Buffer.from(`\x00${user}\x00${password}`).toString("base64");
68
+ const socket = await new Promise((resolve, reject) => {
69
+ const s = (smtpSecure ? __require("node:tls") : __require("node:net")).connect({
70
+ host: smtpHost,
71
+ port: smtpPort,
72
+ servername: smtpHost
73
+ }, () => {
74
+ let buffer = "";
75
+ resolve({
76
+ write: (d) => s.write(d),
77
+ close: () => s.end(),
78
+ onData: (cb) => {
79
+ s.on("data", (data) => {
80
+ buffer += data.toString();
81
+ cb(buffer);
82
+ });
83
+ },
84
+ onError: (cb) => {
85
+ s.on("error", cb);
86
+ }
87
+ });
88
+ });
89
+ s.once("error", reject);
90
+ setTimeout(() => reject(/* @__PURE__ */ new Error("SMTP connect timeout")), 15e3);
91
+ });
92
+ return new Promise((resolve) => {
93
+ let step = 0;
94
+ const commands = [
95
+ `EHLO qualia\r\n`,
96
+ `AUTH PLAIN ${auth}\r\n`,
97
+ `MAIL FROM:<${from}>\r\n`,
98
+ `RCPT TO:<${to}>\r\n`,
99
+ `DATA\r\n`,
100
+ buildMailContent(from, to, subject, body),
101
+ `QUIT\r\n`
102
+ ];
103
+ socket.onData((data) => {
104
+ const code = parseInt(data.slice(0, 3), 10);
105
+ if (code >= 400) {
106
+ socket.close();
107
+ resolve({
108
+ success: false,
109
+ error: `SMTP error ${code}: ${data.slice(4, 100)}`
110
+ });
111
+ return;
112
+ }
113
+ if (step === 0 && code === 220) step = 1;
114
+ else if (step === 1 && code === 250) step = 2;
115
+ else if (step === 2 && (code === 235 || code === 334)) step = 3;
116
+ else if (step === 3 && code === 250) step = 4;
117
+ else if (step === 4 && code === 250) step = 5;
118
+ else if (step === 5 && code === 354) step = 6;
119
+ else if (step === 6 && code === 250) {
120
+ socket.close();
121
+ resolve({ success: true });
122
+ return;
123
+ }
124
+ if (step < commands.length) {
125
+ socket.write(commands[step]);
126
+ if (step === 5) step = 6;
127
+ } else if (step === 6 && code === 250) {
128
+ socket.close();
129
+ resolve({ success: true });
130
+ }
131
+ });
132
+ socket.onError((e) => {
133
+ resolve({
134
+ success: false,
135
+ error: e.message
136
+ });
137
+ });
138
+ setTimeout(() => {
139
+ socket.close();
140
+ resolve({
141
+ success: false,
142
+ error: "SMTP timeout"
143
+ });
144
+ }, 3e4);
145
+ });
146
+ }
147
+ function buildMailContent(from, to, subject, body) {
148
+ const html = `<!DOCTYPE html>
149
+ <html>
150
+ <head><meta charset="utf-8"></head>
151
+ <body style="font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; color: #333;">
152
+ <div style="border-left: 4px solid #6366f1; padding-left: 16px; margin-bottom: 24px;">
153
+ <h2 style="margin: 0 0 8px 0; color: #1e1b4b;">${escapeHtml(subject)}</h2>
154
+ <p style="margin: 0; color: #666; font-size: 13px;">Qualia AI 助手通知</p>
155
+ </div>
156
+ <div style="background: #f8fafc; border-radius: 8px; padding: 20px; line-height: 1.6;">
157
+ ${body.split("\n").map((line) => `<p style="margin: 0 0 8px 0;">${escapeHtml(line) || "&nbsp;"}</p>`).join("")}
158
+ </div>
159
+ <hr style="border: none; border-top: 1px solid #e2e8f0; margin: 24px 0;">
160
+ <p style="color: #94a3b8; font-size: 12px;">此邮件由 Qualia 自动发送。如需调整通知设置,请前往 Qualia 设置页面。</p>
161
+ </body>
162
+ </html>`;
163
+ return [
164
+ `From: ${from}`,
165
+ `To: ${to}`,
166
+ `Subject: =?UTF-8?B?${Buffer.from(subject, "utf-8").toString("base64")}?=`,
167
+ `MIME-Version: 1.0`,
168
+ `Content-Type: text/html; charset=utf-8`,
169
+ `Content-Transfer-Encoding: base64`,
170
+ "",
171
+ Buffer.from(html, "utf-8").toString("base64"),
172
+ "",
173
+ ".",
174
+ ""
175
+ ].join("\r\n");
176
+ }
177
+ function escapeHtml(s) {
178
+ return s.replace(/&/g, "&amp;").replace(/</g, "&lt;").replace(/>/g, "&gt;").replace(/"/g, "&quot;");
179
+ }
180
+ var EmailAdapter = class {
181
+ name = "email";
182
+ capabilities = {
183
+ receive: false,
184
+ notify: true
185
+ };
186
+ config;
187
+ connected = false;
188
+ onMessage;
189
+ onError;
190
+ constructor(config) {
191
+ this.config = config;
192
+ }
193
+ async connect() {
194
+ if (this.connected) return true;
195
+ try {
196
+ const result = await sendSmtp(this.config, "Qualia 网关已上线", "Email 通知适配器已成功连接。您将在任务完成时收到通知。");
197
+ this.connected = result.success;
198
+ return result.success;
199
+ } catch (e) {
200
+ this.onError?.(e);
201
+ return false;
202
+ }
203
+ }
204
+ async disconnect() {
205
+ this.connected = false;
206
+ }
207
+ async send(_chatId, text) {
208
+ if (!this.connected) return {
209
+ success: false,
210
+ error: "未连接"
211
+ };
212
+ const lines = text.split("\n");
213
+ const subject = lines[0].replace(/^\*?\*?(.+?)\*?\*?$/, "$1") || "Qualia 通知";
214
+ const body = lines.slice(1).join("\n").trim() || text;
215
+ return sendSmtp(this.config, subject, body);
216
+ }
217
+ };
218
+ //#endregion
219
+ //#region ../core/dist/gateway/adapters/telegram.js
220
+ var POLL_INTERVAL = 2e3;
221
+ async function apiCall(token, method, body) {
222
+ const url = `https://api.telegram.org/bot${token}/${method}`;
223
+ return (await fetch(url, {
224
+ method: "POST",
225
+ headers: { "Content-Type": "application/json" },
226
+ body: body ? JSON.stringify(body) : void 0
227
+ })).json();
228
+ }
229
+ var TelegramAdapter = class {
230
+ name = "telegram";
231
+ capabilities = {
232
+ receive: true,
233
+ notify: true
234
+ };
235
+ config;
236
+ pollTimer = null;
237
+ lastUpdateId = 0;
238
+ connected = false;
239
+ onMessage;
240
+ onError;
241
+ constructor(config) {
242
+ this.config = config;
243
+ }
244
+ async connect() {
245
+ if (this.connected) return true;
246
+ try {
247
+ const me = await apiCall(this.config.botToken, "getMe");
248
+ if (!me.ok || !me.result) {
249
+ console.error("[telegram] getMe failed:", JSON.stringify(me));
250
+ return false;
251
+ }
252
+ console.log(`[telegram] connected as @${me.result.username}`);
253
+ this.connected = true;
254
+ this.pollTimer = setInterval(() => this.poll(), POLL_INTERVAL);
255
+ this.poll();
256
+ return true;
257
+ } catch (e) {
258
+ console.error("[telegram] connect error:", e.message);
259
+ return false;
260
+ }
261
+ }
262
+ async disconnect() {
263
+ this.connected = false;
264
+ if (this.pollTimer) {
265
+ clearInterval(this.pollTimer);
266
+ this.pollTimer = null;
267
+ }
268
+ }
269
+ async send(chatId, text) {
270
+ if (!chatId || chatId === "default") return {
271
+ success: false,
272
+ error: "missing chatId"
273
+ };
274
+ try {
275
+ const result = await apiCall(this.config.botToken, "sendMessage", {
276
+ chat_id: chatId,
277
+ text
278
+ });
279
+ if (result.ok) return {
280
+ success: true,
281
+ messageId: String(result.result?.message_id || "")
282
+ };
283
+ return {
284
+ success: false,
285
+ error: result.description || "sendMessage failed"
286
+ };
287
+ } catch (e) {
288
+ return {
289
+ success: false,
290
+ error: e.message
291
+ };
292
+ }
293
+ }
294
+ isAllowed(chatId) {
295
+ const allowed = this.config.allowedUsers.trim();
296
+ if (!allowed) return false;
297
+ return allowed.split(",").map((s) => s.trim()).includes(chatId);
298
+ }
299
+ async poll() {
300
+ if (!this.connected) return;
301
+ try {
302
+ const result = await apiCall(this.config.botToken, "getUpdates", {
303
+ offset: this.lastUpdateId + 1,
304
+ timeout: 10,
305
+ allowed_updates: ["message"]
306
+ });
307
+ if (!result.ok) {
308
+ console.error("[telegram] getUpdates failed:", JSON.stringify(result));
309
+ return;
310
+ }
311
+ if (!result.result || result.result.length === 0) return;
312
+ console.log(`[telegram] got ${result.result.length} update(s)`);
313
+ for (const update of result.result) {
314
+ this.lastUpdateId = update.update_id;
315
+ const msg = update.message;
316
+ if (!msg?.text || !msg.chat?.id) {
317
+ console.log("[telegram] skipping non-text message");
318
+ continue;
319
+ }
320
+ const chatId = String(msg.chat.id);
321
+ console.log(`[telegram] message from chat ${chatId}: "${msg.text.slice(0, 50)}"`);
322
+ if (!this.isAllowed(chatId)) {
323
+ console.log(`[telegram] chat ${chatId} not in allowed list`);
324
+ const hint = !this.config.allowedUsers.trim() ? "未配置 Allowed Users。请在 Qualia 设置中填写 Telegram Bot Token 后,将你的 Chat ID 加入 Allowed Users。" : "你没有权限使用此 Bot。";
325
+ await this.send(chatId, hint);
326
+ continue;
327
+ }
328
+ if (!this.onMessage) {
329
+ console.error("[telegram] onMessage handler not set!");
330
+ continue;
331
+ }
332
+ const inbound = {
333
+ chatId,
334
+ text: msg.text,
335
+ messageId: String(msg.message_id),
336
+ timestamp: msg.date * 1e3
337
+ };
338
+ console.log("[telegram] calling onMessage handler");
339
+ await this.onMessage(inbound);
340
+ console.log("[telegram] onMessage handler returned");
341
+ }
342
+ } catch (e) {
343
+ console.error("[telegram] poll error:", e.message);
344
+ }
345
+ }
346
+ };
347
+ //#endregion
348
+ //#region ../core/dist/gateway/adapters/telegram-sessions.js
349
+ function getPath() {
350
+ return getDataPath("telegram-sessions.json");
351
+ }
352
+ function readBindings() {
353
+ const path = getPath();
354
+ if (!existsSync(path)) return { bindings: {} };
355
+ try {
356
+ return JSON.parse(readFileSync(path, "utf-8"));
357
+ } catch {
358
+ return { bindings: {} };
359
+ }
360
+ }
361
+ function writeBindings(store) {
362
+ const path = getPath();
363
+ const dir = getDataDir();
364
+ if (!existsSync(dir)) mkdirSync(dir, { recursive: true });
365
+ const tmpPath = path + ".tmp";
366
+ writeFileSync(tmpPath, JSON.stringify(store, null, " "), "utf-8");
367
+ renameSync(tmpPath, path);
368
+ }
369
+ function getBoundSession(chatId) {
370
+ return readBindings().bindings[String(chatId)] || null;
371
+ }
372
+ function setBoundSession(chatId, sessionId) {
373
+ const store = readBindings();
374
+ store.bindings[String(chatId)] = sessionId;
375
+ writeBindings(store);
376
+ }
377
+ function getAllChatIds() {
378
+ const store = readBindings();
379
+ return Object.keys(store.bindings);
380
+ }
381
+ //#endregion
382
+ //#region ../core/dist/gateway/inbound-handler.js
383
+ function createInboundHandler() {
384
+ return async (msg, adapter, reply) => {
385
+ console.log(`[gateway] inbound from ${adapter.name} chat ${msg.chatId}: "${msg.text.slice(0, 50)}"`);
386
+ let release;
387
+ try {
388
+ const cfg = readConfig();
389
+ if (!cfg.activeModel) {
390
+ console.log("[gateway] no active model configured");
391
+ await reply("未配置 AI 模型,请先在 Qualia 设置中添加供应商。");
392
+ return;
393
+ }
394
+ const providerConfig = getProviderForModel(cfg.activeModel);
395
+ if (!providerConfig) {
396
+ console.log("[gateway] provider config not found");
397
+ await reply("未找到对应模型的供应商配置。");
398
+ return;
399
+ }
400
+ const model = getActiveModel();
401
+ const provider = createProvider({
402
+ ...providerConfig,
403
+ activeModel: model?.id || cfg.activeModel,
404
+ contextWindow: model?.contextWindow || 1048576
405
+ });
406
+ const storage = createStorage({ enabled: cfg.storageEnabled });
407
+ let sessionId = getBoundSession(msg.chatId);
408
+ console.log(`[gateway] resolved session: ${sessionId || "(null)"}`);
409
+ if (!sessionId) {
410
+ const recent = await storage.getMostRecentSession();
411
+ if (recent) sessionId = recent.id;
412
+ else sessionId = (await storage.createSession()).id;
413
+ setBoundSession(msg.chatId, sessionId);
414
+ } else if (!await storage.getSession(sessionId)) {
415
+ const recent = await storage.getMostRecentSession();
416
+ if (recent) sessionId = recent.id;
417
+ else sessionId = (await storage.createSession()).id;
418
+ setBoundSession(msg.chatId, sessionId);
419
+ }
420
+ console.log(`[gateway] using session: ${sessionId}`);
421
+ release = await sessionLock.acquire(sessionId);
422
+ const registry = new ToolRegistry();
423
+ for (const t of CORE_TOOLS) registry.register(t);
424
+ for (const t of SCHEDULING_TOOLS) registry.register(t);
425
+ registry.register(createSearchHistoryTool(storage));
426
+ const buildResult = await new ContextBuilder().build(sessionId, msg.text, [], storage, getContextWindow(), cfg.systemPrompt);
427
+ const agent = new AgentLoop(provider, storage, registry, async () => false, void 0, new AgentLogger(sessionId), cfg.compressionMode, cfg.compressionThreshold);
428
+ let fullText = "";
429
+ let forkedId;
430
+ console.log("[gateway] starting AgentLoop");
431
+ for await (const event of agent.run(sessionId, msg.text, buildResult)) if (event.type === "content") fullText += event.text;
432
+ else if (event.type === "forked") forkedId = event.newSessionId;
433
+ console.log(`[gateway] AgentLoop done, response length: ${fullText.length}, forked: ${forkedId || "none"}`);
434
+ if (forkedId) setBoundSession(msg.chatId, forkedId);
435
+ await reply(fullText.trim() || "(无输出)");
436
+ } catch (e) {
437
+ console.error("[gateway] inbound error:", e.message);
438
+ await reply(`错误: ${e.message}`);
439
+ } finally {
440
+ if (release) release();
441
+ }
442
+ };
443
+ }
444
+ //#endregion
445
+ //#region ../core/dist/gateway/lifecycle.js
446
+ function initGateway() {
447
+ const config = readConfig();
448
+ const gateway = new GatewayDispatcher();
449
+ const emailConfig = {
450
+ smtpHost: config.emailSmtpHost,
451
+ smtpPort: config.emailSmtpPort,
452
+ smtpSecure: config.emailSmtpSecure,
453
+ user: config.emailSmtpUser,
454
+ password: config.emailSmtpPass,
455
+ from: config.emailFrom,
456
+ to: config.emailTo
457
+ };
458
+ if (config.emailNotifications && emailConfig.smtpHost && emailConfig.user && emailConfig.to) {
459
+ const email = new EmailAdapter(emailConfig);
460
+ gateway.register(email);
461
+ }
462
+ if (config.telegramEnabled && config.telegramBotToken) {
463
+ const telegram = new TelegramAdapter({
464
+ botToken: config.telegramBotToken,
465
+ allowedUsers: config.telegramAllowedUsers || ""
466
+ });
467
+ gateway.register(telegram);
468
+ }
469
+ if (emailConfig.smtpHost || config.telegramBotToken) {
470
+ gateway.onInbound(createInboundHandler());
471
+ gateway.start();
472
+ return gateway;
473
+ }
474
+ return null;
475
+ }
476
+
477
+ export { EmailAdapter as E, getAllChatIds as g, initGateway as i };
478
+ //# sourceMappingURL=gateway-DWcUFfHo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gateway-DWcUFfHo.js","sources":["../../../.svelte-kit/output/server/chunks/gateway.js"],"sourcesContent":["import { n as __require } from \"./chunk.js\";\nimport { A as createProvider, D as getDataDir, E as sessionLock, O as getDataPath, _ as SCHEDULING_TOOLS, a as getProviderForModel, f as AgentLogger, g as CORE_TOOLS, h as AgentLoop, i as getContextWindow, k as ToolRegistry, m as ContextBuilder, n as getActiveModel, o as readConfig, v as createSearchHistoryTool, x as createStorage } from \"./config.js\";\nimport { existsSync, mkdirSync, readFileSync, renameSync, writeFileSync } from \"node:fs\";\n//#region ../core/dist/gateway/dispatcher.js\nvar GatewayDispatcher = class {\n\tadapters = /* @__PURE__ */ new Map();\n\tstarted = false;\n\tinboundHandler = null;\n\tonInbound(handler) {\n\t\tthis.inboundHandler = handler;\n\t\tfor (const adapter of this.adapters.values()) if (adapter.capabilities.receive) this.setupAdapterMessageHandler(adapter);\n\t}\n\tregister(adapter) {\n\t\tthis.adapters.set(adapter.name, adapter);\n\t\tif (adapter.capabilities.receive && this.inboundHandler) this.setupAdapterMessageHandler(adapter);\n\t}\n\tsetupAdapterMessageHandler(adapter) {\n\t\tconst handler = this.inboundHandler;\n\t\tadapter.onMessage = async (msg) => {\n\t\t\tawait handler(msg, adapter, async (text) => {\n\t\t\t\tawait adapter.send(msg.chatId, text);\n\t\t\t});\n\t\t};\n\t}\n\tunregister(name) {\n\t\tthis.adapters.delete(name);\n\t}\n\tasync start() {\n\t\tif (this.started) return;\n\t\tthis.started = true;\n\t\tfor (const [name, adapter] of this.adapters) try {\n\t\t\tif (!await adapter.connect()) console.error(`[gateway] ${name} connect failed`);\n\t\t} catch (e) {\n\t\t\tconsole.error(`[gateway] ${name} connect error:`, e.message);\n\t\t}\n\t}\n\tasync stop() {\n\t\tthis.started = false;\n\t\tfor (const [, adapter] of this.adapters) try {\n\t\t\tawait adapter.disconnect();\n\t\t} catch {}\n\t}\n\tasync notify(notification, options) {\n\t\tfor (const [, adapter] of this.adapters) {\n\t\t\tif (!adapter.capabilities.notify) continue;\n\t\t\tif (options?.adapterFilter && !options.adapterFilter(adapter)) continue;\n\t\t\ttry {\n\t\t\t\tconst target = options?.chatId ?? \"\";\n\t\t\t\tconst text = `**${notification.title}**\\n\\n${notification.body}`;\n\t\t\t\tawait adapter.send(target, text);\n\t\t\t} catch (e) {\n\t\t\t\tconsole.error(`[gateway] notify via ${adapter.name} failed:`, e.message);\n\t\t\t}\n\t\t}\n\t}\n\tasync send(adapterName, chatId, text) {\n\t\tconst adapter = this.adapters.get(adapterName);\n\t\tif (!adapter) return false;\n\t\treturn (await adapter.send(chatId, text)).success;\n\t}\n};\n//#endregion\n//#region ../core/dist/gateway/adapters/email.js\nasync function sendSmtp(config, subject, body) {\n\tconst { smtpHost, smtpPort, smtpSecure, user, password, from, to } = config;\n\tconst auth = Buffer.from(`\\x00${user}\\x00${password}`).toString(\"base64\");\n\tconst socket = await new Promise((resolve, reject) => {\n\t\tconst s = (smtpSecure ? __require(\"node:tls\") : __require(\"node:net\")).connect({\n\t\t\thost: smtpHost,\n\t\t\tport: smtpPort,\n\t\t\tservername: smtpHost\n\t\t}, () => {\n\t\t\tlet buffer = \"\";\n\t\t\tresolve({\n\t\t\t\twrite: (d) => s.write(d),\n\t\t\t\tclose: () => s.end(),\n\t\t\t\tonData: (cb) => {\n\t\t\t\t\ts.on(\"data\", (data) => {\n\t\t\t\t\t\tbuffer += data.toString();\n\t\t\t\t\t\tcb(buffer);\n\t\t\t\t\t});\n\t\t\t\t},\n\t\t\t\tonError: (cb) => {\n\t\t\t\t\ts.on(\"error\", cb);\n\t\t\t\t}\n\t\t\t});\n\t\t});\n\t\ts.once(\"error\", reject);\n\t\tsetTimeout(() => reject(/* @__PURE__ */ new Error(\"SMTP connect timeout\")), 15e3);\n\t});\n\treturn new Promise((resolve) => {\n\t\tlet step = 0;\n\t\tconst commands = [\n\t\t\t`EHLO qualia\\r\\n`,\n\t\t\t`AUTH PLAIN ${auth}\\r\\n`,\n\t\t\t`MAIL FROM:<${from}>\\r\\n`,\n\t\t\t`RCPT TO:<${to}>\\r\\n`,\n\t\t\t`DATA\\r\\n`,\n\t\t\tbuildMailContent(from, to, subject, body),\n\t\t\t`QUIT\\r\\n`\n\t\t];\n\t\tsocket.onData((data) => {\n\t\t\tconst code = parseInt(data.slice(0, 3), 10);\n\t\t\tif (code >= 400) {\n\t\t\t\tsocket.close();\n\t\t\t\tresolve({\n\t\t\t\t\tsuccess: false,\n\t\t\t\t\terror: `SMTP error ${code}: ${data.slice(4, 100)}`\n\t\t\t\t});\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (step === 0 && code === 220) step = 1;\n\t\t\telse if (step === 1 && code === 250) step = 2;\n\t\t\telse if (step === 2 && (code === 235 || code === 334)) step = 3;\n\t\t\telse if (step === 3 && code === 250) step = 4;\n\t\t\telse if (step === 4 && code === 250) step = 5;\n\t\t\telse if (step === 5 && code === 354) step = 6;\n\t\t\telse if (step === 6 && code === 250) {\n\t\t\t\tsocket.close();\n\t\t\t\tresolve({ success: true });\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (step < commands.length) {\n\t\t\t\tsocket.write(commands[step]);\n\t\t\t\tif (step === 5) step = 6;\n\t\t\t} else if (step === 6 && code === 250) {\n\t\t\t\tsocket.close();\n\t\t\t\tresolve({ success: true });\n\t\t\t}\n\t\t});\n\t\tsocket.onError((e) => {\n\t\t\tresolve({\n\t\t\t\tsuccess: false,\n\t\t\t\terror: e.message\n\t\t\t});\n\t\t});\n\t\tsetTimeout(() => {\n\t\t\tsocket.close();\n\t\t\tresolve({\n\t\t\t\tsuccess: false,\n\t\t\t\terror: \"SMTP timeout\"\n\t\t\t});\n\t\t}, 3e4);\n\t});\n}\nfunction buildMailContent(from, to, subject, body) {\n\tconst html = `<!DOCTYPE html>\n<html>\n<head><meta charset=\"utf-8\"></head>\n<body style=\"font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', sans-serif; max-width: 600px; margin: 0 auto; padding: 20px; color: #333;\">\n<div style=\"border-left: 4px solid #6366f1; padding-left: 16px; margin-bottom: 24px;\">\n<h2 style=\"margin: 0 0 8px 0; color: #1e1b4b;\">${escapeHtml(subject)}</h2>\n<p style=\"margin: 0; color: #666; font-size: 13px;\">Qualia AI 助手通知</p>\n</div>\n<div style=\"background: #f8fafc; border-radius: 8px; padding: 20px; line-height: 1.6;\">\n${body.split(\"\\n\").map((line) => `<p style=\"margin: 0 0 8px 0;\">${escapeHtml(line) || \"&nbsp;\"}</p>`).join(\"\")}\n</div>\n<hr style=\"border: none; border-top: 1px solid #e2e8f0; margin: 24px 0;\">\n<p style=\"color: #94a3b8; font-size: 12px;\">此邮件由 Qualia 自动发送。如需调整通知设置,请前往 Qualia 设置页面。</p>\n</body>\n</html>`;\n\treturn [\n\t\t`From: ${from}`,\n\t\t`To: ${to}`,\n\t\t`Subject: =?UTF-8?B?${Buffer.from(subject, \"utf-8\").toString(\"base64\")}?=`,\n\t\t`MIME-Version: 1.0`,\n\t\t`Content-Type: text/html; charset=utf-8`,\n\t\t`Content-Transfer-Encoding: base64`,\n\t\t\"\",\n\t\tBuffer.from(html, \"utf-8\").toString(\"base64\"),\n\t\t\"\",\n\t\t\".\",\n\t\t\"\"\n\t].join(\"\\r\\n\");\n}\nfunction escapeHtml(s) {\n\treturn s.replace(/&/g, \"&amp;\").replace(/</g, \"&lt;\").replace(/>/g, \"&gt;\").replace(/\"/g, \"&quot;\");\n}\nvar EmailAdapter = class {\n\tname = \"email\";\n\tcapabilities = {\n\t\treceive: false,\n\t\tnotify: true\n\t};\n\tconfig;\n\tconnected = false;\n\tonMessage;\n\tonError;\n\tconstructor(config) {\n\t\tthis.config = config;\n\t}\n\tasync connect() {\n\t\tif (this.connected) return true;\n\t\ttry {\n\t\t\tconst result = await sendSmtp(this.config, \"Qualia 网关已上线\", \"Email 通知适配器已成功连接。您将在任务完成时收到通知。\");\n\t\t\tthis.connected = result.success;\n\t\t\treturn result.success;\n\t\t} catch (e) {\n\t\t\tthis.onError?.(e);\n\t\t\treturn false;\n\t\t}\n\t}\n\tasync disconnect() {\n\t\tthis.connected = false;\n\t}\n\tasync send(_chatId, text) {\n\t\tif (!this.connected) return {\n\t\t\tsuccess: false,\n\t\t\terror: \"未连接\"\n\t\t};\n\t\tconst lines = text.split(\"\\n\");\n\t\tconst subject = lines[0].replace(/^\\*?\\*?(.+?)\\*?\\*?$/, \"$1\") || \"Qualia 通知\";\n\t\tconst body = lines.slice(1).join(\"\\n\").trim() || text;\n\t\treturn sendSmtp(this.config, subject, body);\n\t}\n};\n//#endregion\n//#region ../core/dist/gateway/adapters/telegram.js\nvar POLL_INTERVAL = 2e3;\nasync function apiCall(token, method, body) {\n\tconst url = `https://api.telegram.org/bot${token}/${method}`;\n\treturn (await fetch(url, {\n\t\tmethod: \"POST\",\n\t\theaders: { \"Content-Type\": \"application/json\" },\n\t\tbody: body ? JSON.stringify(body) : void 0\n\t})).json();\n}\nvar TelegramAdapter = class {\n\tname = \"telegram\";\n\tcapabilities = {\n\t\treceive: true,\n\t\tnotify: true\n\t};\n\tconfig;\n\tpollTimer = null;\n\tlastUpdateId = 0;\n\tconnected = false;\n\tonMessage;\n\tonError;\n\tconstructor(config) {\n\t\tthis.config = config;\n\t}\n\tasync connect() {\n\t\tif (this.connected) return true;\n\t\ttry {\n\t\t\tconst me = await apiCall(this.config.botToken, \"getMe\");\n\t\t\tif (!me.ok || !me.result) {\n\t\t\t\tconsole.error(\"[telegram] getMe failed:\", JSON.stringify(me));\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\tconsole.log(`[telegram] connected as @${me.result.username}`);\n\t\t\tthis.connected = true;\n\t\t\tthis.pollTimer = setInterval(() => this.poll(), POLL_INTERVAL);\n\t\t\tthis.poll();\n\t\t\treturn true;\n\t\t} catch (e) {\n\t\t\tconsole.error(\"[telegram] connect error:\", e.message);\n\t\t\treturn false;\n\t\t}\n\t}\n\tasync disconnect() {\n\t\tthis.connected = false;\n\t\tif (this.pollTimer) {\n\t\t\tclearInterval(this.pollTimer);\n\t\t\tthis.pollTimer = null;\n\t\t}\n\t}\n\tasync send(chatId, text) {\n\t\tif (!chatId || chatId === \"default\") return {\n\t\t\tsuccess: false,\n\t\t\terror: \"missing chatId\"\n\t\t};\n\t\ttry {\n\t\t\tconst result = await apiCall(this.config.botToken, \"sendMessage\", {\n\t\t\t\tchat_id: chatId,\n\t\t\t\ttext\n\t\t\t});\n\t\t\tif (result.ok) return {\n\t\t\t\tsuccess: true,\n\t\t\t\tmessageId: String(result.result?.message_id || \"\")\n\t\t\t};\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: result.description || \"sendMessage failed\"\n\t\t\t};\n\t\t} catch (e) {\n\t\t\treturn {\n\t\t\t\tsuccess: false,\n\t\t\t\terror: e.message\n\t\t\t};\n\t\t}\n\t}\n\tisAllowed(chatId) {\n\t\tconst allowed = this.config.allowedUsers.trim();\n\t\tif (!allowed) return false;\n\t\treturn allowed.split(\",\").map((s) => s.trim()).includes(chatId);\n\t}\n\tasync poll() {\n\t\tif (!this.connected) return;\n\t\ttry {\n\t\t\tconst result = await apiCall(this.config.botToken, \"getUpdates\", {\n\t\t\t\toffset: this.lastUpdateId + 1,\n\t\t\t\ttimeout: 10,\n\t\t\t\tallowed_updates: [\"message\"]\n\t\t\t});\n\t\t\tif (!result.ok) {\n\t\t\t\tconsole.error(\"[telegram] getUpdates failed:\", JSON.stringify(result));\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif (!result.result || result.result.length === 0) return;\n\t\t\tconsole.log(`[telegram] got ${result.result.length} update(s)`);\n\t\t\tfor (const update of result.result) {\n\t\t\t\tthis.lastUpdateId = update.update_id;\n\t\t\t\tconst msg = update.message;\n\t\t\t\tif (!msg?.text || !msg.chat?.id) {\n\t\t\t\t\tconsole.log(\"[telegram] skipping non-text message\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst chatId = String(msg.chat.id);\n\t\t\t\tconsole.log(`[telegram] message from chat ${chatId}: \"${msg.text.slice(0, 50)}\"`);\n\t\t\t\tif (!this.isAllowed(chatId)) {\n\t\t\t\t\tconsole.log(`[telegram] chat ${chatId} not in allowed list`);\n\t\t\t\t\tconst hint = !this.config.allowedUsers.trim() ? \"未配置 Allowed Users。请在 Qualia 设置中填写 Telegram Bot Token 后,将你的 Chat ID 加入 Allowed Users。\" : \"你没有权限使用此 Bot。\";\n\t\t\t\t\tawait this.send(chatId, hint);\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tif (!this.onMessage) {\n\t\t\t\t\tconsole.error(\"[telegram] onMessage handler not set!\");\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tconst inbound = {\n\t\t\t\t\tchatId,\n\t\t\t\t\ttext: msg.text,\n\t\t\t\t\tmessageId: String(msg.message_id),\n\t\t\t\t\ttimestamp: msg.date * 1e3\n\t\t\t\t};\n\t\t\t\tconsole.log(\"[telegram] calling onMessage handler\");\n\t\t\t\tawait this.onMessage(inbound);\n\t\t\t\tconsole.log(\"[telegram] onMessage handler returned\");\n\t\t\t}\n\t\t} catch (e) {\n\t\t\tconsole.error(\"[telegram] poll error:\", e.message);\n\t\t}\n\t}\n};\n//#endregion\n//#region ../core/dist/gateway/adapters/telegram-sessions.js\nfunction getPath() {\n\treturn getDataPath(\"telegram-sessions.json\");\n}\nfunction readBindings() {\n\tconst path = getPath();\n\tif (!existsSync(path)) return { bindings: {} };\n\ttry {\n\t\treturn JSON.parse(readFileSync(path, \"utf-8\"));\n\t} catch {\n\t\treturn { bindings: {} };\n\t}\n}\nfunction writeBindings(store) {\n\tconst path = getPath();\n\tconst dir = getDataDir();\n\tif (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n\tconst tmpPath = path + \".tmp\";\n\twriteFileSync(tmpPath, JSON.stringify(store, null, \"\t\"), \"utf-8\");\n\trenameSync(tmpPath, path);\n}\nfunction getBoundSession(chatId) {\n\treturn readBindings().bindings[String(chatId)] || null;\n}\nfunction setBoundSession(chatId, sessionId) {\n\tconst store = readBindings();\n\tstore.bindings[String(chatId)] = sessionId;\n\twriteBindings(store);\n}\nfunction getAllChatIds() {\n\tconst store = readBindings();\n\treturn Object.keys(store.bindings);\n}\n//#endregion\n//#region ../core/dist/gateway/inbound-handler.js\nfunction createInboundHandler() {\n\treturn async (msg, adapter, reply) => {\n\t\tconsole.log(`[gateway] inbound from ${adapter.name} chat ${msg.chatId}: \"${msg.text.slice(0, 50)}\"`);\n\t\tlet release;\n\t\ttry {\n\t\t\tconst cfg = readConfig();\n\t\t\tif (!cfg.activeModel) {\n\t\t\t\tconsole.log(\"[gateway] no active model configured\");\n\t\t\t\tawait reply(\"未配置 AI 模型,请先在 Qualia 设置中添加供应商。\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst providerConfig = getProviderForModel(cfg.activeModel);\n\t\t\tif (!providerConfig) {\n\t\t\t\tconsole.log(\"[gateway] provider config not found\");\n\t\t\t\tawait reply(\"未找到对应模型的供应商配置。\");\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tconst model = getActiveModel();\n\t\t\tconst provider = createProvider({\n\t\t\t\t...providerConfig,\n\t\t\t\tactiveModel: model?.id || cfg.activeModel,\n\t\t\t\tcontextWindow: model?.contextWindow || 1048576\n\t\t\t});\n\t\t\tconst storage = createStorage({ enabled: cfg.storageEnabled });\n\t\t\tlet sessionId = getBoundSession(msg.chatId);\n\t\t\tconsole.log(`[gateway] resolved session: ${sessionId || \"(null)\"}`);\n\t\t\tif (!sessionId) {\n\t\t\t\tconst recent = await storage.getMostRecentSession();\n\t\t\t\tif (recent) sessionId = recent.id;\n\t\t\t\telse sessionId = (await storage.createSession()).id;\n\t\t\t\tsetBoundSession(msg.chatId, sessionId);\n\t\t\t} else if (!await storage.getSession(sessionId)) {\n\t\t\t\tconst recent = await storage.getMostRecentSession();\n\t\t\t\tif (recent) sessionId = recent.id;\n\t\t\t\telse sessionId = (await storage.createSession()).id;\n\t\t\t\tsetBoundSession(msg.chatId, sessionId);\n\t\t\t}\n\t\t\tconsole.log(`[gateway] using session: ${sessionId}`);\n\t\t\trelease = await sessionLock.acquire(sessionId);\n\t\t\tconst registry = new ToolRegistry();\n\t\t\tfor (const t of CORE_TOOLS) registry.register(t);\n\t\t\tfor (const t of SCHEDULING_TOOLS) registry.register(t);\n\t\t\tregistry.register(createSearchHistoryTool(storage));\n\t\t\tconst buildResult = await new ContextBuilder().build(sessionId, msg.text, [], storage, getContextWindow(), cfg.systemPrompt);\n\t\t\tconst agent = new AgentLoop(provider, storage, registry, async () => false, void 0, new AgentLogger(sessionId), cfg.compressionMode, cfg.compressionThreshold);\n\t\t\tlet fullText = \"\";\n\t\t\tlet forkedId;\n\t\t\tconsole.log(\"[gateway] starting AgentLoop\");\n\t\t\tfor await (const event of agent.run(sessionId, msg.text, buildResult)) if (event.type === \"content\") fullText += event.text;\n\t\t\telse if (event.type === \"forked\") forkedId = event.newSessionId;\n\t\t\tconsole.log(`[gateway] AgentLoop done, response length: ${fullText.length}, forked: ${forkedId || \"none\"}`);\n\t\t\tif (forkedId) setBoundSession(msg.chatId, forkedId);\n\t\t\tawait reply(fullText.trim() || \"(无输出)\");\n\t\t} catch (e) {\n\t\t\tconsole.error(\"[gateway] inbound error:\", e.message);\n\t\t\tawait reply(`错误: ${e.message}`);\n\t\t} finally {\n\t\t\tif (release) release();\n\t\t}\n\t};\n}\n//#endregion\n//#region ../core/dist/gateway/lifecycle.js\nfunction initGateway() {\n\tconst config = readConfig();\n\tconst gateway = new GatewayDispatcher();\n\tconst emailConfig = {\n\t\tsmtpHost: config.emailSmtpHost,\n\t\tsmtpPort: config.emailSmtpPort,\n\t\tsmtpSecure: config.emailSmtpSecure,\n\t\tuser: config.emailSmtpUser,\n\t\tpassword: config.emailSmtpPass,\n\t\tfrom: config.emailFrom,\n\t\tto: config.emailTo\n\t};\n\tif (config.emailNotifications && emailConfig.smtpHost && emailConfig.user && emailConfig.to) {\n\t\tconst email = new EmailAdapter(emailConfig);\n\t\tgateway.register(email);\n\t}\n\tif (config.telegramEnabled && config.telegramBotToken) {\n\t\tconst telegram = new TelegramAdapter({\n\t\t\tbotToken: config.telegramBotToken,\n\t\t\tallowedUsers: config.telegramAllowedUsers || \"\"\n\t\t});\n\t\tgateway.register(telegram);\n\t}\n\tif (emailConfig.smtpHost || config.telegramBotToken) {\n\t\tgateway.onInbound(createInboundHandler());\n\t\tgateway.start();\n\t\treturn gateway;\n\t}\n\treturn null;\n}\n//#endregion\nexport { getAllChatIds as n, EmailAdapter as r, initGateway as t };\n"],"names":[],"mappings":";;;;AAGA;AACA,IAAI,iBAAiB,GAAG,MAAM;AAC9B,CAAC,QAAQ,mBAAmB,IAAI,GAAG,EAAE;AACrC,CAAC,OAAO,GAAG,KAAK;AAChB,CAAC,cAAc,GAAG,IAAI;AACtB,CAAC,SAAS,CAAC,OAAO,EAAE;AACpB,EAAE,IAAI,CAAC,cAAc,GAAG,OAAO;AAC/B,EAAE,KAAK,MAAM,OAAO,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,EAAE,EAAE,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,EAAE,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;AAC1H,CAAC;AACD,CAAC,QAAQ,CAAC,OAAO,EAAE;AACnB,EAAE,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC;AAC1C,EAAE,IAAI,OAAO,CAAC,YAAY,CAAC,OAAO,IAAI,IAAI,CAAC,cAAc,EAAE,IAAI,CAAC,0BAA0B,CAAC,OAAO,CAAC;AACnG,CAAC;AACD,CAAC,0BAA0B,CAAC,OAAO,EAAE;AACrC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,cAAc;AACrC,EAAE,OAAO,CAAC,SAAS,GAAG,OAAO,GAAG,KAAK;AACrC,GAAG,MAAM,OAAO,CAAC,GAAG,EAAE,OAAO,EAAE,OAAO,IAAI,KAAK;AAC/C,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,IAAI,CAAC;AACxC,GAAG,CAAC,CAAC;AACL,EAAE,CAAC;AACH,CAAC;AACD,CAAC,UAAU,CAAC,IAAI,EAAE;AAClB,EAAE,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,CAAC;AAC5B,CAAC;AACD,CAAC,MAAM,KAAK,GAAG;AACf,EAAE,IAAI,IAAI,CAAC,OAAO,EAAE;AACpB,EAAE,IAAI,CAAC,OAAO,GAAG,IAAI;AACrB,EAAE,KAAK,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI;AACnD,GAAG,IAAI,CAAC,MAAM,OAAO,CAAC,OAAO,EAAE,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,CAAC;AAClF,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,UAAU,EAAE,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAC/D,EAAE;AACF,CAAC;AACD,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,IAAI,CAAC,OAAO,GAAG,KAAK;AACtB,EAAE,KAAK,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE,IAAI;AAC/C,GAAG,MAAM,OAAO,CAAC,UAAU,EAAE;AAC7B,EAAE,CAAC,CAAC,MAAM,CAAC;AACX,CAAC;AACD,CAAC,MAAM,MAAM,CAAC,YAAY,EAAE,OAAO,EAAE;AACrC,EAAE,KAAK,MAAM,GAAG,OAAO,CAAC,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC3C,GAAG,IAAI,CAAC,OAAO,CAAC,YAAY,CAAC,MAAM,EAAE;AACrC,GAAG,IAAI,OAAO,EAAE,aAAa,IAAI,CAAC,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,EAAE;AAClE,GAAG,IAAI;AACP,IAAI,MAAM,MAAM,GAAG,OAAO,EAAE,MAAM,IAAI,EAAE;AACxC,IAAI,MAAM,IAAI,GAAG,CAAC,EAAE,EAAE,YAAY,CAAC,KAAK,CAAC,MAAM,EAAE,YAAY,CAAC,IAAI,CAAC,CAAC;AACpE,IAAI,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AACpC,GAAG,CAAC,CAAC,OAAO,CAAC,EAAE;AACf,IAAI,OAAO,CAAC,KAAK,CAAC,CAAC,qBAAqB,EAAE,OAAO,CAAC,IAAI,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC;AAC5E,GAAG;AACH,EAAE;AACF,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,WAAW,EAAE,MAAM,EAAE,IAAI,EAAE;AACvC,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,WAAW,CAAC;AAChD,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK;AAC5B,EAAE,OAAO,CAAC,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;AACnD,CAAC;AACD,CAAC;AACD;AACA;AACA,eAAe,QAAQ,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE;AAC/C,CAAC,MAAM,EAAE,QAAQ,EAAE,QAAQ,EAAE,UAAU,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,EAAE,EAAE,GAAG,MAAM;AAC5E,CAAC,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC1E,CAAC,MAAM,MAAM,GAAG,MAAM,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,MAAM,KAAK;AACvD,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,GAAG,SAAS,CAAC,UAAU,CAAC,GAAG,SAAS,CAAC,UAAU,CAAC,EAAE,OAAO,CAAC;AACjF,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,IAAI,EAAE,QAAQ;AACjB,GAAG,UAAU,EAAE;AACf,GAAG,EAAE,MAAM;AACX,GAAG,IAAI,MAAM,GAAG,EAAE;AAClB,GAAG,OAAO,CAAC;AACX,IAAI,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC;AAC5B,IAAI,KAAK,EAAE,MAAM,CAAC,CAAC,GAAG,EAAE;AACxB,IAAI,MAAM,EAAE,CAAC,EAAE,KAAK;AACpB,KAAK,CAAC,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,IAAI,KAAK;AAC5B,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;AAC/B,MAAM,EAAE,CAAC,MAAM,CAAC;AAChB,KAAK,CAAC,CAAC;AACP,IAAI,CAAC;AACL,IAAI,OAAO,EAAE,CAAC,EAAE,KAAK;AACrB,KAAK,CAAC,CAAC,EAAE,CAAC,OAAO,EAAE,EAAE,CAAC;AACtB,IAAI;AACJ,IAAI,CAAC;AACL,EAAE,CAAC,CAAC;AACJ,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,MAAM,CAAC;AACzB,EAAE,UAAU,CAAC,MAAM,MAAM,iBAAiB,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC,EAAE,IAAI,CAAC;AACnF,CAAC,CAAC,CAAC;AACH,CAAC,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,KAAK;AACjC,EAAE,IAAI,IAAI,GAAG,CAAC;AACd,EAAE,MAAM,QAAQ,GAAG;AACnB,GAAG,CAAC,eAAe,CAAC;AACpB,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,IAAI,CAAC;AAC3B,GAAG,CAAC,WAAW,EAAE,IAAI,CAAC,KAAK,CAAC;AAC5B,GAAG,CAAC,SAAS,EAAE,EAAE,CAAC,KAAK,CAAC;AACxB,GAAG,CAAC,QAAQ,CAAC;AACb,GAAG,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,CAAC;AAC5C,GAAG,CAAC,QAAQ;AACZ,GAAG;AACH,EAAE,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,KAAK;AAC1B,GAAG,MAAM,IAAI,GAAG,QAAQ,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC;AAC9C,GAAG,IAAI,IAAI,IAAI,GAAG,EAAE;AACpB,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC;AACZ,KAAK,OAAO,EAAE,KAAK;AACnB,KAAK,KAAK,EAAE,CAAC,WAAW,EAAE,IAAI,CAAC,EAAE,EAAE,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;AACtD,KAAK,CAAC;AACN,IAAI;AACJ,GAAG;AACH,GAAG,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC;AAC3C,QAAQ,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC;AAChD,QAAQ,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI,KAAK,GAAG,IAAI,IAAI,KAAK,GAAG,CAAC,EAAE,IAAI,GAAG,CAAC;AAClE,QAAQ,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC;AAChD,QAAQ,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC;AAChD,QAAQ,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE,IAAI,GAAG,CAAC;AAChD,QAAQ,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE;AACxC,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9B,IAAI;AACJ,GAAG;AACH,GAAG,IAAI,IAAI,GAAG,QAAQ,CAAC,MAAM,EAAE;AAC/B,IAAI,MAAM,CAAC,KAAK,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC;AAChC,IAAI,IAAI,IAAI,KAAK,CAAC,EAAE,IAAI,GAAG,CAAC;AAC5B,GAAG,CAAC,MAAM,IAAI,IAAI,KAAK,CAAC,IAAI,IAAI,KAAK,GAAG,EAAE;AAC1C,IAAI,MAAM,CAAC,KAAK,EAAE;AAClB,IAAI,OAAO,CAAC,EAAE,OAAO,EAAE,IAAI,EAAE,CAAC;AAC9B,GAAG;AACH,EAAE,CAAC,CAAC;AACJ,EAAE,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC,KAAK;AACxB,GAAG,OAAO,CAAC;AACX,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,KAAK,EAAE,CAAC,CAAC;AACb,IAAI,CAAC;AACL,EAAE,CAAC,CAAC;AACJ,EAAE,UAAU,CAAC,MAAM;AACnB,GAAG,MAAM,CAAC,KAAK,EAAE;AACjB,GAAG,OAAO,CAAC;AACX,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,KAAK,EAAE;AACX,IAAI,CAAC;AACL,EAAE,CAAC,EAAE,GAAG,CAAC;AACT,CAAC,CAAC,CAAC;AACH;AACA,SAAS,gBAAgB,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE;AACnD,CAAC,MAAM,IAAI,GAAG,CAAC;AACf;AACA;AACA;AACA;AACA,+CAA+C,EAAE,UAAU,CAAC,OAAO,CAAC,CAAC;AACrE;AACA;AACA;AACA,EAAE,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,IAAI,KAAK,CAAC,8BAA8B,EAAE,UAAU,CAAC,IAAI,CAAC,IAAI,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC;AAC9G;AACA;AACA;AACA;AACA,OAAO,CAAC;AACR,CAAC,OAAO;AACR,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;AACjB,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,CAAC;AACb,EAAE,CAAC,mBAAmB,EAAE,MAAM,CAAC,IAAI,CAAC,OAAO,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC,CAAC,EAAE,CAAC;AAC5E,EAAE,CAAC,iBAAiB,CAAC;AACrB,EAAE,CAAC,sCAAsC,CAAC;AAC1C,EAAE,CAAC,iCAAiC,CAAC;AACrC,EAAE,EAAE;AACJ,EAAE,MAAM,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC/C,EAAE,EAAE;AACJ,EAAE,GAAG;AACL,EAAE;AACF,EAAE,CAAC,IAAI,CAAC,MAAM,CAAC;AACf;AACA,SAAS,UAAU,CAAC,CAAC,EAAE;AACvB,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC;AACpG;AACG,IAAC,YAAY,GAAG,MAAM;AACzB,CAAC,IAAI,GAAG,OAAO;AACf,CAAC,YAAY,GAAG;AAChB,EAAE,OAAO,EAAE,KAAK;AAChB,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,MAAM;AACP,CAAC,SAAS,GAAG,KAAK;AAClB,CAAC,SAAS;AACV,CAAC,OAAO;AACR,CAAC,WAAW,CAAC,MAAM,EAAE;AACrB,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM;AACtB,CAAC;AACD,CAAC,MAAM,OAAO,GAAG;AACjB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI;AACjC,EAAE,IAAI;AACN,GAAG,MAAM,MAAM,GAAG,MAAM,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,cAAc,EAAE,gCAAgC,CAAC;AAC/F,GAAG,IAAI,CAAC,SAAS,GAAG,MAAM,CAAC,OAAO;AAClC,GAAG,OAAO,MAAM,CAAC,OAAO;AACxB,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,GAAG,IAAI,CAAC,OAAO,GAAG,CAAC,CAAC;AACpB,GAAG,OAAO,KAAK;AACf,EAAE;AACF,CAAC;AACD,CAAC,MAAM,UAAU,GAAG;AACpB,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,OAAO,EAAE,IAAI,EAAE;AAC3B,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE,OAAO;AAC9B,GAAG,OAAO,EAAE,KAAK;AACjB,GAAG,KAAK,EAAE;AACV,GAAG;AACH,EAAE,MAAM,KAAK,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC;AAChC,EAAE,MAAM,OAAO,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,IAAI,CAAC,IAAI,WAAW;AAC9E,EAAE,MAAM,IAAI,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,EAAE,IAAI,IAAI;AACvD,EAAE,OAAO,QAAQ,CAAC,IAAI,CAAC,MAAM,EAAE,OAAO,EAAE,IAAI,CAAC;AAC7C,CAAC;AACD;AACA;AACA;AACA,IAAI,aAAa,GAAG,GAAG;AACvB,eAAe,OAAO,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,EAAE;AAC5C,CAAC,MAAM,GAAG,GAAG,CAAC,4BAA4B,EAAE,KAAK,CAAC,CAAC,EAAE,MAAM,CAAC,CAAC;AAC7D,CAAC,OAAO,CAAC,MAAM,KAAK,CAAC,GAAG,EAAE;AAC1B,EAAE,MAAM,EAAE,MAAM;AAChB,EAAE,OAAO,EAAE,EAAE,cAAc,EAAE,kBAAkB,EAAE;AACjD,EAAE,IAAI,EAAE,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,GAAG;AACtC,EAAE,CAAC,EAAE,IAAI,EAAE;AACX;AACA,IAAI,eAAe,GAAG,MAAM;AAC5B,CAAC,IAAI,GAAG,UAAU;AAClB,CAAC,YAAY,GAAG;AAChB,EAAE,OAAO,EAAE,IAAI;AACf,EAAE,MAAM,EAAE;AACV,EAAE;AACF,CAAC,MAAM;AACP,CAAC,SAAS,GAAG,IAAI;AACjB,CAAC,YAAY,GAAG,CAAC;AACjB,CAAC,SAAS,GAAG,KAAK;AAClB,CAAC,SAAS;AACV,CAAC,OAAO;AACR,CAAC,WAAW,CAAC,MAAM,EAAE;AACrB,EAAE,IAAI,CAAC,MAAM,GAAG,MAAM;AACtB,CAAC;AACD,CAAC,MAAM,OAAO,GAAG;AACjB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE,OAAO,IAAI;AACjC,EAAE,IAAI;AACN,GAAG,MAAM,EAAE,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,OAAO,CAAC;AAC1D,GAAG,IAAI,CAAC,EAAE,CAAC,EAAE,IAAI,CAAC,EAAE,CAAC,MAAM,EAAE;AAC7B,IAAI,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,IAAI,CAAC,SAAS,CAAC,EAAE,CAAC,CAAC;AACjE,IAAI,OAAO,KAAK;AAChB,GAAG;AACH,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,yBAAyB,EAAE,EAAE,CAAC,MAAM,CAAC,QAAQ,CAAC,CAAC,CAAC;AAChE,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;AACxB,GAAG,IAAI,CAAC,SAAS,GAAG,WAAW,CAAC,MAAM,IAAI,CAAC,IAAI,EAAE,EAAE,aAAa,CAAC;AACjE,GAAG,IAAI,CAAC,IAAI,EAAE;AACd,GAAG,OAAO,IAAI;AACd,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,GAAG,OAAO,CAAC,KAAK,CAAC,2BAA2B,EAAE,CAAC,CAAC,OAAO,CAAC;AACxD,GAAG,OAAO,KAAK;AACf,EAAE;AACF,CAAC;AACD,CAAC,MAAM,UAAU,GAAG;AACpB,EAAE,IAAI,CAAC,SAAS,GAAG,KAAK;AACxB,EAAE,IAAI,IAAI,CAAC,SAAS,EAAE;AACtB,GAAG,aAAa,CAAC,IAAI,CAAC,SAAS,CAAC;AAChC,GAAG,IAAI,CAAC,SAAS,GAAG,IAAI;AACxB,EAAE;AACF,CAAC;AACD,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,IAAI,EAAE;AAC1B,EAAE,IAAI,CAAC,MAAM,IAAI,MAAM,KAAK,SAAS,EAAE,OAAO;AAC9C,GAAG,OAAO,EAAE,KAAK;AACjB,GAAG,KAAK,EAAE;AACV,GAAG;AACH,EAAE,IAAI;AACN,GAAG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,aAAa,EAAE;AACrE,IAAI,OAAO,EAAE,MAAM;AACnB,IAAI;AACJ,IAAI,CAAC;AACL,GAAG,IAAI,MAAM,CAAC,EAAE,EAAE,OAAO;AACzB,IAAI,OAAO,EAAE,IAAI;AACjB,IAAI,SAAS,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,EAAE,UAAU,IAAI,EAAE;AACrD,IAAI;AACJ,GAAG,OAAO;AACV,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,KAAK,EAAE,MAAM,CAAC,WAAW,IAAI;AACjC,IAAI;AACJ,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,GAAG,OAAO;AACV,IAAI,OAAO,EAAE,KAAK;AAClB,IAAI,KAAK,EAAE,CAAC,CAAC;AACb,IAAI;AACJ,EAAE;AACF,CAAC;AACD,CAAC,SAAS,CAAC,MAAM,EAAE;AACnB,EAAE,MAAM,OAAO,GAAG,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE;AACjD,EAAE,IAAI,CAAC,OAAO,EAAE,OAAO,KAAK;AAC5B,EAAE,OAAO,OAAO,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,QAAQ,CAAC,MAAM,CAAC;AACjE,CAAC;AACD,CAAC,MAAM,IAAI,GAAG;AACd,EAAE,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACvB,EAAE,IAAI;AACN,GAAG,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,IAAI,CAAC,MAAM,CAAC,QAAQ,EAAE,YAAY,EAAE;AACpE,IAAI,MAAM,EAAE,IAAI,CAAC,YAAY,GAAG,CAAC;AACjC,IAAI,OAAO,EAAE,EAAE;AACf,IAAI,eAAe,EAAE,CAAC,SAAS;AAC/B,IAAI,CAAC;AACL,GAAG,IAAI,CAAC,MAAM,CAAC,EAAE,EAAE;AACnB,IAAI,OAAO,CAAC,KAAK,CAAC,+BAA+B,EAAE,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC;AAC1E,IAAI;AACJ,GAAG;AACH,GAAG,IAAI,CAAC,MAAM,CAAC,MAAM,IAAI,MAAM,CAAC,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE;AACrD,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,eAAe,EAAE,MAAM,CAAC,MAAM,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;AAClE,GAAG,KAAK,MAAM,MAAM,IAAI,MAAM,CAAC,MAAM,EAAE;AACvC,IAAI,IAAI,CAAC,YAAY,GAAG,MAAM,CAAC,SAAS;AACxC,IAAI,MAAM,GAAG,GAAG,MAAM,CAAC,OAAO;AAC9B,IAAI,IAAI,CAAC,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE;AACrC,KAAK,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACxD,KAAK;AACL,IAAI;AACJ,IAAI,MAAM,MAAM,GAAG,MAAM,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;AACtC,IAAI,OAAO,CAAC,GAAG,CAAC,CAAC,6BAA6B,EAAE,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACrF,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,EAAE;AACjC,KAAK,OAAO,CAAC,GAAG,CAAC,CAAC,gBAAgB,EAAE,MAAM,CAAC,oBAAoB,CAAC,CAAC;AACjE,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,CAAC,MAAM,CAAC,YAAY,CAAC,IAAI,EAAE,GAAG,sFAAsF,GAAG,eAAe;AAC7J,KAAK,MAAM,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;AAClC,KAAK;AACL,IAAI;AACJ,IAAI,IAAI,CAAC,IAAI,CAAC,SAAS,EAAE;AACzB,KAAK,OAAO,CAAC,KAAK,CAAC,uCAAuC,CAAC;AAC3D,KAAK;AACL,IAAI;AACJ,IAAI,MAAM,OAAO,GAAG;AACpB,KAAK,MAAM;AACX,KAAK,IAAI,EAAE,GAAG,CAAC,IAAI;AACnB,KAAK,SAAS,EAAE,MAAM,CAAC,GAAG,CAAC,UAAU,CAAC;AACtC,KAAK,SAAS,EAAE,GAAG,CAAC,IAAI,GAAG;AAC3B,KAAK;AACL,IAAI,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACvD,IAAI,MAAM,IAAI,CAAC,SAAS,CAAC,OAAO,CAAC;AACjC,IAAI,OAAO,CAAC,GAAG,CAAC,uCAAuC,CAAC;AACxD,GAAG;AACH,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,GAAG,OAAO,CAAC,KAAK,CAAC,wBAAwB,EAAE,CAAC,CAAC,OAAO,CAAC;AACrD,EAAE;AACF,CAAC;AACD,CAAC;AACD;AACA;AACA,SAAS,OAAO,GAAG;AACnB,CAAC,OAAO,WAAW,CAAC,wBAAwB,CAAC;AAC7C;AACA,SAAS,YAAY,GAAG;AACxB,CAAC,MAAM,IAAI,GAAG,OAAO,EAAE;AACvB,CAAC,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;AAC/C,CAAC,IAAI;AACL,EAAE,OAAO,IAAI,CAAC,KAAK,CAAC,YAAY,CAAC,IAAI,EAAE,OAAO,CAAC,CAAC;AAChD,CAAC,CAAC,CAAC,MAAM;AACT,EAAE,OAAO,EAAE,QAAQ,EAAE,EAAE,EAAE;AACzB,CAAC;AACD;AACA,SAAS,aAAa,CAAC,KAAK,EAAE;AAC9B,CAAC,MAAM,IAAI,GAAG,OAAO,EAAE;AACvB,CAAC,MAAM,GAAG,GAAG,UAAU,EAAE;AACzB,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,EAAE,SAAS,CAAC,GAAG,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC;AAC1D,CAAC,MAAM,OAAO,GAAG,IAAI,GAAG,MAAM;AAC9B,CAAC,aAAa,CAAC,OAAO,EAAE,IAAI,CAAC,SAAS,CAAC,KAAK,EAAE,IAAI,EAAE,GAAG,CAAC,EAAE,OAAO,CAAC;AAClE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC;AAC1B;AACA,SAAS,eAAe,CAAC,MAAM,EAAE;AACjC,CAAC,OAAO,YAAY,EAAE,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,IAAI;AACvD;AACA,SAAS,eAAe,CAAC,MAAM,EAAE,SAAS,EAAE;AAC5C,CAAC,MAAM,KAAK,GAAG,YAAY,EAAE;AAC7B,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC,GAAG,SAAS;AAC3C,CAAC,aAAa,CAAC,KAAK,CAAC;AACrB;AACA,SAAS,aAAa,GAAG;AACzB,CAAC,MAAM,KAAK,GAAG,YAAY,EAAE;AAC7B,CAAC,OAAO,MAAM,CAAC,IAAI,CAAC,KAAK,CAAC,QAAQ,CAAC;AACnC;AACA;AACA;AACA,SAAS,oBAAoB,GAAG;AAChC,CAAC,OAAO,OAAO,GAAG,EAAE,OAAO,EAAE,KAAK,KAAK;AACvC,EAAE,OAAO,CAAC,GAAG,CAAC,CAAC,uBAAuB,EAAE,OAAO,CAAC,IAAI,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC;AACtG,EAAE,IAAI,OAAO;AACb,EAAE,IAAI;AACN,GAAG,MAAM,GAAG,GAAG,UAAU,EAAE;AAC3B,GAAG,IAAI,CAAC,GAAG,CAAC,WAAW,EAAE;AACzB,IAAI,OAAO,CAAC,GAAG,CAAC,sCAAsC,CAAC;AACvD,IAAI,MAAM,KAAK,CAAC,gCAAgC,CAAC;AACjD,IAAI;AACJ,GAAG;AACH,GAAG,MAAM,cAAc,GAAG,mBAAmB,CAAC,GAAG,CAAC,WAAW,CAAC;AAC9D,GAAG,IAAI,CAAC,cAAc,EAAE;AACxB,IAAI,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC;AACtD,IAAI,MAAM,KAAK,CAAC,gBAAgB,CAAC;AACjC,IAAI;AACJ,GAAG;AACH,GAAG,MAAM,KAAK,GAAG,cAAc,EAAE;AACjC,GAAG,MAAM,QAAQ,GAAG,cAAc,CAAC;AACnC,IAAI,GAAG,cAAc;AACrB,IAAI,WAAW,EAAE,KAAK,EAAE,EAAE,IAAI,GAAG,CAAC,WAAW;AAC7C,IAAI,aAAa,EAAE,KAAK,EAAE,aAAa,IAAI;AAC3C,IAAI,CAAC;AACL,GAAG,MAAM,OAAO,GAAG,aAAa,CAAC,EAAE,OAAO,EAAE,GAAG,CAAC,cAAc,EAAE,CAAC;AACjE,GAAG,IAAI,SAAS,GAAG,eAAe,CAAC,GAAG,CAAC,MAAM,CAAC;AAC9C,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,4BAA4B,EAAE,SAAS,IAAI,QAAQ,CAAC,CAAC,CAAC;AACtE,GAAG,IAAI,CAAC,SAAS,EAAE;AACnB,IAAI,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE;AACvD,IAAI,IAAI,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,EAAE;AACrC,SAAS,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE;AACvD,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;AAC1C,GAAG,CAAC,MAAM,IAAI,CAAC,MAAM,OAAO,CAAC,UAAU,CAAC,SAAS,CAAC,EAAE;AACpD,IAAI,MAAM,MAAM,GAAG,MAAM,OAAO,CAAC,oBAAoB,EAAE;AACvD,IAAI,IAAI,MAAM,EAAE,SAAS,GAAG,MAAM,CAAC,EAAE;AACrC,SAAS,SAAS,GAAG,CAAC,MAAM,OAAO,CAAC,aAAa,EAAE,EAAE,EAAE;AACvD,IAAI,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,SAAS,CAAC;AAC1C,GAAG;AACH,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,yBAAyB,EAAE,SAAS,CAAC,CAAC,CAAC;AACvD,GAAG,OAAO,GAAG,MAAM,WAAW,CAAC,OAAO,CAAC,SAAS,CAAC;AACjD,GAAG,MAAM,QAAQ,GAAG,IAAI,YAAY,EAAE;AACtC,GAAG,KAAK,MAAM,CAAC,IAAI,UAAU,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACnD,GAAG,KAAK,MAAM,CAAC,IAAI,gBAAgB,EAAE,QAAQ,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzD,GAAG,QAAQ,CAAC,QAAQ,CAAC,uBAAuB,CAAC,OAAO,CAAC,CAAC;AACtD,GAAG,MAAM,WAAW,GAAG,MAAM,IAAI,cAAc,EAAE,CAAC,KAAK,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,EAAE,EAAE,OAAO,EAAE,gBAAgB,EAAE,EAAE,GAAG,CAAC,YAAY,CAAC;AAC/H,GAAG,MAAM,KAAK,GAAG,IAAI,SAAS,CAAC,QAAQ,EAAE,OAAO,EAAE,QAAQ,EAAE,YAAY,KAAK,EAAE,KAAK,CAAC,EAAE,IAAI,WAAW,CAAC,SAAS,CAAC,EAAE,GAAG,CAAC,eAAe,EAAE,GAAG,CAAC,oBAAoB,CAAC;AACjK,GAAG,IAAI,QAAQ,GAAG,EAAE;AACpB,GAAG,IAAI,QAAQ;AACf,GAAG,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC;AAC9C,GAAG,WAAW,MAAM,KAAK,IAAI,KAAK,CAAC,GAAG,CAAC,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,WAAW,CAAC,EAAE,IAAI,KAAK,CAAC,IAAI,KAAK,SAAS,EAAE,QAAQ,IAAI,KAAK,CAAC,IAAI;AAC9H,QAAQ,IAAI,KAAK,CAAC,IAAI,KAAK,QAAQ,EAAE,QAAQ,GAAG,KAAK,CAAC,YAAY;AAClE,GAAG,OAAO,CAAC,GAAG,CAAC,CAAC,2CAA2C,EAAE,QAAQ,CAAC,MAAM,CAAC,UAAU,EAAE,QAAQ,IAAI,MAAM,CAAC,CAAC,CAAC;AAC9G,GAAG,IAAI,QAAQ,EAAE,eAAe,CAAC,GAAG,CAAC,MAAM,EAAE,QAAQ,CAAC;AACtD,GAAG,MAAM,KAAK,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,OAAO,CAAC;AAC1C,EAAE,CAAC,CAAC,OAAO,CAAC,EAAE;AACd,GAAG,OAAO,CAAC,KAAK,CAAC,0BAA0B,EAAE,CAAC,CAAC,OAAO,CAAC;AACvD,GAAG,MAAM,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC;AAClC,EAAE,CAAC,SAAS;AACZ,GAAG,IAAI,OAAO,EAAE,OAAO,EAAE;AACzB,EAAE;AACF,CAAC,CAAC;AACF;AACA;AACA;AACA,SAAS,WAAW,GAAG;AACvB,CAAC,MAAM,MAAM,GAAG,UAAU,EAAE;AAC5B,CAAC,MAAM,OAAO,GAAG,IAAI,iBAAiB,EAAE;AACxC,CAAC,MAAM,WAAW,GAAG;AACrB,EAAE,QAAQ,EAAE,MAAM,CAAC,aAAa;AAChC,EAAE,QAAQ,EAAE,MAAM,CAAC,aAAa;AAChC,EAAE,UAAU,EAAE,MAAM,CAAC,eAAe;AACpC,EAAE,IAAI,EAAE,MAAM,CAAC,aAAa;AAC5B,EAAE,QAAQ,EAAE,MAAM,CAAC,aAAa;AAChC,EAAE,IAAI,EAAE,MAAM,CAAC,SAAS;AACxB,EAAE,EAAE,EAAE,MAAM,CAAC;AACb,EAAE;AACF,CAAC,IAAI,MAAM,CAAC,kBAAkB,IAAI,WAAW,CAAC,QAAQ,IAAI,WAAW,CAAC,IAAI,IAAI,WAAW,CAAC,EAAE,EAAE;AAC9F,EAAE,MAAM,KAAK,GAAG,IAAI,YAAY,CAAC,WAAW,CAAC;AAC7C,EAAE,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC;AACzB,CAAC;AACD,CAAC,IAAI,MAAM,CAAC,eAAe,IAAI,MAAM,CAAC,gBAAgB,EAAE;AACxD,EAAE,MAAM,QAAQ,GAAG,IAAI,eAAe,CAAC;AACvC,GAAG,QAAQ,EAAE,MAAM,CAAC,gBAAgB;AACpC,GAAG,YAAY,EAAE,MAAM,CAAC,oBAAoB,IAAI;AAChD,GAAG,CAAC;AACJ,EAAE,OAAO,CAAC,QAAQ,CAAC,QAAQ,CAAC;AAC5B,CAAC;AACD,CAAC,IAAI,WAAW,CAAC,QAAQ,IAAI,MAAM,CAAC,gBAAgB,EAAE;AACtD,EAAE,OAAO,CAAC,SAAS,CAAC,oBAAoB,EAAE,CAAC;AAC3C,EAAE,OAAO,CAAC,KAAK,EAAE;AACjB,EAAE,OAAO,OAAO;AAChB,CAAC;AACD,CAAC,OAAO,IAAI;AACZ;;;;"}