tmg-media-player 0.0.1

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 (1861) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +38 -0
  3. package/dist/chunk-25AZZYCL.js +85 -0
  4. package/dist/chunk-25AZZYCL.js.map +1 -0
  5. package/dist/chunk-25IKIKAB.js +60 -0
  6. package/dist/chunk-25IKIKAB.js.map +1 -0
  7. package/dist/chunk-25ZZLGZ6.js +45 -0
  8. package/dist/chunk-25ZZLGZ6.js.map +1 -0
  9. package/dist/chunk-274C5J22.js +12 -0
  10. package/dist/chunk-274C5J22.js.map +1 -0
  11. package/dist/chunk-27FHLV4M.js +12 -0
  12. package/dist/chunk-27FHLV4M.js.map +1 -0
  13. package/dist/chunk-27MVVVJ7.js +405 -0
  14. package/dist/chunk-27MVVVJ7.js.map +1 -0
  15. package/dist/chunk-27SBY2N7.js +50 -0
  16. package/dist/chunk-27SBY2N7.js.map +1 -0
  17. package/dist/chunk-2J3FJY73.js +9 -0
  18. package/dist/chunk-2J3FJY73.js.map +1 -0
  19. package/dist/chunk-2JW4RYM4.js +170 -0
  20. package/dist/chunk-2JW4RYM4.js.map +1 -0
  21. package/dist/chunk-2PA7FU47.js +185 -0
  22. package/dist/chunk-2PA7FU47.js.map +1 -0
  23. package/dist/chunk-2VOAIUTU.js +9 -0
  24. package/dist/chunk-2VOAIUTU.js.map +1 -0
  25. package/dist/chunk-2W5XWGGE.js +7 -0
  26. package/dist/chunk-2W5XWGGE.js.map +1 -0
  27. package/dist/chunk-3C3GK24X.js +88 -0
  28. package/dist/chunk-3C3GK24X.js.map +1 -0
  29. package/dist/chunk-3KD22Z7D.js +9 -0
  30. package/dist/chunk-3KD22Z7D.js.map +1 -0
  31. package/dist/chunk-3OLEZVYI.js +196 -0
  32. package/dist/chunk-3OLEZVYI.js.map +1 -0
  33. package/dist/chunk-3OZEBWCF.js +12 -0
  34. package/dist/chunk-3OZEBWCF.js.map +1 -0
  35. package/dist/chunk-3T5CFCYB.js +45 -0
  36. package/dist/chunk-3T5CFCYB.js.map +1 -0
  37. package/dist/chunk-3VCTHGL6.js +86 -0
  38. package/dist/chunk-3VCTHGL6.js.map +1 -0
  39. package/dist/chunk-3WHPH6Q5.js +9 -0
  40. package/dist/chunk-3WHPH6Q5.js.map +1 -0
  41. package/dist/chunk-43MLKGCT.js +45 -0
  42. package/dist/chunk-43MLKGCT.js.map +1 -0
  43. package/dist/chunk-46QVDU2K.js +25 -0
  44. package/dist/chunk-46QVDU2K.js.map +1 -0
  45. package/dist/chunk-474PEQ33.js +78 -0
  46. package/dist/chunk-474PEQ33.js.map +1 -0
  47. package/dist/chunk-4FCGFO2J.js +9 -0
  48. package/dist/chunk-4FCGFO2J.js.map +1 -0
  49. package/dist/chunk-4JOPUUAL.js +185 -0
  50. package/dist/chunk-4JOPUUAL.js.map +1 -0
  51. package/dist/chunk-4QQXED6P.js +11 -0
  52. package/dist/chunk-4QQXED6P.js.map +1 -0
  53. package/dist/chunk-4VG5KHDO.js +52 -0
  54. package/dist/chunk-4VG5KHDO.js.map +1 -0
  55. package/dist/chunk-4W6H5CZF.js +1 -0
  56. package/dist/chunk-4W6H5CZF.js.map +1 -0
  57. package/dist/chunk-56CRICX7.js +154 -0
  58. package/dist/chunk-56CRICX7.js.map +1 -0
  59. package/dist/chunk-57L2PE3B.js +9 -0
  60. package/dist/chunk-57L2PE3B.js.map +1 -0
  61. package/dist/chunk-5CLVIO4N.js +33 -0
  62. package/dist/chunk-5CLVIO4N.js.map +1 -0
  63. package/dist/chunk-5GX67WSG.js +7 -0
  64. package/dist/chunk-5GX67WSG.js.map +1 -0
  65. package/dist/chunk-5SGNTRPL.js +47 -0
  66. package/dist/chunk-5SGNTRPL.js.map +1 -0
  67. package/dist/chunk-5TJURBKV.js +9 -0
  68. package/dist/chunk-5TJURBKV.js.map +1 -0
  69. package/dist/chunk-63E6JXTT.js +162 -0
  70. package/dist/chunk-63E6JXTT.js.map +1 -0
  71. package/dist/chunk-66HGOYPR.js +180 -0
  72. package/dist/chunk-66HGOYPR.js.map +1 -0
  73. package/dist/chunk-6IFGKHVM.js +9 -0
  74. package/dist/chunk-6IFGKHVM.js.map +1 -0
  75. package/dist/chunk-6K4HCMUL.js +32 -0
  76. package/dist/chunk-6K4HCMUL.js.map +1 -0
  77. package/dist/chunk-6KYXFWBF.js +32 -0
  78. package/dist/chunk-6KYXFWBF.js.map +1 -0
  79. package/dist/chunk-6R5BZZM6.js +95 -0
  80. package/dist/chunk-6R5BZZM6.js.map +1 -0
  81. package/dist/chunk-6S5BMP4A.js +9 -0
  82. package/dist/chunk-6S5BMP4A.js.map +1 -0
  83. package/dist/chunk-6SHHKTGD.js +73 -0
  84. package/dist/chunk-6SHHKTGD.js.map +1 -0
  85. package/dist/chunk-6U3M7V32.js +46 -0
  86. package/dist/chunk-6U3M7V32.js.map +1 -0
  87. package/dist/chunk-73XT2QVM.js +47 -0
  88. package/dist/chunk-73XT2QVM.js.map +1 -0
  89. package/dist/chunk-7FB3XGXR.js +471 -0
  90. package/dist/chunk-7FB3XGXR.js.map +1 -0
  91. package/dist/chunk-7HRR4LG4.js +115 -0
  92. package/dist/chunk-7HRR4LG4.js.map +1 -0
  93. package/dist/chunk-7I6DRKIN.js +58 -0
  94. package/dist/chunk-7I6DRKIN.js.map +1 -0
  95. package/dist/chunk-7MOZI57I.js +59 -0
  96. package/dist/chunk-7MOZI57I.js.map +1 -0
  97. package/dist/chunk-7PHLWSKV.js +95 -0
  98. package/dist/chunk-7PHLWSKV.js.map +1 -0
  99. package/dist/chunk-7Y4LQ5ED.js +45 -0
  100. package/dist/chunk-7Y4LQ5ED.js.map +1 -0
  101. package/dist/chunk-7YDZDHZH.js +19 -0
  102. package/dist/chunk-7YDZDHZH.js.map +1 -0
  103. package/dist/chunk-A7EG6K2X.js +54 -0
  104. package/dist/chunk-A7EG6K2X.js.map +1 -0
  105. package/dist/chunk-ABRBZ4IH.js +108 -0
  106. package/dist/chunk-ABRBZ4IH.js.map +1 -0
  107. package/dist/chunk-ACF6B245.js +17 -0
  108. package/dist/chunk-ACF6B245.js.map +1 -0
  109. package/dist/chunk-ACUUGJUG.js +53 -0
  110. package/dist/chunk-ACUUGJUG.js.map +1 -0
  111. package/dist/chunk-AIYSHJLG.js +42 -0
  112. package/dist/chunk-AIYSHJLG.js.map +1 -0
  113. package/dist/chunk-AKHJD2A3.js +50 -0
  114. package/dist/chunk-AKHJD2A3.js.map +1 -0
  115. package/dist/chunk-ATE4NMIF.js +22 -0
  116. package/dist/chunk-ATE4NMIF.js.map +1 -0
  117. package/dist/chunk-AZTSMVMN.js +138 -0
  118. package/dist/chunk-AZTSMVMN.js.map +1 -0
  119. package/dist/chunk-BFFQZMZX.js +108 -0
  120. package/dist/chunk-BFFQZMZX.js.map +1 -0
  121. package/dist/chunk-BKJRLSXA.js +329 -0
  122. package/dist/chunk-BKJRLSXA.js.map +1 -0
  123. package/dist/chunk-BLJDDFX2.js +228 -0
  124. package/dist/chunk-BLJDDFX2.js.map +1 -0
  125. package/dist/chunk-BROAUWON.js +123 -0
  126. package/dist/chunk-BROAUWON.js.map +1 -0
  127. package/dist/chunk-BU4AX4DA.js +49 -0
  128. package/dist/chunk-BU4AX4DA.js.map +1 -0
  129. package/dist/chunk-C2TANFKK.js +167 -0
  130. package/dist/chunk-C2TANFKK.js.map +1 -0
  131. package/dist/chunk-CAIDFMLB.js +164 -0
  132. package/dist/chunk-CAIDFMLB.js.map +1 -0
  133. package/dist/chunk-CCD3ZXIT.js +54 -0
  134. package/dist/chunk-CCD3ZXIT.js.map +1 -0
  135. package/dist/chunk-CEEX3HQ2.js +44 -0
  136. package/dist/chunk-CEEX3HQ2.js.map +1 -0
  137. package/dist/chunk-CIN7HWLH.js +26 -0
  138. package/dist/chunk-CIN7HWLH.js.map +1 -0
  139. package/dist/chunk-CL24QYM6.js +48 -0
  140. package/dist/chunk-CL24QYM6.js.map +1 -0
  141. package/dist/chunk-CTSPKWKN.js +9 -0
  142. package/dist/chunk-CTSPKWKN.js.map +1 -0
  143. package/dist/chunk-CYUYF57A.js +139 -0
  144. package/dist/chunk-CYUYF57A.js.map +1 -0
  145. package/dist/chunk-D5XNDZ4S.js +21 -0
  146. package/dist/chunk-D5XNDZ4S.js.map +1 -0
  147. package/dist/chunk-D7JQDN74.js +9 -0
  148. package/dist/chunk-D7JQDN74.js.map +1 -0
  149. package/dist/chunk-DKS7SZFN.js +165 -0
  150. package/dist/chunk-DKS7SZFN.js.map +1 -0
  151. package/dist/chunk-DM4ZIS4L.js +50 -0
  152. package/dist/chunk-DM4ZIS4L.js.map +1 -0
  153. package/dist/chunk-DNY72SCR.js +9 -0
  154. package/dist/chunk-DNY72SCR.js.map +1 -0
  155. package/dist/chunk-DQLWWVM3.js +25 -0
  156. package/dist/chunk-DQLWWVM3.js.map +1 -0
  157. package/dist/chunk-E56H3EOR.js +1 -0
  158. package/dist/chunk-E56H3EOR.js.map +1 -0
  159. package/dist/chunk-E56PSUT2.js +435 -0
  160. package/dist/chunk-E56PSUT2.js.map +1 -0
  161. package/dist/chunk-EF7RQIJK.js +9 -0
  162. package/dist/chunk-EF7RQIJK.js.map +1 -0
  163. package/dist/chunk-EHQJNRJV.js +449 -0
  164. package/dist/chunk-EHQJNRJV.js.map +1 -0
  165. package/dist/chunk-EIT6CZXJ.js +50 -0
  166. package/dist/chunk-EIT6CZXJ.js.map +1 -0
  167. package/dist/chunk-ERPQNMED.js +292 -0
  168. package/dist/chunk-ERPQNMED.js.map +1 -0
  169. package/dist/chunk-ESAOH6X5.js +15 -0
  170. package/dist/chunk-ESAOH6X5.js.map +1 -0
  171. package/dist/chunk-ESNKONBW.js +80 -0
  172. package/dist/chunk-ESNKONBW.js.map +1 -0
  173. package/dist/chunk-EUQ7SC5J.js +33 -0
  174. package/dist/chunk-EUQ7SC5J.js.map +1 -0
  175. package/dist/chunk-EUX3RZ3L.js +66 -0
  176. package/dist/chunk-EUX3RZ3L.js.map +1 -0
  177. package/dist/chunk-EVUTNLHC.js +7 -0
  178. package/dist/chunk-EVUTNLHC.js.map +1 -0
  179. package/dist/chunk-EY7PB3LA.js +59 -0
  180. package/dist/chunk-EY7PB3LA.js.map +1 -0
  181. package/dist/chunk-FCQDAU2C.js +7 -0
  182. package/dist/chunk-FCQDAU2C.js.map +1 -0
  183. package/dist/chunk-FHL5Z6MX.js +13 -0
  184. package/dist/chunk-FHL5Z6MX.js.map +1 -0
  185. package/dist/chunk-FIUVWAAQ.js +35 -0
  186. package/dist/chunk-FIUVWAAQ.js.map +1 -0
  187. package/dist/chunk-FN32KVQT.js +188 -0
  188. package/dist/chunk-FN32KVQT.js.map +1 -0
  189. package/dist/chunk-FX3UTAZK.js +31 -0
  190. package/dist/chunk-FX3UTAZK.js.map +1 -0
  191. package/dist/chunk-FXIL7BGP.js +43 -0
  192. package/dist/chunk-FXIL7BGP.js.map +1 -0
  193. package/dist/chunk-G7KANQFO.js +131 -0
  194. package/dist/chunk-G7KANQFO.js.map +1 -0
  195. package/dist/chunk-GDC7I2CJ.js +66 -0
  196. package/dist/chunk-GDC7I2CJ.js.map +1 -0
  197. package/dist/chunk-GM7YMURS.js +14 -0
  198. package/dist/chunk-GM7YMURS.js.map +1 -0
  199. package/dist/chunk-GQ7ITX5B.js +7 -0
  200. package/dist/chunk-GQ7ITX5B.js.map +1 -0
  201. package/dist/chunk-GSKI4IRL.js +34 -0
  202. package/dist/chunk-GSKI4IRL.js.map +1 -0
  203. package/dist/chunk-GUIBL2MZ.js +1 -0
  204. package/dist/chunk-GUIBL2MZ.js.map +1 -0
  205. package/dist/chunk-H24E5FRE.js +9 -0
  206. package/dist/chunk-H24E5FRE.js.map +1 -0
  207. package/dist/chunk-HA2GK6KH.js +9 -0
  208. package/dist/chunk-HA2GK6KH.js.map +1 -0
  209. package/dist/chunk-HCSCY6DU.js +458 -0
  210. package/dist/chunk-HCSCY6DU.js.map +1 -0
  211. package/dist/chunk-HGXGXW2U.js +26 -0
  212. package/dist/chunk-HGXGXW2U.js.map +1 -0
  213. package/dist/chunk-HH7PMFLU.js +33 -0
  214. package/dist/chunk-HH7PMFLU.js.map +1 -0
  215. package/dist/chunk-HJORMYPQ.js +66 -0
  216. package/dist/chunk-HJORMYPQ.js.map +1 -0
  217. package/dist/chunk-HN2UT66M.js +9 -0
  218. package/dist/chunk-HN2UT66M.js.map +1 -0
  219. package/dist/chunk-HNPBSC2A.js +132 -0
  220. package/dist/chunk-HNPBSC2A.js.map +1 -0
  221. package/dist/chunk-HNTARWVL.js +57 -0
  222. package/dist/chunk-HNTARWVL.js.map +1 -0
  223. package/dist/chunk-HPPHGUTD.js +1 -0
  224. package/dist/chunk-HPPHGUTD.js.map +1 -0
  225. package/dist/chunk-HPWORM77.js +199 -0
  226. package/dist/chunk-HPWORM77.js.map +1 -0
  227. package/dist/chunk-HYG6W442.js +66 -0
  228. package/dist/chunk-HYG6W442.js.map +1 -0
  229. package/dist/chunk-I3LBJOUW.js +249 -0
  230. package/dist/chunk-I3LBJOUW.js.map +1 -0
  231. package/dist/chunk-I47VPMZS.js +40 -0
  232. package/dist/chunk-I47VPMZS.js.map +1 -0
  233. package/dist/chunk-ID72UAJE.js +7 -0
  234. package/dist/chunk-ID72UAJE.js.map +1 -0
  235. package/dist/chunk-IENUYESB.js +33 -0
  236. package/dist/chunk-IENUYESB.js.map +1 -0
  237. package/dist/chunk-IFYBKLFH.js +15 -0
  238. package/dist/chunk-IFYBKLFH.js.map +1 -0
  239. package/dist/chunk-IJJ4F6HI.js +105 -0
  240. package/dist/chunk-IJJ4F6HI.js.map +1 -0
  241. package/dist/chunk-IKKQYZNA.js +43 -0
  242. package/dist/chunk-IKKQYZNA.js.map +1 -0
  243. package/dist/chunk-IUS3FRXS.js +446 -0
  244. package/dist/chunk-IUS3FRXS.js.map +1 -0
  245. package/dist/chunk-IVA7LFT2.js +12 -0
  246. package/dist/chunk-IVA7LFT2.js.map +1 -0
  247. package/dist/chunk-IXLSSEE7.js +39 -0
  248. package/dist/chunk-IXLSSEE7.js.map +1 -0
  249. package/dist/chunk-J2SIL62L.js +142 -0
  250. package/dist/chunk-J2SIL62L.js.map +1 -0
  251. package/dist/chunk-J54J2AED.js +117 -0
  252. package/dist/chunk-J54J2AED.js.map +1 -0
  253. package/dist/chunk-JFWYJV3J.js +61 -0
  254. package/dist/chunk-JFWYJV3J.js.map +1 -0
  255. package/dist/chunk-JP5X5JDL.js +10 -0
  256. package/dist/chunk-JP5X5JDL.js.map +1 -0
  257. package/dist/chunk-JPWNE7JO.js +11 -0
  258. package/dist/chunk-JPWNE7JO.js.map +1 -0
  259. package/dist/chunk-JRWYWTTT.js +9 -0
  260. package/dist/chunk-JRWYWTTT.js.map +1 -0
  261. package/dist/chunk-JZXJAJNW.js +316 -0
  262. package/dist/chunk-JZXJAJNW.js.map +1 -0
  263. package/dist/chunk-K4UHBEDT.js +9 -0
  264. package/dist/chunk-K4UHBEDT.js.map +1 -0
  265. package/dist/chunk-K7AAKFQF.js +12 -0
  266. package/dist/chunk-K7AAKFQF.js.map +1 -0
  267. package/dist/chunk-KD3OBG25.js +15 -0
  268. package/dist/chunk-KD3OBG25.js.map +1 -0
  269. package/dist/chunk-KJ74PGBI.js +45 -0
  270. package/dist/chunk-KJ74PGBI.js.map +1 -0
  271. package/dist/chunk-KLAI7YSD.js +7 -0
  272. package/dist/chunk-KLAI7YSD.js.map +1 -0
  273. package/dist/chunk-KMENKVHP.js +110 -0
  274. package/dist/chunk-KMENKVHP.js.map +1 -0
  275. package/dist/chunk-KOAHN3L5.js +9 -0
  276. package/dist/chunk-KOAHN3L5.js.map +1 -0
  277. package/dist/chunk-KQXT3GDF.js +16 -0
  278. package/dist/chunk-KQXT3GDF.js.map +1 -0
  279. package/dist/chunk-L6J66EOL.js +44 -0
  280. package/dist/chunk-L6J66EOL.js.map +1 -0
  281. package/dist/chunk-LNUYM3ZX.js +26 -0
  282. package/dist/chunk-LNUYM3ZX.js.map +1 -0
  283. package/dist/chunk-LSKNTXY2.js +57 -0
  284. package/dist/chunk-LSKNTXY2.js.map +1 -0
  285. package/dist/chunk-LTEL7NEG.js +219 -0
  286. package/dist/chunk-LTEL7NEG.js.map +1 -0
  287. package/dist/chunk-LTVS74EO.js +45 -0
  288. package/dist/chunk-LTVS74EO.js.map +1 -0
  289. package/dist/chunk-LVDP2QOX.js +99 -0
  290. package/dist/chunk-LVDP2QOX.js.map +1 -0
  291. package/dist/chunk-LWLNQS3O.js +569 -0
  292. package/dist/chunk-LWLNQS3O.js.map +1 -0
  293. package/dist/chunk-LYKZAKVN.js +19 -0
  294. package/dist/chunk-LYKZAKVN.js.map +1 -0
  295. package/dist/chunk-M2NVOKGL.js +97 -0
  296. package/dist/chunk-M2NVOKGL.js.map +1 -0
  297. package/dist/chunk-M3UOD7TX.js +427 -0
  298. package/dist/chunk-M3UOD7TX.js.map +1 -0
  299. package/dist/chunk-M5C4XQO2.js +45 -0
  300. package/dist/chunk-M5C4XQO2.js.map +1 -0
  301. package/dist/chunk-M5DFGJF7.js +10 -0
  302. package/dist/chunk-M5DFGJF7.js.map +1 -0
  303. package/dist/chunk-MAXX5M6N.js +9 -0
  304. package/dist/chunk-MAXX5M6N.js.map +1 -0
  305. package/dist/chunk-MEAGFRLE.js +37 -0
  306. package/dist/chunk-MEAGFRLE.js.map +1 -0
  307. package/dist/chunk-MFYNCWAO.js +25 -0
  308. package/dist/chunk-MFYNCWAO.js.map +1 -0
  309. package/dist/chunk-MJ26PFRF.js +12 -0
  310. package/dist/chunk-MJ26PFRF.js.map +1 -0
  311. package/dist/chunk-MP2GRDUX.js +10 -0
  312. package/dist/chunk-MP2GRDUX.js.map +1 -0
  313. package/dist/chunk-MTQLUS5O.js +51 -0
  314. package/dist/chunk-MTQLUS5O.js.map +1 -0
  315. package/dist/chunk-MUDO3ZPJ.js +10 -0
  316. package/dist/chunk-MUDO3ZPJ.js.map +1 -0
  317. package/dist/chunk-N2Q3TZXW.js +9 -0
  318. package/dist/chunk-N2Q3TZXW.js.map +1 -0
  319. package/dist/chunk-N52KK6K5.js +48 -0
  320. package/dist/chunk-N52KK6K5.js.map +1 -0
  321. package/dist/chunk-N5F2YHLD.js +28 -0
  322. package/dist/chunk-N5F2YHLD.js.map +1 -0
  323. package/dist/chunk-NGX5YDCB.js +7 -0
  324. package/dist/chunk-NGX5YDCB.js.map +1 -0
  325. package/dist/chunk-NHDRXRXA.js +33 -0
  326. package/dist/chunk-NHDRXRXA.js.map +1 -0
  327. package/dist/chunk-NPK5ITEG.js +7 -0
  328. package/dist/chunk-NPK5ITEG.js.map +1 -0
  329. package/dist/chunk-NPTM6BGC.js +15 -0
  330. package/dist/chunk-NPTM6BGC.js.map +1 -0
  331. package/dist/chunk-NTNVW4BG.js +7 -0
  332. package/dist/chunk-NTNVW4BG.js.map +1 -0
  333. package/dist/chunk-OBASYXH2.js +26 -0
  334. package/dist/chunk-OBASYXH2.js.map +1 -0
  335. package/dist/chunk-OBQNTU5F.js +7 -0
  336. package/dist/chunk-OBQNTU5F.js.map +1 -0
  337. package/dist/chunk-OEHNS7YX.js +7 -0
  338. package/dist/chunk-OEHNS7YX.js.map +1 -0
  339. package/dist/chunk-OJAUFHEW.js +107 -0
  340. package/dist/chunk-OJAUFHEW.js.map +1 -0
  341. package/dist/chunk-ONW4BD2Z.js +38 -0
  342. package/dist/chunk-ONW4BD2Z.js.map +1 -0
  343. package/dist/chunk-OOXUZMZ7.js +9 -0
  344. package/dist/chunk-OOXUZMZ7.js.map +1 -0
  345. package/dist/chunk-OP3PIADD.js +45 -0
  346. package/dist/chunk-OP3PIADD.js.map +1 -0
  347. package/dist/chunk-OSDM6ZVT.js +7 -0
  348. package/dist/chunk-OSDM6ZVT.js.map +1 -0
  349. package/dist/chunk-OZEEIRCS.js +9 -0
  350. package/dist/chunk-OZEEIRCS.js.map +1 -0
  351. package/dist/chunk-PGSBJUJ4.js +9 -0
  352. package/dist/chunk-PGSBJUJ4.js.map +1 -0
  353. package/dist/chunk-PPIDZONA.js +38 -0
  354. package/dist/chunk-PPIDZONA.js.map +1 -0
  355. package/dist/chunk-PTMZQ7E3.js +7 -0
  356. package/dist/chunk-PTMZQ7E3.js.map +1 -0
  357. package/dist/chunk-PV24XKW2.js +11 -0
  358. package/dist/chunk-PV24XKW2.js.map +1 -0
  359. package/dist/chunk-PXU563OY.js +26 -0
  360. package/dist/chunk-PXU563OY.js.map +1 -0
  361. package/dist/chunk-Q2XYS26I.js +11 -0
  362. package/dist/chunk-Q2XYS26I.js.map +1 -0
  363. package/dist/chunk-Q5NG3DY7.js +31 -0
  364. package/dist/chunk-Q5NG3DY7.js.map +1 -0
  365. package/dist/chunk-QADXAWA6.js +71 -0
  366. package/dist/chunk-QADXAWA6.js.map +1 -0
  367. package/dist/chunk-QG2FZCJ6.js +7 -0
  368. package/dist/chunk-QG2FZCJ6.js.map +1 -0
  369. package/dist/chunk-QMLGJPHC.js +7 -0
  370. package/dist/chunk-QMLGJPHC.js.map +1 -0
  371. package/dist/chunk-QQKXAEXW.js +50 -0
  372. package/dist/chunk-QQKXAEXW.js.map +1 -0
  373. package/dist/chunk-QS3C4KCF.js +95 -0
  374. package/dist/chunk-QS3C4KCF.js.map +1 -0
  375. package/dist/chunk-R4HNE7TL.js +7 -0
  376. package/dist/chunk-R4HNE7TL.js.map +1 -0
  377. package/dist/chunk-R5PBXGKK.js +10 -0
  378. package/dist/chunk-R5PBXGKK.js.map +1 -0
  379. package/dist/chunk-RFQXCN62.js +13 -0
  380. package/dist/chunk-RFQXCN62.js.map +1 -0
  381. package/dist/chunk-RGPGW4ZJ.js +9 -0
  382. package/dist/chunk-RGPGW4ZJ.js.map +1 -0
  383. package/dist/chunk-RKBRRJY6.js +9 -0
  384. package/dist/chunk-RKBRRJY6.js.map +1 -0
  385. package/dist/chunk-RM6NFJ7V.js +32 -0
  386. package/dist/chunk-RM6NFJ7V.js.map +1 -0
  387. package/dist/chunk-RRYAXULQ.js +48 -0
  388. package/dist/chunk-RRYAXULQ.js.map +1 -0
  389. package/dist/chunk-RS4W2FAL.js +89 -0
  390. package/dist/chunk-RS4W2FAL.js.map +1 -0
  391. package/dist/chunk-RSUFDTAH.js +110 -0
  392. package/dist/chunk-RSUFDTAH.js.map +1 -0
  393. package/dist/chunk-S2XKXJNC.js +30 -0
  394. package/dist/chunk-S2XKXJNC.js.map +1 -0
  395. package/dist/chunk-S4NKJDRC.js +79 -0
  396. package/dist/chunk-S4NKJDRC.js.map +1 -0
  397. package/dist/chunk-S7QGB2FC.js +27 -0
  398. package/dist/chunk-S7QGB2FC.js.map +1 -0
  399. package/dist/chunk-SCL4FW6F.js +425 -0
  400. package/dist/chunk-SCL4FW6F.js.map +1 -0
  401. package/dist/chunk-SITF6GNM.js +7 -0
  402. package/dist/chunk-SITF6GNM.js.map +1 -0
  403. package/dist/chunk-SPCINICO.js +5 -0
  404. package/dist/chunk-SPCINICO.js.map +1 -0
  405. package/dist/chunk-SPOTTHMN.js +24 -0
  406. package/dist/chunk-SPOTTHMN.js.map +1 -0
  407. package/dist/chunk-SWYNIQHD.js +77 -0
  408. package/dist/chunk-SWYNIQHD.js.map +1 -0
  409. package/dist/chunk-SXXITYPP.js +69 -0
  410. package/dist/chunk-SXXITYPP.js.map +1 -0
  411. package/dist/chunk-T4YZKI3Y.js +133 -0
  412. package/dist/chunk-T4YZKI3Y.js.map +1 -0
  413. package/dist/chunk-T7AIKZ6A.js +44 -0
  414. package/dist/chunk-T7AIKZ6A.js.map +1 -0
  415. package/dist/chunk-T7EX6RI2.js +34 -0
  416. package/dist/chunk-T7EX6RI2.js.map +1 -0
  417. package/dist/chunk-TB3GE2MH.js +93 -0
  418. package/dist/chunk-TB3GE2MH.js.map +1 -0
  419. package/dist/chunk-TE4JFCHB.js +52 -0
  420. package/dist/chunk-TE4JFCHB.js.map +1 -0
  421. package/dist/chunk-TGQYCEFL.js +37 -0
  422. package/dist/chunk-TGQYCEFL.js.map +1 -0
  423. package/dist/chunk-TMTWPBFD.js +10 -0
  424. package/dist/chunk-TMTWPBFD.js.map +1 -0
  425. package/dist/chunk-TSAEQFDM.js +65 -0
  426. package/dist/chunk-TSAEQFDM.js.map +1 -0
  427. package/dist/chunk-U3FX24C6.js +1 -0
  428. package/dist/chunk-U3FX24C6.js.map +1 -0
  429. package/dist/chunk-U776U22S.js +45 -0
  430. package/dist/chunk-U776U22S.js.map +1 -0
  431. package/dist/chunk-UCBDCGYX.js +9 -0
  432. package/dist/chunk-UCBDCGYX.js.map +1 -0
  433. package/dist/chunk-UGNYASFC.js +59 -0
  434. package/dist/chunk-UGNYASFC.js.map +1 -0
  435. package/dist/chunk-UJTVBENE.js +7 -0
  436. package/dist/chunk-UJTVBENE.js.map +1 -0
  437. package/dist/chunk-UKVFVAOO.js +75 -0
  438. package/dist/chunk-UKVFVAOO.js.map +1 -0
  439. package/dist/chunk-URKWHZXA.js +25 -0
  440. package/dist/chunk-URKWHZXA.js.map +1 -0
  441. package/dist/chunk-UVKRO5ER.js +13 -0
  442. package/dist/chunk-UVKRO5ER.js.map +1 -0
  443. package/dist/chunk-V3D7FBSR.js +14 -0
  444. package/dist/chunk-V3D7FBSR.js.map +1 -0
  445. package/dist/chunk-VCVMCKZI.js +10 -0
  446. package/dist/chunk-VCVMCKZI.js.map +1 -0
  447. package/dist/chunk-VNGMGQF5.js +1 -0
  448. package/dist/chunk-VNGMGQF5.js.map +1 -0
  449. package/dist/chunk-VSK7766S.js +163 -0
  450. package/dist/chunk-VSK7766S.js.map +1 -0
  451. package/dist/chunk-VZLDFZC7.js +241 -0
  452. package/dist/chunk-VZLDFZC7.js.map +1 -0
  453. package/dist/chunk-W2KUESDN.js +25 -0
  454. package/dist/chunk-W2KUESDN.js.map +1 -0
  455. package/dist/chunk-W2SHHRYX.js +420 -0
  456. package/dist/chunk-W2SHHRYX.js.map +1 -0
  457. package/dist/chunk-WBLZ5GBM.js +158 -0
  458. package/dist/chunk-WBLZ5GBM.js.map +1 -0
  459. package/dist/chunk-WODJ2VQH.js +41 -0
  460. package/dist/chunk-WODJ2VQH.js.map +1 -0
  461. package/dist/chunk-WQXLL5IV.js +9 -0
  462. package/dist/chunk-WQXLL5IV.js.map +1 -0
  463. package/dist/chunk-WR3327CL.js +89 -0
  464. package/dist/chunk-WR3327CL.js.map +1 -0
  465. package/dist/chunk-WSBH5QD6.js +309 -0
  466. package/dist/chunk-WSBH5QD6.js.map +1 -0
  467. package/dist/chunk-WTHHXWQM.js +7 -0
  468. package/dist/chunk-WTHHXWQM.js.map +1 -0
  469. package/dist/chunk-WW56NFQS.js +7 -0
  470. package/dist/chunk-WW56NFQS.js.map +1 -0
  471. package/dist/chunk-WYVXNXZI.js +73 -0
  472. package/dist/chunk-WYVXNXZI.js.map +1 -0
  473. package/dist/chunk-X3MYMAS2.js +56 -0
  474. package/dist/chunk-X3MYMAS2.js.map +1 -0
  475. package/dist/chunk-X7CDYCQF.js +22 -0
  476. package/dist/chunk-X7CDYCQF.js.map +1 -0
  477. package/dist/chunk-XGVDXMS3.js +90 -0
  478. package/dist/chunk-XGVDXMS3.js.map +1 -0
  479. package/dist/chunk-XHXIXEGS.js +7 -0
  480. package/dist/chunk-XHXIXEGS.js.map +1 -0
  481. package/dist/chunk-XJ6HO3WP.js +46 -0
  482. package/dist/chunk-XJ6HO3WP.js.map +1 -0
  483. package/dist/chunk-XMR6HHTA.js +59 -0
  484. package/dist/chunk-XMR6HHTA.js.map +1 -0
  485. package/dist/chunk-XR2KBJIP.js +54 -0
  486. package/dist/chunk-XR2KBJIP.js.map +1 -0
  487. package/dist/chunk-XVN5W3A7.js +50 -0
  488. package/dist/chunk-XVN5W3A7.js.map +1 -0
  489. package/dist/chunk-XXYOJDOZ.js +11 -0
  490. package/dist/chunk-XXYOJDOZ.js.map +1 -0
  491. package/dist/chunk-XZROR7RJ.js +25 -0
  492. package/dist/chunk-XZROR7RJ.js.map +1 -0
  493. package/dist/chunk-YF3LWJL4.js +7 -0
  494. package/dist/chunk-YF3LWJL4.js.map +1 -0
  495. package/dist/chunk-YFM4P3Z3.js +309 -0
  496. package/dist/chunk-YFM4P3Z3.js.map +1 -0
  497. package/dist/chunk-YFVOBSKP.js +52 -0
  498. package/dist/chunk-YFVOBSKP.js.map +1 -0
  499. package/dist/chunk-YFZW72PC.js +45 -0
  500. package/dist/chunk-YFZW72PC.js.map +1 -0
  501. package/dist/chunk-YHTCXXEG.js +9 -0
  502. package/dist/chunk-YHTCXXEG.js.map +1 -0
  503. package/dist/chunk-YJVUJ6AA.js +93 -0
  504. package/dist/chunk-YJVUJ6AA.js.map +1 -0
  505. package/dist/chunk-YKB67FZ5.js +46 -0
  506. package/dist/chunk-YKB67FZ5.js.map +1 -0
  507. package/dist/chunk-YS2PK7QA.js +35 -0
  508. package/dist/chunk-YS2PK7QA.js.map +1 -0
  509. package/dist/chunk-YURDFQ6X.js +33 -0
  510. package/dist/chunk-YURDFQ6X.js.map +1 -0
  511. package/dist/chunk-YVCKIDL5.js +61 -0
  512. package/dist/chunk-YVCKIDL5.js.map +1 -0
  513. package/dist/chunk-YXO6NQ4E.js +49 -0
  514. package/dist/chunk-YXO6NQ4E.js.map +1 -0
  515. package/dist/chunk-Z2AEG3J7.js +53 -0
  516. package/dist/chunk-Z2AEG3J7.js.map +1 -0
  517. package/dist/chunk-Z4I2MQ7B.js +26 -0
  518. package/dist/chunk-Z4I2MQ7B.js.map +1 -0
  519. package/dist/chunk-ZBPKZKIJ.js +25 -0
  520. package/dist/chunk-ZBPKZKIJ.js.map +1 -0
  521. package/dist/chunk-ZCMJVQ6P.js +10 -0
  522. package/dist/chunk-ZCMJVQ6P.js.map +1 -0
  523. package/dist/chunk-ZCQ5UWVE.js +27 -0
  524. package/dist/chunk-ZCQ5UWVE.js.map +1 -0
  525. package/dist/chunk-ZFCTBLWX.js +12 -0
  526. package/dist/chunk-ZFCTBLWX.js.map +1 -0
  527. package/dist/chunk-ZJ6KVLUS.js +296 -0
  528. package/dist/chunk-ZJ6KVLUS.js.map +1 -0
  529. package/dist/chunk-ZRCFHUS4.js +37 -0
  530. package/dist/chunk-ZRCFHUS4.js.map +1 -0
  531. package/dist/chunk-ZSB6HGB5.js +50 -0
  532. package/dist/chunk-ZSB6HGB5.js.map +1 -0
  533. package/dist/chunk-ZSG6ROJA.js +45 -0
  534. package/dist/chunk-ZSG6ROJA.js.map +1 -0
  535. package/dist/chunk-ZSQIEOQO.js +61 -0
  536. package/dist/chunk-ZSQIEOQO.js.map +1 -0
  537. package/dist/chunk-ZTMXXISI.js +158 -0
  538. package/dist/chunk-ZTMXXISI.js.map +1 -0
  539. package/dist/chunk-ZUMPSWHW.js +138 -0
  540. package/dist/chunk-ZUMPSWHW.js.map +1 -0
  541. package/dist/chunk-ZUYSQ37E.js +88 -0
  542. package/dist/chunk-ZUYSQ37E.js.map +1 -0
  543. package/dist/components/base/index.cjs +156 -0
  544. package/dist/components/base/index.cjs.map +1 -0
  545. package/dist/components/base/index.js +15 -0
  546. package/dist/components/base/index.js.map +1 -0
  547. package/dist/components/base/types.cjs +19 -0
  548. package/dist/components/base/types.cjs.map +1 -0
  549. package/dist/components/base/types.js +1 -0
  550. package/dist/components/base/types.js.map +1 -0
  551. package/dist/components/buffer.cjs +184 -0
  552. package/dist/components/buffer.cjs.map +1 -0
  553. package/dist/components/buffer.js +18 -0
  554. package/dist/components/buffer.js.map +1 -0
  555. package/dist/components/captionsview.cjs +378 -0
  556. package/dist/components/captionsview.cjs.map +1 -0
  557. package/dist/components/captionsview.js +22 -0
  558. package/dist/components/captionsview.js.map +1 -0
  559. package/dist/components/controls/airplay.cjs +441 -0
  560. package/dist/components/controls/airplay.cjs.map +1 -0
  561. package/dist/components/controls/airplay.js +21 -0
  562. package/dist/components/controls/airplay.js.map +1 -0
  563. package/dist/components/controls/backward10.cjs +427 -0
  564. package/dist/components/controls/backward10.cjs.map +1 -0
  565. package/dist/components/controls/backward10.js +21 -0
  566. package/dist/components/controls/backward10.js.map +1 -0
  567. package/dist/components/controls/bignext.cjs +448 -0
  568. package/dist/components/controls/bignext.cjs.map +1 -0
  569. package/dist/components/controls/bignext.js +21 -0
  570. package/dist/components/controls/bignext.js.map +1 -0
  571. package/dist/components/controls/bigplaypause.cjs +440 -0
  572. package/dist/components/controls/bigplaypause.cjs.map +1 -0
  573. package/dist/components/controls/bigplaypause.js +21 -0
  574. package/dist/components/controls/bigplaypause.js.map +1 -0
  575. package/dist/components/controls/bigprev.cjs +448 -0
  576. package/dist/components/controls/bigprev.cjs.map +1 -0
  577. package/dist/components/controls/bigprev.js +21 -0
  578. package/dist/components/controls/bigprev.js.map +1 -0
  579. package/dist/components/controls/brightness/index.cjs +767 -0
  580. package/dist/components/controls/brightness/index.cjs.map +1 -0
  581. package/dist/components/controls/brightness/index.js +25 -0
  582. package/dist/components/controls/brightness/index.js.map +1 -0
  583. package/dist/components/controls/brightness/slider.cjs +460 -0
  584. package/dist/components/controls/brightness/slider.cjs.map +1 -0
  585. package/dist/components/controls/brightness/slider.js +21 -0
  586. package/dist/components/controls/brightness/slider.js.map +1 -0
  587. package/dist/components/controls/captions.cjs +452 -0
  588. package/dist/components/controls/captions.cjs.map +1 -0
  589. package/dist/components/controls/captions.js +21 -0
  590. package/dist/components/controls/captions.js.map +1 -0
  591. package/dist/components/controls/capture.cjs +455 -0
  592. package/dist/components/controls/capture.cjs.map +1 -0
  593. package/dist/components/controls/capture.js +21 -0
  594. package/dist/components/controls/capture.js.map +1 -0
  595. package/dist/components/controls/cast.cjs +441 -0
  596. package/dist/components/controls/cast.cjs.map +1 -0
  597. package/dist/components/controls/cast.js +21 -0
  598. package/dist/components/controls/cast.js.map +1 -0
  599. package/dist/components/controls/chapter.cjs +213 -0
  600. package/dist/components/controls/chapter.cjs.map +1 -0
  601. package/dist/components/controls/chapter.js +18 -0
  602. package/dist/components/controls/chapter.js.map +1 -0
  603. package/dist/components/controls/duration.cjs +217 -0
  604. package/dist/components/controls/duration.cjs.map +1 -0
  605. package/dist/components/controls/duration.js +18 -0
  606. package/dist/components/controls/duration.js.map +1 -0
  607. package/dist/components/controls/expandminiplayer.cjs +430 -0
  608. package/dist/components/controls/expandminiplayer.cjs.map +1 -0
  609. package/dist/components/controls/expandminiplayer.js +21 -0
  610. package/dist/components/controls/expandminiplayer.js.map +1 -0
  611. package/dist/components/controls/forward10.cjs +427 -0
  612. package/dist/components/controls/forward10.cjs.map +1 -0
  613. package/dist/components/controls/forward10.js +21 -0
  614. package/dist/components/controls/forward10.js.map +1 -0
  615. package/dist/components/controls/fullscreen.cjs +441 -0
  616. package/dist/components/controls/fullscreen.cjs.map +1 -0
  617. package/dist/components/controls/fullscreen.js +21 -0
  618. package/dist/components/controls/fullscreen.js.map +1 -0
  619. package/dist/components/controls/fullscreenlock.cjs +433 -0
  620. package/dist/components/controls/fullscreenlock.cjs.map +1 -0
  621. package/dist/components/controls/fullscreenlock.js +21 -0
  622. package/dist/components/controls/fullscreenlock.js.map +1 -0
  623. package/dist/components/controls/fullscreenorientation.cjs +436 -0
  624. package/dist/components/controls/fullscreenorientation.cjs.map +1 -0
  625. package/dist/components/controls/fullscreenorientation.js +21 -0
  626. package/dist/components/controls/fullscreenorientation.js.map +1 -0
  627. package/dist/components/controls/meta.cjs +298 -0
  628. package/dist/components/controls/meta.cjs.map +1 -0
  629. package/dist/components/controls/meta.js +18 -0
  630. package/dist/components/controls/meta.js.map +1 -0
  631. package/dist/components/controls/next.cjs +444 -0
  632. package/dist/components/controls/next.cjs.map +1 -0
  633. package/dist/components/controls/next.js +21 -0
  634. package/dist/components/controls/next.js.map +1 -0
  635. package/dist/components/controls/objectfit.cjs +444 -0
  636. package/dist/components/controls/objectfit.cjs.map +1 -0
  637. package/dist/components/controls/objectfit.js +21 -0
  638. package/dist/components/controls/objectfit.js.map +1 -0
  639. package/dist/components/controls/pictureinpicture.cjs +441 -0
  640. package/dist/components/controls/pictureinpicture.cjs.map +1 -0
  641. package/dist/components/controls/pictureinpicture.js +21 -0
  642. package/dist/components/controls/pictureinpicture.js.map +1 -0
  643. package/dist/components/controls/playpause.cjs +441 -0
  644. package/dist/components/controls/playpause.cjs.map +1 -0
  645. package/dist/components/controls/playpause.js +21 -0
  646. package/dist/components/controls/playpause.js.map +1 -0
  647. package/dist/components/controls/prev.cjs +444 -0
  648. package/dist/components/controls/prev.cjs.map +1 -0
  649. package/dist/components/controls/prev.js +21 -0
  650. package/dist/components/controls/prev.js.map +1 -0
  651. package/dist/components/controls/removeminiplayer.cjs +432 -0
  652. package/dist/components/controls/removeminiplayer.cjs.map +1 -0
  653. package/dist/components/controls/removeminiplayer.js +21 -0
  654. package/dist/components/controls/removeminiplayer.js.map +1 -0
  655. package/dist/components/controls/settings.cjs +443 -0
  656. package/dist/components/controls/settings.cjs.map +1 -0
  657. package/dist/components/controls/settings.js +21 -0
  658. package/dist/components/controls/settings.js.map +1 -0
  659. package/dist/components/controls/theater.cjs +441 -0
  660. package/dist/components/controls/theater.cjs.map +1 -0
  661. package/dist/components/controls/theater.js +21 -0
  662. package/dist/components/controls/theater.js.map +1 -0
  663. package/dist/components/controls/time.cjs +230 -0
  664. package/dist/components/controls/time.cjs.map +1 -0
  665. package/dist/components/controls/time.js +18 -0
  666. package/dist/components/controls/time.js.map +1 -0
  667. package/dist/components/controls/timeandduration.cjs +251 -0
  668. package/dist/components/controls/timeandduration.cjs.map +1 -0
  669. package/dist/components/controls/timeandduration.js +18 -0
  670. package/dist/components/controls/timeandduration.js.map +1 -0
  671. package/dist/components/controls/timeline/index.cjs +713 -0
  672. package/dist/components/controls/timeline/index.cjs.map +1 -0
  673. package/dist/components/controls/timeline/index.js +25 -0
  674. package/dist/components/controls/timeline/index.js.map +1 -0
  675. package/dist/components/controls/timeline/types.cjs +19 -0
  676. package/dist/components/controls/timeline/types.cjs.map +1 -0
  677. package/dist/components/controls/timeline/types.js +1 -0
  678. package/dist/components/controls/timeline/types.js.map +1 -0
  679. package/dist/components/controls/volume/index.cjs +767 -0
  680. package/dist/components/controls/volume/index.cjs.map +1 -0
  681. package/dist/components/controls/volume/index.js +25 -0
  682. package/dist/components/controls/volume/index.js.map +1 -0
  683. package/dist/components/controls/volume/slider.cjs +460 -0
  684. package/dist/components/controls/volume/slider.cjs.map +1 -0
  685. package/dist/components/controls/volume/slider.js +21 -0
  686. package/dist/components/controls/volume/slider.js.map +1 -0
  687. package/dist/components/holders/airplayplaceholder.cjs +446 -0
  688. package/dist/components/holders/airplayplaceholder.cjs.map +1 -0
  689. package/dist/components/holders/airplayplaceholder.js +21 -0
  690. package/dist/components/holders/airplayplaceholder.js.map +1 -0
  691. package/dist/components/holders/castplaceholder.cjs +446 -0
  692. package/dist/components/holders/castplaceholder.cjs.map +1 -0
  693. package/dist/components/holders/castplaceholder.js +21 -0
  694. package/dist/components/holders/castplaceholder.js.map +1 -0
  695. package/dist/components/holders/pipplaceholder.cjs +446 -0
  696. package/dist/components/holders/pipplaceholder.cjs.map +1 -0
  697. package/dist/components/holders/pipplaceholder.js +30 -0
  698. package/dist/components/holders/pipplaceholder.js.map +1 -0
  699. package/dist/components/icons/add.cjs +27 -0
  700. package/dist/components/icons/add.cjs.map +1 -0
  701. package/dist/components/icons/add.js +8 -0
  702. package/dist/components/icons/add.js.map +1 -0
  703. package/dist/components/icons/airplay.cjs +30 -0
  704. package/dist/components/icons/airplay.cjs.map +1 -0
  705. package/dist/components/icons/airplay.js +8 -0
  706. package/dist/components/icons/airplay.js.map +1 -0
  707. package/dist/components/icons/airplayplaceholder.cjs +39 -0
  708. package/dist/components/icons/airplayplaceholder.cjs.map +1 -0
  709. package/dist/components/icons/airplayplaceholder.js +8 -0
  710. package/dist/components/icons/airplayplaceholder.js.map +1 -0
  711. package/dist/components/icons/ambience.cjs +27 -0
  712. package/dist/components/icons/ambience.cjs.map +1 -0
  713. package/dist/components/icons/ambience.js +8 -0
  714. package/dist/components/icons/ambience.js.map +1 -0
  715. package/dist/components/icons/audiotrack.cjs +27 -0
  716. package/dist/components/icons/audiotrack.cjs.map +1 -0
  717. package/dist/components/icons/audiotrack.js +8 -0
  718. package/dist/components/icons/audiotrack.js.map +1 -0
  719. package/dist/components/icons/autoplay.cjs +27 -0
  720. package/dist/components/icons/autoplay.cjs.map +1 -0
  721. package/dist/components/icons/autoplay.js +8 -0
  722. package/dist/components/icons/autoplay.js.map +1 -0
  723. package/dist/components/icons/backward10.cjs +29 -0
  724. package/dist/components/icons/backward10.cjs.map +1 -0
  725. package/dist/components/icons/backward10.js +8 -0
  726. package/dist/components/icons/backward10.js.map +1 -0
  727. package/dist/components/icons/brightnessdark.cjs +29 -0
  728. package/dist/components/icons/brightnessdark.cjs.map +1 -0
  729. package/dist/components/icons/brightnessdark.js +8 -0
  730. package/dist/components/icons/brightnessdark.js.map +1 -0
  731. package/dist/components/icons/brightnesshigh.cjs +29 -0
  732. package/dist/components/icons/brightnesshigh.cjs.map +1 -0
  733. package/dist/components/icons/brightnesshigh.js +8 -0
  734. package/dist/components/icons/brightnesshigh.js.map +1 -0
  735. package/dist/components/icons/brightnesslow.cjs +29 -0
  736. package/dist/components/icons/brightnesslow.cjs.map +1 -0
  737. package/dist/components/icons/brightnesslow.js +8 -0
  738. package/dist/components/icons/brightnesslow.js.map +1 -0
  739. package/dist/components/icons/bwd.cjs +31 -0
  740. package/dist/components/icons/bwd.cjs.map +1 -0
  741. package/dist/components/icons/bwd.js +8 -0
  742. package/dist/components/icons/bwd.js.map +1 -0
  743. package/dist/components/icons/captions.cjs +29 -0
  744. package/dist/components/icons/captions.cjs.map +1 -0
  745. package/dist/components/icons/captions.js +8 -0
  746. package/dist/components/icons/captions.js.map +1 -0
  747. package/dist/components/icons/capture.cjs +29 -0
  748. package/dist/components/icons/capture.cjs.map +1 -0
  749. package/dist/components/icons/capture.js +8 -0
  750. package/dist/components/icons/capture.js.map +1 -0
  751. package/dist/components/icons/cast.cjs +29 -0
  752. package/dist/components/icons/cast.cjs.map +1 -0
  753. package/dist/components/icons/cast.js +8 -0
  754. package/dist/components/icons/cast.js.map +1 -0
  755. package/dist/components/icons/castplaceholder.cjs +42 -0
  756. package/dist/components/icons/castplaceholder.cjs.map +1 -0
  757. package/dist/components/icons/castplaceholder.js +8 -0
  758. package/dist/components/icons/castplaceholder.js.map +1 -0
  759. package/dist/components/icons/chapters.cjs +27 -0
  760. package/dist/components/icons/chapters.cjs.map +1 -0
  761. package/dist/components/icons/chapters.js +8 -0
  762. package/dist/components/icons/chapters.js.map +1 -0
  763. package/dist/components/icons/configure.cjs +27 -0
  764. package/dist/components/icons/configure.cjs.map +1 -0
  765. package/dist/components/icons/configure.js +8 -0
  766. package/dist/components/icons/configure.js.map +1 -0
  767. package/dist/components/icons/deleteicon.cjs +27 -0
  768. package/dist/components/icons/deleteicon.cjs.map +1 -0
  769. package/dist/components/icons/deleteicon.js +8 -0
  770. package/dist/components/icons/deleteicon.js.map +1 -0
  771. package/dist/components/icons/doubletriangleleft.cjs +27 -0
  772. package/dist/components/icons/doubletriangleleft.cjs.map +1 -0
  773. package/dist/components/icons/doubletriangleleft.js +8 -0
  774. package/dist/components/icons/doubletriangleleft.js.map +1 -0
  775. package/dist/components/icons/doubletriangleright.cjs +27 -0
  776. package/dist/components/icons/doubletriangleright.cjs.map +1 -0
  777. package/dist/components/icons/doubletriangleright.js +8 -0
  778. package/dist/components/icons/doubletriangleright.js.map +1 -0
  779. package/dist/components/icons/dragindicator.cjs +27 -0
  780. package/dist/components/icons/dragindicator.cjs.map +1 -0
  781. package/dist/components/icons/dragindicator.js +8 -0
  782. package/dist/components/icons/dragindicator.js.map +1 -0
  783. package/dist/components/icons/edit.cjs +27 -0
  784. package/dist/components/icons/edit.cjs.map +1 -0
  785. package/dist/components/icons/edit.js +8 -0
  786. package/dist/components/icons/edit.js.map +1 -0
  787. package/dist/components/icons/enterfullscreen.cjs +32 -0
  788. package/dist/components/icons/enterfullscreen.cjs.map +1 -0
  789. package/dist/components/icons/enterfullscreen.js +8 -0
  790. package/dist/components/icons/enterfullscreen.js.map +1 -0
  791. package/dist/components/icons/enterpip.cjs +29 -0
  792. package/dist/components/icons/enterpip.cjs.map +1 -0
  793. package/dist/components/icons/enterpip.js +8 -0
  794. package/dist/components/icons/enterpip.js.map +1 -0
  795. package/dist/components/icons/entertheater.cjs +29 -0
  796. package/dist/components/icons/entertheater.cjs.map +1 -0
  797. package/dist/components/icons/entertheater.js +8 -0
  798. package/dist/components/icons/entertheater.js.map +1 -0
  799. package/dist/components/icons/expandminiplayer.cjs +29 -0
  800. package/dist/components/icons/expandminiplayer.cjs.map +1 -0
  801. package/dist/components/icons/expandminiplayer.js +8 -0
  802. package/dist/components/icons/expandminiplayer.js.map +1 -0
  803. package/dist/components/icons/forward10.cjs +29 -0
  804. package/dist/components/icons/forward10.cjs.map +1 -0
  805. package/dist/components/icons/forward10.js +8 -0
  806. package/dist/components/icons/forward10.js.map +1 -0
  807. package/dist/components/icons/fullscreenorientation.cjs +30 -0
  808. package/dist/components/icons/fullscreenorientation.cjs.map +1 -0
  809. package/dist/components/icons/fullscreenorientation.js +8 -0
  810. package/dist/components/icons/fullscreenorientation.js.map +1 -0
  811. package/dist/components/icons/fwd.cjs +31 -0
  812. package/dist/components/icons/fwd.cjs.map +1 -0
  813. package/dist/components/icons/fwd.js +8 -0
  814. package/dist/components/icons/fwd.js.map +1 -0
  815. package/dist/components/icons/leavefullscreen.cjs +32 -0
  816. package/dist/components/icons/leavefullscreen.cjs.map +1 -0
  817. package/dist/components/icons/leavefullscreen.js +8 -0
  818. package/dist/components/icons/leavefullscreen.js.map +1 -0
  819. package/dist/components/icons/leavepip.cjs +29 -0
  820. package/dist/components/icons/leavepip.cjs.map +1 -0
  821. package/dist/components/icons/leavepip.js +8 -0
  822. package/dist/components/icons/leavepip.js.map +1 -0
  823. package/dist/components/icons/leavetheater.cjs +29 -0
  824. package/dist/components/icons/leavetheater.cjs.map +1 -0
  825. package/dist/components/icons/leavetheater.js +8 -0
  826. package/dist/components/icons/leavetheater.js.map +1 -0
  827. package/dist/components/icons/lock.cjs +30 -0
  828. package/dist/components/icons/lock.cjs.map +1 -0
  829. package/dist/components/icons/lock.js +8 -0
  830. package/dist/components/icons/lock.js.map +1 -0
  831. package/dist/components/icons/loop.cjs +27 -0
  832. package/dist/components/icons/loop.cjs.map +1 -0
  833. package/dist/components/icons/loop.js +8 -0
  834. package/dist/components/icons/loop.js.map +1 -0
  835. package/dist/components/icons/next.cjs +30 -0
  836. package/dist/components/icons/next.cjs.map +1 -0
  837. package/dist/components/icons/next.js +8 -0
  838. package/dist/components/icons/next.js.map +1 -0
  839. package/dist/components/icons/objectfitcontain.cjs +32 -0
  840. package/dist/components/icons/objectfitcontain.cjs.map +1 -0
  841. package/dist/components/icons/objectfitcontain.js +8 -0
  842. package/dist/components/icons/objectfitcontain.js.map +1 -0
  843. package/dist/components/icons/objectfitcover.cjs +32 -0
  844. package/dist/components/icons/objectfitcover.cjs.map +1 -0
  845. package/dist/components/icons/objectfitcover.js +8 -0
  846. package/dist/components/icons/objectfitcover.js.map +1 -0
  847. package/dist/components/icons/objectfitfill.cjs +32 -0
  848. package/dist/components/icons/objectfitfill.cjs.map +1 -0
  849. package/dist/components/icons/objectfitfill.js +8 -0
  850. package/dist/components/icons/objectfitfill.js.map +1 -0
  851. package/dist/components/icons/pause.cjs +29 -0
  852. package/dist/components/icons/pause.cjs.map +1 -0
  853. package/dist/components/icons/pause.js +8 -0
  854. package/dist/components/icons/pause.js.map +1 -0
  855. package/dist/components/icons/pipplaceholder.cjs +50 -0
  856. package/dist/components/icons/pipplaceholder.cjs.map +1 -0
  857. package/dist/components/icons/pipplaceholder.js +8 -0
  858. package/dist/components/icons/pipplaceholder.js.map +1 -0
  859. package/dist/components/icons/play.cjs +29 -0
  860. package/dist/components/icons/play.cjs.map +1 -0
  861. package/dist/components/icons/play.js +8 -0
  862. package/dist/components/icons/play.js.map +1 -0
  863. package/dist/components/icons/playbackrate.cjs +27 -0
  864. package/dist/components/icons/playbackrate.cjs.map +1 -0
  865. package/dist/components/icons/playbackrate.js +8 -0
  866. package/dist/components/icons/playbackrate.js.map +1 -0
  867. package/dist/components/icons/playlist.cjs +27 -0
  868. package/dist/components/icons/playlist.cjs.map +1 -0
  869. package/dist/components/icons/playlist.js +8 -0
  870. package/dist/components/icons/playlist.js.map +1 -0
  871. package/dist/components/icons/prev.cjs +30 -0
  872. package/dist/components/icons/prev.cjs.map +1 -0
  873. package/dist/components/icons/prev.js +8 -0
  874. package/dist/components/icons/prev.js.map +1 -0
  875. package/dist/components/icons/quality.cjs +27 -0
  876. package/dist/components/icons/quality.cjs.map +1 -0
  877. package/dist/components/icons/quality.js +8 -0
  878. package/dist/components/icons/quality.js.map +1 -0
  879. package/dist/components/icons/removeminiplayer.cjs +29 -0
  880. package/dist/components/icons/removeminiplayer.cjs.map +1 -0
  881. package/dist/components/icons/removeminiplayer.js +8 -0
  882. package/dist/components/icons/removeminiplayer.js.map +1 -0
  883. package/dist/components/icons/replay.cjs +29 -0
  884. package/dist/components/icons/replay.cjs.map +1 -0
  885. package/dist/components/icons/replay.js +8 -0
  886. package/dist/components/icons/replay.js.map +1 -0
  887. package/dist/components/icons/returnback.cjs +30 -0
  888. package/dist/components/icons/returnback.cjs.map +1 -0
  889. package/dist/components/icons/returnback.js +8 -0
  890. package/dist/components/icons/returnback.js.map +1 -0
  891. package/dist/components/icons/settings.cjs +29 -0
  892. package/dist/components/icons/settings.cjs.map +1 -0
  893. package/dist/components/icons/settings.js +8 -0
  894. package/dist/components/icons/settings.js.map +1 -0
  895. package/dist/components/icons/shuffle.cjs +27 -0
  896. package/dist/components/icons/shuffle.cjs.map +1 -0
  897. package/dist/components/icons/shuffle.js +8 -0
  898. package/dist/components/icons/shuffle.js.map +1 -0
  899. package/dist/components/icons/subtitles.cjs +29 -0
  900. package/dist/components/icons/subtitles.cjs.map +1 -0
  901. package/dist/components/icons/subtitles.js +8 -0
  902. package/dist/components/icons/subtitles.js.map +1 -0
  903. package/dist/components/icons/timer.cjs +27 -0
  904. package/dist/components/icons/timer.cjs.map +1 -0
  905. package/dist/components/icons/timer.js +8 -0
  906. package/dist/components/icons/timer.js.map +1 -0
  907. package/dist/components/icons/triangleleft.cjs +29 -0
  908. package/dist/components/icons/triangleleft.cjs.map +1 -0
  909. package/dist/components/icons/triangleleft.js +8 -0
  910. package/dist/components/icons/triangleleft.js.map +1 -0
  911. package/dist/components/icons/tripletriangleleft.cjs +27 -0
  912. package/dist/components/icons/tripletriangleleft.cjs.map +1 -0
  913. package/dist/components/icons/tripletriangleleft.js +8 -0
  914. package/dist/components/icons/tripletriangleleft.js.map +1 -0
  915. package/dist/components/icons/tripletriangleright.cjs +27 -0
  916. package/dist/components/icons/tripletriangleright.cjs.map +1 -0
  917. package/dist/components/icons/tripletriangleright.js +8 -0
  918. package/dist/components/icons/tripletriangleright.js.map +1 -0
  919. package/dist/components/icons/unlock.cjs +30 -0
  920. package/dist/components/icons/unlock.cjs.map +1 -0
  921. package/dist/components/icons/unlock.js +8 -0
  922. package/dist/components/icons/unlock.js.map +1 -0
  923. package/dist/components/icons/videotrack.cjs +27 -0
  924. package/dist/components/icons/videotrack.cjs.map +1 -0
  925. package/dist/components/icons/videotrack.js +8 -0
  926. package/dist/components/icons/videotrack.js.map +1 -0
  927. package/dist/components/icons/volumehigh.cjs +29 -0
  928. package/dist/components/icons/volumehigh.cjs.map +1 -0
  929. package/dist/components/icons/volumehigh.js +8 -0
  930. package/dist/components/icons/volumehigh.js.map +1 -0
  931. package/dist/components/icons/volumelow.cjs +29 -0
  932. package/dist/components/icons/volumelow.cjs.map +1 -0
  933. package/dist/components/icons/volumelow.js +8 -0
  934. package/dist/components/icons/volumelow.js.map +1 -0
  935. package/dist/components/icons/volumemuted.cjs +29 -0
  936. package/dist/components/icons/volumemuted.cjs.map +1 -0
  937. package/dist/components/icons/volumemuted.js +8 -0
  938. package/dist/components/icons/volumemuted.js.map +1 -0
  939. package/dist/components/icons/z-register.cjs +633 -0
  940. package/dist/components/icons/z-register.cjs.map +1 -0
  941. package/dist/components/icons/z-register.js +66 -0
  942. package/dist/components/icons/z-register.js.map +1 -0
  943. package/dist/components/notifiers/airplay.cjs +450 -0
  944. package/dist/components/notifiers/airplay.cjs.map +1 -0
  945. package/dist/components/notifiers/airplay.js +22 -0
  946. package/dist/components/notifiers/airplay.js.map +1 -0
  947. package/dist/components/notifiers/base.cjs +191 -0
  948. package/dist/components/notifiers/base.cjs.map +1 -0
  949. package/dist/components/notifiers/base.js +16 -0
  950. package/dist/components/notifiers/base.js.map +1 -0
  951. package/dist/components/notifiers/brightness.cjs +469 -0
  952. package/dist/components/notifiers/brightness.cjs.map +1 -0
  953. package/dist/components/notifiers/brightness.js +22 -0
  954. package/dist/components/notifiers/brightness.js.map +1 -0
  955. package/dist/components/notifiers/cancelscrub.cjs +216 -0
  956. package/dist/components/notifiers/cancelscrub.cjs.map +1 -0
  957. package/dist/components/notifiers/cancelscrub.js +19 -0
  958. package/dist/components/notifiers/cancelscrub.js.map +1 -0
  959. package/dist/components/notifiers/captions.cjs +450 -0
  960. package/dist/components/notifiers/captions.cjs.map +1 -0
  961. package/dist/components/notifiers/captions.js +22 -0
  962. package/dist/components/notifiers/captions.js.map +1 -0
  963. package/dist/components/notifiers/capture.cjs +450 -0
  964. package/dist/components/notifiers/capture.cjs.map +1 -0
  965. package/dist/components/notifiers/capture.js +22 -0
  966. package/dist/components/notifiers/capture.js.map +1 -0
  967. package/dist/components/notifiers/cast.cjs +450 -0
  968. package/dist/components/notifiers/cast.cjs.map +1 -0
  969. package/dist/components/notifiers/cast.js +22 -0
  970. package/dist/components/notifiers/cast.js.map +1 -0
  971. package/dist/components/notifiers/chapter.cjs +225 -0
  972. package/dist/components/notifiers/chapter.cjs.map +1 -0
  973. package/dist/components/notifiers/chapter.js +19 -0
  974. package/dist/components/notifiers/chapter.js.map +1 -0
  975. package/dist/components/notifiers/fastplay.cjs +467 -0
  976. package/dist/components/notifiers/fastplay.cjs.map +1 -0
  977. package/dist/components/notifiers/fastplay.js +22 -0
  978. package/dist/components/notifiers/fastplay.js.map +1 -0
  979. package/dist/components/notifiers/fwdbwd.cjs +457 -0
  980. package/dist/components/notifiers/fwdbwd.cjs.map +1 -0
  981. package/dist/components/notifiers/fwdbwd.js +22 -0
  982. package/dist/components/notifiers/fwdbwd.js.map +1 -0
  983. package/dist/components/notifiers/objectfit.cjs +468 -0
  984. package/dist/components/notifiers/objectfit.cjs.map +1 -0
  985. package/dist/components/notifiers/objectfit.js +22 -0
  986. package/dist/components/notifiers/objectfit.js.map +1 -0
  987. package/dist/components/notifiers/playbackrate.cjs +466 -0
  988. package/dist/components/notifiers/playbackrate.cjs.map +1 -0
  989. package/dist/components/notifiers/playbackrate.js +22 -0
  990. package/dist/components/notifiers/playbackrate.js.map +1 -0
  991. package/dist/components/notifiers/playpause.cjs +457 -0
  992. package/dist/components/notifiers/playpause.cjs.map +1 -0
  993. package/dist/components/notifiers/playpause.js +22 -0
  994. package/dist/components/notifiers/playpause.js.map +1 -0
  995. package/dist/components/notifiers/prevnext.cjs +457 -0
  996. package/dist/components/notifiers/prevnext.cjs.map +1 -0
  997. package/dist/components/notifiers/prevnext.js +22 -0
  998. package/dist/components/notifiers/prevnext.js.map +1 -0
  999. package/dist/components/notifiers/scrub.cjs +449 -0
  1000. package/dist/components/notifiers/scrub.cjs.map +1 -0
  1001. package/dist/components/notifiers/scrub.js +22 -0
  1002. package/dist/components/notifiers/scrub.js.map +1 -0
  1003. package/dist/components/notifiers/timer.cjs +451 -0
  1004. package/dist/components/notifiers/timer.cjs.map +1 -0
  1005. package/dist/components/notifiers/timer.js +22 -0
  1006. package/dist/components/notifiers/timer.js.map +1 -0
  1007. package/dist/components/notifiers/touchbrightness.cjs +474 -0
  1008. package/dist/components/notifiers/touchbrightness.cjs.map +1 -0
  1009. package/dist/components/notifiers/touchbrightness.js +22 -0
  1010. package/dist/components/notifiers/touchbrightness.js.map +1 -0
  1011. package/dist/components/notifiers/touchtimeline.cjs +218 -0
  1012. package/dist/components/notifiers/touchtimeline.cjs.map +1 -0
  1013. package/dist/components/notifiers/touchtimeline.js +21 -0
  1014. package/dist/components/notifiers/touchtimeline.js.map +1 -0
  1015. package/dist/components/notifiers/touchvolume.cjs +474 -0
  1016. package/dist/components/notifiers/touchvolume.cjs.map +1 -0
  1017. package/dist/components/notifiers/touchvolume.js +22 -0
  1018. package/dist/components/notifiers/touchvolume.js.map +1 -0
  1019. package/dist/components/notifiers/volume.cjs +469 -0
  1020. package/dist/components/notifiers/volume.cjs.map +1 -0
  1021. package/dist/components/notifiers/volume.js +22 -0
  1022. package/dist/components/notifiers/volume.js.map +1 -0
  1023. package/dist/components/notifiers/z-register.cjs +778 -0
  1024. package/dist/components/notifiers/z-register.cjs.map +1 -0
  1025. package/dist/components/notifiers/z-register.js +36 -0
  1026. package/dist/components/notifiers/z-register.js.map +1 -0
  1027. package/dist/components/rangeinput/build.cjs +52 -0
  1028. package/dist/components/rangeinput/build.cjs.map +1 -0
  1029. package/dist/components/rangeinput/build.js +8 -0
  1030. package/dist/components/rangeinput/build.js.map +1 -0
  1031. package/dist/components/rangeinput/index.cjs +433 -0
  1032. package/dist/components/rangeinput/index.cjs.map +1 -0
  1033. package/dist/components/rangeinput/index.js +20 -0
  1034. package/dist/components/rangeinput/index.js.map +1 -0
  1035. package/dist/components/rangeinput/types.cjs +19 -0
  1036. package/dist/components/rangeinput/types.cjs.map +1 -0
  1037. package/dist/components/rangeinput/types.js +1 -0
  1038. package/dist/components/rangeinput/types.js.map +1 -0
  1039. package/dist/components/screenlock.cjs +438 -0
  1040. package/dist/components/screenlock.cjs.map +1 -0
  1041. package/dist/components/screenlock.js +21 -0
  1042. package/dist/components/screenlock.js.map +1 -0
  1043. package/dist/components/z-register.cjs +2345 -0
  1044. package/dist/components/z-register.cjs.map +1 -0
  1045. package/dist/components/z-register.js +64 -0
  1046. package/dist/components/z-register.js.map +1 -0
  1047. package/dist/consts/actions.cjs +79 -0
  1048. package/dist/consts/actions.cjs.map +1 -0
  1049. package/dist/consts/actions.js +8 -0
  1050. package/dist/consts/actions.js.map +1 -0
  1051. package/dist/consts/config.cjs +105 -0
  1052. package/dist/consts/config.cjs.map +1 -0
  1053. package/dist/consts/config.js +9 -0
  1054. package/dist/consts/config.js.map +1 -0
  1055. package/dist/consts/generics.cjs +29 -0
  1056. package/dist/consts/generics.cjs.map +1 -0
  1057. package/dist/consts/generics.js +10 -0
  1058. package/dist/consts/generics.js.map +1 -0
  1059. package/dist/consts/media.cjs +201 -0
  1060. package/dist/consts/media.cjs.map +1 -0
  1061. package/dist/consts/media.js +16 -0
  1062. package/dist/consts/media.js.map +1 -0
  1063. package/dist/core/controllable.cjs +91 -0
  1064. package/dist/core/controllable.cjs.map +1 -0
  1065. package/dist/core/controllable.js +13 -0
  1066. package/dist/core/controllable.js.map +1 -0
  1067. package/dist/core/controller.cjs +1664 -0
  1068. package/dist/core/controller.cjs.map +1 -0
  1069. package/dist/core/controller.js +27 -0
  1070. package/dist/core/controller.js.map +1 -0
  1071. package/dist/core/registries.cjs +268 -0
  1072. package/dist/core/registries.cjs.map +1 -0
  1073. package/dist/core/registries.js +24 -0
  1074. package/dist/core/registries.js.map +1 -0
  1075. package/dist/index.cjs +1934 -0
  1076. package/dist/index.cjs.map +1 -0
  1077. package/dist/index.css +3148 -0
  1078. package/dist/index.css.map +1 -0
  1079. package/dist/index.js +75 -0
  1080. package/dist/index.js.map +1 -0
  1081. package/dist/init.cjs +1890 -0
  1082. package/dist/init.cjs.map +1 -0
  1083. package/dist/init.js +24 -0
  1084. package/dist/init.js.map +1 -0
  1085. package/dist/plugs/base/index.cjs +407 -0
  1086. package/dist/plugs/base/index.cjs.map +1 -0
  1087. package/dist/plugs/base/index.js +19 -0
  1088. package/dist/plugs/base/index.js.map +1 -0
  1089. package/dist/plugs/base/slider.cjs +458 -0
  1090. package/dist/plugs/base/slider.cjs.map +1 -0
  1091. package/dist/plugs/base/slider.js +18 -0
  1092. package/dist/plugs/base/slider.js.map +1 -0
  1093. package/dist/plugs/base/types.cjs +19 -0
  1094. package/dist/plugs/base/types.cjs.map +1 -0
  1095. package/dist/plugs/base/types.js +1 -0
  1096. package/dist/plugs/base/types.js.map +1 -0
  1097. package/dist/plugs/main/disabled/build.cjs +27 -0
  1098. package/dist/plugs/main/disabled/build.cjs.map +1 -0
  1099. package/dist/plugs/main/disabled/build.js +8 -0
  1100. package/dist/plugs/main/disabled/build.js.map +1 -0
  1101. package/dist/plugs/main/disabled/index.cjs +421 -0
  1102. package/dist/plugs/main/disabled/index.cjs.map +1 -0
  1103. package/dist/plugs/main/disabled/index.js +22 -0
  1104. package/dist/plugs/main/disabled/index.js.map +1 -0
  1105. package/dist/plugs/main/disabled/types.cjs +19 -0
  1106. package/dist/plugs/main/disabled/types.cjs.map +1 -0
  1107. package/dist/plugs/main/disabled/types.js +1 -0
  1108. package/dist/plugs/main/disabled/types.js.map +1 -0
  1109. package/dist/plugs/main/lightState/build.cjs +34 -0
  1110. package/dist/plugs/main/lightState/build.cjs.map +1 -0
  1111. package/dist/plugs/main/lightState/build.js +8 -0
  1112. package/dist/plugs/main/lightState/build.js.map +1 -0
  1113. package/dist/plugs/main/lightState/index.cjs +458 -0
  1114. package/dist/plugs/main/lightState/index.cjs.map +1 -0
  1115. package/dist/plugs/main/lightState/index.js +22 -0
  1116. package/dist/plugs/main/lightState/index.js.map +1 -0
  1117. package/dist/plugs/main/lightState/types.cjs +19 -0
  1118. package/dist/plugs/main/lightState/types.cjs.map +1 -0
  1119. package/dist/plugs/main/lightState/types.js +1 -0
  1120. package/dist/plugs/main/lightState/types.js.map +1 -0
  1121. package/dist/plugs/main/playlist/build.cjs +59 -0
  1122. package/dist/plugs/main/playlist/build.cjs.map +1 -0
  1123. package/dist/plugs/main/playlist/build.js +10 -0
  1124. package/dist/plugs/main/playlist/build.js.map +1 -0
  1125. package/dist/plugs/main/playlist/index.cjs +511 -0
  1126. package/dist/plugs/main/playlist/index.cjs.map +1 -0
  1127. package/dist/plugs/main/playlist/index.js +25 -0
  1128. package/dist/plugs/main/playlist/index.js.map +1 -0
  1129. package/dist/plugs/main/playlist/types.cjs +19 -0
  1130. package/dist/plugs/main/playlist/types.cjs.map +1 -0
  1131. package/dist/plugs/main/playlist/types.js +1 -0
  1132. package/dist/plugs/main/playlist/types.js.map +1 -0
  1133. package/dist/plugs/main/skeleton/build.cjs +29 -0
  1134. package/dist/plugs/main/skeleton/build.cjs.map +1 -0
  1135. package/dist/plugs/main/skeleton/build.js +8 -0
  1136. package/dist/plugs/main/skeleton/build.js.map +1 -0
  1137. package/dist/plugs/main/skeleton/index.cjs +539 -0
  1138. package/dist/plugs/main/skeleton/index.cjs.map +1 -0
  1139. package/dist/plugs/main/skeleton/index.js +25 -0
  1140. package/dist/plugs/main/skeleton/index.js.map +1 -0
  1141. package/dist/plugs/main/skeleton/types.cjs +19 -0
  1142. package/dist/plugs/main/skeleton/types.cjs.map +1 -0
  1143. package/dist/plugs/main/skeleton/types.js +1 -0
  1144. package/dist/plugs/main/skeleton/types.js.map +1 -0
  1145. package/dist/plugs/menus/main/playlist.cjs +98 -0
  1146. package/dist/plugs/menus/main/playlist.cjs.map +1 -0
  1147. package/dist/plugs/menus/main/playlist.js +9 -0
  1148. package/dist/plugs/menus/main/playlist.js.map +1 -0
  1149. package/dist/plugs/menus/main/skeleton.cjs +34 -0
  1150. package/dist/plugs/menus/main/skeleton.cjs.map +1 -0
  1151. package/dist/plugs/menus/main/skeleton.js +8 -0
  1152. package/dist/plugs/menus/main/skeleton.js.map +1 -0
  1153. package/dist/plugs/menus/settings/actions.cjs +492 -0
  1154. package/dist/plugs/menus/settings/actions.cjs.map +1 -0
  1155. package/dist/plugs/menus/settings/actions.js +15 -0
  1156. package/dist/plugs/menus/settings/actions.js.map +1 -0
  1157. package/dist/plugs/menus/settings/ambience.cjs +35 -0
  1158. package/dist/plugs/menus/settings/ambience.cjs.map +1 -0
  1159. package/dist/plugs/menus/settings/ambience.js +8 -0
  1160. package/dist/plugs/menus/settings/ambience.js.map +1 -0
  1161. package/dist/plugs/menus/settings/auto.cjs +153 -0
  1162. package/dist/plugs/menus/settings/auto.cjs.map +1 -0
  1163. package/dist/plugs/menus/settings/auto.js +12 -0
  1164. package/dist/plugs/menus/settings/auto.js.map +1 -0
  1165. package/dist/plugs/menus/settings/brightness.cjs +45 -0
  1166. package/dist/plugs/menus/settings/brightness.cjs.map +1 -0
  1167. package/dist/plugs/menus/settings/brightness.js +8 -0
  1168. package/dist/plugs/menus/settings/brightness.js.map +1 -0
  1169. package/dist/plugs/menus/settings/captions.cjs +437 -0
  1170. package/dist/plugs/menus/settings/captions.cjs.map +1 -0
  1171. package/dist/plugs/menus/settings/captions.js +13 -0
  1172. package/dist/plugs/menus/settings/captions.js.map +1 -0
  1173. package/dist/plugs/menus/settings/controlPanel.cjs +442 -0
  1174. package/dist/plugs/menus/settings/controlPanel.cjs.map +1 -0
  1175. package/dist/plugs/menus/settings/controlPanel.js +14 -0
  1176. package/dist/plugs/menus/settings/controlPanel.js.map +1 -0
  1177. package/dist/plugs/menus/settings/fastPlay.cjs +166 -0
  1178. package/dist/plugs/menus/settings/fastPlay.cjs.map +1 -0
  1179. package/dist/plugs/menus/settings/fastPlay.js +12 -0
  1180. package/dist/plugs/menus/settings/fastPlay.js.map +1 -0
  1181. package/dist/plugs/menus/settings/frame.cjs +90 -0
  1182. package/dist/plugs/menus/settings/frame.cjs.map +1 -0
  1183. package/dist/plugs/menus/settings/frame.js +12 -0
  1184. package/dist/plugs/menus/settings/frame.js.map +1 -0
  1185. package/dist/plugs/menus/settings/gesture.cjs +255 -0
  1186. package/dist/plugs/menus/settings/gesture.cjs.map +1 -0
  1187. package/dist/plugs/menus/settings/gesture.js +17 -0
  1188. package/dist/plugs/menus/settings/gesture.js.map +1 -0
  1189. package/dist/plugs/menus/settings/keys.cjs +173 -0
  1190. package/dist/plugs/menus/settings/keys.cjs.map +1 -0
  1191. package/dist/plugs/menus/settings/keys.js +12 -0
  1192. package/dist/plugs/menus/settings/keys.js.map +1 -0
  1193. package/dist/plugs/menus/settings/locked.cjs +53 -0
  1194. package/dist/plugs/menus/settings/locked.cjs.map +1 -0
  1195. package/dist/plugs/menus/settings/locked.js +8 -0
  1196. package/dist/plugs/menus/settings/locked.js.map +1 -0
  1197. package/dist/plugs/menus/settings/metadata.cjs +202 -0
  1198. package/dist/plugs/menus/settings/metadata.cjs.map +1 -0
  1199. package/dist/plugs/menus/settings/metadata.js +13 -0
  1200. package/dist/plugs/menus/settings/metadata.js.map +1 -0
  1201. package/dist/plugs/menus/settings/modes.cjs +238 -0
  1202. package/dist/plugs/menus/settings/modes.cjs.map +1 -0
  1203. package/dist/plugs/menus/settings/modes.js +12 -0
  1204. package/dist/plugs/menus/settings/modes.js.map +1 -0
  1205. package/dist/plugs/menus/settings/objectFit.cjs +45 -0
  1206. package/dist/plugs/menus/settings/objectFit.cjs.map +1 -0
  1207. package/dist/plugs/menus/settings/objectFit.js +8 -0
  1208. package/dist/plugs/menus/settings/objectFit.js.map +1 -0
  1209. package/dist/plugs/menus/settings/overlay.cjs +112 -0
  1210. package/dist/plugs/menus/settings/overlay.cjs.map +1 -0
  1211. package/dist/plugs/menus/settings/overlay.js +12 -0
  1212. package/dist/plugs/menus/settings/overlay.js.map +1 -0
  1213. package/dist/plugs/menus/settings/persist.cjs +73 -0
  1214. package/dist/plugs/menus/settings/persist.cjs.map +1 -0
  1215. package/dist/plugs/menus/settings/persist.js +8 -0
  1216. package/dist/plugs/menus/settings/persist.js.map +1 -0
  1217. package/dist/plugs/menus/settings/playbackRate.cjs +119 -0
  1218. package/dist/plugs/menus/settings/playbackRate.cjs.map +1 -0
  1219. package/dist/plugs/menus/settings/playbackRate.js +12 -0
  1220. package/dist/plugs/menus/settings/playbackRate.js.map +1 -0
  1221. package/dist/plugs/menus/settings/poster.cjs +53 -0
  1222. package/dist/plugs/menus/settings/poster.cjs.map +1 -0
  1223. package/dist/plugs/menus/settings/poster.js +8 -0
  1224. package/dist/plugs/menus/settings/poster.js.map +1 -0
  1225. package/dist/plugs/menus/settings/settingsView.cjs +79 -0
  1226. package/dist/plugs/menus/settings/settingsView.cjs.map +1 -0
  1227. package/dist/plugs/menus/settings/settingsView.js +8 -0
  1228. package/dist/plugs/menus/settings/settingsView.js.map +1 -0
  1229. package/dist/plugs/menus/settings/sleepTimer.cjs +89 -0
  1230. package/dist/plugs/menus/settings/sleepTimer.cjs.map +1 -0
  1231. package/dist/plugs/menus/settings/sleepTimer.js +10 -0
  1232. package/dist/plugs/menus/settings/sleepTimer.js.map +1 -0
  1233. package/dist/plugs/menus/settings/time.cjs +48 -0
  1234. package/dist/plugs/menus/settings/time.cjs.map +1 -0
  1235. package/dist/plugs/menus/settings/time.js +8 -0
  1236. package/dist/plugs/menus/settings/time.js.map +1 -0
  1237. package/dist/plugs/menus/settings/timeTravel.cjs +133 -0
  1238. package/dist/plugs/menus/settings/timeTravel.cjs.map +1 -0
  1239. package/dist/plugs/menus/settings/timeTravel.js +11 -0
  1240. package/dist/plugs/menus/settings/timeTravel.js.map +1 -0
  1241. package/dist/plugs/menus/settings/toasts.cjs +232 -0
  1242. package/dist/plugs/menus/settings/toasts.cjs.map +1 -0
  1243. package/dist/plugs/menus/settings/toasts.js +18 -0
  1244. package/dist/plugs/menus/settings/toasts.js.map +1 -0
  1245. package/dist/plugs/menus/settings/voice.cjs +216 -0
  1246. package/dist/plugs/menus/settings/voice.cjs.map +1 -0
  1247. package/dist/plugs/menus/settings/voice.js +12 -0
  1248. package/dist/plugs/menus/settings/voice.js.map +1 -0
  1249. package/dist/plugs/menus/settings/volume.cjs +45 -0
  1250. package/dist/plugs/menus/settings/volume.cjs.map +1 -0
  1251. package/dist/plugs/menus/settings/volume.js +8 -0
  1252. package/dist/plugs/menus/settings/volume.js.map +1 -0
  1253. package/dist/plugs/menus/z-register.cjs +3212 -0
  1254. package/dist/plugs/menus/z-register.cjs.map +1 -0
  1255. package/dist/plugs/menus/z-register.js +48 -0
  1256. package/dist/plugs/menus/z-register.js.map +1 -0
  1257. package/dist/plugs/settings/airplay/build.cjs +27 -0
  1258. package/dist/plugs/settings/airplay/build.cjs.map +1 -0
  1259. package/dist/plugs/settings/airplay/build.js +8 -0
  1260. package/dist/plugs/settings/airplay/build.js.map +1 -0
  1261. package/dist/plugs/settings/airplay/index.cjs +416 -0
  1262. package/dist/plugs/settings/airplay/index.cjs.map +1 -0
  1263. package/dist/plugs/settings/airplay/index.js +19 -0
  1264. package/dist/plugs/settings/airplay/index.js.map +1 -0
  1265. package/dist/plugs/settings/ambience/build.cjs +33 -0
  1266. package/dist/plugs/settings/ambience/build.cjs.map +1 -0
  1267. package/dist/plugs/settings/ambience/build.js +8 -0
  1268. package/dist/plugs/settings/ambience/build.js.map +1 -0
  1269. package/dist/plugs/settings/ambience/index.cjs +464 -0
  1270. package/dist/plugs/settings/ambience/index.cjs.map +1 -0
  1271. package/dist/plugs/settings/ambience/index.js +24 -0
  1272. package/dist/plugs/settings/ambience/index.js.map +1 -0
  1273. package/dist/plugs/settings/ambience/types.cjs +19 -0
  1274. package/dist/plugs/settings/ambience/types.cjs.map +1 -0
  1275. package/dist/plugs/settings/ambience/types.js +1 -0
  1276. package/dist/plugs/settings/ambience/types.js.map +1 -0
  1277. package/dist/plugs/settings/auto/build.cjs +76 -0
  1278. package/dist/plugs/settings/auto/build.cjs.map +1 -0
  1279. package/dist/plugs/settings/auto/build.js +13 -0
  1280. package/dist/plugs/settings/auto/build.js.map +1 -0
  1281. package/dist/plugs/settings/auto/index.cjs +533 -0
  1282. package/dist/plugs/settings/auto/index.cjs.map +1 -0
  1283. package/dist/plugs/settings/auto/index.js +30 -0
  1284. package/dist/plugs/settings/auto/index.js.map +1 -0
  1285. package/dist/plugs/settings/auto/types.cjs +19 -0
  1286. package/dist/plugs/settings/auto/types.cjs.map +1 -0
  1287. package/dist/plugs/settings/auto/types.js +1 -0
  1288. package/dist/plugs/settings/auto/types.js.map +1 -0
  1289. package/dist/plugs/settings/brightness/build.cjs +31 -0
  1290. package/dist/plugs/settings/brightness/build.cjs.map +1 -0
  1291. package/dist/plugs/settings/brightness/build.js +8 -0
  1292. package/dist/plugs/settings/brightness/build.js.map +1 -0
  1293. package/dist/plugs/settings/brightness/index.cjs +522 -0
  1294. package/dist/plugs/settings/brightness/index.cjs.map +1 -0
  1295. package/dist/plugs/settings/brightness/index.js +24 -0
  1296. package/dist/plugs/settings/brightness/index.js.map +1 -0
  1297. package/dist/plugs/settings/brightness/types.cjs +19 -0
  1298. package/dist/plugs/settings/brightness/types.cjs.map +1 -0
  1299. package/dist/plugs/settings/brightness/types.js +1 -0
  1300. package/dist/plugs/settings/brightness/types.js.map +1 -0
  1301. package/dist/plugs/settings/captions/build.cjs +184 -0
  1302. package/dist/plugs/settings/captions/build.cjs.map +1 -0
  1303. package/dist/plugs/settings/captions/build.js +12 -0
  1304. package/dist/plugs/settings/captions/build.js.map +1 -0
  1305. package/dist/plugs/settings/captions/index.cjs +793 -0
  1306. package/dist/plugs/settings/captions/index.cjs.map +1 -0
  1307. package/dist/plugs/settings/captions/index.js +32 -0
  1308. package/dist/plugs/settings/captions/index.js.map +1 -0
  1309. package/dist/plugs/settings/captions/types.cjs +19 -0
  1310. package/dist/plugs/settings/captions/types.cjs.map +1 -0
  1311. package/dist/plugs/settings/captions/types.js +1 -0
  1312. package/dist/plugs/settings/captions/types.js.map +1 -0
  1313. package/dist/plugs/settings/cast/build.cjs +27 -0
  1314. package/dist/plugs/settings/cast/build.cjs.map +1 -0
  1315. package/dist/plugs/settings/cast/build.js +8 -0
  1316. package/dist/plugs/settings/cast/build.js.map +1 -0
  1317. package/dist/plugs/settings/cast/index.cjs +644 -0
  1318. package/dist/plugs/settings/cast/index.cjs.map +1 -0
  1319. package/dist/plugs/settings/cast/index.js +24 -0
  1320. package/dist/plugs/settings/cast/index.js.map +1 -0
  1321. package/dist/plugs/settings/cast/types.cjs +19 -0
  1322. package/dist/plugs/settings/cast/types.cjs.map +1 -0
  1323. package/dist/plugs/settings/cast/types.js +1 -0
  1324. package/dist/plugs/settings/cast/types.js.map +1 -0
  1325. package/dist/plugs/settings/controlPanel/build.cjs +144 -0
  1326. package/dist/plugs/settings/controlPanel/build.cjs.map +1 -0
  1327. package/dist/plugs/settings/controlPanel/build.js +17 -0
  1328. package/dist/plugs/settings/controlPanel/build.js.map +1 -0
  1329. package/dist/plugs/settings/controlPanel/draggable.cjs +1021 -0
  1330. package/dist/plugs/settings/controlPanel/draggable.cjs.map +1 -0
  1331. package/dist/plugs/settings/controlPanel/draggable.js +24 -0
  1332. package/dist/plugs/settings/controlPanel/draggable.js.map +1 -0
  1333. package/dist/plugs/settings/controlPanel/index.cjs +1031 -0
  1334. package/dist/plugs/settings/controlPanel/index.cjs.map +1 -0
  1335. package/dist/plugs/settings/controlPanel/index.js +37 -0
  1336. package/dist/plugs/settings/controlPanel/index.js.map +1 -0
  1337. package/dist/plugs/settings/controlPanel/types.cjs +19 -0
  1338. package/dist/plugs/settings/controlPanel/types.cjs.map +1 -0
  1339. package/dist/plugs/settings/controlPanel/types.js +1 -0
  1340. package/dist/plugs/settings/controlPanel/types.js.map +1 -0
  1341. package/dist/plugs/settings/css/build.cjs +29 -0
  1342. package/dist/plugs/settings/css/build.cjs.map +1 -0
  1343. package/dist/plugs/settings/css/build.js +8 -0
  1344. package/dist/plugs/settings/css/build.js.map +1 -0
  1345. package/dist/plugs/settings/css/index.cjs +444 -0
  1346. package/dist/plugs/settings/css/index.cjs.map +1 -0
  1347. package/dist/plugs/settings/css/index.js +22 -0
  1348. package/dist/plugs/settings/css/index.js.map +1 -0
  1349. package/dist/plugs/settings/css/types.cjs +19 -0
  1350. package/dist/plugs/settings/css/types.cjs.map +1 -0
  1351. package/dist/plugs/settings/css/types.js +1 -0
  1352. package/dist/plugs/settings/css/types.js.map +1 -0
  1353. package/dist/plugs/settings/errors/build.cjs +45 -0
  1354. package/dist/plugs/settings/errors/build.cjs.map +1 -0
  1355. package/dist/plugs/settings/errors/build.js +10 -0
  1356. package/dist/plugs/settings/errors/build.js.map +1 -0
  1357. package/dist/plugs/settings/errors/index.cjs +417 -0
  1358. package/dist/plugs/settings/errors/index.cjs.map +1 -0
  1359. package/dist/plugs/settings/errors/index.js +24 -0
  1360. package/dist/plugs/settings/errors/index.js.map +1 -0
  1361. package/dist/plugs/settings/errors/types.cjs +19 -0
  1362. package/dist/plugs/settings/errors/types.cjs.map +1 -0
  1363. package/dist/plugs/settings/errors/types.js +1 -0
  1364. package/dist/plugs/settings/errors/types.js.map +1 -0
  1365. package/dist/plugs/settings/fastPlay/build.cjs +46 -0
  1366. package/dist/plugs/settings/fastPlay/build.cjs.map +1 -0
  1367. package/dist/plugs/settings/fastPlay/build.js +8 -0
  1368. package/dist/plugs/settings/fastPlay/build.js.map +1 -0
  1369. package/dist/plugs/settings/fastPlay/index.cjs +510 -0
  1370. package/dist/plugs/settings/fastPlay/index.cjs.map +1 -0
  1371. package/dist/plugs/settings/fastPlay/index.js +23 -0
  1372. package/dist/plugs/settings/fastPlay/index.js.map +1 -0
  1373. package/dist/plugs/settings/fastPlay/types.cjs +19 -0
  1374. package/dist/plugs/settings/fastPlay/types.cjs.map +1 -0
  1375. package/dist/plugs/settings/fastPlay/types.js +1 -0
  1376. package/dist/plugs/settings/fastPlay/types.js.map +1 -0
  1377. package/dist/plugs/settings/frame/build.cjs +31 -0
  1378. package/dist/plugs/settings/frame/build.cjs.map +1 -0
  1379. package/dist/plugs/settings/frame/build.js +8 -0
  1380. package/dist/plugs/settings/frame/build.js.map +1 -0
  1381. package/dist/plugs/settings/frame/index.cjs +542 -0
  1382. package/dist/plugs/settings/frame/index.cjs.map +1 -0
  1383. package/dist/plugs/settings/frame/index.js +29 -0
  1384. package/dist/plugs/settings/frame/index.js.map +1 -0
  1385. package/dist/plugs/settings/frame/types.cjs +19 -0
  1386. package/dist/plugs/settings/frame/types.cjs.map +1 -0
  1387. package/dist/plugs/settings/frame/types.js +1 -0
  1388. package/dist/plugs/settings/frame/types.js.map +1 -0
  1389. package/dist/plugs/settings/gesture/base.cjs +187 -0
  1390. package/dist/plugs/settings/gesture/base.cjs.map +1 -0
  1391. package/dist/plugs/settings/gesture/base.js +24 -0
  1392. package/dist/plugs/settings/gesture/base.js.map +1 -0
  1393. package/dist/plugs/settings/gesture/build.cjs +116 -0
  1394. package/dist/plugs/settings/gesture/build.cjs.map +1 -0
  1395. package/dist/plugs/settings/gesture/build.js +13 -0
  1396. package/dist/plugs/settings/gesture/build.js.map +1 -0
  1397. package/dist/plugs/settings/gesture/index.cjs +877 -0
  1398. package/dist/plugs/settings/gesture/index.cjs.map +1 -0
  1399. package/dist/plugs/settings/gesture/index.js +38 -0
  1400. package/dist/plugs/settings/gesture/index.js.map +1 -0
  1401. package/dist/plugs/settings/gesture/touch.cjs +784 -0
  1402. package/dist/plugs/settings/gesture/touch.cjs.map +1 -0
  1403. package/dist/plugs/settings/gesture/touch.js +27 -0
  1404. package/dist/plugs/settings/gesture/touch.js.map +1 -0
  1405. package/dist/plugs/settings/gesture/types.cjs +19 -0
  1406. package/dist/plugs/settings/gesture/types.cjs.map +1 -0
  1407. package/dist/plugs/settings/gesture/types.js +1 -0
  1408. package/dist/plugs/settings/gesture/types.js.map +1 -0
  1409. package/dist/plugs/settings/gesture/wheel.cjs +757 -0
  1410. package/dist/plugs/settings/gesture/wheel.cjs.map +1 -0
  1411. package/dist/plugs/settings/gesture/wheel.js +27 -0
  1412. package/dist/plugs/settings/gesture/wheel.js.map +1 -0
  1413. package/dist/plugs/settings/keys/build.cjs +117 -0
  1414. package/dist/plugs/settings/keys/build.cjs.map +1 -0
  1415. package/dist/plugs/settings/keys/build.js +13 -0
  1416. package/dist/plugs/settings/keys/build.js.map +1 -0
  1417. package/dist/plugs/settings/keys/index.cjs +612 -0
  1418. package/dist/plugs/settings/keys/index.cjs.map +1 -0
  1419. package/dist/plugs/settings/keys/index.js +34 -0
  1420. package/dist/plugs/settings/keys/index.js.map +1 -0
  1421. package/dist/plugs/settings/keys/types.cjs +19 -0
  1422. package/dist/plugs/settings/keys/types.cjs.map +1 -0
  1423. package/dist/plugs/settings/keys/types.js +1 -0
  1424. package/dist/plugs/settings/keys/types.js.map +1 -0
  1425. package/dist/plugs/settings/locked/build.cjs +92 -0
  1426. package/dist/plugs/settings/locked/build.cjs.map +1 -0
  1427. package/dist/plugs/settings/locked/build.js +9 -0
  1428. package/dist/plugs/settings/locked/build.js.map +1 -0
  1429. package/dist/plugs/settings/locked/index.cjs +532 -0
  1430. package/dist/plugs/settings/locked/index.cjs.map +1 -0
  1431. package/dist/plugs/settings/locked/index.js +25 -0
  1432. package/dist/plugs/settings/locked/index.js.map +1 -0
  1433. package/dist/plugs/settings/locked/types.cjs +19 -0
  1434. package/dist/plugs/settings/locked/types.cjs.map +1 -0
  1435. package/dist/plugs/settings/locked/types.js +1 -0
  1436. package/dist/plugs/settings/locked/types.js.map +1 -0
  1437. package/dist/plugs/settings/metadata/build.cjs +29 -0
  1438. package/dist/plugs/settings/metadata/build.cjs.map +1 -0
  1439. package/dist/plugs/settings/metadata/build.js +8 -0
  1440. package/dist/plugs/settings/metadata/build.js.map +1 -0
  1441. package/dist/plugs/settings/metadata/index.cjs +455 -0
  1442. package/dist/plugs/settings/metadata/index.cjs.map +1 -0
  1443. package/dist/plugs/settings/metadata/index.js +24 -0
  1444. package/dist/plugs/settings/metadata/index.js.map +1 -0
  1445. package/dist/plugs/settings/metadata/types.cjs +19 -0
  1446. package/dist/plugs/settings/metadata/types.cjs.map +1 -0
  1447. package/dist/plugs/settings/metadata/types.js +1 -0
  1448. package/dist/plugs/settings/metadata/types.js.map +1 -0
  1449. package/dist/plugs/settings/modes/build.cjs +162 -0
  1450. package/dist/plugs/settings/modes/build.cjs.map +1 -0
  1451. package/dist/plugs/settings/modes/build.js +22 -0
  1452. package/dist/plugs/settings/modes/build.js.map +1 -0
  1453. package/dist/plugs/settings/modes/fullscreen.cjs +625 -0
  1454. package/dist/plugs/settings/modes/fullscreen.cjs.map +1 -0
  1455. package/dist/plugs/settings/modes/fullscreen.js +30 -0
  1456. package/dist/plugs/settings/modes/fullscreen.js.map +1 -0
  1457. package/dist/plugs/settings/modes/index.cjs +1031 -0
  1458. package/dist/plugs/settings/modes/index.cjs.map +1 -0
  1459. package/dist/plugs/settings/modes/index.js +51 -0
  1460. package/dist/plugs/settings/modes/index.js.map +1 -0
  1461. package/dist/plugs/settings/modes/miniplayer.cjs +618 -0
  1462. package/dist/plugs/settings/modes/miniplayer.cjs.map +1 -0
  1463. package/dist/plugs/settings/modes/miniplayer.js +30 -0
  1464. package/dist/plugs/settings/modes/miniplayer.js.map +1 -0
  1465. package/dist/plugs/settings/modes/pictureInPicture.cjs +704 -0
  1466. package/dist/plugs/settings/modes/pictureInPicture.cjs.map +1 -0
  1467. package/dist/plugs/settings/modes/pictureInPicture.js +30 -0
  1468. package/dist/plugs/settings/modes/pictureInPicture.js.map +1 -0
  1469. package/dist/plugs/settings/modes/theater.cjs +557 -0
  1470. package/dist/plugs/settings/modes/theater.cjs.map +1 -0
  1471. package/dist/plugs/settings/modes/theater.js +30 -0
  1472. package/dist/plugs/settings/modes/theater.js.map +1 -0
  1473. package/dist/plugs/settings/modes/types.cjs +19 -0
  1474. package/dist/plugs/settings/modes/types.cjs.map +1 -0
  1475. package/dist/plugs/settings/modes/types.js +1 -0
  1476. package/dist/plugs/settings/modes/types.js.map +1 -0
  1477. package/dist/plugs/settings/notifiers/build.cjs +30 -0
  1478. package/dist/plugs/settings/notifiers/build.cjs.map +1 -0
  1479. package/dist/plugs/settings/notifiers/build.js +8 -0
  1480. package/dist/plugs/settings/notifiers/build.js.map +1 -0
  1481. package/dist/plugs/settings/notifiers/index.cjs +451 -0
  1482. package/dist/plugs/settings/notifiers/index.cjs.map +1 -0
  1483. package/dist/plugs/settings/notifiers/index.js +24 -0
  1484. package/dist/plugs/settings/notifiers/index.js.map +1 -0
  1485. package/dist/plugs/settings/notifiers/types.cjs +19 -0
  1486. package/dist/plugs/settings/notifiers/types.cjs.map +1 -0
  1487. package/dist/plugs/settings/notifiers/types.js +1 -0
  1488. package/dist/plugs/settings/notifiers/types.js.map +1 -0
  1489. package/dist/plugs/settings/objectFit/build.cjs +35 -0
  1490. package/dist/plugs/settings/objectFit/build.cjs.map +1 -0
  1491. package/dist/plugs/settings/objectFit/build.js +10 -0
  1492. package/dist/plugs/settings/objectFit/build.js.map +1 -0
  1493. package/dist/plugs/settings/objectFit/index.cjs +514 -0
  1494. package/dist/plugs/settings/objectFit/index.cjs.map +1 -0
  1495. package/dist/plugs/settings/objectFit/index.js +30 -0
  1496. package/dist/plugs/settings/objectFit/index.js.map +1 -0
  1497. package/dist/plugs/settings/objectFit/types.cjs +19 -0
  1498. package/dist/plugs/settings/objectFit/types.cjs.map +1 -0
  1499. package/dist/plugs/settings/objectFit/types.js +1 -0
  1500. package/dist/plugs/settings/objectFit/types.js.map +1 -0
  1501. package/dist/plugs/settings/overlay/build.cjs +46 -0
  1502. package/dist/plugs/settings/overlay/build.cjs.map +1 -0
  1503. package/dist/plugs/settings/overlay/build.js +8 -0
  1504. package/dist/plugs/settings/overlay/build.js.map +1 -0
  1505. package/dist/plugs/settings/overlay/index.cjs +502 -0
  1506. package/dist/plugs/settings/overlay/index.cjs.map +1 -0
  1507. package/dist/plugs/settings/overlay/index.js +24 -0
  1508. package/dist/plugs/settings/overlay/index.js.map +1 -0
  1509. package/dist/plugs/settings/overlay/types.cjs +19 -0
  1510. package/dist/plugs/settings/overlay/types.cjs.map +1 -0
  1511. package/dist/plugs/settings/overlay/types.js +1 -0
  1512. package/dist/plugs/settings/overlay/types.js.map +1 -0
  1513. package/dist/plugs/settings/persist/build.cjs +41 -0
  1514. package/dist/plugs/settings/persist/build.cjs.map +1 -0
  1515. package/dist/plugs/settings/persist/build.js +8 -0
  1516. package/dist/plugs/settings/persist/build.js.map +1 -0
  1517. package/dist/plugs/settings/persist/index.cjs +413 -0
  1518. package/dist/plugs/settings/persist/index.cjs.map +1 -0
  1519. package/dist/plugs/settings/persist/index.js +22 -0
  1520. package/dist/plugs/settings/persist/index.js.map +1 -0
  1521. package/dist/plugs/settings/persist/types.cjs +19 -0
  1522. package/dist/plugs/settings/persist/types.cjs.map +1 -0
  1523. package/dist/plugs/settings/persist/types.js +1 -0
  1524. package/dist/plugs/settings/persist/types.js.map +1 -0
  1525. package/dist/plugs/settings/playbackRate/build.cjs +32 -0
  1526. package/dist/plugs/settings/playbackRate/build.cjs.map +1 -0
  1527. package/dist/plugs/settings/playbackRate/build.js +8 -0
  1528. package/dist/plugs/settings/playbackRate/build.js.map +1 -0
  1529. package/dist/plugs/settings/playbackRate/index.cjs +448 -0
  1530. package/dist/plugs/settings/playbackRate/index.cjs.map +1 -0
  1531. package/dist/plugs/settings/playbackRate/index.js +23 -0
  1532. package/dist/plugs/settings/playbackRate/index.js.map +1 -0
  1533. package/dist/plugs/settings/playbackRate/types.cjs +19 -0
  1534. package/dist/plugs/settings/playbackRate/types.cjs.map +1 -0
  1535. package/dist/plugs/settings/playbackRate/types.js +1 -0
  1536. package/dist/plugs/settings/playbackRate/types.js.map +1 -0
  1537. package/dist/plugs/settings/poster/build.cjs +29 -0
  1538. package/dist/plugs/settings/poster/build.cjs.map +1 -0
  1539. package/dist/plugs/settings/poster/build.js +8 -0
  1540. package/dist/plugs/settings/poster/build.js.map +1 -0
  1541. package/dist/plugs/settings/poster/index.cjs +435 -0
  1542. package/dist/plugs/settings/poster/index.cjs.map +1 -0
  1543. package/dist/plugs/settings/poster/index.js +24 -0
  1544. package/dist/plugs/settings/poster/index.js.map +1 -0
  1545. package/dist/plugs/settings/poster/types.cjs +19 -0
  1546. package/dist/plugs/settings/poster/types.cjs.map +1 -0
  1547. package/dist/plugs/settings/poster/types.js +1 -0
  1548. package/dist/plugs/settings/poster/types.js.map +1 -0
  1549. package/dist/plugs/settings/settingsView/build.cjs +35 -0
  1550. package/dist/plugs/settings/settingsView/build.cjs.map +1 -0
  1551. package/dist/plugs/settings/settingsView/build.js +8 -0
  1552. package/dist/plugs/settings/settingsView/build.js.map +1 -0
  1553. package/dist/plugs/settings/settingsView/index.cjs +1369 -0
  1554. package/dist/plugs/settings/settingsView/index.cjs.map +1 -0
  1555. package/dist/plugs/settings/settingsView/index.js +42 -0
  1556. package/dist/plugs/settings/settingsView/index.js.map +1 -0
  1557. package/dist/plugs/settings/settingsView/menu/index.cjs +1164 -0
  1558. package/dist/plugs/settings/settingsView/menu/index.cjs.map +1 -0
  1559. package/dist/plugs/settings/settingsView/menu/index.js +36 -0
  1560. package/dist/plugs/settings/settingsView/menu/index.js.map +1 -0
  1561. package/dist/plugs/settings/settingsView/menu/panel/index.cjs +144 -0
  1562. package/dist/plugs/settings/settingsView/menu/panel/index.cjs.map +1 -0
  1563. package/dist/plugs/settings/settingsView/menu/panel/index.js +16 -0
  1564. package/dist/plugs/settings/settingsView/menu/panel/index.js.map +1 -0
  1565. package/dist/plugs/settings/settingsView/menu/panel/main.cjs +524 -0
  1566. package/dist/plugs/settings/settingsView/menu/panel/main.cjs.map +1 -0
  1567. package/dist/plugs/settings/settingsView/menu/panel/main.js +33 -0
  1568. package/dist/plugs/settings/settingsView/menu/panel/main.js.map +1 -0
  1569. package/dist/plugs/settings/settingsView/menu/panel/sub.cjs +617 -0
  1570. package/dist/plugs/settings/settingsView/menu/panel/sub.cjs.map +1 -0
  1571. package/dist/plugs/settings/settingsView/menu/panel/sub.js +33 -0
  1572. package/dist/plugs/settings/settingsView/menu/panel/sub.js.map +1 -0
  1573. package/dist/plugs/settings/settingsView/menu/widgets/base.cjs +357 -0
  1574. package/dist/plugs/settings/settingsView/menu/widgets/base.cjs.map +1 -0
  1575. package/dist/plugs/settings/settingsView/menu/widgets/base.js +19 -0
  1576. package/dist/plugs/settings/settingsView/menu/widgets/base.js.map +1 -0
  1577. package/dist/plugs/settings/settingsView/menu/widgets/button.cjs +392 -0
  1578. package/dist/plugs/settings/settingsView/menu/widgets/button.cjs.map +1 -0
  1579. package/dist/plugs/settings/settingsView/menu/widgets/button.js +20 -0
  1580. package/dist/plugs/settings/settingsView/menu/widgets/button.js.map +1 -0
  1581. package/dist/plugs/settings/settingsView/menu/widgets/color.cjs +498 -0
  1582. package/dist/plugs/settings/settingsView/menu/widgets/color.cjs.map +1 -0
  1583. package/dist/plugs/settings/settingsView/menu/widgets/color.js +31 -0
  1584. package/dist/plugs/settings/settingsView/menu/widgets/color.js.map +1 -0
  1585. package/dist/plugs/settings/settingsView/menu/widgets/dragselect.cjs +563 -0
  1586. package/dist/plugs/settings/settingsView/menu/widgets/dragselect.cjs.map +1 -0
  1587. package/dist/plugs/settings/settingsView/menu/widgets/dragselect.js +31 -0
  1588. package/dist/plugs/settings/settingsView/menu/widgets/dragselect.js.map +1 -0
  1589. package/dist/plugs/settings/settingsView/menu/widgets/group.cjs +500 -0
  1590. package/dist/plugs/settings/settingsView/menu/widgets/group.cjs.map +1 -0
  1591. package/dist/plugs/settings/settingsView/menu/widgets/group.js +31 -0
  1592. package/dist/plugs/settings/settingsView/menu/widgets/group.js.map +1 -0
  1593. package/dist/plugs/settings/settingsView/menu/widgets/index.cjs +912 -0
  1594. package/dist/plugs/settings/settingsView/menu/widgets/index.cjs.map +1 -0
  1595. package/dist/plugs/settings/settingsView/menu/widgets/index.js +53 -0
  1596. package/dist/plugs/settings/settingsView/menu/widgets/index.js.map +1 -0
  1597. package/dist/plugs/settings/settingsView/menu/widgets/input.cjs +409 -0
  1598. package/dist/plugs/settings/settingsView/menu/widgets/input.cjs.map +1 -0
  1599. package/dist/plugs/settings/settingsView/menu/widgets/input.js +31 -0
  1600. package/dist/plugs/settings/settingsView/menu/widgets/input.js.map +1 -0
  1601. package/dist/plugs/settings/settingsView/menu/widgets/limits.cjs +411 -0
  1602. package/dist/plugs/settings/settingsView/menu/widgets/limits.cjs.map +1 -0
  1603. package/dist/plugs/settings/settingsView/menu/widgets/limits.js +31 -0
  1604. package/dist/plugs/settings/settingsView/menu/widgets/limits.js.map +1 -0
  1605. package/dist/plugs/settings/settingsView/menu/widgets/range.cjs +420 -0
  1606. package/dist/plugs/settings/settingsView/menu/widgets/range.cjs.map +1 -0
  1607. package/dist/plugs/settings/settingsView/menu/widgets/range.js +31 -0
  1608. package/dist/plugs/settings/settingsView/menu/widgets/range.js.map +1 -0
  1609. package/dist/plugs/settings/settingsView/menu/widgets/select.cjs +490 -0
  1610. package/dist/plugs/settings/settingsView/menu/widgets/select.cjs.map +1 -0
  1611. package/dist/plugs/settings/settingsView/menu/widgets/select.js +31 -0
  1612. package/dist/plugs/settings/settingsView/menu/widgets/select.js.map +1 -0
  1613. package/dist/plugs/settings/settingsView/menu/widgets/toggle.cjs +401 -0
  1614. package/dist/plugs/settings/settingsView/menu/widgets/toggle.cjs.map +1 -0
  1615. package/dist/plugs/settings/settingsView/menu/widgets/toggle.js +31 -0
  1616. package/dist/plugs/settings/settingsView/menu/widgets/toggle.js.map +1 -0
  1617. package/dist/plugs/settings/settingsView/types.cjs +19 -0
  1618. package/dist/plugs/settings/settingsView/types.cjs.map +1 -0
  1619. package/dist/plugs/settings/settingsView/types.js +1 -0
  1620. package/dist/plugs/settings/settingsView/types.js.map +1 -0
  1621. package/dist/plugs/settings/sleepTimer/build.cjs +29 -0
  1622. package/dist/plugs/settings/sleepTimer/build.cjs.map +1 -0
  1623. package/dist/plugs/settings/sleepTimer/build.js +8 -0
  1624. package/dist/plugs/settings/sleepTimer/build.js.map +1 -0
  1625. package/dist/plugs/settings/sleepTimer/index.cjs +431 -0
  1626. package/dist/plugs/settings/sleepTimer/index.cjs.map +1 -0
  1627. package/dist/plugs/settings/sleepTimer/index.js +24 -0
  1628. package/dist/plugs/settings/sleepTimer/index.js.map +1 -0
  1629. package/dist/plugs/settings/sleepTimer/types.cjs +19 -0
  1630. package/dist/plugs/settings/sleepTimer/types.cjs.map +1 -0
  1631. package/dist/plugs/settings/sleepTimer/types.js +2 -0
  1632. package/dist/plugs/settings/sleepTimer/types.js.map +1 -0
  1633. package/dist/plugs/settings/time/build.cjs +32 -0
  1634. package/dist/plugs/settings/time/build.cjs.map +1 -0
  1635. package/dist/plugs/settings/time/build.js +8 -0
  1636. package/dist/plugs/settings/time/build.js.map +1 -0
  1637. package/dist/plugs/settings/time/index.cjs +604 -0
  1638. package/dist/plugs/settings/time/index.cjs.map +1 -0
  1639. package/dist/plugs/settings/time/index.js +29 -0
  1640. package/dist/plugs/settings/time/index.js.map +1 -0
  1641. package/dist/plugs/settings/time/types.cjs +19 -0
  1642. package/dist/plugs/settings/time/types.cjs.map +1 -0
  1643. package/dist/plugs/settings/time/types.js +1 -0
  1644. package/dist/plugs/settings/time/types.js.map +1 -0
  1645. package/dist/plugs/settings/timeTravel/build.cjs +36 -0
  1646. package/dist/plugs/settings/timeTravel/build.cjs.map +1 -0
  1647. package/dist/plugs/settings/timeTravel/build.js +8 -0
  1648. package/dist/plugs/settings/timeTravel/build.js.map +1 -0
  1649. package/dist/plugs/settings/timeTravel/index.cjs +461 -0
  1650. package/dist/plugs/settings/timeTravel/index.cjs.map +1 -0
  1651. package/dist/plugs/settings/timeTravel/index.js +33 -0
  1652. package/dist/plugs/settings/timeTravel/index.js.map +1 -0
  1653. package/dist/plugs/settings/timeTravel/types.cjs +19 -0
  1654. package/dist/plugs/settings/timeTravel/types.cjs.map +1 -0
  1655. package/dist/plugs/settings/timeTravel/types.js +1 -0
  1656. package/dist/plugs/settings/timeTravel/types.js.map +1 -0
  1657. package/dist/plugs/settings/toasts/build.cjs +35 -0
  1658. package/dist/plugs/settings/toasts/build.cjs.map +1 -0
  1659. package/dist/plugs/settings/toasts/build.js +8 -0
  1660. package/dist/plugs/settings/toasts/build.js.map +1 -0
  1661. package/dist/plugs/settings/toasts/index.cjs +450 -0
  1662. package/dist/plugs/settings/toasts/index.cjs.map +1 -0
  1663. package/dist/plugs/settings/toasts/index.js +26 -0
  1664. package/dist/plugs/settings/toasts/index.js.map +1 -0
  1665. package/dist/plugs/settings/toasts/types.cjs +19 -0
  1666. package/dist/plugs/settings/toasts/types.cjs.map +1 -0
  1667. package/dist/plugs/settings/toasts/types.js +1 -0
  1668. package/dist/plugs/settings/toasts/types.js.map +1 -0
  1669. package/dist/plugs/settings/voice/build.cjs +81 -0
  1670. package/dist/plugs/settings/voice/build.cjs.map +1 -0
  1671. package/dist/plugs/settings/voice/build.js +8 -0
  1672. package/dist/plugs/settings/voice/build.js.map +1 -0
  1673. package/dist/plugs/settings/voice/index.cjs +757 -0
  1674. package/dist/plugs/settings/voice/index.cjs.map +1 -0
  1675. package/dist/plugs/settings/voice/index.js +26 -0
  1676. package/dist/plugs/settings/voice/index.js.map +1 -0
  1677. package/dist/plugs/settings/voice/types.cjs +19 -0
  1678. package/dist/plugs/settings/voice/types.cjs.map +1 -0
  1679. package/dist/plugs/settings/voice/types.js +1 -0
  1680. package/dist/plugs/settings/voice/types.js.map +1 -0
  1681. package/dist/plugs/settings/volume/build.cjs +31 -0
  1682. package/dist/plugs/settings/volume/build.cjs.map +1 -0
  1683. package/dist/plugs/settings/volume/build.js +8 -0
  1684. package/dist/plugs/settings/volume/build.js.map +1 -0
  1685. package/dist/plugs/settings/volume/index.cjs +592 -0
  1686. package/dist/plugs/settings/volume/index.cjs.map +1 -0
  1687. package/dist/plugs/settings/volume/index.js +34 -0
  1688. package/dist/plugs/settings/volume/index.js.map +1 -0
  1689. package/dist/plugs/settings/volume/types.cjs +19 -0
  1690. package/dist/plugs/settings/volume/types.cjs.map +1 -0
  1691. package/dist/plugs/settings/volume/types.js +1 -0
  1692. package/dist/plugs/settings/volume/types.js.map +1 -0
  1693. package/dist/plugs/z-register.cjs +5901 -0
  1694. package/dist/plugs/z-register.cjs.map +1 -0
  1695. package/dist/plugs/z-register.js +105 -0
  1696. package/dist/plugs/z-register.js.map +1 -0
  1697. package/dist/super/components/icons.cjs +630 -0
  1698. package/dist/super/components/icons.cjs.map +1 -0
  1699. package/dist/super/components/icons.js +248 -0
  1700. package/dist/super/components/icons.js.map +1 -0
  1701. package/dist/super/components/index.cjs +3111 -0
  1702. package/dist/super/components/index.cjs.map +1 -0
  1703. package/dist/super/components/index.js +498 -0
  1704. package/dist/super/components/index.js.map +1 -0
  1705. package/dist/super/components/notifiers.cjs +784 -0
  1706. package/dist/super/components/notifiers.cjs.map +1 -0
  1707. package/dist/super/components/notifiers.js +96 -0
  1708. package/dist/super/components/notifiers.js.map +1 -0
  1709. package/dist/super/consts.cjs +289 -0
  1710. package/dist/super/consts.cjs.map +1 -0
  1711. package/dist/super/consts.js +28 -0
  1712. package/dist/super/consts.js.map +1 -0
  1713. package/dist/super/plugs/index.cjs +5988 -0
  1714. package/dist/super/plugs/index.cjs.map +1 -0
  1715. package/dist/super/plugs/index.js +388 -0
  1716. package/dist/super/plugs/index.js.map +1 -0
  1717. package/dist/super/plugs/menus.cjs +2572 -0
  1718. package/dist/super/plugs/menus.cjs.map +1 -0
  1719. package/dist/super/plugs/menus.js +132 -0
  1720. package/dist/super/plugs/menus.js.map +1 -0
  1721. package/dist/super/techs.cjs +256 -0
  1722. package/dist/super/techs.cjs.map +1 -0
  1723. package/dist/super/techs.js +32 -0
  1724. package/dist/super/techs.js.map +1 -0
  1725. package/dist/super/utils.cjs +1379 -0
  1726. package/dist/super/utils.cjs.map +1 -0
  1727. package/dist/super/utils.js +400 -0
  1728. package/dist/super/utils.js.map +1 -0
  1729. package/dist/super.cjs +10191 -0
  1730. package/dist/super.cjs.map +1 -0
  1731. package/dist/super.css +3148 -0
  1732. package/dist/super.css.map +1 -0
  1733. package/dist/super.global.js +12460 -0
  1734. package/dist/super.global.js.map +1 -0
  1735. package/dist/super.js +380 -0
  1736. package/dist/super.js.map +1 -0
  1737. package/dist/techs/base.cjs +256 -0
  1738. package/dist/techs/base.cjs.map +1 -0
  1739. package/dist/techs/base.js +19 -0
  1740. package/dist/techs/base.js.map +1 -0
  1741. package/dist/techs/dash.cjs +1160 -0
  1742. package/dist/techs/dash.cjs.map +1 -0
  1743. package/dist/techs/dash.js +24 -0
  1744. package/dist/techs/dash.js.map +1 -0
  1745. package/dist/techs/hls.cjs +1164 -0
  1746. package/dist/techs/hls.cjs.map +1 -0
  1747. package/dist/techs/hls.js +24 -0
  1748. package/dist/techs/hls.js.map +1 -0
  1749. package/dist/techs/html5.cjs +988 -0
  1750. package/dist/techs/html5.cjs.map +1 -0
  1751. package/dist/techs/html5.js +23 -0
  1752. package/dist/techs/html5.js.map +1 -0
  1753. package/dist/techs/shaka.cjs +1183 -0
  1754. package/dist/techs/shaka.cjs.map +1 -0
  1755. package/dist/techs/shaka.js +197 -0
  1756. package/dist/techs/shaka.js.map +1 -0
  1757. package/dist/techs/vimeo.cjs +731 -0
  1758. package/dist/techs/vimeo.cjs.map +1 -0
  1759. package/dist/techs/vimeo.js +24 -0
  1760. package/dist/techs/vimeo.js.map +1 -0
  1761. package/dist/techs/youtube.cjs +730 -0
  1762. package/dist/techs/youtube.cjs.map +1 -0
  1763. package/dist/techs/youtube.js +22 -0
  1764. package/dist/techs/youtube.js.map +1 -0
  1765. package/dist/techs/z-register.cjs +2354 -0
  1766. package/dist/techs/z-register.cjs.map +1 -0
  1767. package/dist/techs/z-register.js +26 -0
  1768. package/dist/techs/z-register.js.map +1 -0
  1769. package/dist/tools/player.cjs +1804 -0
  1770. package/dist/tools/player.cjs.map +1 -0
  1771. package/dist/tools/player.js +29 -0
  1772. package/dist/tools/player.js.map +1 -0
  1773. package/dist/tools/queue.cjs +63 -0
  1774. package/dist/tools/queue.cjs.map +1 -0
  1775. package/dist/tools/queue.js +8 -0
  1776. package/dist/tools/queue.js.map +1 -0
  1777. package/dist/tools/runtime.cjs +1919 -0
  1778. package/dist/tools/runtime.cjs.map +1 -0
  1779. package/dist/tools/runtime.js +49 -0
  1780. package/dist/tools/runtime.js.map +1 -0
  1781. package/dist/types/UIOptions.d.cjs +19 -0
  1782. package/dist/types/UIOptions.d.cjs.map +1 -0
  1783. package/dist/types/UIOptions.d.js +1 -0
  1784. package/dist/types/UIOptions.d.js.map +1 -0
  1785. package/dist/types/actions.d.cjs +19 -0
  1786. package/dist/types/actions.d.cjs.map +1 -0
  1787. package/dist/types/actions.d.js +1 -0
  1788. package/dist/types/actions.d.js.map +1 -0
  1789. package/dist/types/config.d.cjs +19 -0
  1790. package/dist/types/config.d.cjs.map +1 -0
  1791. package/dist/types/config.d.js +1 -0
  1792. package/dist/types/config.d.js.map +1 -0
  1793. package/dist/types/contract.d.cjs +19 -0
  1794. package/dist/types/contract.d.cjs.map +1 -0
  1795. package/dist/types/contract.d.js +1 -0
  1796. package/dist/types/contract.d.js.map +1 -0
  1797. package/dist/types/generics.d.cjs +19 -0
  1798. package/dist/types/generics.d.cjs.map +1 -0
  1799. package/dist/types/generics.d.js +1 -0
  1800. package/dist/types/generics.d.js.map +1 -0
  1801. package/dist/types/global.d.cjs +22 -0
  1802. package/dist/types/global.d.cjs.map +1 -0
  1803. package/dist/types/global.d.js +2 -0
  1804. package/dist/types/global.d.js.map +1 -0
  1805. package/dist/types/registries.d.cjs +19 -0
  1806. package/dist/types/registries.d.cjs.map +1 -0
  1807. package/dist/types/registries.d.js +1 -0
  1808. package/dist/types/registries.d.js.map +1 -0
  1809. package/dist/utils/color.cjs +111 -0
  1810. package/dist/utils/color.cjs.map +1 -0
  1811. package/dist/utils/color.js +21 -0
  1812. package/dist/utils/color.js.map +1 -0
  1813. package/dist/utils/dom.cjs +269 -0
  1814. package/dist/utils/dom.cjs.map +1 -0
  1815. package/dist/utils/dom.js +58 -0
  1816. package/dist/utils/dom.js.map +1 -0
  1817. package/dist/utils/env.cjs +110 -0
  1818. package/dist/utils/env.cjs.map +1 -0
  1819. package/dist/utils/env.js +56 -0
  1820. package/dist/utils/env.js.map +1 -0
  1821. package/dist/utils/file.cjs +176 -0
  1822. package/dist/utils/file.cjs.map +1 -0
  1823. package/dist/utils/file.js +20 -0
  1824. package/dist/utils/file.js.map +1 -0
  1825. package/dist/utils/fn.cjs +133 -0
  1826. package/dist/utils/fn.cjs.map +1 -0
  1827. package/dist/utils/fn.js +41 -0
  1828. package/dist/utils/fn.js.map +1 -0
  1829. package/dist/utils/keys.cjs +66 -0
  1830. package/dist/utils/keys.cjs.map +1 -0
  1831. package/dist/utils/keys.js +28 -0
  1832. package/dist/utils/keys.js.map +1 -0
  1833. package/dist/utils/match.cjs +119 -0
  1834. package/dist/utils/match.cjs.map +1 -0
  1835. package/dist/utils/match.js +30 -0
  1836. package/dist/utils/match.js.map +1 -0
  1837. package/dist/utils/media.cjs +546 -0
  1838. package/dist/utils/media.cjs.map +1 -0
  1839. package/dist/utils/media.js +84 -0
  1840. package/dist/utils/media.js.map +1 -0
  1841. package/dist/utils/methd.cjs +50 -0
  1842. package/dist/utils/methd.cjs.map +1 -0
  1843. package/dist/utils/methd.js +15 -0
  1844. package/dist/utils/methd.js.map +1 -0
  1845. package/dist/utils/num.cjs +92 -0
  1846. package/dist/utils/num.cjs.map +1 -0
  1847. package/dist/utils/num.js +22 -0
  1848. package/dist/utils/num.js.map +1 -0
  1849. package/dist/utils/obj.cjs +204 -0
  1850. package/dist/utils/obj.cjs.map +1 -0
  1851. package/dist/utils/obj.js +58 -0
  1852. package/dist/utils/obj.js.map +1 -0
  1853. package/dist/utils/str.cjs +134 -0
  1854. package/dist/utils/str.cjs.map +1 -0
  1855. package/dist/utils/str.js +35 -0
  1856. package/dist/utils/str.js.map +1 -0
  1857. package/dist/utils/time.cjs +103 -0
  1858. package/dist/utils/time.cjs.map +1 -0
  1859. package/dist/utils/time.js +11 -0
  1860. package/dist/utils/time.js.map +1 -0
  1861. package/package.json +124 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/ts/super.ts","../../sia-reactor/dist/chunk-SHWIAQD2.js","../../sia-reactor/dist/chunk-PTNZ442E.js","../../sia-reactor/dist/chunk-JGEI2Q4M.js","../../sia-reactor/dist/chunk-ORK3EGB6.js","../../t007-tools/packages/utils/dist/chunk-ZALPHCSJ.js","../src/ts/consts/generics.ts","../src/ts/utils/str.ts","../src/ts/utils/obj.ts","../src/ts/core/controllable.ts","../src/ts/consts/actions.ts","../src/ts/consts/config.ts","../src/ts/core/registries.ts","../src/ts/utils/fn.ts","../../t007-tools/packages/utils/dist/chunk-NX2LWYD6.js","../../t007-tools/packages/utils/dist/hooks/vanilla.js","../src/ts/utils/dom.ts","../src/ts/tools/player.ts","../src/ts/tools/runtime.ts","../../sia-reactor/dist/chunk-SPVWCBIV.js","../../sia-reactor/dist/modules.js","../src/ts/utils/time.ts","../src/ts/consts/media.ts","../src/ts/utils/media.ts","../src/ts/techs/base.ts","../src/ts/utils/match.ts","../src/ts/utils/env.ts","../src/ts/utils/num.ts","../src/ts/techs/html5.ts","../src/ts/core/controller.ts","../src/ts/tools/queue.ts","../src/ts/super/techs.ts","../src/ts/super/plugs/index.ts","../src/ts/plugs/base/index.ts","../src/ts/plugs/main/disabled/build.ts","../src/ts/plugs/main/disabled/index.ts","../src/ts/plugs/main/lightState/build.ts","../src/ts/plugs/main/lightState/index.ts","../src/ts/plugs/main/playlist/build.ts","../src/ts/plugs/main/playlist/index.ts","../src/ts/plugs/main/skeleton/build.ts","../src/ts/plugs/main/skeleton/index.ts","../src/ts/plugs/settings/airplay/build.ts","../src/ts/plugs/settings/airplay/index.ts","../src/ts/plugs/settings/ambience/build.ts","../src/ts/plugs/settings/ambience/index.ts","../src/ts/plugs/settings/auto/build.ts","../src/ts/plugs/settings/auto/index.ts","../src/ts/plugs/base/slider.ts","../src/ts/plugs/settings/brightness/build.ts","../src/ts/plugs/settings/brightness/index.ts","../src/ts/plugs/settings/captions/build.ts","../src/ts/plugs/settings/captions/index.ts","../src/ts/plugs/settings/cast/build.ts","../src/ts/utils/file.ts","../src/ts/plugs/settings/cast/index.ts","../src/ts/plugs/settings/controlPanel/build.ts","../src/ts/plugs/settings/toasts/build.ts","../src/ts/plugs/settings/toasts/index.ts","../src/ts/plugs/settings/controlPanel/draggable.ts","../src/ts/plugs/settings/controlPanel/index.ts","../src/ts/plugs/settings/css/build.ts","../src/ts/plugs/settings/css/index.ts","../src/ts/plugs/settings/errors/build.ts","../src/ts/plugs/settings/errors/index.ts","../src/ts/plugs/settings/fastPlay/build.ts","../src/ts/plugs/settings/fastPlay/index.ts","../src/ts/plugs/settings/frame/build.ts","../src/ts/utils/color.ts","../src/ts/plugs/settings/frame/index.ts","../src/ts/plugs/settings/gesture/build.ts","../src/ts/plugs/settings/gesture/base.ts","../src/ts/plugs/settings/gesture/touch.ts","../src/ts/plugs/settings/gesture/wheel.ts","../src/ts/plugs/settings/gesture/index.ts","../src/ts/plugs/settings/keys/build.ts","../src/ts/utils/keys.ts","../src/ts/plugs/settings/keys/index.ts","../src/ts/plugs/settings/locked/build.ts","../src/ts/plugs/settings/locked/index.ts","../src/ts/plugs/settings/metadata/build.ts","../src/ts/plugs/settings/metadata/index.ts","../src/ts/plugs/settings/modes/build.ts","../src/ts/plugs/settings/modes/fullscreen.ts","../src/ts/plugs/settings/modes/theater.ts","../src/ts/plugs/settings/modes/pictureInPicture.ts","../src/ts/plugs/settings/modes/miniplayer.ts","../src/ts/plugs/settings/modes/index.ts","../src/ts/plugs/settings/notifiers/build.ts","../src/ts/plugs/settings/notifiers/index.ts","../src/ts/plugs/settings/objectFit/build.ts","../src/ts/plugs/settings/objectFit/index.ts","../src/ts/plugs/settings/overlay/build.ts","../src/ts/plugs/settings/overlay/index.ts","../src/ts/plugs/settings/persist/build.ts","../src/ts/plugs/settings/persist/index.ts","../src/ts/plugs/settings/playbackRate/build.ts","../src/ts/plugs/settings/playbackRate/index.ts","../src/ts/plugs/settings/poster/build.ts","../src/ts/plugs/settings/poster/index.ts","../src/ts/plugs/settings/settingsView/build.ts","../src/ts/components/base/index.ts","../src/ts/plugs/settings/settingsView/menu/panel/index.ts","../src/ts/plugs/settings/settingsView/menu/widgets/base.ts","../src/ts/super/utils.ts","../src/ts/plugs/settings/settingsView/menu/widgets/group.ts","../src/ts/plugs/settings/settingsView/menu/panel/main.ts","../src/ts/plugs/settings/settingsView/menu/panel/sub.ts","../src/ts/plugs/settings/settingsView/menu/index.ts","../src/ts/plugs/settings/settingsView/index.ts","../src/ts/plugs/settings/sleepTimer/build.ts","../src/ts/plugs/settings/sleepTimer/index.ts","../src/ts/plugs/settings/time/build.ts","../src/ts/plugs/settings/time/index.ts","../src/ts/plugs/settings/timeTravel/build.ts","../../sia-reactor/dist/chunk-LZZ4AHVE.js","../src/ts/plugs/settings/timeTravel/index.ts","../../t007-tools/packages/toast/dist/index.js","../src/ts/plugs/settings/voice/build.ts","../src/ts/plugs/settings/voice/index.ts","../src/ts/plugs/settings/volume/build.ts","../src/ts/plugs/settings/volume/index.ts","../src/ts/super/components/index.ts","../src/ts/components/rangeinput/build.ts","../src/ts/components/rangeinput/index.ts","../src/ts/components/buffer.ts","../src/ts/components/captionsview.ts","../src/ts/components/screenlock.ts","../src/ts/components/controls/brightness/slider.ts","../src/ts/components/controls/brightness/index.ts","../src/ts/components/controls/timeline/index.ts","../src/ts/components/controls/volume/slider.ts","../src/ts/components/controls/volume/index.ts","../src/ts/components/controls/airplay.ts","../src/ts/components/controls/backward10.ts","../src/ts/components/controls/bignext.ts","../src/ts/components/controls/bigplaypause.ts","../src/ts/components/controls/bigprev.ts","../src/ts/components/controls/captions.ts","../src/ts/components/controls/capture.ts","../src/ts/components/controls/cast.ts","../src/ts/components/controls/chapter.ts","../src/ts/components/controls/duration.ts","../src/ts/components/controls/expandminiplayer.ts","../src/ts/components/controls/forward10.ts","../src/ts/components/controls/fullscreen.ts","../src/ts/components/controls/fullscreenlock.ts","../src/ts/components/controls/fullscreenorientation.ts","../src/ts/components/controls/meta.ts","../src/ts/components/controls/next.ts","../src/ts/components/controls/objectfit.ts","../src/ts/components/controls/pictureinpicture.ts","../src/ts/components/controls/playpause.ts","../src/ts/components/controls/prev.ts","../src/ts/components/controls/removeminiplayer.ts","../src/ts/components/controls/settings.ts","../src/ts/components/controls/theater.ts","../src/ts/components/controls/time.ts","../src/ts/components/controls/timeandduration.ts","../src/ts/components/holders/airplayplaceholder.ts","../src/ts/components/holders/castplaceholder.ts","../src/ts/components/holders/pipplaceholder.ts","../src/ts/components/notifiers/base.ts","../src/ts/components/notifiers/playpause.ts","../src/ts/components/notifiers/prevnext.ts","../src/ts/components/notifiers/captions.ts","../src/ts/components/notifiers/capture.ts","../src/ts/components/notifiers/playbackrate.ts","../src/ts/components/notifiers/volume.ts","../src/ts/components/notifiers/brightness.ts","../src/ts/components/notifiers/objectfit.ts","../src/ts/components/notifiers/fwdbwd.ts","../src/ts/components/notifiers/scrub.ts","../src/ts/components/notifiers/cancelscrub.ts","../src/ts/components/notifiers/touchvolume.ts","../src/ts/components/notifiers/touchbrightness.ts","../src/ts/components/notifiers/fastplay.ts","../src/ts/components/notifiers/touchtimeline.ts","../src/ts/components/notifiers/chapter.ts","../src/ts/components/notifiers/cast.ts","../src/ts/components/notifiers/airplay.ts","../src/ts/components/icons/play.ts","../src/ts/components/icons/pause.ts","../src/ts/components/icons/replay.ts","../src/ts/components/icons/prev.ts","../src/ts/components/icons/next.ts","../src/ts/components/icons/settings.ts","../src/ts/components/icons/lock.ts","../src/ts/components/icons/unlock.ts","../src/ts/components/icons/enterfullscreen.ts","../src/ts/components/icons/leavefullscreen.ts","../src/ts/components/icons/enterpip.ts","../src/ts/components/icons/leavepip.ts","../src/ts/components/icons/expandminiplayer.ts","../src/ts/components/icons/removeminiplayer.ts","../src/ts/components/icons/capture.ts","../src/ts/components/icons/cast.ts","../src/ts/components/icons/airplay.ts","../src/ts/components/icons/objectfitcontain.ts","../src/ts/components/icons/objectfitcover.ts","../src/ts/components/icons/objectfitfill.ts","../src/ts/components/icons/volumehigh.ts","../src/ts/components/icons/volumelow.ts","../src/ts/components/icons/volumemuted.ts","../src/ts/components/icons/brightnesshigh.ts","../src/ts/components/icons/brightnesslow.ts","../src/ts/components/icons/brightnessdark.ts","../src/ts/components/icons/entertheater.ts","../src/ts/components/icons/leavetheater.ts","../src/ts/components/icons/fullscreenorientation.ts","../src/ts/components/icons/returnback.ts","../src/ts/components/icons/subtitles.ts","../src/ts/components/icons/captions.ts","../src/ts/components/icons/triangleleft.ts","../src/ts/components/icons/doubletriangleleft.ts","../src/ts/components/icons/doubletriangleright.ts","../src/ts/components/icons/fwd.ts","../src/ts/components/icons/bwd.ts","../src/ts/components/icons/pipplaceholder.ts","../src/ts/components/icons/castplaceholder.ts","../src/ts/components/icons/airplayplaceholder.ts","../src/ts/components/icons/dragindicator.ts","../src/ts/components/icons/deleteicon.ts","../src/ts/components/icons/playlist.ts","../src/ts/components/icons/autoplay.ts","../src/ts/components/icons/loop.ts","../src/ts/components/icons/quality.ts","../src/ts/components/icons/audiotrack.ts","../src/ts/components/icons/videotrack.ts","../src/ts/components/icons/chapters.ts","../src/ts/components/icons/ambience.ts","../src/ts/components/icons/playbackrate.ts","../src/ts/components/icons/timer.ts","../src/ts/components/icons/add.ts","../src/ts/components/icons/shuffle.ts","../src/ts/super/consts.ts"],"sourcesContent":["export * from \"@core/controllable\";\r\nexport * from \"@core/controller\";\r\nexport * from \"@core/registries\";\r\nexport * from \"@tools/player\";\r\nexport * from \"@tools/queue\";\r\nexport * from \"@tools/runtime\";\r\nexport * as techs from \"./super/techs\";\r\nexport * as plugs from \"./super/plugs\";\r\nexport * as comps from \"./super/components\";\r\nexport * as consts from \"./super/consts\";\r\nexport * as utils from \"./super/utils\";\r\n\r\nimport \"../css/index.scss\";\r\n\r\nimport \"./init\";\r\n\r\n// dev\r\nimport * as _s from \"./super\";\r\nObject.assign(window.tmg, _s);\r\n","// src/ts/core/consts.ts\nvar RAW = /* @__PURE__ */ Symbol.for(\"S.I.A_RAW\");\nvar INERTIA = /* @__PURE__ */ Symbol.for(\"S.I.A_INERTIA\");\nvar REJECTABLE = /* @__PURE__ */ Symbol.for(\"S.I.A_REJECTABLE\");\nvar INDIFFABLE = /* @__PURE__ */ Symbol.for(\"S.I.A_INDIFFABLE\");\nvar TERMINATOR = /* @__PURE__ */ Symbol.for(\"S.I.A_TERMINATOR\");\nvar VERSION = /* @__PURE__ */ Symbol.for(\"S.I.A_VERSION\");\nvar SSVERSION = /* @__PURE__ */ Symbol.for(\"S.I.A_SNAPSHOT_VERSION\");\nvar RTR_BATCH = \"undefined\" !== typeof window ? (\"undefined\" !== typeof queueMicrotask ? queueMicrotask : setTimeout).bind(window) : \"undefined\" !== typeof process && process.nextTick ? process.nextTick : setTimeout;\nvar RTR_LOG = console.log.bind(console, \"[S.I.A Reactor]\");\nvar EVT_OPTS = { LISTENER: [\"capture\", \"depth\", \"once\", \"signal\", \"init\"], MEDIATOR: [\"lazy\", \"signal\", \"init\"] };\nvar NIL = Object.freeze({});\nvar NOOP = () => {\n};\nvar isDevEnv = false;\ntry {\n isDevEnv = process.env.NODE_ENV !== \"production\";\n} catch (e) {\n}\nvar CTX = {\n /** Flag indicating whether the application is running in development mode. */\n isDevEnv,\n /** Flag indicating whether an operation is bypassing checks so reactors can allow all writes. */\n usingForce: false,\n /** Active `Autotracker` instance, override for automatic dependency collection on `Reactor` traps. */\n autotracker: null,\n /** Extensible meta context for payloads and cross-cutting concerns. */\n meta: null,\n /** Default configuration for new `Reactor` instances and also fallback for utils that need and are called without these options. */\n defaults: {\n crossRealms: false,\n smartCloning: false,\n eventBubbling: true,\n eventCapturing: \"auto\",\n lineageTracing: false,\n preserveContext: false,\n equalityFunction: Object.is,\n batchingFunction: RTR_BATCH\n }\n};\n\n// src/ts/utils/obj.ts\nvar arrRegex = /^([^\\[\\]]+)\\[(\\d+)\\]$/;\nfunction isObj(obj, arraycheck = true) {\n return \"object\" === typeof obj && obj !== null && (arraycheck ? !Array.isArray(obj) : true);\n}\nfunction isPOJO(obj, config = CTX.defaults, typecheck = true) {\n return (typecheck ? isObj(obj, false) : true) && (config.crossRealms ? Object.prototype.toString.call(obj) === \"[object Object]\" : obj.constructor === Object);\n}\nfunction canHandle(obj, config = CTX.defaults, typecheck = true) {\n if (typecheck && !isObj(obj, false) || obj[INERTIA]) return false;\n if (Array.isArray(obj) || !config.preserveContext && isPOJO(obj, config, false)) return true;\n if (config.preserveContext) return !(obj instanceof String) && !(obj instanceof Number) && !(obj instanceof Function) && !(obj instanceof Date) && !(obj instanceof Error) && !(obj instanceof RegExp) && !(obj instanceof Promise) && !(obj instanceof Map) && !(obj instanceof WeakMap) && !(obj instanceof Set) && !(obj instanceof WeakSet) && !(obj instanceof EventTarget);\n return false;\n}\nfunction getPath(source, key, separator = \".\", keyFunc) {\n if (key === \"*\") return source;\n const keys = key.split(separator);\n let currObj = source;\n for (let i = 0, len = keys.length; i < len; i++) {\n const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes(\"[\") && key2.match(arrRegex);\n if (match) {\n const [, key3, iStr] = match;\n if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return currObj[key3];\n currObj = currObj[key3][Number(iStr)];\n } else {\n if (!isObj(currObj) || !(key2 in currObj)) return currObj[key2];\n currObj = currObj[key2];\n }\n }\n return currObj;\n}\nfunction setPath(target, key, value, separator = \".\", keyFunc) {\n if (key === \"*\") return Object.assign(target, value);\n const keys = key.split(separator);\n for (let currObj = target, i = 0, len = keys.length; i < len; i++) {\n const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes(\"[\") && key2.match(arrRegex);\n if (match) {\n const [, key3, iStr] = match;\n if (!Array.isArray(currObj[key3])) currObj[key3] = [];\n if (i === len - 1) currObj[key3][Number(iStr)] = value;\n else currObj[key3][Number(iStr)] ||= {}, currObj = currObj[key3][Number(iStr)];\n } else {\n if (i === len - 1) currObj[key2] = value;\n else currObj[key2] ||= {}, currObj = currObj[key2];\n }\n }\n}\nfunction deletePath(target, key, separator = \".\", keyFunc) {\n if (key === \"*\") {\n const keys2 = Object.keys(target);\n for (let i = 0, len = keys2.length; i < len; i++) delete target[keys2[i]];\n return;\n }\n const keys = key.split(separator);\n for (let currObj = target, i = 0, len = keys.length; i < len; i++) {\n const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes(\"[\") && key2.match(arrRegex);\n if (match) {\n const [, key3, iStr] = match;\n if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return;\n if (i === len - 1) delete currObj[key3][Number(iStr)];\n else currObj = currObj[key3][Number(iStr)];\n } else {\n if (!isObj(currObj) || !(key2 in currObj)) return;\n if (i === len - 1) delete currObj[key2];\n else currObj = currObj[key2];\n }\n }\n}\nfunction hasPath(source, key, separator = \".\", keyFunc) {\n if (key === \"*\") return true;\n const keys = key.split(separator);\n for (let currObj = source, i = 0, len = keys.length; i < len; i++) {\n const key2 = keyFunc ? keyFunc(keys[i]) : keys[i], match = key2.includes(\"[\") && key2.match(arrRegex);\n if (match) {\n const [, key3, iStr] = match;\n if (!Array.isArray(currObj[key3]) || !(key3 in currObj)) return false;\n if (i === len - 1) return true;\n currObj = currObj[key3][Number(iStr)];\n } else {\n if (!isObj(currObj) || !(key2 in currObj)) return false;\n if (i === len - 1) return true;\n currObj = currObj[key2];\n }\n }\n return true;\n}\nfunction parsePathObj(obj, separator = \".\", keyFunc = (p) => p, seen = /* @__PURE__ */ new WeakSet()) {\n if (!isPOJO(obj) || seen.has(obj)) return obj;\n seen.add(obj);\n const result = {}, keys = Object.keys(obj);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i], val = obj[key];\n key === \"*\" || key.includes(separator) ? setPath(result, key, parsePathObj(val, separator, keyFunc, seen), separator, keyFunc) : result[key] = isPOJO(val) ? parsePathObj(val, separator, keyFunc, seen) : val;\n }\n return result;\n}\nfunction matchPaths(paths, target) {\n for (let i = 0, len = paths.length; i < len; i++) {\n const p = paths[i];\n if (target === p || target.startsWith(p + \".\")) return true;\n }\n return false;\n}\nfunction getDepth(path, depth = !path ? 0 : 1) {\n for (let i = 0, len = path.length; i < len; i++) if (path.charCodeAt(i) === 46) depth++;\n return depth;\n}\nfunction parseEvtOpts(options, opts, boolOpt = opts[0], result = {}) {\n return Object.assign(result, \"boolean\" === typeof options ? { [boolOpt]: options } : options), result;\n}\nfunction fanout(a, b, c, d) {\n const isEvPd = !!a?.target, isPath = !isEvPd && \"string\" === typeof b, [state, path, olds, news, opts, type] = isEvPd ? [a.root, a.currentTarget.path, a.currentTarget.oldValue, a.currentTarget.value, b || NIL, a.type] : isPath ? [a, b, getPath(a, b), c, d || NIL, void 0] : [void 0, void 0, a, b, c || NIL, void 0], target = isEvPd ? getPath(a.root, a.currentTarget.path) : isPath ? getPath(state, path) : olds;\n if (isEvPd && type !== \"set\" && type !== \"delete\" || !target || !canHandle(news, opts)) return;\n const func = () => {\n const walk = (target2, obj, depth = isEvPd ? 1 : Infinity, keys = Object.keys(obj)) => {\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i], val = obj[key];\n try {\n if ((opts.atomic ?? true) && Array.isArray(val)) target2[key] = val, target2[key].length = target2[key].length;\n else depth > 1 && canHandle(val, opts) ? walk(target2[key] ||= {}, val, depth - 1) : (!opts.skipUndefined || val !== void 0) && (target2[key] = val);\n } catch (e) {\n if (e instanceof RangeError) throw e;\n }\n }\n };\n if ((opts.atomic ?? true) && Array.isArray(news) && isPath) setPath(state, path, news), getPath(state, path).length = news.length;\n else walk(target, opts.merge ? mergeObjs(olds, news, opts) : news, opts.depth === true ? Infinity : opts.depth);\n };\n force(() => transaction(func, opts.txLabel ?? `${path ? `Fanout -> '${path}'` : `Fanout`} (Tx ${txId + 1})`), isEvPd);\n}\nvar fanoutOptsArr = [\"merge\", \"depth\", \"atomic\", \"skipUndefined\"];\nfunction force(task, bool = true) {\n const prev = CTX.usingForce;\n CTX.usingForce = bool;\n try {\n return task();\n } finally {\n CTX.usingForce = prev;\n }\n}\nfunction mergeObjs(o1, o2, config = NIL, pojocheck = true) {\n if (pojocheck && (!isPOJO(o1 || NIL, config) || !isPOJO(o2 || NIL, config))) return o2;\n o1 ||= {}, o2 ||= {};\n const merged = config.skipUndefined ? { ...o1 } : { ...o1, ...o2 };\n if (config.skipUndefined) {\n const keys2 = Object.keys(o1);\n for (let i = 0, len = keys2.length; i < len; i++) {\n const key = keys2[i], val = o2[key];\n if (val !== void 0) merged[key] = val;\n }\n }\n const keys = Object.keys(merged);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i], o1V = o1[key], o2V = o2[key];\n if (isPOJO(o1V, config) && isPOJO(o2V, config)) merged[key] = mergeObjs(o1V, o2V, config, false);\n }\n return merged;\n}\nfunction getTrailRecords(obj, path, reverse = false) {\n const parts = path.split(\".\"), chain = [[\"*\", obj, obj]];\n for (let acc = \"\", currObj = obj, i = 0, len = parts.length; i < len; i++) {\n const part = parts[i];\n chain.push([acc += (i ? \".\" : \"\") + part, currObj, currObj = currObj?.[part]]);\n }\n return reverse ? chain.reverse() : chain;\n}\nfunction deepClone(obj, config = CTX.defaults, seen = /* @__PURE__ */ new WeakMap()) {\n if (!obj || \"object\" !== typeof obj) return obj;\n const cloned = seen.get(obj);\n if (cloned) return cloned;\n if (!canHandle(obj, config, false)) return obj;\n const clone = config.preserveContext ? Object.create(Object.getPrototypeOf(obj)) : Array.isArray(obj) ? [] : {};\n seen.set(obj, clone);\n const keys = config.preserveContext ? Reflect.ownKeys(obj) : Object.keys(obj);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n try {\n clone[key] = deepClone(obj[key], config, seen);\n } catch (e) {\n if (e instanceof RangeError) throw e;\n }\n }\n return clone;\n}\nfunction nuke(target) {\n const keys = Object.keys(target);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n if (\"function\" !== typeof target[key]) target[key] = null;\n }\n}\nfunction withMeta(props, fn) {\n CTX.meta ??= {};\n const cache = {};\n for (const key of Object.keys(props)) {\n cache[key] = CTX.meta[key];\n CTX.meta[key] = props[key];\n }\n try {\n return fn();\n } finally {\n for (const key of Object.keys(cache)) {\n if (cache[key] === void 0) resetMeta(key);\n else CTX.meta[key] = cache[key];\n }\n }\n}\nfunction resetMeta(key) {\n if (!CTX.meta) return;\n delete CTX.meta[key];\n for (const _ in CTX.meta) return;\n CTX.meta = null;\n}\nfunction getPaths(obj, path = \"*\", config = CTX.defaults) {\n const target = path === \"*\" ? obj : getPath(obj, path, config.separator), result = [], seen = /* @__PURE__ */ new Set();\n if (!canHandle(target, config)) return result;\n const walk = (curr, currPath, depth) => {\n if (seen.has(curr) || depth >= (config.depth ?? 19)) return;\n seen.add(curr);\n const keys = config.preserveContext ? Reflect.ownKeys(curr) : Object.keys(curr);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = String(keys[i]), val = curr[key], newPath = currPath ? `${currPath}${config.separator || \".\"}${key}` : key;\n result.push(newPath);\n try {\n canHandle(val, config) && walk(val, newPath, depth + 1);\n } catch (e) {\n if (e instanceof RangeError) throw e;\n }\n }\n seen.delete(curr);\n };\n return walk(target, path === \"*\" ? \"\" : path, 0), result;\n}\nfunction isLeafPath(obj, path, config = CTX.defaults, value = getPath(obj, path, config.separator)) {\n return path !== \"*\" && !canHandle(value, config);\n}\n\n// src/ts/modules/timeTravel/transaction.ts\nvar txId = 0;\nfunction startTx(label = `Tx ${txId + 1}`) {\n const parent = CTX.meta?.tx ?? null, tx = { id: ++txId, label, parent };\n CTX.meta ??= {};\n return CTX.meta.tx = tx;\n}\nfunction endTx(tx) {\n if (CTX.meta?.tx === tx) {\n if (tx.parent) CTX.meta.tx = tx.parent;\n else resetMeta(\"tx\");\n }\n ;\n}\nfunction transaction(fn, label) {\n const tx = startTx(label);\n try {\n return fn();\n } finally {\n endTx(tx);\n }\n}\n\nexport {\n RAW,\n INERTIA,\n REJECTABLE,\n INDIFFABLE,\n TERMINATOR,\n VERSION,\n SSVERSION,\n RTR_BATCH,\n RTR_LOG,\n EVT_OPTS,\n NIL,\n NOOP,\n CTX,\n txId,\n startTx,\n endTx,\n transaction,\n arrRegex,\n isObj,\n isPOJO,\n canHandle,\n getPath,\n setPath,\n deletePath,\n hasPath,\n parsePathObj,\n matchPaths,\n getDepth,\n parseEvtOpts,\n fanout,\n fanoutOptsArr,\n force,\n mergeObjs,\n getTrailRecords,\n deepClone,\n nuke,\n withMeta,\n resetMeta,\n getPaths,\n isLeafPath\n};\n","import {\n CTX,\n EVT_OPTS,\n INDIFFABLE,\n INERTIA,\n NIL,\n NOOP,\n RAW,\n REJECTABLE,\n RTR_LOG,\n SSVERSION,\n TERMINATOR,\n VERSION,\n canHandle,\n deletePath,\n force,\n getDepth,\n getPath,\n getTrailRecords,\n hasPath,\n nuke,\n parseEvtOpts,\n setPath\n} from \"./chunk-SHWIAQD2.js\";\n\n// src/ts/core/event.ts\nvar ReactorEvent = class _ReactorEvent {\n /** No active propagation phase. */\n static NONE = 0;\n /** Capture phase: root to target parent. */\n static CAPTURING_PHASE = 1;\n /** Target phase: target listeners run. */\n static AT_TARGET = 2;\n /** Bubble phase: target parent to root. */\n static BUBBLING_PHASE = 3;\n /** Current propagation phase for this event instance. */\n eventPhase = _ReactorEvent.NONE;\n /** Current event type for the active propagation path, use immediately if async */\n type;\n /** Current target context for the active propagation path, use immediately if async. Also use to survive future object shape changes from nesting for a path callback. */\n currentTarget;\n /** Original event target context. */\n target;\n /** Root reactive object for this event instance wave. */\n root;\n /** The `Reactor` instance that dispatched this event instance. */\n reactor;\n /** Whether resolve/reject intent semantics are allowed for this event instance. */\n rejectable;\n /** Original event type before propagation remapping. */\n staticType;\n /** Original target path for this event instance wave. */\n path;\n /** Current value at the event target path. */\n value;\n /** Previous value at the event target path. */\n oldValue;\n /** Whether this event instance wave can bubble back up to ancestors or just capture down. */\n bubbles = false;\n /** Whether this event instance wave can capture down to descendants or just bubble up. */\n captures = false;\n /** `DOMHighResTimeStamp` for this event payload for native event parity, Enable `eventTimeStamps` config, then use this over custom timestamps for accuracy. */\n timestamp;\n _resolved = \"\";\n _rejected = \"\";\n _propagationStopped = false;\n _immediatePropagationStopped = false;\n /**\n * @param payload Source payload for this event instance.\n * @param reactor The `Reactor` instance creating this event instance.\n */\n constructor(payload) {\n Object.assign(this, payload);\n this.staticType = payload.type;\n this.path = payload.target.path;\n this.value = payload.target.value;\n this.oldValue = payload.target.oldValue;\n if (this.reactor.config.eventBubbling) this.bubbles = true;\n if (this.reactor.config.eventCapturing === \"auto\" ? this.rejectable : this.reactor.config.eventCapturing) this.captures = true;\n if (this.reactor.config.eventTimeStamps) this.timestamp = performance.now();\n }\n /** Whether propagation has been stopped. */\n get propagationStopped() {\n return this._propagationStopped;\n }\n /** Stops propagation to remaining listeners in later nodes/phases. */\n stopPropagation() {\n this._propagationStopped = true;\n }\n /** Whether immediate propagation has been stopped. */\n get immediatePropagationStopped() {\n return this._immediatePropagationStopped;\n }\n /** Stops propagation immediately, including remaining listeners on current path. */\n stopImmediatePropagation() {\n this._propagationStopped = true;\n this._immediatePropagationStopped = true;\n }\n /** Resolution message for rejectable events. */\n get resolved() {\n return this._resolved;\n }\n /**\n * Marks a rejectable event as resolved.\n * @param message Optional resolution message or identity.\n * @example e.resolve(\"html5Tech\"); // identity\n * @example e.resolve(\"API Load successful\"); // message\n */\n resolve(message) {\n if (!this.rejectable) return this.reactor.log(`[ReactorEvent] Ignored \\`resolve()\\` call on a non-rejectable ${this.staticType} at \"${this.path}\"`);\n if (this.eventPhase !== _ReactorEvent.CAPTURING_PHASE) this.reactor.log(`[ReactorEvent] Resolving an intent on ${this.staticType} at \"${this.path}\" outside of the capture phase is unadvised.`);\n if (this.rejectable) this.reactor.log(`[ReactorEvent] ${this._resolved = message || `${this.staticType} intent resolved at \"${this.path}\"`}`);\n }\n /** Rejection reason for rejectable events. */\n get rejected() {\n return this._rejected;\n }\n /**\n * Marks a rejectable event as rejected.\n * @param reason Optional rejection reason or identity.\n * @example e.reject(\"html5Tech\"); // identity\n * @example e.reject(\"User is not logged in\"); // reason\n */\n reject(reason) {\n if (!this.rejectable) return this.reactor.log(`[ReactorEvent] Ignored \\`reject()\\` call on a non-rejectable ${this.staticType} at \"${this.path}\"`);\n if (this.eventPhase !== _ReactorEvent.CAPTURING_PHASE) this.reactor.log(`[ReactorEvent] Rejecting an intent on ${this.staticType} at \"${this.path}\" outside of the capture phase is unadvised.`);\n if (this.rejectable) this.reactor.log(`[ReactorEvent] ${this._rejected = reason || `${this.staticType} intent rejected at \"${this.path}\"`}`);\n }\n /** Returns event path values from target to root in bubbling order. */\n composedPath() {\n return getTrailRecords(this.root, this.path, true).map((r) => r[2]);\n }\n};\n\n// src/ts/core/reactor.ts\nvar Reactor = class {\n /** Logger function for this reactor instance, override if desired, `this.canLog = false` resets. */\n log = NOOP;\n /** The core state object for this reactor instance. */\n core;\n // `?:`s | pay the ~800 byte price upfront for what u might never use\n /** The modules being used by this reactor. */\n modules;\n /** Configuration options for this reactor instance. */\n config;\n /** Whether this reactor instance is currently batching updates, a window view into the engine timing */\n isBatching = false;\n // Async Batching\n queue;\n // Tasks to run after flush\n batch;\n // Batched payloads to flush async\n lineage;\n // { parent, key }: uses maths to avoid extra allocations for pairs\n snapCache;\n proxyCache = /* @__PURE__ */ new WeakMap();\n getters;\n setters;\n deleters;\n watchers;\n listeners;\n /**\n * Creates a new Reactor instance.\n * @param target Initial state target.\n * @param build Reactor bootstrap/build configuration.\n * @example\n * const rtr = new Reactor({ count: 0 });\n */\n constructor(target = {}, build) {\n this[INERTIA] = true;\n this.config = { ...CTX.defaults, ...build };\n this.core = this.proxied(target);\n if (build) this.canLog = !!build.debug;\n }\n proxied(target, rejectable = false, indiffable = false, parent, key, path) {\n if (!target || \"object\" !== typeof target) return target;\n target = target[RAW] || target;\n if (this.config.referenceTracking && parent && key && !this.link(target, parent, key, false)) return target;\n const cached = this.proxyCache.get(target);\n if (cached) return cached;\n if (!canHandle(target, this.config, false)) return target;\n rejectable ||= target[REJECTABLE];\n indiffable ||= target[INDIFFABLE];\n const proxy = new Proxy(target, {\n // Robust Proxy handler\n get: (object, key2, receiver) => {\n if (key2 === RAW) return this.log(`\\u{1F440} [\\`get\\` Trap] Peeked at ${object}`), object;\n let value = !this.config.preserveContext ? object[key2] : Reflect.get(object, key2, receiver);\n const keyStr = String(key2), fullPath = path ? path + \".\" + keyStr : keyStr, paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath;\n this.log(`\\u{1F50D} [\\`get\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this);\n if (this.config.get) value = this.config.get(object, key2, value, receiver, paths);\n if (this.getters) {\n const wildcords = this.getters.get(\"*\");\n for (let i = 0, len = this.config.lineageTracing ? paths.length : 1; i < len; i++) {\n const currPath = this.config.lineageTracing ? paths[i] : fullPath, cords = this.getters.get(currPath);\n if (!cords && !wildcords) continue;\n const target2 = { path: currPath, value, key: keyStr, hadKey: true, object: receiver }, payload = { type: \"get\", target: target2, currentTarget: target2, root: this.core, reactor: this, rejectable, ...CTX.meta };\n if (cords) value = this.mediate(currPath, payload, \"get\", cords);\n if (!wildcords) continue;\n target2.value = value;\n value = this.mediate(\"*\", payload, \"get\", wildcords);\n }\n }\n return this.proxied(value, rejectable, indiffable, object, keyStr, fullPath);\n },\n set: (object, key2, value, receiver) => {\n let unchanged, safeValue, safeOldValue, terminated = false;\n const keyStr = String(key2), fullPath = path ? path + \".\" + keyStr : keyStr, paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath, loopLen = this.config.lineageTracing ? paths.length : 1, oldValue = !this.config.preserveContext ? object[key2] : Reflect.get(object, key2, receiver), hadKey = !this.config.preserveContext ? key2 in object : Reflect.has(object, key2);\n this.log(`\\u270F\\uFE0F [\\`set\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this, true);\n if (this.config.referenceTracking || !indiffable) {\n safeOldValue = oldValue?.[RAW] || oldValue;\n safeValue = value?.[RAW] || value;\n unchanged = this.config.equalityFunction(safeValue, safeOldValue);\n }\n if (!indiffable && unchanged && !CTX.usingForce && keyStr !== \"length\") return this.log(`\\u{1F504} [\\`set\\` Trap] Unchanged for \"${keyStr}\" on [${paths}]`), true;\n if (this.config.set) terminated = (value = this.config.set(object, key2, value, oldValue, receiver, paths)) === TERMINATOR;\n if (this.setters) {\n const wildcords = this.setters.get(\"*\");\n for (let i = 0; i < loopLen; i++) {\n const currPath = this.config.lineageTracing ? paths[i] : fullPath, cords = this.setters.get(currPath);\n if (!cords && !wildcords) continue;\n const target2 = { path: currPath, value, oldValue, key: keyStr, hadKey, object: receiver }, payload = { type: \"set\", target: target2, currentTarget: target2, root: this.core, reactor: this, terminated, rejectable, ...CTX.meta };\n if (cords) {\n const result2 = this.mediate(currPath, payload, \"set\", cords);\n if (!(terminated ||= payload.terminated)) value = result2;\n }\n if (!wildcords) continue;\n target2.value = value;\n const result = this.mediate(\"*\", payload, \"set\", wildcords);\n if (!(terminated ||= payload.terminated)) value = result;\n }\n }\n if (terminated) return this.log(`\\u{1F6E1}\\uFE0F [\\`set\\` Trap] Terminated for \"${keyStr}\" on [${paths}]`), true;\n const success = !this.config.preserveContext ? (object[key2] = value, true) : Reflect.set(object, key2, value, receiver);\n if (!success) return this.log(`\\u274C [\\`set\\` Trap] Failed for \"${keyStr}\" on [${paths}]`), false;\n if (this.config.referenceTracking && !unchanged) this.config.smartCloning && this.stamp(object), this.unlink(safeOldValue, object, keyStr), this.link(safeValue, object, keyStr);\n if (this.watchers || this.listeners)\n for (let i = 0; i < loopLen; i++) {\n const currPath = this.config.lineageTracing ? paths[i] : fullPath, target2 = { path: currPath, value, oldValue, key: keyStr, hadKey, object: receiver };\n this.notify(currPath, { type: \"set\", target: target2, currentTarget: target2, root: this.core, reactor: this, terminated, rejectable, ...CTX.meta });\n }\n return true;\n },\n deleteProperty: (object, key2) => {\n let value, receiver = this.proxyCache.get(object), terminated = false;\n const keyStr = String(key2), fullPath = path ? path + \".\" + keyStr : keyStr, paths = this.config.lineageTracing ? this.trace(object, keyStr) : fullPath, loopLen = this.config.lineageTracing ? paths.length : 1, oldValue = !this.config.preserveContext ? object[key2] : Reflect.get(object, key2, receiver), hadKey = !this.config.preserveContext ? key2 in object : Reflect.has(object, key2);\n this.log(`\\u{1F5D1}\\uFE0F [\\`deleteProperty\\` Trap] Initiated for \"${keyStr}\" on [${paths}]`), CTX.autotracker?.track(fullPath, this, true);\n if (this.config.deleteProperty) terminated = (value = this.config.deleteProperty(object, key2, oldValue, receiver, paths)) === TERMINATOR;\n if (this.deleters) {\n const wildcords = this.deleters.get(\"*\");\n for (let i = 0; i < loopLen; i++) {\n const currPath = this.config.lineageTracing ? paths[i] : fullPath, cords = this.deleters.get(currPath);\n if (!cords && !wildcords) continue;\n const target2 = { path: currPath, value, oldValue, key: keyStr, hadKey, object: receiver }, payload = { type: \"delete\", target: target2, currentTarget: target2, root: this.core, reactor: this, rejectable, ...CTX.meta };\n if (cords) {\n const result2 = this.mediate(currPath, payload, \"delete\", cords);\n if (!(terminated ||= payload.terminated)) value = result2;\n }\n if (!wildcords) continue;\n const result = this.mediate(\"*\", payload, \"delete\", wildcords);\n if (!(terminated ||= payload.terminated)) value = result;\n }\n }\n if (terminated) return this.log(`\\u{1F6E1}\\uFE0F [\\`deleteProperty\\` Trap] Terminated for \"${keyStr}\" on [${paths}]`), true;\n const success = !this.config.preserveContext ? delete object[key2] : Reflect.deleteProperty(object, key2);\n if (!success) return this.log(`\\u274C [\\`deleteProperty\\` Trap] Failed for \"${keyStr}\" on [${paths}]`), false;\n if (this.config.referenceTracking) this.config.smartCloning && this.stamp(object), this.unlink(oldValue?.[RAW] || oldValue, object, keyStr);\n if (this.watchers || this.listeners)\n for (let i = 0; i < loopLen; i++) {\n const currPath = this.config.lineageTracing ? paths[i] : fullPath, target2 = { path: currPath, value, oldValue, key: keyStr, hadKey, object: receiver };\n this.notify(currPath, { type: \"delete\", target: target2, currentTarget: target2, root: this.core, reactor: this, rejectable, ...CTX.meta });\n }\n return true;\n },\n has: (object, key2) => {\n let has = !this.config.preserveContext ? key2 in object : Reflect.has(object, key2);\n const keyStr = String(key2), fullPath = path ? path + \".\" + keyStr : keyStr;\n this.log(`\\u2753 [\\`has\\` Trap] Initiated for \"${keyStr}\" on '${fullPath}'`), CTX.autotracker?.track(fullPath, this);\n if (this.config.has) has = this.config.has(object, key2, has, this.proxyCache.get(object), fullPath);\n return has;\n },\n getOwnPropertyDescriptor: (object, key2) => {\n let descriptor = !this.config.preserveContext ? Object.getOwnPropertyDescriptor(object, key2) : Reflect.getOwnPropertyDescriptor(object, key2);\n const keyStr = String(key2), fullPath = path ? path + \".\" + keyStr : keyStr;\n this.log(`\\u{1F4CB} [\\`getOwnPropertyDescriptor\\` Trap] Initiated for \"${keyStr}\" on '${fullPath}'`), CTX.autotracker?.track(fullPath, this);\n if (this.config.getOwnPropertyDescriptor) descriptor = this.config.getOwnPropertyDescriptor(object, key2, descriptor, this.proxyCache.get(object), this.config.lineageTracing ? this.trace(object, keyStr) : fullPath);\n return descriptor;\n },\n ownKeys: (object) => {\n let ownKeys = Reflect.ownKeys(object);\n const safePath = path || \"*\";\n this.log(`\\u{1F511} [\\`ownKeys\\` Trap] Initiated on \"${safePath}\"`), CTX.autotracker?.track(safePath, this);\n if (this.config.ownKeys) ownKeys = this.config.ownKeys(object, ownKeys, this.proxyCache.get(object), safePath);\n return ownKeys;\n }\n });\n return this.proxyCache.set(target, proxy), proxy;\n }\n trace(target, path, paths = [], seen = /* @__PURE__ */ new WeakSet()) {\n if (Object.is(target, this.core[RAW] || this.core)) return paths.push(path), paths;\n if (seen.has(target)) return paths;\n seen.add(target);\n const es = (this.lineage ??= /* @__PURE__ */ new WeakMap()).get(target);\n if (!es) return paths;\n for (let i = 0, len = es.length; i < len; i += 2) {\n const prev = es[i + 1];\n this.trace(es[i], prev ? prev + \".\" + path : path, paths, seen);\n }\n return paths;\n }\n // won't be called without `.config.referenceTracking` so internal guard avoided\n link(target, parent, key, typecheck = true, es) {\n if (!canHandle(target, this.config, typecheck)) return false;\n es = (this.lineage ??= /* @__PURE__ */ new WeakMap()).get(target) ?? (this.lineage.set(target, es = []), es);\n for (let i = 0, len = es.length; i < len; i += 2) if (Object.is(es[i], parent) && es[i + 1] === key) return true;\n return es.push(parent, key), true;\n }\n unlink(target, parent, key) {\n if (!canHandle(target, this.config)) return;\n const es = (this.lineage ??= /* @__PURE__ */ new WeakMap()).get(target);\n if (es) {\n for (let i = 0, len = es.length; i < len; i += 2) if (Object.is(es[i], parent) && es[i + 1] === key) return void es.splice(i, 2);\n }\n }\n stamp(target, typecheck = true, seen = /* @__PURE__ */ new WeakSet()) {\n if (typecheck && \"object\" !== typeof target) return;\n target = target[RAW] || target;\n if (seen.has(target)) return;\n seen.add(target);\n target[VERSION] = (target[VERSION] || 0) + 1;\n const es = (this.lineage ??= /* @__PURE__ */ new WeakMap()).get(target);\n if (es) for (let i = 0, len = es.length; i < len; i += 2) this.stamp(es[i], false, seen);\n }\n mediate(path, payload, type, cords) {\n let terminated = false, value = payload.target.value, killed = false;\n const isGet = type === \"get\", isSet = type === \"set\", mediators = isGet ? this.getters : isSet ? this.setters : this.deleters, scords = cords.slice();\n for (let slen = scords.length, i = !isGet ? 0 : slen - 1, len = !isGet ? slen : -1; i !== len; i += !isGet ? 1 : -1) {\n const cord = scords[i];\n if (cord._dead) continue;\n const response = isGet ? cord.cb(value, payload) : isSet ? cord.cb(value, terminated, payload) : cord.cb(terminated, payload);\n if (isGet || !(terminated ||= payload.terminated = response === TERMINATOR)) value = response;\n if (cord.once) cord._dead = true, killed = true;\n }\n if (killed) {\n for (let i = cords.length - 1; i >= 0; i--) if (cords[i]._dead) cords.splice(i, 1), !cords.length && mediators.delete(path);\n }\n return value;\n }\n notify(path, payload) {\n if (this.watchers) {\n const wildcords = this.watchers.get(\"*\"), wildscords = wildcords?.slice(), cords = this.watchers.get(path), scords = cords?.slice();\n if (cords) {\n let killed = false;\n for (let i = 0, len = scords.length; i < len; i++) {\n const cord = scords[i];\n if (cord._dead) continue;\n cord.cb(payload.target.value, payload);\n if (cord.once) cord._dead = true, killed = true;\n }\n if (killed) {\n for (let i = cords.length - 1; i >= 0; i--) if (cords[i]._dead) cords.splice(i, 1), !cords.length && this.watchers.delete(path);\n }\n }\n if (wildcords) {\n let killed = false;\n for (let i = 0, len = wildscords.length; i < len; i++) {\n const wildcord = wildscords[i];\n if (wildcord._dead) continue;\n wildcord.cb(payload.target.value, payload);\n if (wildcord.once) wildcord._dead = true, killed = true;\n }\n if (killed) {\n for (let i = wildcords.length - 1; i >= 0; i--) if (wildcords[i]._dead) wildcords.splice(i, 1), !wildcords.length && this.watchers.delete(\"*\");\n }\n }\n }\n this.listeners && this.schedule(path, payload);\n }\n schedule(path, payload) {\n this.batch ??= /* @__PURE__ */ new Map();\n this.batch.set(path, payload), !this.isBatching && this.initBatching();\n }\n initBatching() {\n this.isBatching = true, this.config.batchingFunction(() => this.flush());\n }\n flush() {\n this.isBatching = false, this.batch && this.tick(this.batch.keys());\n if (this.queue?.size) for (const task of this.queue) task(), this.queue.delete(task);\n }\n wave(path, payload) {\n const e = new ReactorEvent(payload), chain = getTrailRecords(this.core, path);\n if (e.captures) {\n e.eventPhase = ReactorEvent.CAPTURING_PHASE;\n for (let i = 0; i <= chain.length - 2; i++) {\n if (e.propagationStopped) break;\n this.fire(chain[i], e, true);\n }\n if (e.propagationStopped) return;\n }\n e.eventPhase = ReactorEvent.AT_TARGET;\n this.fire(chain[chain.length - 1], e, true);\n !e.immediatePropagationStopped && this.fire(chain[chain.length - 1], e, false);\n if (e.bubbles) {\n e.eventPhase = ReactorEvent.BUBBLING_PHASE;\n for (let i = chain.length - 2; i >= 0; i--) {\n if (e.propagationStopped) break;\n this.fire(chain[i], e, false);\n }\n }\n }\n fire([path, object, value], e, isCapture, cords = this.listeners.get(path)) {\n if (!cords) return;\n e.type = path !== e.target.path ? \"update\" : e.staticType;\n e.currentTarget = { path, value, oldValue: e.type !== \"update\" ? e.target.oldValue : void 0, key: e.type !== \"update\" ? path : path.slice(path.lastIndexOf(\".\") + 1) || \"\", hadKey: e.type !== \"update\" ? e.target.hadKey : true, object };\n let killed = false;\n const scords = cords.slice();\n for (let i = 0, len = scords.length, tDepth; i < len; i++) {\n const cord = scords[i];\n if (e.immediatePropagationStopped) break;\n if (cord.capture !== isCapture || cord._dead) continue;\n if (cord.depth !== void 0) {\n tDepth ??= getDepth(e.target.path);\n if (tDepth > cord.lDepth + cord.depth) continue;\n }\n cord.cb(e);\n if (cord.once) cord._dead = true, killed = true;\n }\n if (killed) {\n for (let i = cords.length - 1; i >= 0; i--) if (cords[i]._dead) cords.splice(i, 1), !cords.length && this.listeners.delete(path);\n }\n }\n /**\n * Flushes queued listener payloads.\n * @param paths Optional path (or paths) to flush.\n * @example\n * rtr.tick(); // to flush all paths in batch or pass \"*\" wildcard\n * @example\n * rtr.tick(\"user.profile.name\");\n */\n tick(paths) {\n if (!paths || paths === \"*\") return this.flush();\n if (\"string\" === typeof paths) {\n const payload = this.batch?.get(paths);\n payload && (this.batch.delete(paths), this.wave(paths, payload));\n } else\n for (const path of paths) {\n const payload = this.batch.get(path);\n payload && (this.batch.delete(path), this.wave(path, payload));\n }\n }\n /**\n * Queues a task to run after the current flush cycle.\n * @param task Task callback.\n * @example\n * const task = () => console.log(\"after flush\");\n * rtr.stall(task);\n */\n stall(task) {\n (this.queue ??= /* @__PURE__ */ new Set()).add(task), !this.isBatching && this.initBatching();\n }\n /**\n * Removes a queued post-flush task.\n * @param task Task callback.\n * @returns `undefined` when no queue, `false` when queue exist but callback is not found, `true` when removed.\n */\n nostall(task) {\n return this.queue?.delete(task);\n }\n context(path) {\n const last = path.lastIndexOf(\".\"), key = path.slice(last + 1) || \"\", object = last === -1 ? this.core : getPath(this.core, path.slice(0, last));\n return { path, value: getPath(this.core, path), key, hadKey: !object || key in object, object };\n }\n binded(cord, sig) {\n if (sig) sig.aborted ? cord.clup() : sig.addEventListener(\"abort\", cord.clup, { once: true });\n return cord.sclup = !sig || sig.aborted ? NOOP : () => sig.removeEventListener(\"abort\", cord.clup), cord.clup;\n }\n cloned(target, raw, seen = /* @__PURE__ */ new WeakMap()) {\n if (!target || \"object\" !== typeof target) return target;\n const obj = target[RAW] || target, cloned = seen.get(obj);\n if (cloned) return cloned;\n if (!canHandle(obj, this.config, false)) return obj;\n const version = obj[VERSION] || 0, cached = !raw && this.config.smartCloning && (this.snapCache ??= /* @__PURE__ */ new WeakMap()).get(obj);\n if (cached && obj[SSVERSION] === version) return cached;\n const clone = !raw ? this.config.preserveContext ? Object.create(Object.getPrototypeOf(obj)) : Array.isArray(obj) ? [] : {} : obj;\n seen.set(obj, clone);\n const keys = this.config.preserveContext ? Reflect.ownKeys(obj) : Object.keys(obj);\n for (let i = 0, len = keys.length; i < len; i++) {\n const key = keys[i];\n try {\n clone[key] = this.cloned(obj[key], raw, seen);\n } catch (e) {\n if (e instanceof RangeError) throw e;\n }\n }\n if (!raw && this.config.smartCloning) this.snapCache.set(obj, clone), obj[SSVERSION] = version;\n return clone;\n }\n onSync(key, path, cb, opts, onInit = NOOP) {\n const { once = false, signal, lazy = false, init = false, initType } = parseEvtOpts(opts, EVT_OPTS.MEDIATOR), store = this[`${key}${key.endsWith(\"t\") ? \"t\" : \"\"}ers`] ??= /* @__PURE__ */ new Map();\n let cords = store.get(path), cord;\n if (cords)\n for (let i = 0, len = cords.length; i < len; i++) {\n const excord = cords[i];\n if (Object.is(excord.cb, cb)) {\n cord = excord;\n break;\n }\n }\n if (cord) return cord.clup;\n let task;\n cord = { cb, once, clup: () => (lazy && this.nostall(task), this[`no${key}`](path, cb)) };\n task = () => (cords ?? (store.set(path, cords = []), cords)).push(cord);\n lazy ? this.stall(task) : task(), init && (init !== \"auto\" || hasPath(this.core, path)) && onInit(initType);\n return this.binded(cord, signal);\n }\n // add synchronous\n offSync(store, path, cb) {\n const cords = store?.get(path);\n if (!cords) return void 0;\n for (let i = 0, len = cords.length; i < len; i++) {\n const cord = cords[i];\n if (Object.is(cord.cb, cb)) return cord.sclup(), cords.splice(i, 1), !cords.length && store.delete(path), cord._dead = true;\n }\n return false;\n }\n // remove synchronous\n /**\n * Registers a get mediator for a path.\n * @param path Path or wildcard path.\n * @param callback Mediator callback.\n * @param options Sync options.\n * @returns Cleanup function.\n * @example\n * const cleanup = rtr.get(\"user.name\", (value) => String(value).trim());\n */\n get(path, callback, options) {\n return this.onSync(\"get\", path, callback, options, () => getPath(this.core, path));\n }\n /** Registers a get mediator for a path that only triggers once. */\n gonce(path, callback, options) {\n return this.get(path, callback, { ...parseEvtOpts(options, EVT_OPTS.MEDIATOR), once: true });\n }\n /**\n * Removes a get mediator for a path.\n * @param path Path or wildcard path.\n * @param callback Mediator callback to remove.\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\n */\n noget(path, callback) {\n return this.offSync(this.getters, path, callback);\n }\n /**\n * Registers a set mediator for a path.\n * @param path Path or wildcard path.\n * @param callback Mediator callback.\n * @param options Sync options.\n * @returns Cleanup function.\n * @example\n * rtr.set(\"user.name\", (value) => String(value).trim());\n */\n set(path, callback, options) {\n return this.onSync(\"set\", path, callback, options, () => (force(() => setPath(this.core, path, getPath(this.core, path))), this.tick(path)));\n }\n /** Registers a set mediator for a path that only triggers once. */\n sonce(path, callback, options) {\n return this.set(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\n }\n /**\n * Removes a set mediator for a path.\n * @param path Path or wildcard path.\n * @param callback Mediator callback to remove.\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\n */\n noset(path, callback) {\n return this.offSync(this.setters, path, callback);\n }\n /**\n * Registers a delete mediator for a path.\n * @param path Path or wildcard path.\n * @param callback Mediator callback.\n * @param options Sync options.\n * @returns Cleanup function.\n * @example\n * rtr.delete(\"cache.temp\", () => TERMINATOR);\n */\n delete(path, callback, options) {\n return this.onSync(\"delete\", path, callback, options, () => deletePath(this.core, path));\n }\n /** Registers a delete mediator for a path that only triggers once. */\n donce(path, callback, options) {\n return this.delete(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\n }\n /**\n * Removes a delete mediator for a path.\n * @param path Path or wildcard path.\n * @param callback Mediator callback to remove.\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\n */\n nodelete(path, callback) {\n return this.offSync(this.deleters, path, callback);\n }\n /**\n * Registers a watcher for a path.\n * Watch callbacks run synchronously with the operation, use leaf paths for reliability as it sees exact sets; no bubbling here.\n * @param path Path or wildcard path.\n * @param callback Watch callback.\n * @param options Sync options.\n * @returns Cleanup function.\n * @example\n * const cleanup = rtr.watch(\"user.name\", (value) => console.log(value));\n */\n watch(path, callback, options) {\n return this.onSync(\"watch\", path, callback, options, (type) => !type ? ((target) => callback(target.value, { type: \"init\", target, currentTarget: target, root: this.core, rejectable: false }))(this.context(path)) : (force(() => type === \"set\" ? setPath(this.core, path, getPath(this.core, path)) : deletePath(this.core, path)), this.tick(path)));\n }\n /** Registers a watcher for a path that only triggers once. */\n wonce(path, callback, options) {\n return this.watch(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.MEDIATOR), { once: true }));\n }\n /**\n * Removes a watcher for a path.\n * @param path Path or wildcard path.\n * @param callback Watch callback to remove.\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\n */\n nowatch(path, callback) {\n return this.offSync(this.watchers, path, callback);\n }\n /**\n * Registers an event listener for a path.\n * `on` listeners are batched and notified asynchronously by default e.g. `queueMicrotask()`.\n * @param path Path or wildcard path.\n * @param callback Listener callback.\n * @param options Listener options.\n * @returns Cleanup function.\n * @example\n * const cleanup = rtr.on(\"user.name\", (e) => console.log(e.type, e.path));\n */\n on(path, callback, options) {\n this.listeners ??= /* @__PURE__ */ new Map();\n const { capture = false, once = false, signal, init = false, initType: type, depth } = parseEvtOpts(options, EVT_OPTS.LISTENER);\n let cords = this.listeners.get(path), cord;\n if (cords)\n for (let i = 0, len = cords.length; i < len; i++) {\n const excord = cords[i];\n if (Object.is(excord.cb, callback) && capture === excord.capture) {\n cord = excord;\n break;\n }\n }\n if (cord) return cord.clup;\n cord = { cb: callback, capture, depth, once, clup: () => this.off(path, callback, options), lDepth: depth !== void 0 ? getDepth(path) : depth };\n (cords ?? (this.listeners.set(path, cords = []), cords)).push(cord);\n init && (init !== \"auto\" || hasPath(this.core, path)) && (!type ? ((target) => callback(new ReactorEvent({ type: \"init\", target, currentTarget: target, root: this.core, reactor: this, rejectable: false })))(this.context(path)) : (force(() => type === \"set\" ? setPath(this.core, path, getPath(this.core, path)) : deletePath(this.core, path)), this.tick(path)));\n return this.binded(cord, signal);\n }\n /** Registers an event listener for a path that only triggers once. */\n once(path, callback, options) {\n return this.on(path, callback, Object.assign(parseEvtOpts(options, EVT_OPTS.LISTENER), { once: true }));\n }\n /**\n * Removes an event listener for a path.\n * @param path Path or wildcard path.\n * @param callback Listener callback to remove.\n * @param options Listener options used during registration.\n * @returns `undefined` when the path has no records, `false` when records exist but callback is not found, `true` when removed.\n * @example\n * const cb = (e: REvent<T>) => console.log(e.path);\n * rtr.on(\"user.name\", cb);\n * rtr.off(\"user.name\", cb);\n */\n off(path, callback, options) {\n const cords = this.listeners?.get(path);\n if (!cords) return void 0;\n const { capture = false } = parseEvtOpts(options, EVT_OPTS.LISTENER);\n for (let i = 0, len = cords.length; i < len; i++) {\n const cord = cords[i];\n if (Object.is(cord.cb, callback) && cord.capture === capture) return cord.sclup(), cords.splice(i, 1), !cords.length && this.listeners.delete(path), cord._dead = true;\n }\n return false;\n }\n snapshot(raw = !this.config.smartCloning, branch) {\n return this.cloned(arguments.length < 2 ? this.core : branch, raw);\n }\n /**\n * Installs a module instance.\n * @param target Module instance.\n * @param id Optional identification tag for this instance in the module.\n * @returns Current `Reactor` instance for fluent chaining.\n */\n use(target, id) {\n return (this.modules ??= /* @__PURE__ */ new Set()).add(target.setup(this, id)), this;\n }\n /** Resets this reactor instance to its initial state. */\n reset() {\n this.getters?.clear(), this.setters?.clear(), this.deleters?.clear(), this.watchers?.clear(), this.listeners?.clear();\n this.batch?.clear(), this.queue?.clear(), this.isBatching = false;\n }\n destroy() {\n if (this.modules) for (const mdle of this.modules) mdle.destroy();\n this.reset(), nuke(this);\n }\n get canLog() {\n return this.log !== NOOP;\n }\n set canLog(value) {\n this.log = value ? RTR_LOG : NOOP;\n }\n get canLineageTrace() {\n return this.config.lineageTracing && this.config.referenceTracking;\n }\n get canSmartClone() {\n return this.config.smartCloning && this.config.referenceTracking;\n }\n};\n\n// src/ts/core/mixins.ts\nvar methods = [\"tick\", \"stall\", \"nostall\", \"get\", \"gonce\", \"noget\", \"set\", \"sonce\", \"noset\", \"delete\", \"donce\", \"nodelete\", \"watch\", \"wonce\", \"nowatch\", \"on\", \"once\", \"off\", \"snapshot\", \"use\", \"reset\", \"destroy\"];\nfunction reactive(target, build, preferences = NIL) {\n if (\"__Reactor__\" in target) return target;\n const descriptors = {}, rtr = getReactor(target, true, build), locks = { enumerable: false, configurable: true, writable: false }, hasAffix = !!(preferences.prefix || preferences.suffix);\n for (let i = 0, len = methods.length; i < len; i++) {\n let key = methods[i];\n if (hasAffix) (preferences.whitelist?.includes(key) ?? true) && (key = `${preferences.prefix || \"\"}${key}${preferences.suffix || \"\"}`);\n else if (preferences.whitelist?.includes(key)) continue;\n descriptors[key] = { value: rtr[methods[i]].bind(rtr), ...locks };\n }\n descriptors[\"__Reactor__\"] = { value: rtr, ...locks };\n return Object.defineProperties(rtr.core, descriptors), rtr.core;\n}\nfunction intent(target) {\n return getRaw(target)[REJECTABLE] = true, target;\n}\nfunction state(target) {\n return delete getRaw(target)[REJECTABLE], target;\n}\nfunction isIntent(target = NIL) {\n return !!getRaw(target)[REJECTABLE];\n}\nfunction inert(target) {\n return getRaw(target)[INERTIA] = true, target;\n}\nfunction live(target) {\n return delete getRaw(target)[INERTIA], target;\n}\nfunction isInert(target = NIL) {\n return !!getRaw(target)[INERTIA];\n}\nfunction volatile(target) {\n return getRaw(target)[INDIFFABLE] = true, target;\n}\nfunction stable(target) {\n return delete getRaw(target)[INDIFFABLE], target;\n}\nfunction isVolatile(target = NIL) {\n return !!getRaw(target)[INDIFFABLE];\n}\nfunction getReactor(target, create = false, build) {\n return (target instanceof Reactor ? target : target.__Reactor__) || (create ? new Reactor(target, build) : void 0);\n}\nfunction getRaw(target = NIL) {\n return target[RAW] || target;\n}\nfunction getVersion(target = NIL) {\n return getRaw(target)[VERSION] || 0;\n}\nfunction getSnapshotVersion(target = NIL) {\n return getRaw(target)[SSVERSION] || 0;\n}\n\nexport {\n ReactorEvent,\n Reactor,\n methods,\n reactive,\n intent,\n state,\n isIntent,\n inert,\n live,\n isInert,\n volatile,\n stable,\n isVolatile,\n getReactor,\n getRaw,\n getVersion,\n getSnapshotVersion\n};\n","// src/ts/utils/num.ts\nfunction clamp(min = 0, val, max = Infinity) {\n return Math.min(Math.max(val, min), max);\n}\n\n// src/ts/utils/fn.ts\nfunction setTimeout(handler, timeout, ...args) {\n const sig = args[0] instanceof AbortSignal ? args.shift() : void 0;\n if (sig?.aborted) return -1;\n const win = args[0] instanceof Window ? args.shift() : window;\n if (!sig) return win.setTimeout(handler, timeout, ...args);\n const id = win.setTimeout(() => (sig.removeEventListener(\"abort\", kill), \"string\" === typeof handler ? new Function(handler) : handler(...args)), timeout), kill = () => win.clearTimeout(id);\n return sig.addEventListener(\"abort\", kill, { once: true }), id;\n}\nfunction setInterval(handler, timeout, ...args) {\n const sig = args[0] instanceof AbortSignal ? args.shift() : void 0;\n if (sig?.aborted) return -1;\n const win = args[0] instanceof Window ? args.shift() : window, id = win.setInterval(handler, timeout, ...args);\n return sig?.addEventListener(\"abort\", () => win.clearInterval(id), { once: true }), id;\n}\nfunction requestAnimationFrame(callback, sig, win = window) {\n if (sig?.aborted) return -1;\n if (!sig) return win.requestAnimationFrame(callback);\n const id = win.requestAnimationFrame((t) => (sig.removeEventListener(\"abort\", kill), callback(t))), kill = () => win.cancelAnimationFrame(id);\n return sig.addEventListener(\"abort\", kill, { once: true }), id;\n}\n\nexport {\n setTimeout,\n setInterval,\n requestAnimationFrame,\n clamp\n};\n","// src/ts/utils/methd.ts\nfunction onAllMethods(owner, callback, skipOwn = true, nested = false) {\n let proto = owner;\n while (proto && proto !== Object.prototype) {\n for (const method of Object.getOwnPropertyNames(proto)) {\n if (method === \"constructor\") continue;\n if (nested && skipOwn && Object.prototype.hasOwnProperty.call(owner, method)) continue;\n if (\"function\" === typeof Object.getOwnPropertyDescriptor(proto, method)?.value) callback(method, owner);\n }\n proto = Object.getPrototypeOf(proto), nested = true;\n }\n}\nfunction bindAllMethods(owner) {\n onAllMethods(owner, (method, owner2) => {\n owner2[method] = owner2[method].bind(owner2);\n });\n}\nfunction guardAllMethods(owner, guardFn = guardMethod, bound = true) {\n onAllMethods(owner, (method, owner2) => {\n owner2[method] = guardFn(bound ? owner2[method].bind(owner2) : owner2[method]);\n });\n}\nfunction guardMethod(fn, onError = (e) => console.error(e)) {\n return ((...args) => {\n try {\n const result = fn(...args);\n return result instanceof Promise ? result.catch((e) => onError(e)) : result;\n } catch (e) {\n onError(e);\n }\n });\n}\n\n// src/ts/utils/dom.ts\nfunction createEl(tag, props, dataset, styles, el = tag ? document?.createElement(tag) : null) {\n return assignEl(el, props, dataset, styles);\n}\nfunction assignEl(el, props, dataset, styles, nodiff = true) {\n if (!el) return null;\n if (props) {\n for (const k of Object.keys(props)) if (props[k] !== void 0) {\n if (nodiff || el[k] !== props[k]) el[k] = props[k];\n }\n }\n if (dataset) {\n for (const k of Object.keys(dataset)) if (dataset[k] !== void 0) {\n if (nodiff || el.dataset[k] !== dataset[k]) el.dataset[k] = String(dataset[k]);\n }\n }\n if (styles) {\n for (const k of Object.keys(styles)) if (styles[k] !== void 0) {\n if (nodiff || el.style[k] !== styles[k]) el.style[k] = styles[k];\n }\n }\n return el;\n}\nfunction getActiveEl(root) {\n const activeEl = (root ?? document).activeElement;\n return !activeEl ? null : activeEl.shadowRoot ? getActiveEl(activeEl.shadowRoot) : activeEl;\n}\n\n// src/ts/utils/keys.ts\nvar KEYS_BLOCKS = [\"Ctrl+Tab\", \"Ctrl+Shift+Tab\", \"Ctrl+PageUp\", \"Ctrl+PageDown\", \"Cmd+Option+ArrowRight\", \"Cmd+Option+ArrowLeft\", \"Ctrl+1\", \"Ctrl+2\", \"Ctrl+3\", \"Ctrl+4\", \"Ctrl+5\", \"Ctrl+6\", \"Ctrl+7\", \"Ctrl+8\", \"Ctrl+9\", \"Cmd+1\", \"Cmd+2\", \"Cmd+3\", \"Cmd+4\", \"Cmd+5\", \"Cmd+6\", \"Cmd+7\", \"Cmd+8\", \"Cmd+9\", \"Alt+ArrowLeft\", \"Alt+ArrowRight\", \"Cmd+ArrowLeft\", \"Cmd+ArrowRight\", \"Ctrl+r\", \"Ctrl+Shift+r\", \"F5\", \"Shift+F5\", \"Cmd+r\", \"Cmd+Shift+r\", \"Ctrl+h\", \"Ctrl+j\", \"Ctrl+d\", \"Ctrl+f\", \"Cmd+y\", \"Cmd+Option+b\", \"Cmd+d\", \"Cmd+f\", \"Ctrl+Shift+i\", \"Ctrl+Shift+j\", \"Ctrl+Shift+c\", \"Ctrl+u\", \"F12\", \"Cmd+Option+i\", \"Cmd+Option+j\", \"Cmd+Option+c\", \"Cmd+Option+u\", \"Ctrl+=\", \"Ctrl+-\", \"Ctrl+0\", \"Cmd+=\", \"Cmd+-\", \"Cmd+0\", \"Ctrl+p\", \"Ctrl+s\", \"Ctrl+o\", \"Cmd+p\", \"Cmd+s\", \"Cmd+o\"];\nfunction parseKeyCombo(combo) {\n const parts = cleanKeyCombo(combo).toLowerCase().split(\"+\");\n return { ctrlKey: parts.includes(\"ctrl\"), shiftKey: parts.includes(\"shift\"), altKey: parts.includes(\"alt\"), metaKey: parts.includes(\"meta\") || parts.includes(\"cmd\"), key: parts.find((p) => ![\"ctrl\", \"shift\", \"alt\", \"meta\", \"cmd\"].includes(p)) || \"\" };\n}\nfunction stringifyKeyEvent(e) {\n const parts = [];\n if (e.ctrlKey) parts.push(\"ctrl\");\n if (e.altKey) parts.push(\"alt\");\n if (e.shiftKey) parts.push(\"shift\");\n if (e.metaKey) parts.push(\"meta\");\n parts.push(e.key?.toLowerCase() ?? \"\");\n return parts.join(\"+\");\n}\nfunction cleanKeyCombo(combo) {\n const clean = (combo2) => {\n const m = [\"ctrl\", \"alt\", \"shift\", \"meta\"], alias = { cmd: \"meta\", space: \" \" };\n if (combo2 === \" \" || combo2 === \"+\") return combo2;\n combo2 = combo2.replace(/\\+\\s*\\+$/, \"+plus\");\n const p = combo2.toLowerCase().split(\"+\").filter((k) => k !== \"\").map((k) => alias[k] || (k === \"plus\" ? \"+\" : k.trim() || \" \"));\n return [...p.filter((k) => m.includes(k)).sort((a, b) => m.indexOf(a) - m.indexOf(b)), ...p.filter((k) => !m.includes(k)) || \"\"].join(\"+\");\n };\n return Array.isArray(combo) ? combo.map(clean) : clean(combo);\n}\nfunction matchKeys(required, actual, strict = false) {\n actual = cleanKeyCombo(actual);\n const match = (required2, actual2) => {\n required2 = cleanKeyCombo(required2);\n if (strict) return required2 === actual2;\n const reqKeys = required2.split(\"+\"), actKeys = actual2.split(\"+\");\n return reqKeys.every((k) => actKeys.includes(k));\n };\n return Array.isArray(required) ? required.some((req) => match(req, actual)) : match(required, actual);\n}\nfunction getTermsForKey(combo, settings) {\n const terms = { override: false, block: false, whitelisted: false, action: null }, { overrides = [], shortcuts = {}, blocks = [], strictMatches: s = false, whitelist = [] } = settings || {};\n combo = cleanKeyCombo(combo);\n if (matchKeys(overrides, combo, s)) terms.override = true;\n if (matchKeys(blocks, combo, s)) terms.block = true;\n if (matchKeys(whitelist, combo)) terms.whitelisted = true;\n terms.action = Object.keys(shortcuts).find((key) => matchKeys(shortcuts[key], combo, s)) || null;\n return terms;\n}\nfunction keyEventAllowed(e, settings) {\n if (settings.disabled) return false;\n const activeEl = getActiveEl(e.target?.ownerDocument);\n if ((e.key === \" \" || e.key === \"Enter\") && activeEl?.matches(\"button,input[type='button'],input[type='submit']\")) return false;\n if (e.currentTarget !== activeEl && activeEl?.matches(\"input,textarea,[contenteditable],[role]\") && !(e.key === \"Escape\" && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey)) return false;\n const combo = stringifyKeyEvent(e), { override, block, action, whitelisted } = getTermsForKey(combo, settings);\n if (block) return false;\n if (override) e.preventDefault();\n if (action) return action;\n if (whitelisted) return e.key.toLowerCase();\n return false;\n}\nvar formatKeyForDisplay = (combo = \"\") => ` ${(Array.isArray(combo) ? combo : [combo]).map((c) => `(${cleanKeyCombo(c).replace(\" \", \"space\")})`).join(\" or \")}`;\nfunction formatKeyShortcutsForDisplay(keyShortcuts = {}, formatter = formatKeyForDisplay) {\n const shortcuts = {};\n for (const action of Object.keys(keyShortcuts)) shortcuts[action] = formatter(keyShortcuts[action]);\n return shortcuts;\n}\nfunction parseForARIAKS(s = \"\", formatted = true) {\n const m = { ctrl: \"Control\", cmd: \"Meta\", space: \"Space\", plus: \"+\" };\n return (formatted && !Array.isArray(s) ? s : formatKeyForDisplay(s)).toLowerCase().replace(/[()]/g, \"\").replace(/\\bor\\b/g, \" \").replace(/\\w+/g, (k) => m[k] || k).replace(/\\s+/g, \" \").trim();\n}\n\nexport {\n onAllMethods,\n bindAllMethods,\n guardAllMethods,\n guardMethod,\n createEl,\n assignEl,\n getActiveEl,\n KEYS_BLOCKS,\n parseKeyCombo,\n stringifyKeyEvent,\n cleanKeyCombo,\n matchKeys,\n getTermsForKey,\n keyEventAllowed,\n formatKeyForDisplay,\n formatKeyShortcutsForDisplay,\n parseForARIAKS\n};\n","// src/ts/core/dom.ts\nimport { createEl, assignEl } from \"sia-reactor/utils\";\nimport { getActiveEl } from \"sia-reactor/utils\";\nimport { NOOP } from \"sia-reactor\";\nvar INTERACTIVE_SELECTOR = \":is(button,[href],input:not([type='hidden']),select,textarea,details>summary,[contenteditable],iframe,audio[controls],video[controls],[tabindex]):not([disabled],[tabindex='-1'],[data-focus-guard],[inert],[inert] *)\";\nvar isInteractive = (target) => target instanceof HTMLElement && target.matches(INTERACTIVE_SELECTOR);\nvar VIRTUAL_RESOURCE = /* @__PURE__ */ Symbol.for(\"T007_VIRTUAL_RESOURCE\");\nfunction loadResource(req, type = \"style\", { module, media, crossOrigin, integrity, referrerPolicy, nonce, fetchPriority, attempts = 3, retryKey = false } = {}, win = window) {\n win.t007 ??= {}, win.t007._resourceCache ??= {};\n if (req === VIRTUAL_RESOURCE || isSym(req)) return Promise.resolve();\n const src = req;\n if (win.t007._resourceCache[src]) return win.t007._resourceCache[src];\n const existing = type === \"script\" ? Array.prototype.find.call(win.document.scripts, (s) => isSameURL(s.src, src)) : type === \"style\" ? Array.prototype.find.call(win.document.styleSheets, (s) => isSameURL(s.href, src)) : null;\n if (existing) return win.t007._resourceCache[src] = Promise.resolve(existing);\n win.t007._resourceCache[src] = new Promise((resolve, reject) => {\n (function tryLoad(remaining, el) {\n const onerror = () => {\n el?.remove?.();\n if (remaining > 1) {\n setTimeout(tryLoad, 1e3, remaining - 1);\n console.warn(`Retrying ${type} load for \"${src}\" (${attempts - remaining + 1})...`);\n } else {\n delete win.t007._resourceCache[src];\n reject(new Error(`${capitalize(type)} load failed for \"${src}\" after ${attempts - 1} attempts`));\n }\n };\n const url = retryKey && remaining < attempts ? `${src}${src.includes(\"?\") ? \"&\" : \"?\"}_${retryKey}=${Date.now()}` : src;\n if (type === \"script\") win.document.body.append(el = createEl(\"script\", { src: url, type: module ? \"module\" : \"text/javascript\", crossOrigin, integrity, referrerPolicy, nonce, fetchPriority, onload: () => resolve(el), onerror }) || \"\");\n else if (type === \"style\") win.document.head.append(el = createEl(\"link\", { rel: \"stylesheet\", href: url, media, crossOrigin, integrity, referrerPolicy, nonce, fetchPriority, onload: () => resolve(el), onerror }) || \"\");\n else reject(new Error(`Unsupported resource type: ${type}`));\n })(attempts);\n });\n return win.t007._resourceCache[src];\n}\nfunction getWindow(el = window) {\n return el?.ownerDocument?.defaultView ?? el?.defaultView ?? window;\n}\nfunction createListRenderer({ container, getKey, createNode, updateNode = NOOP, destroyNode = NOOP, initNode }) {\n let nodeRegistry = /* @__PURE__ */ new Map();\n if (initNode) {\n const children = Array.from(container.children);\n for (let i = 0, len = children.length; i < len; i++) initNode(children[i], (key) => nodeRegistry.set(key, children[i]));\n }\n return function syncDOM(array, strict = true) {\n const newRegistry = /* @__PURE__ */ new Map(), seenKeys = /* @__PURE__ */ new Set(), oldPositions = /* @__PURE__ */ new WeakMap(), children = Array.from(container.children);\n for (let i = 0, len = children.length; i < len; i++) oldPositions.set(children[i], i);\n const futureNodes = [], oldIndices = [];\n for (let i = 0, len = array.length; i < len; i++) {\n const item = array[i], key = getKey(item);\n if (seenKeys.has(key)) throw new Error(`[List Renderer] Duplicate key \"${key}\" detected`);\n let node = nodeRegistry.get(key);\n if (!node) {\n node = createNode(item);\n if (!node) {\n if (strict) throw new Error(`[List Renderer] No HTMLElement for key \"${key}\"`);\n continue;\n }\n oldIndices.push(-1);\n } else updateNode(node, item), oldIndices.push(oldPositions.get(node) ?? -1);\n seenKeys.add(key), futureNodes.push(node), newRegistry.set(key, node);\n }\n for (const [key, node] of nodeRegistry.entries()) !seenKeys.has(key) && node.parentElement === container && (destroyNode(node, key), node.remove());\n const sequence = longestIncreasingSubsequence(oldIndices), stable = new Set(sequence);\n let anchor = null;\n for (let i = futureNodes.length - 1; i >= 0; i--) {\n const node = futureNodes[i];\n if (oldIndices[i] !== -1 && stable.has(i)) {\n anchor = node;\n continue;\n }\n container.insertBefore(node, anchor), anchor = node;\n }\n nodeRegistry = newRegistry;\n };\n}\n\n// src/ts/index.ts\nimport { NIL, NOOP as NOOP2 } from \"sia-reactor\";\n\n// src/ts/core/obj.ts\nimport { isObj } from \"sia-reactor/utils\";\nfunction isDef(val) {\n return \"undefined\" !== typeof val;\n}\nfunction isSym(val) {\n return \"symbol\" === typeof val;\n}\nfunction isBool(val) {\n return \"boolean\" === typeof val;\n}\nfunction isNum(val) {\n return \"number\" === typeof val;\n}\nfunction isStr(val) {\n return \"string\" === typeof val;\n}\nfunction isArr(obj) {\n return Array.isArray(obj);\n}\nfunction isPOJO(obj, crossRealms = false, typecheck = true) {\n return (typecheck ? isObj(obj, false) : true) && (crossRealms ? Object.prototype.toString.call(obj) === \"[object Object]\" : obj.constructor === Object);\n}\nfunction isIter(obj) {\n return obj != null && \"function\" === typeof obj[Symbol.iterator];\n}\nfunction isFunc(val) {\n return \"function\" === typeof val;\n}\nfunction inBoolArrOpt(opt, str) {\n return opt?.includes?.(str) ?? opt;\n}\n\n// src/ts/core/num.ts\nimport { clamp } from \"sia-reactor/utils\";\nfunction longestIncreasingSubsequence(array) {\n const n = array.length, parent = new Array(n), tails = [];\n for (let i = 0; i < n; i++) {\n const value = array[i];\n if (value === -1) continue;\n let left = 0;\n let right = tails.length;\n while (left < right) {\n const mid = left + right >> 1;\n if (array[tails[mid]] < value) left = mid + 1;\n else right = mid;\n }\n if (left > 0) parent[i] = tails[left - 1];\n else parent[i] = -1;\n tails[left] = i;\n }\n if (!tails.length) return [];\n const result = [];\n let k = tails[tails.length - 1];\n while (k >= 0) result.push(k), k = parent[k];\n return result.reverse(), result;\n}\n\n// src/ts/core/str.ts\nfunction uid(prefix = \"\") {\n return prefix + Date.now().toString(36) + \"_\" + performance.now().toString(36).replace(\".\", \"\") + \"_\" + Math.random().toString(36).slice(2);\n}\nfunction capitalize(word = \"\") {\n return word.replace(/^(\\s*)([a-z])/i, (_, s, l) => s + l.toUpperCase());\n}\nfunction camelize(str = \"\", { source } = /[\\s_-]+/, { preserveInnerCase: pIC = true, upperFirst: uF = false } = {}) {\n return (pIC ? str : str.toLowerCase()).replace(new RegExp(source + \"(\\\\w)\", \"g\"), (_, c) => c.toUpperCase()).replace(/^\\w/, (c) => c[uF ? \"toUpperCase\" : \"toLowerCase\"]());\n}\nfunction uncamelize(str, separator = \" \") {\n return str.replace(/([a-z])([A-Z])/g, `$1${separator}$2`).toLowerCase();\n}\nfunction remToPx(rem, el = document.documentElement) {\n return rem * parseFloat(getComputedStyle(el).fontSize);\n}\nfunction pxToRem(px, el = document.documentElement) {\n return px / parseFloat(getComputedStyle(el).fontSize);\n}\nfunction parseCSSTime(time) {\n return time?.endsWith?.(\"ms\") ? parseFloat(time) : parseFloat(time) * 1e3;\n}\nfunction parseCSSSize(size, el) {\n return size?.endsWith?.(\"px\") ? parseFloat(size) : remToPx(parseFloat(size), el);\n}\nfunction cleanURL(url) {\n try {\n const u = new URL(url, window.location.href);\n return decodeURIComponent(u.origin + u.pathname);\n } catch {\n return url.replace(/\\\\/g, \"/\").split(\"?\")[0].trim();\n }\n}\nfunction isSameURL(url1, url2) {\n if (url1 === url2) return true;\n if (!isStr(url1) || !isStr(url2) || !url1 || !url2) return false;\n return cleanURL(url1) === cleanURL(url2);\n}\n\n// src/ts/core/fn.ts\nimport { setTimeout as setTimeout2, setInterval, requestAnimationFrame } from \"sia-reactor/utils\";\nfunction throttle(key, fn, delay = 30, strict = true, signal, win) {\n const throttleMap = t007._throttlers ??= /* @__PURE__ */ new Map();\n if (strict === true) {\n const now = performance.now();\n return now - (throttleMap.get(key) ?? 0) < delay ? void 0 : (throttleMap.set(key, now), fn());\n }\n if (throttleMap.has(key)) return;\n const id = strict === false ? setTimeout2(() => throttleMap.delete(key), delay, signal, win) : strict(() => throttleMap.delete(key));\n return throttleMap.set(key, id), fn();\n}\nfunction debounce(key, fn, delay = 30, strict = true, signal, win) {\n const debounceMap = t007._debouncers ??= /* @__PURE__ */ new Map();\n if (strict) {\n const now = performance.now(), prev = debounceMap.get(key) ?? 0;\n return debounceMap.set(key, now), now - prev < delay ? void 0 : fn();\n }\n const prevId = debounceMap.get(key);\n prevId !== void 0 && (win ?? window).clearTimeout(prevId);\n const id = setTimeout2(() => (debounceMap.delete(key), fn()), delay, signal, win);\n return void debounceMap.set(key, id);\n}\nfunction RAFLoop(key, fn, signal, win) {\n const rafLoopMap = t007._RAFLoopers ??= /* @__PURE__ */ new Map();\n if (rafLoopMap.has(key)) return void rafLoopMap.set(key, fn);\n rafLoopMap.set(key, fn);\n const loop = (_ = 0, fn2 = rafLoopMap.get(key)) => fn2 && (fn2(), requestAnimationFrame(loop, signal, win));\n loop();\n}\nvar cancelRAFLoop = (key) => t007._RAFLoopers ? t007._RAFLoopers.delete(key) : false;\nfunction limited(FN_KEY, fn, opts = {}) {\n let count = 0, { key, maxTimes: max = 1, oncePerSession = true } = isStr(opts) ? { key: opts } : opts;\n const getReg = () => JSON.parse(localStorage.getItem(FN_KEY) || \"{}\"), setReg = (r) => localStorage.setItem(FN_KEY, JSON.stringify(r));\n const handle = (...args) => {\n if (oncePerSession && count > 0) return void 0;\n if (!key) return count++ < max ? fn(...args) : void 0;\n const r = getReg(), c = r[key] || 0;\n return c < max ? (count++, r[key] = c + 1, setReg(r), fn(...args)) : void 0;\n };\n handle.left = max - (handle.count = count);\n handle.reset = () => (count = 0, key && ((r) => (delete r[key], setReg(r)))(getReg()));\n handle.block = () => (count = max, key && ((r) => (r[key] = max, setReg(r)))(getReg()));\n return handle;\n}\nvar mockAsync = (timeout = 250) => new Promise((resolve) => setTimeout2(resolve, timeout));\nvar breath = (w = window) => new Promise((res) => w.requestAnimationFrame(res));\nvar deepBreath = (w = window) => new Promise((res) => w.requestAnimationFrame(() => w.requestAnimationFrame(res)));\nfunction bindCleanupToSignal(cleanup, signal) {\n signal?.aborted ? cleanup() : signal?.addEventListener(\"abort\", cleanup, { once: true });\n if (signal && !signal.aborted) cleanup = (() => (signal.removeEventListener(\"abort\", cleanup), cleanup()));\n return cleanup;\n}\n\n// src/ts/core/keys.ts\nimport { KEYS_BLOCKS, parseKeyCombo, stringifyKeyEvent, cleanKeyCombo, matchKeys, getTermsForKey, keyEventAllowed, formatKeyForDisplay, formatKeyShortcutsForDisplay, parseForARIAKS } from \"sia-reactor/utils\";\n\n// src/ts/core/file.ts\nfunction formatSize(bytes, decimals = 3, base = 1e3) {\n if (bytes < base) return `${bytes} byte${bytes == 1 ? \"\" : \"s\"}`;\n const units = [\"B\", \"KB\", \"MB\", \"GB\", \"TB\", \"PB\", \"EB\", \"ZB\", \"YB\"], exponent = Math.min(Math.floor(Math.log(bytes) / Math.log(base)), units.length - 1);\n return `${(bytes / Math.pow(base, exponent)).toFixed(decimals).replace(/\\.0+$/, \"\")} ${units[exponent]}`;\n}\n\n// src/ts/mixins/methd.ts\nimport { onAllMethods, bindAllMethods, guardAllMethods, guardMethod } from \"sia-reactor/utils\";\n\n// src/ts/index.ts\nif (\"undefined\" !== typeof window) {\n (window.t007 ??= {}).VIRTUAL_RESOURCE = VIRTUAL_RESOURCE;\n window.T007_TOAST_JS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/toast@latest`;\n window.T007_INPUT_JS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/input@latest`;\n window.T007_DIALOG_JS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/dialog@latest`;\n window.T007_TOAST_CSS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/toast@latest/dist/index.min.css`;\n window.T007_INPUT_CSS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/input@latest/dist/index.min.css`;\n window.T007_DIALOG_CSS_SRC ??= `https://cdn.jsdelivr.net/npm/@t007/dialog@latest/dist/index.min.css`;\n}\n\nexport {\n createEl,\n assignEl,\n INTERACTIVE_SELECTOR,\n isInteractive,\n VIRTUAL_RESOURCE,\n loadResource,\n getWindow,\n createListRenderer,\n getActiveEl,\n isObj,\n isDef,\n isSym,\n isBool,\n isNum,\n isStr,\n isArr,\n isPOJO,\n isIter,\n isFunc,\n inBoolArrOpt,\n longestIncreasingSubsequence,\n clamp,\n uid,\n capitalize,\n camelize,\n uncamelize,\n remToPx,\n pxToRem,\n parseCSSTime,\n parseCSSSize,\n cleanURL,\n isSameURL,\n setTimeout2 as setTimeout,\n setInterval,\n requestAnimationFrame,\n throttle,\n debounce,\n RAFLoop,\n cancelRAFLoop,\n limited,\n mockAsync,\n breath,\n deepBreath,\n bindCleanupToSignal,\n KEYS_BLOCKS,\n parseKeyCombo,\n stringifyKeyEvent,\n cleanKeyCombo,\n matchKeys,\n getTermsForKey,\n keyEventAllowed,\n formatKeyForDisplay,\n formatKeyShortcutsForDisplay,\n parseForARIAKS,\n formatSize,\n onAllMethods,\n bindAllMethods,\n guardAllMethods,\n guardMethod,\n NIL,\n NOOP2 as NOOP\n};\n","// ============ Constants ============\r\n\r\nexport const FN_KEY = \"tmg_fn_registry\";\r\n\r\nexport const LUID_KEY = \"tmg_local_uid\";\r\n","import { uid as _uid } from \"@t007/utils\";\r\nimport { LUID_KEY } from \"@consts/generics\";\r\n\r\n// Case Conversion\r\nexport { capitalize, camelize, uncamelize } from \"@t007/utils\";\r\n\r\n// Generation\r\nexport const uid = (prefix = \"tmg_\") => _uid(prefix);\r\n\r\nexport function luid(key = LUID_KEY, prefix = \"tmg_local_\"): string {\r\n let id = localStorage.getItem(key);\r\n return !id && localStorage.setItem(key, (id = uid(prefix))), id || \"\";\r\n}\r\n\r\n// Parsers\r\nexport { remToPx, pxToRem, parseCSSTime, parseCSSSize } from \"@t007/utils\";\r\n\r\n// Checkers\r\nexport { cleanURL, isSameURL } from \"@t007/utils\";\r\n\r\n// Fuzzy String Matching\r\nexport function getSimilarity(target: string, spoken: string): number {\r\n if (target === spoken) return 1;\r\n if (target.length < 2 || spoken.length < 2) return 0;\r\n let matches = 0;\r\n for (let i = 0; i < target.length - 1; i++) {\r\n const bigram = target.substring(i, i + 2);\r\n if (spoken.includes(bigram)) matches++;\r\n }\r\n // console.log(`Fuzzy Match: ${target} vs ${spoken} = ${matches} / ${target.length - 1} = ${matches / (target.length - 1)}`);\r\n return matches / (target.length - 1); // Returns a score from 0.0 to 1.0 (e.g., 0.85 = 85% match)\r\n}\r\n\r\nexport function fuzzyMatch(targets: string[], transcript: string, threshold: number): string | null {\r\n const tokens = transcript.split(/\\s+/);\r\n for (const target of targets) {\r\n const targetBlob = target.replace(/[-\\s]/g, \"\");\r\n for (let i = 0; i < tokens.length; i++) {\r\n let rawChunk = \"\",\r\n chunkBlob = \"\";\r\n // Group words together to check multi-word phrases\r\n for (let j = i; j < tokens.length; j++) {\r\n rawChunk += (j === i ? \"\" : \" \") + tokens[j]; // The exact string with spaces\r\n chunkBlob += tokens[j]; // The squashed string for math\r\n if (chunkBlob === targetBlob || getSimilarity(targetBlob, chunkBlob) >= threshold) return rawChunk; // Returns exactly what was spoken (e.g., \"six seven\")\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n","import { camelize } from \"./str\";\r\nimport type { Control, ControlPanelBottomTuple } from \"@plugs/settings/controlPanel/types\";\r\nimport { type Paths, type PathValue } from \"sia-reactor\";\r\nimport { setPath } from \"sia-reactor/utils\";\r\nimport type { UIObject, UISettings, UIOption, UITuple } from \"@defs/UIOptions\";\r\nimport { isObj, isArr } from \"@t007/utils\";\r\n\r\nexport { isArr, isObj };\r\nexport { isDef, isSym, isBool, isNum, isStr, isPOJO, isIter, isFunc, inBoolArrOpt } from \"@t007/utils\";\r\n\r\n// Type Guards\r\nexport function isUISetting<T = unknown>(obj: unknown): obj is UISettings<T> {\r\n return isObj(obj) && \"options\" in obj && isArr((obj as UISettings<T>).options);\r\n}\r\nexport function isUIOption<T>(opt: UIOption<T>): opt is UITuple<T> {\r\n return isObj(opt) && \"value\" in (opt as object);\r\n}\r\n\r\n// Assignment & Derivation\r\nexport function setHTMLConfig<T extends object>(target: T, attr: `tmg--${Paths<T, \"--\">}`, value: string): void {\r\n value = value.trim();\r\n const path = attr.replace(\"tmg--\", \"\") as Paths<T, \"--\">;\r\n const parsedValue = (() => {\r\n if (value.includes(\",\")) return value.split(\",\")?.map((v: string) => v.trim());\r\n if (value === \"true\") return true;\r\n if (value === \"false\") return false;\r\n if (value === \"null\") return null;\r\n if (/^\\d+$/.test(value)) return Number(value);\r\n return value;\r\n })() as PathValue<T, typeof path, \"--\">;\r\n setPath<T, \"--\">(target, path, parsedValue, \"--\", (p) => camelize(p));\r\n}\r\n\r\nexport function getBoolOrStr(value: string | boolean): string | boolean {\r\n return value === \"true\" ? true : value === \"false\" ? false : value;\r\n}\r\n\r\nexport function getUIOpt<T = unknown>(opts: UIOption<T>[] | undefined, value: T, key: \"display\" | \"value\" = \"display\"): string {\r\n if (opts)\r\n for (const opt of opts) {\r\n const p = parseUIOpt<T>(opt);\r\n if (p.value == value) return p[key] as string;\r\n }\r\n return String(value);\r\n}\r\n\r\nexport function getUniqueOpts<T>(options: UITuple<T>[]) {\r\n const counts: Record<string, number> = {};\r\n options.forEach((opt) => (counts[opt.display] = (counts[opt.display] || 0) + 1)); // First pass: Count occurrences of each display name\r\n const seen: Record<string, number> = {};\r\n for (let i = options.length - 1; i >= 0; i--) {\r\n const opt = options[i];\r\n if (counts[opt.display] > 1) {\r\n seen[opt.display] = (seen[opt.display] || 0) + 1;\r\n const num = counts[opt.display] - seen[opt.display] + 1;\r\n opt.display = `${opt.display} (${num})`;\r\n }\r\n } // Second pass: Add numbers to duplicates, tracking our current index from the back\r\n return options;\r\n}\r\n\r\nexport function parseUIOpt<T = unknown>(opt: UIOption<T>): UITuple<T> {\r\n return isUIOption<T>(opt) ? { value: opt.value, display: String(opt.display ?? opt.value), infoText: opt.infoText } : { value: opt as T, display: String(opt) };\r\n}\r\nexport function parseUIOpts<T = unknown>(opts: UIOption<T>[]): T[] {\r\n return opts.map((opt) => parseUIOpt(opt).value);\r\n}\r\n\r\nexport function parseUIObj<T extends Record<string, any>>(obj: T): UIObject<T> {\r\n const result: any = {} as UIObject<T>,\r\n keys = Object.keys(obj);\r\n for (let i = 0; i < keys.length; i++) {\r\n const entry = obj[keys[i]];\r\n if (!isObj(entry)) continue;\r\n if (isUISetting(entry))\r\n result[keys[i]] = {\r\n values: entry.options.map((opt: UIOption<unknown>) => parseUIOpt(opt).value),\r\n displays: entry.options.map((opt: UIOption<unknown>) => parseUIOpt(opt).display),\r\n };\r\n else result[keys[i]] = parseUIObj(entry); // recurse on sub-branch\r\n }\r\n return result;\r\n}\r\n\r\n// Control Panel Utilities\r\nexport function parsePanelBottomObj(obj: Partial<ControlPanelBottomTuple> | Control[][] | Control[] | unknown, arr?: false): ControlPanelBottomTuple | false;\r\nexport function parsePanelBottomObj(obj: Partial<ControlPanelBottomTuple> | Control[][] | Control[] | unknown, arr: true): Control[] | false;\r\nexport function parsePanelBottomObj(obj: Partial<ControlPanelBottomTuple> | Control[][] | Control[] | unknown = [], arr = false): ControlPanelBottomTuple | Control[] | false {\r\n if (!isObj(obj) && !isArr(obj)) return false;\r\n const [third = [], second = [], first = []] = isObj<Partial<ControlPanelBottomTuple>>(obj) ? (Object.values(obj).reverse() as Control[][]) : isArr((obj as Control[][])[0]) ? [...(obj as Control[][])].reverse() : [obj as Control[]];\r\n return arr ? ([...third, ...second, ...first] as Control[]) : ({ 1: first, 2: second, 3: third } as ControlPanelBottomTuple);\r\n}\r\n\r\nexport function getPanelSplitCtrls<T = any>(row: T[]): { left: T[]; center: T[]; right: T[] } {\r\n if (!row?.length) return { left: [], center: [], right: [] };\r\n const s1 = row.indexOf(\"spacer\" as any),\r\n s2 = row.indexOf(\"spacer\" as any, s1 + 1);\r\n return s1 === -1 ? { left: row, center: [], right: [] } : s2 === -1 ? { left: row.slice(0, s1), center: [], right: row.slice(s1 + 1) } : { left: row.slice(0, s1), center: row.slice(s1 + 1, s2), right: row.slice(s2 + 1) };\r\n}\r\n\r\nexport function getPanelLocation(b: any, id: string) {\r\n if (isArr(b.top) && b.top.includes(id)) return { path: \"top\", row: b.top, zone: getPanelSplitCtrls(b.top).left.includes(id) ? \"left\" : getPanelSplitCtrls(b.top).center.includes(id) ? \"center\" : \"right\" };\r\n if (isArr(b.center) && b.center.includes(id)) return { path: \"center\", row: b.center, zone: \"zone\" };\r\n if (b.bottom) {\r\n const dB = parsePanelBottomObj(b.bottom);\r\n if (dB) for (const k in dB) if ((dB as any)[k]?.includes(id)) return { path: `bottom.${k}`, row: (dB as any)[k], zone: getPanelSplitCtrls((dB as any)[k]).left.includes(id) ? \"left\" : getPanelSplitCtrls((dB as any)[k]).center.includes(id) ? \"center\" : \"right\" };\r\n }\r\n return { path: \"bottom.1\", row: [], zone: \"left\" };\r\n}\r\n\r\nexport function insertPanelCtrl(current: any[], defaults: readonly any[], id: string): void {\r\n let s = 0;\r\n for (let i = 0; i < defaults.indexOf(id); i++) if (defaults[i] === \"spacer\") s++;\r\n for (let i = defaults.indexOf(id) + 1; i < defaults.length; i++)\r\n if (defaults[i] === \"spacer\") {\r\n let c = 0;\r\n for (let j = 0; j < current.length; j++) if (current[j] === \"spacer\" && ++c === s + 1) return void current.splice(j, 0, id);\r\n } else {\r\n const idx = current.indexOf(defaults[i]);\r\n if (idx !== -1) return void current.splice(idx, 0, id);\r\n }\r\n current.push(id);\r\n}\r\n","import { Controller } from \"./controller\";\r\nimport { type Reactive, reactive } from \"sia-reactor\";\r\nimport { nuke } from \"sia-reactor/utils\";\r\nimport { guardAllMethods } from \"@utils/methd\";\r\nimport { isObj } from \"@utils/obj\";\r\nimport { isFunc } from \"@t007/utils\";\r\n\r\n// A lifecylce controlled by it's Controller\r\n// Try to use methods for most things so they can be customized when extended and also auto guarded\r\nexport abstract class Controllable<Config = any, State = any> {\r\n protected readonly ac = new AbortController();\r\n protected readonly signal = this.ac.signal;\r\n public readonly ctlr: Controller;\r\n public readonly media: Controller[\"media\"];\r\n public readonly state!: State extends object ? Reactive<State> : State; // for reactivity needs of those who pass it up\r\n public config: Config; // may be a reactive obj node or the obj itself\r\n public get settings() {\r\n return this.ctlr.settings; // can change ref\r\n } // for easy reach, better devx\r\n\r\n constructor(ctlr: Controller, config: Config, state?: State) {\r\n guardAllMethods(this, ctlr.guard);\r\n this.signal = AbortSignal.any([this.signal, ctlr.signal]);\r\n this.ctlr = ctlr;\r\n this.media = ctlr.media; // can't change ref\r\n this.state = (isObj(state) ? reactive(state) : state) as Controllable[\"state\"];\r\n this.config = config;\r\n }\r\n\r\n public setup(): this {\r\n return this.onSetup(), this; // We let the subclass do its work\r\n }\r\n protected abstract onSetup(): void;\r\n\r\n public destroy(): void {\r\n !this.signal.aborted && this.ac.abort(`[TMG Controllable] Instance is being destroyed`); // incase controller already aborted, kills all listeners and timers before proper destruction below\r\n this.onDestroy(), (this.state as any)?.destroy?.(), this.config !== this.media && isFunc((this.config as any)?.destroy) && (this.config as any)?.destroy?.(); // Can I clean here?... Anatoly :)\r\n nuke(this);\r\n }\r\n protected onDestroy(): void {}\r\n}\r\n","export const ACTIONS_BUILD = {\n // --- Keyboard-only actions (no default voice triggers; path router covers voice) ---\n playPause: { label: \"Play / Pause\" },\n skipFwd: { label: \"Skip Forward\", notify: \"fwd\" },\n skipBwd: { label: \"Skip Back\", notify: \"bwd\" },\n volumeUp: { label: \"Volume Up\", notify: \"volumeup\" },\n volumeDown: { label: \"Volume Down\", notify: \"volumedown\" },\n brightnessUp: { label: \"Brightness Up\", notify: \"brightnessup\" },\n brightnessDown: { label: \"Brightness Down\", notify: \"brightnessdown\" },\n playbackRateUp: { label: \"Playback Rate Up\", notify: \"playbackrateup\" },\n playbackRateDown: { label: \"Playback Rate Down\", notify: \"playbackratedown\" },\n stepFwd: { label: \"Step Forward\", notify: \"fwd\" },\n stepBwd: { label: \"Step Back\", notify: \"bwd\" },\n prev: { label: \"Previous\", notify: \"mediaprev\" },\n next: { label: \"Next\", notify: \"medianext\" },\n captions: { label: \"Captions\", notify: \"captions\" },\n captionsFontSizeUp: { label: \"Captions: Font Size Up\" },\n captionsFontSizeDown: { label: \"Captions: Font Size Down\" },\n captionsFontFamily: { label: \"Captions: Font Family\" },\n captionsFontWeight: { label: \"Captions: Font Weight\" },\n captionsFontVariant: { label: \"Captions: Font Variant\" },\n captionsFontOpacity: { label: \"Captions: Font Opacity\" },\n captionsBackgroundOpacity: { label: \"Captions: Background Opacity\" },\n captionsWindowOpacity: { label: \"Captions: Window Opacity\" },\n captionsCharacterEdgeStyle: { label: \"Captions: Character Edge\" },\n captionsTextAlignment: { label: \"Captions: Text Alignment\" },\n objectFit: { label: \"Object Fit\" },\n capture: { label: \"Capture Frame\", notify: \"capture\" },\n cast: { label: \"Cast\", notify: \"cast\" },\n airplay: { label: \"AirPlay\", notify: \"airplay\" },\n dark: { label: \"Dark Mode\" },\n settings: { label: \"Settings\", zen: true },\n // --- Logic-expressible actions (logic[] + keyboard, no default voice triggers) ---\n mute: { label: \"Mute\", notify: \"volumemuted\" },\n fullscreen: { label: \"Fullscreen\", notify: \"fullscreen\", logic: [{ path: \"media.intent.fullscreen\", op: \"toggle\" }] },\n theater: { label: \"Theater\", notify: \"theater\", logic: [{ path: \"media.intent.theater\", op: \"toggle\" }] },\n pictureInPicture: { label: \"Picture in Picture\", notify: \"pictureinpicture\", logic: [{ path: \"media.intent.pictureInPicture\", op: \"toggle\" }] },\n timeFormat: { label: \"Time Format\" },\n timeMode: { label: \"Time Mode\" },\n // --- Compound (voice|time)-only actions (voice engine meta, path router can't reach these) ---\n timeTravelUndo: { label: \"Time Travel: Undo\", zen: true },\n timeTravelRedo: { label: \"Time Travel: Redo\", zen: true },\n voiceQuit: { label: \"Voice: Quit\", zen: true },\n voiceSleep: { label: \"Voice: Sleep\", zen: true },\n voiceSubmit: { label: \"Voice: Submit\", zen: true },\n voiceHistoryFirst: { label: \"Voice: Go to Root\", zen: true },\n voiceHistoryPrev: { label: \"Voice: Go Back\", zen: true },\n voiceHistoryNext: { label: \"Voice: Go Forward\", zen: true },\n voiceHistoryLast: { label: \"Voice: Go to Leaf\", zen: true },\n voiceHistoryClear: { label: \"Voice: Clear History\", zen: true },\n voiceToggleOn: { label: \"Voice: Toggle On\", zen: true },\n voiceToggleOff: { label: \"Voice: Toggle Off\", zen: true },\n} as const;\n","import type { CtlrConfig } from \"@defs/config\";\r\nimport { CTX, type DeepPartial } from \"sia-reactor\";\r\nimport { ACTIONS_BUILD } from \"./actions\";\r\n\r\nexport const CONFIG_BUILD: DeepPartial<CtlrConfig> = {\r\n mediaType: \"video\",\r\n mediaPlayer: \"TMG\",\r\n media: { intent: { playsInline: true, textVisible: true, brightness: 100 } },\r\n actions: Object.fromEntries(Object.entries(ACTIONS_BUILD).map(([k, v]) => [k, { id: k, ...v }])) as any,\r\n logicPathBlacklist: [\"media.state\", \"media.status\", \"media.tech\", \"media.features\", \"media.type\", \"media.element\", \"media.pseudoElement\", \"media.container\", \"media.pseudoContainer\"],\r\n settings: {\r\n // techOrder: [\r\n // \"youtube\", // 1. Black-box (Regex must catch these URLs instantly)\r\n // \"vimeo\", // 2. Black-box (Regex must catch these URLs instantly)\r\n // \"shaka\", // 3. THE APEX PREDATOR (Catches .mpd and .m3u8 first)\r\n // \"hls\", // 4. Fallback (Catches .m3u8 ONLY if Shaka is disabled/fails)\r\n // \"dash\", // 5. Fallback (Catches .mpd ONLY if Shaka is disabled/fails)\r\n // \"html5\", // 6. The Native Floor (Catches raw .mp4, .webm, .mp3, etc.)\r\n // ],\r\n },\r\n debug: true,\r\n devMode: CTX.isDevEnv,\r\n noPlugList: [], // dev: \"settings.persist\"\r\n};\r\n","import type { BaseTech, TechConstructor } from \"@techs/base\";\r\nimport type { BasePin, BasePlug, PinConstructor, PlugConstructor } from \"@plugs/base\";\r\nimport type { BaseComponent, ComponentConstructor } from \"@components/base\";\r\nimport { CONFIG_BUILD as CB } from \"@consts/config\";\r\nimport type { ComponentRegistryMap, IconRegistryMap, PinRegistryMap, PlugRegistryMap, TechRegistryMap, MenuRegistryMap } from \"@defs/registries\";\r\nimport { deletePath, setPath } from \"sia-reactor/utils\";\r\nimport { Controller } from \"./controller\";\r\n\r\nexport interface RegistryItem<T> {\r\n name: string;\r\n value: T;\r\n config?: any; // no closed doors\r\n}\r\n\r\nexport class BaseRegistry<T> {\r\n protected items: RegistryItem<T>[] = [];\r\n\r\n public register(name: string, value: T, config?: any): this {\r\n return this.unregister(name), this.items.push({ name, value, config }), this;\r\n }\r\n public unregister(name: string, idx = this.items.findIndex((i) => i.name === name)): this {\r\n return idx !== -1 && this.items.splice(idx, 1), this;\r\n }\r\n public get(name: string): T | undefined {\r\n return this.items.find((i) => i.name === name)?.value;\r\n }\r\n public getAll(order?: string[]): T[] {\r\n if (!order) return this.items.map((i) => i.value);\r\n return this.items.sort((a, b, ai = order.indexOf(a.name), bi = order.indexOf(b.name)) => (ai === -1 && bi === -1 ? 0 : ai === -1 ? 1 : bi === -1 ? -1 : ai - bi)).map((i) => i.value);\r\n }\r\n public clear() {\r\n return (this.items = []), this;\r\n }\r\n}\r\n\r\nexport class OrderedRegistry<T> extends BaseRegistry<T> {\r\n public registerFirst(name: string, value: T, config?: any) {\r\n return this.unregister(name), this.items.unshift({ name, value, config }), this;\r\n }\r\n public registerBefore(key: string, name: string, value: T, config?: any) {\r\n this.unregister(name);\r\n const idx = this.items.findIndex((i) => i.name === key);\r\n return idx !== -1 ? (this.items.splice(idx, 0, { name, value, config }), this) : this.register(name, value, config);\r\n }\r\n public registerAfter(key: string, name: string, value: T, config?: any) {\r\n this.unregister(name);\r\n const idx = this.items.findIndex((i) => i.name === key);\r\n return idx !== -1 ? (this.items.splice(idx + 1, 0, { name, value, config }), this) : this.register(name, value, config);\r\n }\r\n}\r\n\r\nexport class TechRegistry extends OrderedRegistry<TechConstructor> {\r\n private static instance = new TechRegistry();\r\n\r\n public static get<K extends keyof TechRegistryMap>(name: K): TechRegistryMap[K] | undefined;\r\n public static get<T extends BaseTech = BaseTech>(name: string): TechConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Tech: TechConstructor): void {\r\n this.instance.register(Tech.techName, Tech);\r\n }\r\n public static unregister(name: string): void {\r\n this.instance.unregister(name);\r\n }\r\n public static registerBefore(key: string, Tech: TechConstructor): void {\r\n this.instance.registerBefore(key, Tech.techName, Tech);\r\n }\r\n public static registerAfter(key: string, Tech: TechConstructor): void {\r\n this.instance.registerAfter(key, Tech.techName, Tech);\r\n }\r\n public static pick(src: string, techOrder?: string[]): TechConstructor | null {\r\n return this.instance.getAll(techOrder).find((Tech) => Tech.canPlaySource(src)) || null;\r\n }\r\n}\r\n\r\nexport class PlugRegistry extends OrderedRegistry<PlugConstructor> {\r\n private static instance = new PlugRegistry();\r\n\r\n public static get<K extends keyof PlugRegistryMap>(name: K): PlugRegistryMap[K] | undefined;\r\n public static get<T extends BasePlug = BasePlug>(name: string): PlugConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Plug: PlugConstructor, editBuild = Plug.BUILD !== undefined): void {\r\n this.instance.register(Plug.fullName, Plug);\r\n editBuild && setPath(CB as any, Plug.fullName, Plug.BUILD);\r\n }\r\n public static unregister(fullName: string, editBuild = true): void {\r\n this.instance.unregister(fullName);\r\n editBuild && deletePath(CB as any, fullName);\r\n }\r\n public static registerBefore(key: string, Plug: PlugConstructor): void {\r\n this.instance.registerBefore(key, Plug.fullName, Plug);\r\n }\r\n public static registerAfter(key: string, Plug: PlugConstructor): void {\r\n this.instance.registerAfter(key, Plug.fullName, Plug);\r\n }\r\n public static getOrdered(): PlugConstructor[] {\r\n return this.instance.getAll();\r\n }\r\n}\r\n\r\nexport class PinRegistry extends BaseRegistry<PinConstructor> {\r\n private static instance = new PinRegistry();\r\n\r\n public static get<K extends keyof PinRegistryMap>(name: K): PinRegistryMap[K] | undefined;\r\n public static get<T extends BasePin = BasePin>(name: string): PinConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Pin: PinConstructor, editBuild = Pin.BUILD !== undefined): void {\r\n this.instance.register(Pin.fullName, Pin);\r\n editBuild && setPath(CB as any, Pin.Plug.fullName + \".\" + Pin.pinName, Pin.BUILD);\r\n }\r\n public static unregister(fullName: string, editBuild = true): void {\r\n this.instance.unregister(fullName);\r\n editBuild && deletePath((fullName.slice(0, fullName.indexOf(\".\")) in CB ? CB : CB.settings) as any, fullName);\r\n }\r\n}\r\n\r\nexport class MenuRegistry extends BaseRegistry<any> {\r\n private static instance = new MenuRegistry();\r\n\r\n public static get<K extends keyof MenuRegistryMap>(name: K): MenuRegistryMap[K] | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register<K extends keyof MenuRegistryMap>(name: K, factory: MenuRegistryMap[K]): void;\r\n public static register(name: string, factory: any): void {\r\n this.instance.register(name, factory);\r\n }\r\n public static unregister(name: keyof MenuRegistryMap): void {\r\n this.instance.unregister(name);\r\n }\r\n}\r\n\r\nexport class ComponentRegistry extends BaseRegistry<ComponentConstructor> {\r\n private static instance = new ComponentRegistry();\r\n\r\n public static get<K extends keyof ComponentRegistryMap>(name: K): ComponentRegistryMap[K] | undefined;\r\n public static get<T extends BaseComponent = BaseComponent>(name: string): ComponentConstructor<T> | undefined;\r\n public static get(name: string): any {\r\n return this.instance.get(name);\r\n }\r\n public static register(Comp: ComponentConstructor): void {\r\n this.instance.register(Comp.componentName, Comp);\r\n }\r\n public static unregister(name: keyof ComponentRegistryMap): void {\r\n this.instance.unregister(name);\r\n }\r\n public static init<K extends keyof ComponentRegistryMap>(name: K, ctlr: Controller, config?: any): InstanceType<ComponentRegistryMap[K]> | null;\r\n public static init<T extends BaseComponent = BaseComponent>(name: string, ctlr: any, config?: any): T | null;\r\n public static init(name: string, ctlr: any, config = {}): any {\r\n const Comp = this.instance.get(name);\r\n if (!Comp) return null;\r\n const instance = new Comp(ctlr, config);\r\n return instance.create(), instance.setup();\r\n }\r\n public static getAll(): ComponentConstructor[] {\r\n return this.instance.getAll();\r\n }\r\n}\r\n\r\nexport class IconRegistry extends BaseRegistry<string> {\r\n private static instance = new IconRegistry();\r\n\r\n public static get<K extends keyof IconRegistryMap>(name: K, raw?: boolean, token?: RegExp | string): IconRegistryMap[K] | string;\r\n public static get(name: string, raw = false, token = /\\btmg-media-[^\\s\"']+\\s*/g) {\r\n return (raw ? this.instance.get(name)?.replace(token, \"\") : this.instance.get(name)) || `<svg></svg>`;\r\n }\r\n public static register<K extends keyof IconRegistryMap>(name: K, svg: IconRegistryMap[K]): void;\r\n public static register(name: string, svg: string): void {\r\n this.instance.register(name, svg);\r\n }\r\n public static unregister(name: keyof IconRegistryMap): void {\r\n this.instance.unregister(name);\r\n }\r\n // Bulk register a map of icons { play: \"<svg...>\", pause: \"<svg...>\" }\r\n public static registerAll(icons: Record<keyof IconRegistryMap, IconRegistryMap[keyof IconRegistryMap]>): void {\r\n for (const k of Object.keys(icons)) this.instance.register(k as keyof IconRegistryMap, icons[k as keyof IconRegistryMap]);\r\n }\r\n}\r\n","import { FN_KEY } from \"@consts/generics\";\r\nimport { uid } from \"@t007/utils\";\r\nimport { limited as limitedOrig, LimitedOptions, LimitedHandle } from \"@t007/utils\";\r\n\r\n// ============ Timer Helpers ============\r\nexport { setTimeout, setInterval, requestAnimationFrame, throttle, debounce, RAFLoop, cancelRAFLoop } from \"@t007/utils\";\r\n\r\n// ============ Async Helpers ============\r\nexport { mockAsync, breath, deepBreath } from \"@t007/utils\";\r\n\r\n// ============ Limited Call Helpers ============\r\nexport const limited = <T extends (...args: any[]) => any>(fn: T, opts: LimitedOptions | string = {}): LimitedHandle<T> => limitedOrig(FN_KEY, fn, opts);\r\n\r\nexport const oncePerSession = <T extends (...args: any[]) => any>(fn: T) => limited(fn);\r\nexport const onceEver = <T extends (...args: any[]) => any>(fn: T, key = uid()) => limited(fn, key);\r\n\r\n// ============ Deprecation Helpers ============\r\n/**\r\n * Log a deprecation warning (once per session)\r\n * @param message - Deprecation warning message\r\n */\r\nexport function deprecate(message: string): void {\r\n oncePerSession(() => console.warn(message))();\r\n}\r\n\r\n/**\r\n * Log a deprecation warning for a major version upgrade\r\n * @param major - Major version number when removal occurs\r\n * @param oldName - Name of deprecated feature\r\n * @param newName - Optional replacement feature name\r\n */\r\nexport function deprecateForMajor(major: number, oldName: string, newName?: string): void {\r\n deprecate(newName ? `${oldName} is deprecated and will be removed in ${major}.0; use ${newName} instead.` : `${oldName} is deprecated and will be removed in ${major}.0.`);\r\n}\r\n\r\n// ============ Generic Helpers ============\r\nexport { bindCleanupToSignal } from \"@t007/utils\";\r\n","import {\n INTERACTIVE_SELECTOR,\n clamp,\n createEl,\n getActiveEl,\n isInteractive\n} from \"./chunk-ZALPHCSJ.js\";\n\n// src/ts/hooks/vanilla/outsideClick.ts\nimport { NIL, NOOP } from \"sia-reactor\";\nfunction initOutsideClick(el, { enabled = false, onOutside = NOOP, outOnClick = true, outOnEscape = true, outOnFocusOut = false, allowBounds = false, allowInputs = false, root = window, scoped = true, capture = true } = NIL) {\n const stack = t007._outsiders_stack ??= [], existing = (t007._outsiders ??= /* @__PURE__ */ new WeakMap()).get(el);\n if (!enabled || existing) return existing ? existing : void 0;\n scoped = scoped && root instanceof HTMLElement, root = scoped ? root : root === document ? document : window;\n const onScopedOut = (e, t, p = e.touches?.[0] || e, rect = allowBounds ? el.getBoundingClientRect() : null) => {\n if (stack.at(-1) !== el || (allowBounds ? p.clientX >= rect.left && p.clientX <= rect.right && p.clientY >= rect.top && p.clientY <= rect.bottom : el.contains(t))) return false;\n return (!scoped ? true : root.contains(t)) && onOutside(e);\n }, handleClick = ((e) => outOnClick && !(allowInputs && isInteractive(e.target)) && onScopedOut(e, e.target)), handleEscape = ((e) => outOnEscape && e.key === \"Escape\" && !e.ctrlKey && !e.shiftKey && !e.altKey && !e.metaKey && stack.at(-1) === el && onOutside(e)), handleFocusOut = (e) => outOnFocusOut && !el.contains(e.relatedTarget) && onScopedOut(e, e.relatedTarget);\n root.addEventListener(\"mousedown\", handleClick, capture), root.addEventListener(\"touchstart\", handleClick, { passive: true, capture });\n root.addEventListener(\"keydown\", handleEscape, capture);\n el.addEventListener(\"focusout\", handleFocusOut, capture);\n const destroy = () => {\n root.removeEventListener(\"mousedown\", handleClick, capture), root.removeEventListener(\"touchstart\", handleClick, capture);\n root.removeEventListener(\"keydown\", handleEscape, capture);\n el.removeEventListener(\"focusout\", handleFocusOut, capture);\n t007._outsiders.delete(el), stack.splice(stack.indexOf(el), 1);\n };\n return !stack.includes(el) && stack.push(el), t007._outsiders.set(el, destroy), destroy;\n}\nvar removeOutsideClick = (el) => t007._outsiders?.get(el)?.();\n\n// src/ts/hooks/vanilla/focusTrap.ts\nimport { NIL as NIL2 } from \"sia-reactor\";\nfunction initFocusTrap(el, { enabled = false, initialSelector = \"[data-autofocus]\", ringClassName = \"focus-outline\", root = window, scoped = true, capture = true } = NIL2) {\n const stack = t007._ftrappers_stack ??= [], existing = (t007._ftrappers ??= /* @__PURE__ */ new WeakMap()).get(el);\n if (!enabled || existing) return existing ? existing : void 0;\n scoped = scoped && root instanceof HTMLElement, root = scoped ? root : root === document ? document : window;\n let recovering = false;\n const focused = document.querySelector(\":focus\"), initial = el.querySelector(initialSelector), first = createEl(\"span\", { tabIndex: 0 }, { focusGuard: \"start\" }, { position: \"absolute\", width: \"0\", height: \"0\", pointerEvents: \"none\" }), last = createEl(\"span\", { tabIndex: 0 }, { focusGuard: \"end\" }, { position: \"absolute\", width: \"0\", height: \"0\", pointerEvents: \"none\" }), getFocusable = (c = el) => [...c.querySelectorAll(INTERACTIVE_SELECTOR)], resetFocus = (i = 0, els = getFocusable()) => !recovering && (recovering = true, els?.length ? els.at(i).focus() : (!el.hasAttribute(\"tabindex\") && (el.tabIndex = -1), el.focus()), recovering = false), edgeFocus = (pre = false, rt = root) => {\n if (!scoped) return resetFocus(pre ? -1 : 0);\n if (rt.hasAttribute(\"tabindex\")) return rt.focus();\n const items = getFocusable();\n if (!items.length) return resetFocus(0, null);\n const ceil = document.fullscreenElement || document.querySelector(\"dialog:modal\") || document.body;\n let p = rt.parentElement || ceil, all = getFocusable(p);\n while (p !== ceil && (!all.length || (pre ? rt.contains(all[0]) : rt.contains(all.at(-1))))) all = getFocusable(p = p.parentElement || ceil);\n for (let target, len = all.length, i = all.indexOf(items[pre ? 0 : items.length - 1]) + (pre ? -1 : 1); pre ? i >= 0 : i < len; pre ? i-- : i++) if (!rt.contains(target = all[i])) return target.focus();\n (pre ? first : last).blur();\n }, handleFocusIn = (e) => {\n if (document.querySelector(\"dialog:modal\") && !el.matches(\"dialog:modal\")) return;\n stack.at(-1) === el && getActiveEl(el.ownerDocument) !== root && !el.contains(getActiveEl(el.ownerDocument)) && !e.composedPath().includes(el) && resetFocus();\n }, handleInitialBlur = () => initial.classList.remove(ringClassName);\n first.addEventListener(\"focus\", (e) => el.contains(e.relatedTarget) ? edgeFocus(true) : resetFocus(), capture), el.prepend(first);\n last.addEventListener(\"focus\", (e) => el.contains(e.relatedTarget) ? edgeFocus() : resetFocus(-1), capture), el.append(last);\n root.addEventListener(\"focusin\", handleFocusIn, capture);\n if (initial || !el.contains(focused)) !initial ? setTimeout(resetFocus) : setTimeout(() => (initial.classList.add(ringClassName), initial.focus(), initial.addEventListener(\"blur\", handleInitialBlur, capture)));\n const destroy = () => {\n focused?.isConnected && focused.focus(), first.remove(), last.remove();\n root.removeEventListener(\"focusin\", handleFocusIn, capture);\n initial?.removeEventListener(\"blur\", handleInitialBlur, capture);\n t007._ftrappers.delete(el), stack.splice(stack.indexOf(el), 1);\n };\n const handle = { destroy, sync: () => (el.prepend(first), el.append(last)) };\n return !stack.includes(el) && stack.push(el), t007._ftrappers.set(el, handle), handle;\n}\nvar removeFocusTrap = (el) => t007._ftrappers?.get(el)?.destroy();\nvar syncFocusTrap = (el) => t007._ftrappers?.get(el)?.sync();\n\n// src/ts/hooks/vanilla/ripple.ts\nimport { NIL as NIL3 } from \"sia-reactor\";\nfunction rippleHandler(e, { target, forceCenter = false, wrapperClassName = \"t007-ripple-wrapper\", className = \"t007-ripple\", holdClassName = \"t007-ripple-hold\", fadeClassName = \"t007-ripple-fade\", maxDuration = 1e3 } = NIL3) {\n const el = target || e.currentTarget;\n if (!el || e.target !== e.currentTarget && isInteractive(e.target) || el.hasAttribute(\"disabled\") || e.pointerType === \"mouse\" && e.button !== 0) return;\n e.stopPropagation?.();\n const { offsetWidth: rW, offsetHeight: rH } = el, { width: w, height: h, left: l, top: t } = el.getBoundingClientRect(), size = Math.max(rW, rH), x = forceCenter ? rW / 2 - size / 2 : (e.clientX - l) * rW / w - size / 2, y = forceCenter ? rH / 2 - size / 2 : (e.clientY - t) * rH / h - size / 2, wrapper = createEl(\"span\", { className: wrapperClassName }), ripple = createEl(\"span\", { className: className + \" \" + holdClassName }, {}, { cssText: `width:${size}px;height:${size}px;left:${x}px;top:${y}px;` });\n let canRelease = false;\n ripple.addEventListener(\"animationend\", () => canRelease = true, { once: true });\n el.append(wrapper.appendChild(ripple).parentElement);\n let released = false;\n const release = (force) => {\n if (released) return;\n if (!canRelease && force !== true) return ripple.addEventListener(\"animationend\", release, { once: true }), void setTimeout(release, maxDuration, true);\n released = true;\n ripple.classList.replace(holdClassName, fadeClassName);\n ripple.addEventListener(\"animationend\", () => setTimeout(() => wrapper.remove())), setTimeout(() => wrapper.remove(), maxDuration);\n for (const evt of [\"pointerup\", \"pointercancel\"]) (el.ownerDocument?.defaultView || window).removeEventListener(evt, release);\n };\n for (const evt of [\"pointerup\", \"pointercancel\"]) (el.ownerDocument?.defaultView || window).addEventListener(evt, release);\n}\n\n// src/ts/hooks/react/useArrowNavigation/utils.ts\nvar getTargetIndex = ({ key, currIndex, length, gridX, gridY, vGridY, loop, ctrlKey = false, rtl }) => {\n const rowStart = currIndex - currIndex % gridX, rowEnd = Math.min(rowStart + gridX - 1, length - 1), colStart = currIndex % gridX, colEnd = Math.min(colStart + gridX * (gridY - 1), length - 1), canX = gridX > 1, canY = gridY > 1, horizontalMove = rtl ? { ArrowRight: canX ? -1 : 0, ArrowLeft: canX ? 1 : 0 } : { ArrowRight: canX ? 1 : 0, ArrowLeft: canX ? -1 : 0 }, move = { ...horizontalMove, ArrowDown: canY ? gridX : 0, ArrowUp: canY ? -gridX : 0, Home: ctrlKey ? 0 : rowStart, End: ctrlKey ? length - 1 : rowEnd, PageDown: (vGridY - 1) * gridX, PageUp: -(vGridY - 1) * gridX }[key] ?? 0;\n let targetIndex = key === \"Home\" || key === \"End\" ? move : currIndex + move;\n if (key === \"ArrowDown\") {\n if (!loop && targetIndex >= length) targetIndex -= move;\n } else if (key === \"ArrowUp\") {\n if (!loop && targetIndex < 0) targetIndex += Math.abs(move);\n } else if (key === \"PageDown\") {\n if (!loop && targetIndex >= length) targetIndex = colEnd;\n } else if (key === \"PageUp\") {\n if (!loop && targetIndex < 0) targetIndex = colStart;\n }\n return loop ? (targetIndex + length) % length : clamp(0, targetIndex, length - 1);\n};\nvar getCommonAncestor = (first, second) => {\n if (!first) return null;\n if (!second) return first.parentElement;\n const ancestors = /* @__PURE__ */ new Set();\n let current = first;\n while (current) ancestors.add(current), current = current.parentElement;\n current = second;\n while (current) {\n if (ancestors.has(current)) return current;\n current = current.parentElement;\n }\n return null;\n};\nvar getGrid = (all, x = true, y = true, vY = true) => {\n const len = all.length, grid = {};\n if (!len) return grid;\n let cols = all.findIndex((el) => el.offsetTop !== all[0].offsetTop);\n cols = cols > 0 ? cols : len;\n if (x) grid.x = cols;\n let rows = Math.ceil(len / cols);\n if (y) grid.y = rows;\n if (vY) {\n const itemHeight = all[0].offsetHeight ?? 0, containerHeight = getCommonAncestor(all[0], all[1])?.clientHeight ?? 0;\n rows = clamp(1, Math.floor(containerHeight / itemHeight), rows) || rows;\n grid.vY = rows;\n }\n return grid;\n};\n\n// src/ts/hooks/react/useArrowNavigation/consts.ts\nimport { NOOP as NOOP2 } from \"sia-reactor\";\nvar H_NAV_KEYS = [\"ArrowRight\", \"ArrowLeft\", \"Home\", \"End\"];\nvar V_NAV_KEYS = [\"ArrowUp\", \"ArrowDown\", \"PageDown\", \"PageUp\"];\nvar NAV_KEYS = [...H_NAV_KEYS, ...V_NAV_KEYS];\nvar DEFAULT_CONFIG = {\n enabled: null,\n selector: \"[data-arrow-item]\",\n focusOnHover: true,\n loop: true,\n virtual: false,\n typeahead: false,\n rovingTab: null,\n defaultTabbableIndex: null,\n baseTabIndex: \"0\",\n resetMs: 500,\n rtl: null,\n grid: {},\n activeClass: \"focus-outlined\",\n inputSelector: \"input,textarea,[contenteditable]\",\n focusOptions: { preventScroll: false },\n scrollIntoView: { block: \"nearest\", inline: \"nearest\" },\n onSelect: NOOP2,\n onFocusOut: NOOP2\n};\n\nexport {\n initOutsideClick,\n removeOutsideClick,\n getTargetIndex,\n getCommonAncestor,\n getGrid,\n H_NAV_KEYS,\n NAV_KEYS,\n DEFAULT_CONFIG,\n initFocusTrap,\n removeFocusTrap,\n syncFocusTrap,\n rippleHandler\n};\n","import {\n DEFAULT_CONFIG,\n H_NAV_KEYS,\n NAV_KEYS,\n getCommonAncestor,\n getGrid,\n getTargetIndex,\n initFocusTrap,\n initOutsideClick,\n removeFocusTrap,\n removeOutsideClick,\n rippleHandler,\n syncFocusTrap\n} from \"../chunk-NX2LWYD6.js\";\nimport {\n INTERACTIVE_SELECTOR,\n createEl,\n getActiveEl\n} from \"../chunk-ZALPHCSJ.js\";\n\n// src/ts/hooks/vanilla/scrollAssist.ts\nimport { NIL } from \"sia-reactor\";\nfunction initScrollAssist(el, { pxPerSecond = 80, assistClassName = \"t007-scroll-assist\", vertical = true, horizontal = true } = NIL) {\n const parent = el?.parentElement, existing = (t007._scrollers ??= /* @__PURE__ */ new WeakMap()).get(el);\n if (!parent || existing) return existing ? existing : void 0;\n t007._scrollers_r_observer ??= new ResizeObserver((entries) => {\n for (const { target } of entries) t007._scrollers.get(target)?.update();\n });\n t007._scrollers_m_observer ??= new MutationObserver((entries) => {\n const els = /* @__PURE__ */ new Set();\n for (const entry of entries) {\n let node = entry.target instanceof Element ? entry.target : null;\n while (node && !t007._scrollers.has(node)) node = node.parentElement;\n if (node) els.add(node);\n }\n for (const el2 of els) t007._scrollers.get(el2)?.update();\n });\n const assist = {};\n let scrollId = null, last = performance.now(), assistWidth = 20, assistHeight = 20;\n const update = () => {\n const hasInteractive = !!parent.querySelector(INTERACTIVE_SELECTOR);\n if (horizontal) {\n const w = assist.left?.offsetWidth || assistWidth, check = hasInteractive ? el.clientWidth < w * 2 : false;\n assist.left.style.display = check ? \"none\" : el.scrollLeft > 0 ? \"block\" : \"none\";\n assist.right.style.display = check ? \"none\" : el.scrollLeft + el.clientWidth < el.scrollWidth - 1 ? \"block\" : \"none\";\n assistWidth = w;\n }\n if (vertical) {\n const h = assist.up?.offsetHeight || assistHeight, check = hasInteractive ? el.clientHeight < h * 2 : false;\n assist.up.style.display = check ? \"none\" : el.scrollTop > 0 ? \"block\" : \"none\";\n assist.down.style.display = check ? \"none\" : el.scrollTop + el.clientHeight < el.scrollHeight - 1 ? \"block\" : \"none\";\n assistHeight = h;\n }\n };\n const scroll = (dir) => {\n const frame = () => {\n const now = performance.now(), dt = now - last;\n last = now;\n const d = pxPerSecond * dt / 1e3;\n if (dir === \"left\") el.scrollLeft = Math.max(0, el.scrollLeft - d);\n if (dir === \"right\") el.scrollLeft = Math.min(el.scrollWidth - el.clientWidth, el.scrollLeft + d);\n if (dir === \"up\") el.scrollTop = Math.max(0, el.scrollTop - d);\n if (dir === \"down\") el.scrollTop = Math.min(el.scrollHeight - el.clientHeight, el.scrollTop + d);\n scrollId = requestAnimationFrame(frame);\n };\n last = performance.now();\n frame();\n };\n const stop = () => (cancelAnimationFrame(scrollId ?? 0), scrollId = null);\n const addAssist = (dir) => {\n const div = createEl(\"div\", { className: assistClassName }, { scrollDirection: dir }, { display: \"none\" });\n if (!div) return;\n for (const evt of [\"pointerenter\", \"dragenter\"]) div.addEventListener(evt, () => scroll(dir));\n for (const evt of [\"pointerleave\", \"pointerup\", \"pointercancel\", \"dragleave\", \"dragend\"]) div.addEventListener(evt, stop);\n dir === \"left\" || dir === \"up\" ? parent.insertBefore(div, el) : parent.append(div);\n assist[dir] = div;\n };\n if (horizontal) for (const dir of [\"left\", \"right\"]) addAssist(dir);\n if (vertical) for (const dir of [\"up\", \"down\"]) addAssist(dir);\n const handle = {\n update,\n destroy() {\n stop(), el.removeEventListener(\"scroll\", update);\n t007._scrollers_r_observer.unobserve(el), t007._scrollers.delete(el);\n for (const a of Object.values(assist)) a.remove();\n }\n };\n update(), el.addEventListener(\"scroll\", update);\n t007._scrollers_r_observer.observe(el), t007._scrollers_m_observer.observe(el, { childList: true, subtree: true, characterData: true });\n return t007._scrollers.set(el, handle), handle;\n}\nvar removeScrollAssist = (el) => t007._scrollers.get(el)?.destroy();\n\n// src/ts/hooks/vanilla/scrollerator.ts\nimport { NIL as NIL2 } from \"sia-reactor\";\nfunction initVScrollerator({ baseSpeed = 3, maxSpeed = 10, stepDelay = 2e3, baseRate = 16, lineHeight = 80, margin = 80, car = window } = NIL2) {\n let linesPerSec = baseSpeed, accelId = null, lastTime = null;\n const drive = (clientY, brake = false, offsetY = 0) => {\n if (car !== window) clientY -= offsetY;\n const now = performance.now(), speed = linesPerSec * lineHeight * ((lastTime ? now - lastTime : baseRate) / 1e3);\n if (!brake && (clientY < margin || clientY > (car.innerHeight ?? car.offsetHeight) - margin)) {\n accelId === null ? accelId = setTimeout(() => linesPerSec += 1, stepDelay) : linesPerSec > baseSpeed && (linesPerSec = Math.min(linesPerSec + 1, maxSpeed));\n car.scrollBy?.(0, clientY < margin ? -speed : speed);\n } else reset();\n return lastTime = !brake ? now : null, speed;\n };\n const reset = () => (accelId && clearTimeout(accelId), accelId = null, linesPerSec = baseSpeed, lastTime = null);\n return { drive, reset };\n}\n\n// src/ts/hooks/vanilla/arrowNavigation.ts\nfunction initArrowNavigation(container, config = {}) {\n const existing = (t007._arrownavs ??= /* @__PURE__ */ new WeakMap()).get(container);\n if (!config.enabled || existing) return existing ? existing : void 0;\n const { enabled: isEnabled, selector, focusOnHover, loop, virtual, typeahead, resetMs, activeClass, inputSelector, defaultTabbableIndex, baseTabIndex, grid, rtl: isRtl, focusOptions, scrollIntoView, onSelect, onFocusOut, rovingTab } = { ...DEFAULT_CONFIG, ...config };\n let gridX = grid.x || 1, gridY = grid.y || 1, vGridY = grid.vY || 1, activeIndex = -1, buffer = \"\", timeout = null, items = [];\n const enabled = isEnabled ?? virtual, roving = rovingTab ?? !virtual, rtl = isRtl ?? (\"undefined\" === typeof document ? false : getComputedStyle(container).direction === \"rtl\"), shouldSnub = () => !enabled || !container, isItemDisabled = (el) => !el || el.matches('[disabled],[aria-disabled=\"true\"],[inert],:disabled'), getItems = () => items = Array.from(container.querySelectorAll(selector));\n const getAbleIndex = (targetIndex, e = { key: \"ArrowRight\", ctrlKey: false }) => {\n if (shouldSnub() || !items.length) return null;\n let index = targetIndex;\n let attempts = 0;\n while (attempts < items.length) {\n if (!isItemDisabled(items[index])) return index;\n index = getTargetIndex({ key: e.key, currIndex: index, gridX, gridY, vGridY, length: items.length, loop, ctrlKey: e.ctrlKey, rtl });\n attempts++;\n }\n return null;\n };\n const goToIndex = (targetIndex, e = { key: \"ArrowRight\" }) => {\n if (shouldSnub()) return;\n const idx = getAbleIndex(targetIndex, e);\n if (idx === null) return;\n resetActiveIndex(idx);\n onSelect?.(items[idx], e), updateDOM();\n if (virtual) {\n items[idx]?.scrollIntoView(scrollIntoView);\n container.setAttribute(\"aria-activedescendant\", items[idx].id || \"\");\n } else items[idx]?.focus(focusOptions);\n };\n const updateDOM = () => {\n if (shouldSnub() || !virtual && !roving || !items.length) return;\n const hasDefaultTabbable = defaultTabbableIndex !== null && defaultTabbableIndex !== void 0, tabbableIndex = hasDefaultTabbable && !isItemDisabled(items[defaultTabbableIndex]) ? defaultTabbableIndex : getAbleIndex(0);\n for (let i = 0, len = items.length; i < len; i++) {\n const el = items[i], isActive = i === activeIndex;\n if (roving) el.setAttribute(\"tabindex\", i === activeIndex || activeIndex === -1 && i === tabbableIndex ? baseTabIndex : \"-1\");\n else if (virtual && activeIndex > 0) el.setAttribute(\"tabindex\", i > activeIndex ? baseTabIndex : \"-1\");\n else el.setAttribute(\"tabindex\", baseTabIndex);\n if (virtual) el.setAttribute(\"aria-selected\", String(isActive)), el.classList.toggle(activeClass, isActive);\n }\n };\n const resetActiveIndex = (index = -1) => (activeIndex = index, updateDOM());\n const typeAhead = (key) => {\n if (shouldSnub() || !typeahead) return;\n buffer += key.toLowerCase();\n if (timeout) clearTimeout(timeout);\n timeout = setTimeout(() => buffer = \"\", resetMs);\n const start = activeIndex >= 0 ? activeIndex + 1 : 0;\n for (let i = 0; i < items.length; i++) {\n const idx = (start + i) % items.length, label = (items[idx].getAttribute(\"data-label\") || items[idx].innerText || \"\").trim().toLowerCase();\n if (label.startsWith(buffer)) return goToIndex(idx);\n }\n };\n const simulateKey = (e) => {\n const t = e.target;\n if (shouldSnub() || getActiveEl(t?.ownerDocument)?.matches(\"option\")) return;\n const { key } = e;\n if (!items.length) return;\n if (virtual && (key === \" \" || key === \"Enter\")) return items[activeIndex]?.click();\n if (t?.matches(DEFAULT_CONFIG.inputSelector) && !virtual) return;\n if (typeahead && key.length === 1 && /^[a-z0-9]$/i.test(key)) return typeAhead(key);\n if (!NAV_KEYS.includes(key)) return;\n if (!(e.currentTarget?.matches(DEFAULT_CONFIG.inputSelector) && gridX <= 1 && H_NAV_KEYS.includes(key))) e.preventDefault?.(), e.stopPropagation?.();\n const currIndex = virtual ? activeIndex : items.indexOf(getActiveEl(t?.ownerDocument)), targetIndex = getTargetIndex({ currIndex, gridX, gridY, vGridY, length: items.length, loop, rtl, key, ctrlKey: e.ctrlKey });\n goToIndex(targetIndex, e);\n };\n getItems(), updateDOM();\n const interactiveEls = !virtual ? [container] : [container.querySelector(inputSelector)];\n for (const el of interactiveEls) el?.addEventListener(\"keydown\", simulateKey);\n const handleFocusOut = (e) => {\n if (!container.contains(e.relatedTarget)) return resetActiveIndex(), updateDOM(), onFocusOut?.(e);\n const among = items.includes(e.relatedTarget);\n if (!among && (defaultTabbableIndex ?? -1) >= 0) return resetActiveIndex(), updateDOM();\n if (virtual) resetActiveIndex(), updateDOM();\n };\n container.addEventListener(\"focusout\", handleFocusOut);\n const handleHover = (e) => {\n if (!enabled || !focusOnHover) return;\n const el = e.currentTarget, idx = items.indexOf(el);\n if (idx !== -1) goToIndex(idx);\n };\n for (const el of items) el.addEventListener(\"mouseenter\", handleHover);\n const sync = () => {\n const oldEl = items[activeIndex];\n for (const el of items) el.removeEventListener(\"mouseenter\", handleHover);\n getItems();\n for (const el of items) el.addEventListener(\"mouseenter\", handleHover);\n calcGrid();\n const newEl = items[activeIndex];\n updateDOM();\n if (oldEl && newEl && oldEl === newEl) return;\n resetActiveIndex(), updateDOM();\n };\n const mutationObserver = new MutationObserver(sync);\n mutationObserver.observe(container, { childList: true, subtree: true });\n const setGrid = (g) => {\n if (g.x !== void 0) gridX = g.x;\n if (g.y !== void 0) gridY = g.y;\n if (g.vY !== void 0) vGridY = g.vY;\n };\n let ancestor = null;\n const resizeObserver = new ResizeObserver(() => calcGrid());\n const calcGrid = () => {\n setGrid(getGrid(items, !grid.x, !grid.y, !grid.vY));\n const next = items.length > 1 ? getCommonAncestor(items[0], items[1]) : container;\n if (next && next !== ancestor) ancestor && resizeObserver.unobserve(ancestor), ancestor = next, resizeObserver.observe(ancestor);\n };\n setGrid(grid), calcGrid();\n const destroy = () => {\n for (const el of interactiveEls) el?.removeEventListener(\"keydown\", simulateKey);\n container.removeEventListener(\"focusout\", handleFocusOut);\n for (const el of items) el.removeEventListener(\"mouseenter\", handleHover);\n mutationObserver.disconnect(), resizeObserver.disconnect();\n if (timeout) clearTimeout(timeout);\n t007._arrownavs.delete(container);\n };\n const handle = { gridX: () => gridX, gridY: () => gridY, vGridY: () => vGridY, items: () => items, activeIndex: () => activeIndex, activeItem: () => items[activeIndex] ?? null, getAbleIndex, typeAhead, goToIndex, simulateKey, sync, destroy };\n return t007._arrownavs.set(container, handle), handle;\n}\nvar removeArrowNavigation = (container) => t007._arrownavs?.get(container)?.destroy();\nvar syncArrowNavigation = (container) => t007._arrownavs?.get(container)?.sync();\nexport {\n initArrowNavigation,\n initFocusTrap,\n initOutsideClick,\n initScrollAssist,\n initVScrollerator,\n removeArrowNavigation,\n removeFocusTrap,\n removeOutsideClick,\n removeScrollAssist,\n rippleHandler,\n syncArrowNavigation,\n syncFocusTrap\n};\n","import { NOOP } from \"sia-reactor\";\r\nimport { bindCleanupToSignal as bindSig } from \"./fn\";\r\nconst win = \"undefined\" !== typeof window ? window : undefined;\r\n\r\n// Element Factory\r\nexport { createEl, assignEl, getWindow, createListRenderer } from \"@t007/utils\";\r\nexport { initVScrollerator } from \"@t007/utils/hooks/vanilla\";\r\n\r\n// Resource Loading\r\nexport { loadResource } from \"@t007/utils\";\r\n\r\n// Viewport Checks\r\nexport function inDocView(el: Element, axis: \"x\" | \"y\" = \"y\"): boolean {\r\n const rect = el.getBoundingClientRect(),\r\n inX = rect.left + win!.scrollX >= 0 && rect.right + win!.scrollX <= win!.scrollX + (win!.innerWidth || win!.document.documentElement.clientWidth),\r\n inY = rect.top + win!.scrollY >= 0 && rect.bottom + win!.scrollY <= win!.scrollY + (win!.innerHeight || win!.document.documentElement.clientHeight);\r\n return axis === \"x\" ? inY : axis === \"y\" ? inX : inY && inX;\r\n}\r\n\r\nexport function getElSiblingAt(p: number, dir: \"x\" | \"y\", els: HTMLElement[] | NodeListOf<HTMLElement>, pos: \"before\" | \"after\" | \"at\" = \"after\"): HTMLElement | undefined {\r\n return (\r\n els.length &&\r\n (\r\n Array.prototype.reduce.call(\r\n els,\r\n ((closest: { offset: number; element: Element | undefined }, child: Element) => {\r\n const { top: cT, left: cL, width: cW, height: cH } = child.getBoundingClientRect(),\r\n offset = p - (dir === \"y\" ? cT : cL) - (dir === \"y\" ? cH : cW) / 2,\r\n condition = pos === \"after\" ? offset < 0 && offset > closest.offset : pos === \"before\" ? offset > 0 && offset < closest.offset : pos === \"at\" ? Math.abs(offset) <= (dir === \"y\" ? cH : cW) / 2 && Math.abs(offset) < Math.abs(closest.offset) : false;\r\n return condition ? { offset, element: child } : closest;\r\n }) as any,\r\n { offset: pos === \"after\" ? -Infinity : Infinity, element: undefined }\r\n ) as any\r\n ).element\r\n );\r\n}\r\n\r\n// Fullscreen & Picture-in-Picture\r\nexport const queryFullscreen = (): boolean => Boolean(queryFullscreenEl());\r\nexport const queryFullscreenEl = (d = document as any): Element | null => d.fullscreenElement || d.webkitFullscreenElement || d.mozFullScreenElement || d.msFullscreenElement || null;\r\n\r\nexport const queryPictureInPicture = (): boolean => Boolean(queryPictureInPictureEl());\r\nexport const queryPictureInPictureEl = () => document.pictureInPictureElement;\r\n\r\nexport const supportsFullscreen = (vp = HTMLVideoElement.prototype as any, d = document as any) => Boolean(d.fullscreenEnabled || d.mozFullscreenEnabled || d.msFullscreenEnabled || d.webkitFullscreenEnabled || d.webkitSupportsFullscreen || vp.webkitEnterFullscreen);\r\nexport const supportsPictureInPicture = (vp = HTMLVideoElement.prototype as any, d = document as any, w = window as any) => Boolean(d.pictureInPictureEnabled || vp.requestPictureInPicture || w.documentPictureInPicture);\r\n\r\nexport const enterFullscreen = (el: any): Promise<void> => (el.webkitEnterFullscreen ? el.webkitEnterFullscreen() : el.requestFullscreen ? el.requestFullscreen() : el.mozRequestFullScreen ? el.mozRequestFullScreen() : el.webkitRequestFullscreen ? el.webkitRequestFullscreen() : el.msRequestFullscreen ? el.msRequestFullscreen() : Promise.reject(new Error(\"Fullscreen API is not supported\")));\r\nexport const exitFullscreen = (el: any, d = document as any): Promise<void> => (queryFullscreenEl(d) === el ? (el.webkitExitFullscreen ? el.webkitExitFullscreen() : d.exitFullscreen ? d.exitFullscreen() : d.mozCancelFullScreen ? d.mozCancelFullScreen() : d.webkitExitFullscreen ? d.webkitExitFullscreen() : d.msExitFullscreen ? d.msExitFullscreen() : Promise.reject(new Error(\"Fullscreen API is not supported\"))) : Promise.resolve());\r\n\r\n// Safe Click Handling\r\ntype SafeClickEl = HTMLElement & {\r\n _clickHandler?: (e: MouseEvent) => void;\r\n _dblClickHandler?: (e: MouseEvent) => void;\r\n _clickTimeoutId?: ReturnType<typeof setTimeout>;\r\n};\r\nexport function addSafeClicks(el?: SafeClickEl | null, onClick: (e: MouseEvent) => any = NOOP, onDblClick: (e: MouseEvent) => any = NOOP, options?: boolean | AddEventListenerOptions): void {\r\n el && removeSafeClicks(el);\r\n el?.addEventListener(\"click\", (el._clickHandler = (e: MouseEvent) => (clearTimeout(el._clickTimeoutId), (el._clickTimeoutId = setTimeout(() => onClick(e), 300)))), options);\r\n el?.addEventListener(\"dblclick\", (el._dblClickHandler = (e: MouseEvent) => (clearTimeout(el._clickTimeoutId), onDblClick(e))), options);\r\n}\r\nexport function removeSafeClicks(el?: SafeClickEl | null): void {\r\n el?.removeEventListener(\"click\", el._clickHandler as EventListener);\r\n el?.removeEventListener(\"dblclick\", el._dblClickHandler as EventListener);\r\n}\r\n\r\n// DOM Observers\r\ndeclare global {\r\n interface Element {\r\n _resizeCbs?: Set<(entry: ResizeObserverEntry) => void>;\r\n _intersectCbs?: Set<(entry: IntersectionObserverEntry) => void>;\r\n _mutationCbs?: Set<(mutations: MutationRecord[]) => void>;\r\n }\r\n}\r\n\r\nexport const intersectionObserver = win\r\n ? new IntersectionObserver(\r\n (entries) => {\r\n for (const entry of entries) if (entry.target._intersectCbs) for (const cb of entry.target._intersectCbs) cb(entry);\r\n },\r\n { root: null, rootMargin: \"0px\", threshold: 0.3 }\r\n )\r\n : null;\r\n\r\nexport const resizeObserver = win\r\n ? new ResizeObserver((entries) => {\r\n for (const entry of entries) if (entry.target._resizeCbs) for (const cb of entry.target._resizeCbs) cb(entry);\r\n })\r\n : null;\r\n\r\nexport const mutationObserver = win\r\n ? new MutationObserver((mutations) => {\r\n // Dispatch to specific targets if they are being observed directly\r\n // Note: MutationObserver works differently; this handles the 'root' observer callbacks\r\n // We map the *target* of the observation, not the mutation target usually.\r\n // For this util, we assume the observer instance calls the callback associated with the observed node.\r\n // Since we use one global observer, we need to map back.\r\n // Actually, for MutationObserver it's cleaner to keep separate instances if configs differ,\r\n // but for \"utils\" style, we can use a Map logic or just basic callback sets.\r\n // Current implementation assumes the caller handles the mutation list.\r\n const target = mutations[0].target as Element; // Batch usually targets one observer\r\n if (target._mutationCbs) for (const cb of target._mutationCbs) cb(mutations);\r\n })\r\n : null;\r\n\r\n// --- PUBLIC API ---\r\nexport function observeResize(el: Element, cb: (entry: ResizeObserverEntry) => void, sig?: AbortSignal) {\r\n (el._resizeCbs ?? (el._resizeCbs = new Set())).add(cb);\r\n resizeObserver?.observe(el);\r\n return bindSig(() => (el._resizeCbs?.delete(cb), !el._resizeCbs?.size && resizeObserver?.unobserve(el)), sig);\r\n}\r\n\r\nexport function observeIntersection(el: Element, cb: (entry: IntersectionObserverEntry) => void, sig?: AbortSignal) {\r\n (el._intersectCbs ?? (el._intersectCbs = new Set())).add(cb);\r\n intersectionObserver?.observe(el);\r\n return bindSig(() => (el._intersectCbs?.delete(cb), !el._intersectCbs?.size && intersectionObserver?.unobserve(el)), sig);\r\n}\r\n\r\nexport function observeMutation(el: Element, cb: (mutations: MutationRecord[]) => void, options: MutationObserverInit, sig?: AbortSignal) {\r\n (el._mutationCbs ?? (el._mutationCbs = new Set())).add(cb);\r\n mutationObserver?.observe(el, options);\r\n return bindSig(() => el._mutationCbs?.delete(cb), sig);\r\n}\r\n","import { Controller } from \"@core/controller\";\r\nimport { Controllers } from \"./runtime\";\r\nimport { loadResource } from \"@utils/dom\";\r\nimport { isIter, isObj, setHTMLConfig } from \"@utils/obj\";\r\nimport { luid } from \"@utils/str\";\r\nimport { CONFIG_BUILD } from \"@consts/config\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { DeepPartial, Paths, PathValue } from \"sia-reactor\";\r\nimport { mergeObjs, parsePathObj } from \"sia-reactor/utils\";\r\nimport { MediaType } from \"@defs/generics\";\r\n\r\nexport type BuildParam = DeepPartial<CtlrConfig> & Record<Paths<CtlrConfig>, PathValue<CtlrConfig>>;\r\n\r\nexport class Player {\r\n private medium: HTMLMediaElement | null = null;\r\n private active: boolean = false;\r\n private _build: CtlrConfig = structuredClone(CONFIG_BUILD) as CtlrConfig;\r\n private controller: Controller | null = null;\r\n public get Controller() {\r\n return this.controller;\r\n }\r\n public get build(): CtlrConfig {\r\n return this._build;\r\n }\r\n public set build(build: BuildParam) {\r\n this.configure(build);\r\n }\r\n\r\n constructor(build: BuildParam = {} as BuildParam) {\r\n this.configure({ ...build, id: build.id ?? `${luid()}_Controller_${Controllers.length + 1}` });\r\n }\r\n\r\n private queryBuild(): boolean {\r\n return !this.active || (this.notice({ error: \"Already deployed the custom controls of your build configuration\", tip: \"Consider setting your build configuration before attaching your media element\" }), false);\r\n }\r\n public configure(build: BuildParam): void {\r\n if (this.queryBuild() && isObj(build)) this._build = mergeObjs(this._build, parsePathObj(build));\r\n }\r\n\r\n public async attach(medium: HTMLMediaElement) {\r\n if (isIter(medium)) return this.notice({ error: \"An iterable argument cannot be attached to the TMG media player\", tip: \"Consider looping the iterable argument to instantiate a new 'tmg.Player' for each\" });\r\n if (this.active) return medium;\r\n medium.tmgPlayer?.detach();\r\n Controllers.push(this.build.id as any); // dummy for liveness\r\n this.build.debug && console.time(`TMG Controller ${Controllers.length} Attach`);\r\n medium.tmgPlayer = this;\r\n this.medium = medium;\r\n await this.fetchOptions(), await this.deployController();\r\n this.build.debug && console.timeEnd(`TMG Controller ${Controllers.indexOf(this.controller!) + 1} Attach`);\r\n return this.controller?.fire(\"tmgattach\", this.controller.payload), medium;\r\n }\r\n public detach() {\r\n if (!this.active) return;\r\n const medium = this.controller?.destroy() ?? ({} as any);\r\n this.controller && Controllers.splice(Controllers.indexOf(this.controller), 1);\r\n medium.classList?.remove(`tmg-${this.build.mediaType}`, \"tmg-media\", \"tmg-host\");\r\n medium.tmgcontrols = this.active = false;\r\n // this.controller?.fire(\"tmgdetach\", this.controller.payload);\r\n return (medium.tmgPlayer = this.controller = this.medium = null), medium;\r\n }\r\n\r\n public async fetchOptions() {\r\n if (!this.medium) return;\r\n if (this.medium.getAttribute(\"tmg\")?.includes(\".json\"))\r\n await fetch(this.medium.getAttribute(\"tmg\")!)\r\n .then((res) => {\r\n if (!res.ok) throw new Error(`JSON file not found at provided URL!. Status: ${res.status}`);\r\n return res.json();\r\n })\r\n .then((json) => this.configure(json))\r\n .catch(({ message }) => this.notice({ error: message, tip: \"A valid JSON file is required for parsing your build configuration\" }));\r\n const build = {} as BuildParam,\r\n attributes = this.medium.getAttributeNames().filter((attr) => attr.startsWith(\"tmg--\"));\r\n for (const attr of attributes) setHTMLConfig<BuildParam>(build, attr as any, this.medium!.getAttribute(attr)!);\r\n this.configure(build);\r\n }\r\n\r\n private async deployController() {\r\n if (this.active || !this.medium?.isConnected) return;\r\n if (!(this.medium instanceof HTMLMediaElement)) return this.notice({ error: `Could not deploy custom controls on the '${(this.medium as HTMLElement).tagName}' element as it is not supported`, warning: \"Only the 'VIDEO' and 'AUDIO' elements are currently supported\", tip: \"\" });\r\n this.build.mediaType = this.medium.tagName.toLowerCase() as MediaType;\r\n this.medium.controls = false;\r\n this.medium.tmgcontrols = this.active = true;\r\n this.medium.classList.add(`tmg-${this.build.mediaType}`, \"tmg-media\", \"tmg-host\");\r\n await Promise.all([loadResource(window.TMG_MEDIA_CSS_SRC!), loadResource(window.T007_TOAST_JS_SRC!, \"script\", { module: true }), loadResource(window.T007_INPUT_JS_SRC!, \"script\")]); // await\r\n Controllers[Controllers.indexOf(this.build.id as any)] = this.controller = new Controller(this.medium, this._build);\r\n }\r\n\r\n private notice({ error, warning, tip }: Partial<Record<\"error\" | \"warning\" | \"tip\", string>>): void {\r\n if (this.build.debug) error && console.error(`[TMG Player] ${error}`), warning && console.warn(`[TMG Player] ${warning}`), tip && console.info(`[TMG Player] ${tip}`);\r\n }\r\n}\r\n\r\nexport function getCtlrIdx(ctlr: Controller): number {\r\n const i = Controllers.indexOf(ctlr.config.id as any);\r\n return i === -1 ? Controllers.indexOf(ctlr) : i; // a magician never reveals his tricks :)\r\n}\r\n","import { Player } from \"./player\";\r\nimport { type Controller } from \"@core/controller\";\r\nimport { type Dimensions } from \"@defs/generics\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { queryFullscreen, observeMutation } from \"@utils/dom\";\r\nconst win = \"undefined\" !== typeof window ? window : undefined;\r\n\r\n// Defines states explicitly managed by the TMG Environment Observers\r\nexport interface CtlrState {\r\n readyState: number;\r\n audioContextReady: boolean;\r\n mediaIntersecting: boolean;\r\n mediaParentIntersecting: boolean;\r\n dimensions: { container: Dimensions & { tier: string }; pseudoContainer: Dimensions & { tier: string }; window: Dimensions };\r\n screenOrientation: { type: string; angle: number };\r\n docVisibilityState: DocumentVisibilityState;\r\n docInFullscreen: boolean;\r\n frameReadyPromise?: Promise<null> | null;\r\n}\r\n\r\n// --- GLOBAL STATE ---\r\nconst flagMutationSet = new WeakSet<HTMLElement>(); // weak set for true magic\r\nlet flagMutationId: number | undefined;\r\n// --- EXPORTS ---\r\nexport let AUDIO_CONTEXT: AudioContext | null = null;\r\nexport let AUDIO_LIMITER: DynamicsCompressorNode | null = null;\r\nexport let IS_DOC_TRANSIENT = false;\r\nexport const STATE_BUILD: CtlrState = { readyState: 0, audioContextReady: !!AUDIO_CONTEXT, mediaIntersecting: true, mediaParentIntersecting: true, dimensions: { container: { width: 0, height: 0, tier: \"x\" }, pseudoContainer: { width: 0, height: 0, tier: \"x\" }, window: { width: win?.innerWidth!, height: win?.innerHeight! } }, screenOrientation: { type: win?.screen?.orientation?.type ?? \"\", angle: win?.screen?.orientation?.angle ?? (win as any)?.orientation ?? 0 }, docVisibilityState: win?.document.visibilityState!, docInFullscreen: queryFullscreen() };\r\nexport const Controllers: Controller[] = [];\r\n\r\nexport function handleVidMutation(mutations: MutationRecord[]): void {\r\n for (const mutation of mutations) {\r\n if (mutation.type !== \"attributes\") continue;\r\n const target = mutation.target as HTMLMediaElement;\r\n if (mutation.attributeName === \"tmgcontrols\") !flagMutationSet.has(target) && (target.tmgcontrols = target.hasAttribute(\"tmgcontrols\"));\r\n else if (mutation.attributeName?.startsWith(\"tmg\")) target.hasAttribute(mutation.attributeName) && target.tmgPlayer?.fetchOptions();\r\n else if (mutation.attributeName === \"controls\") target.hasAttribute(\"tmgcontrols\") && target.removeAttribute(\"controls\");\r\n }\r\n}\r\n\r\nexport function handleDOMMutation(mutations: MutationRecord[]): void {\r\n for (const mutation of mutations) {\r\n for (const node of Array.from(mutation.addedNodes)) {\r\n if (!(node instanceof HTMLElement)) continue;\r\n const els = node.matches(\":is(video,audio):not(.tmg-host)\") ? [node] : node.querySelectorAll(\":is(video,audio):not(.tmg-host)\");\r\n for (const el of els) {\r\n observeMutation(el, handleVidMutation, { attributes: true });\r\n (el as HTMLMediaElement).tmgcontrols = el.hasAttribute(\"tmgcontrols\");\r\n }\r\n }\r\n for (const node of Array.from(mutation.removedNodes)) {\r\n if (!(node instanceof HTMLElement)) continue;\r\n const els = node.matches(\".tmg-host\") ? [node] : node.querySelectorAll(\".tmg-host\");\r\n for (const el of els) !(el as HTMLMediaElement).tmgPlayer?.Controller?.mutatingDOMM && (el as HTMLMediaElement).tmgPlayer?.detach();\r\n }\r\n }\r\n}\r\n\r\nfunction flagMutation(m: HTMLElement, check = true): void {\r\n !flagMutationSet.has(m) && check && flagMutationSet.add(m);\r\n}\r\n\r\nfunction freeMutation(m: HTMLElement): void {\r\n clearTimeout(flagMutationId);\r\n flagMutationId = setTimeout(() => !(flagMutationId = undefined) && flagMutationSet.delete(m));\r\n}\r\n\r\nexport function mountMedia() {\r\n if (\"undefined\" === typeof HTMLMediaElement) return;\r\n for (const el of [HTMLVideoElement, HTMLAudioElement])\r\n Object.defineProperty(el.prototype, \"tmgcontrols\", {\r\n get: function () {\r\n return this.hasAttribute(\"tmgcontrols\");\r\n },\r\n set: async function (value) {\r\n if (value) {\r\n flagMutation(this);\r\n await ((this as HTMLMediaElement).tmgPlayer || new Player()).attach(this);\r\n this.setAttribute(\"tmgcontrols\", \"\");\r\n freeMutation(this);\r\n } else {\r\n flagMutation(this, this.hasAttribute(\"tmgcontrols\"));\r\n this.removeAttribute(\"tmgcontrols\");\r\n (this as HTMLMediaElement).tmgPlayer?.detach();\r\n freeMutation(this);\r\n }\r\n },\r\n enumerable: true,\r\n configurable: true,\r\n });\r\n}\r\n\r\nexport function unmountMedia(): void {\r\n for (const el of [HTMLVideoElement, HTMLAudioElement]) delete (el.prototype as any).tmgcontrols;\r\n}\r\n\r\nexport function startAudioManager(): void {\r\n if (!AUDIO_CONTEXT && IS_DOC_TRANSIENT) {\r\n AUDIO_CONTEXT = new (win!.AudioContext || (win as any).webkitAudioContext)() as AudioContext;\r\n const L = (AUDIO_LIMITER = AUDIO_CONTEXT!.createDynamicsCompressor());\r\n (L.threshold.value = -1.0), (L.knee.value = 0.0), (L.ratio.value = 20), (L.attack.value = 0.001), (L.release.value = 0.05);\r\n for (const c of Controllers) if (c.state) c.state.audioContextReady = true;\r\n } else if (AUDIO_CONTEXT?.state === \"suspended\") AUDIO_CONTEXT.resume();\r\n}\r\n\r\nexport function connectMediaToAudioManager(medium: HTMLMediaElement) {\r\n if (!AUDIO_CONTEXT) return \"unavailable\";\r\n medium.mediaElementSourceNode ??= AUDIO_CONTEXT.createMediaElementSource(medium);\r\n medium._tmgGainNode ??= AUDIO_CONTEXT.createGain();\r\n medium._tmgDynamicsCompressorNode ??= AUDIO_CONTEXT.createDynamicsCompressor();\r\n medium.mediaElementSourceNode.connect(medium._tmgDynamicsCompressorNode);\r\n medium._tmgDynamicsCompressorNode.connect(medium._tmgGainNode);\r\n medium._tmgGainNode.connect(AUDIO_LIMITER!);\r\n AUDIO_LIMITER!.connect(AUDIO_CONTEXT!.destination);\r\n}\r\n\r\nexport function init(): void {\r\n mountMedia();\r\n for (const e of [\"click\", \"pointerdown\", \"keydown\"]) document.addEventListener(e, () => ((IS_DOC_TRANSIENT = true), startAudioManager()), true);\r\n for (const medium of document.querySelectorAll<HTMLMediaElement>(\"video,audio\")) {\r\n observeMutation(medium, handleVidMutation, { attributes: true });\r\n medium.tmgcontrols = medium.hasAttribute(\"tmgcontrols\");\r\n }\r\n observeMutation(document.documentElement, handleDOMMutation, { childList: true, subtree: true });\r\n win!.addEventListener(\"resize\", () => {\r\n for (const c of Controllers) if (c.state) (c.state.dimensions.window.width = win!.innerWidth), (c.state.dimensions.window.height = win!.innerHeight);\r\n });\r\n if (win?.screen?.orientation)\r\n win.screen.orientation.addEventListener(\"change\", ({ target }, t = target as ScreenOrientation) => {\r\n for (const c of Controllers) if (c.state) (c.state.screenOrientation.type = t.type), (c.state.screenOrientation.angle = t.angle);\r\n });\r\n else\r\n win?.addEventListener(\"orientationchange\", () => {\r\n for (const c of Controllers) if (c.state) c.state.screenOrientation.angle = (win as any).orientation || 0;\r\n });\r\n document.addEventListener(\"visibilitychange\", () => {\r\n for (const c of Controllers) if (c.state) c.state.docVisibilityState = document.visibilityState;\r\n });\r\n for (const e of [\"fullscreenchange\", \"webkitfullscreenchange\", \"mozfullscreenchange\", \"msfullscreenchange\"])\r\n document.addEventListener(e, (_, inFs = queryFullscreen()) => {\r\n for (const c of Controllers) if (c.state) c.state.docInFullscreen = inFs;\r\n });\r\n}\r\n","import {\n getReactor,\n reactive\n} from \"./chunk-PTNZ442E.js\";\nimport {\n guardAllMethods,\n guardMethod\n} from \"./chunk-ORK3EGB6.js\";\nimport {\n getPath,\n isObj,\n matchPaths,\n nuke,\n setPath\n} from \"./chunk-SHWIAQD2.js\";\n\n// src/ts/modules/base/index.ts\nvar BaseReactorModule = class {\n static moduleName;\n get name() {\n return this.constructor.moduleName;\n }\n ac = new AbortController();\n signal = this.ac.signal;\n deps = /* @__PURE__ */ new Map();\n rids = /* @__PURE__ */ new WeakMap();\n // for quick 0(1) lookups over iteration\n evtOpts = { signal: this.signal };\n /** The reactive state object for the module, watch to see exposed lifecycle changes. */\n state;\n /** The reactive configuration object for the module, manipulate to change behaviour. */\n config;\n wired = false;\n clups = /* @__PURE__ */ new Map();\n constructor(config, rtr, state) {\n guardAllMethods(this, this.guard);\n this.config = isObj(config) ? reactive(config) : config;\n this.state = isObj(state) ? reactive(state) : state;\n rtr && this.attach(rtr);\n }\n /**\n * Connect to a `Reactor` instance, allows managing multiple reactors if needed.\n * @param target `Reactor` instance or `reactive()` object to connect to.\n * @param id Optional custom id for the reactor, prefer over default implicit index id when managing multiple reactors, supports paths to merge into a single tree.\n * @returns Current `ReactorModule` instance for fluent chaining.\n * @example\n * const mod = new MyModule().attach(state1).attach(state2); // implicit index-based ids by default, add a .setup() or `Reactor.use()` when ready for init.\n * @example\n * const persist = new PersistModule(config).attach(sessState, \"session\").attach(adminState, \"session.admin\"); // don't use \"*\", causes de-serialization issues.\n */\n attach(target, id = this.deps.size) {\n const rtr = getReactor(target);\n if (!rtr || this.deps.has(id)) return this;\n return this.rids.set((this.deps.set(id, rtr), rtr), id), this.onAttach(rtr, id), this;\n }\n onAttach(_rtr, _rid) {\n }\n attachPaths(rtr, rid, paths = this.getPaths(rid)) {\n let clups = this.clups.get(rid);\n if (!clups) this.clups.set(rid, clups = []);\n for (let i = 0, len = paths.length; i < len; i++) {\n const path = paths[i];\n !this.config.disabled ? clups.push(this.config.synchronous ? rtr.watch(path, this.handlePathSync, { signal: this.signal }) : rtr.on(path, this.handlePath, this.evtOpts)) : this.config.synchronous ? rtr.nowatch(path, this.handlePathSync) : rtr.off(path, this.handlePath, this.evtOpts);\n }\n }\n /**\n * Entry point called to initialize module wiring, calls `.attach(target, id)` first, `Reactor.use()` calls this internally.\n * Should run as last in `.attach()` chain or after all desired reactors if using multiple; so wiring is done safely after.\n * @param target `Reactor` instance or `reactive()` object to connect to.\n * @param id Optional id for the reactor, prefer over default implicit index id when managing multiple reactors.\n * @returns Current `ReactorModule` instance for fluent chaining.\n * @example\n * const mod = new MyModule().attach(state1).setup(state2); // if using multiple, this should run last; with same params as `.attach()` for a shorter chain\n */\n setup(target, id) {\n return this.attach(target, id), !this.wired && (this.wire(), this.wired = true), this;\n }\n destroy() {\n if (this.ac) this.ac.abort(), this.onDestroy?.(), nuke(this);\n }\n /**\n * Wraps a function with module-scoped error logging, every instance methods is already auto-wrapped with this.\n * Use this when creating functions dynamically (for example, before attaching an anonymous listener on the fly).\n * @example\n * window.addEventListener(\"resize\", this.guard(() => this.syncLayout(true)), { signal: this.signal });\n */\n guard = (fn) => {\n return guardMethod(fn, (e) => this.deps.values().next().value?.log(`[Reactor \"${this.name}\" Module] Error: ${e}`));\n };\n // `()=>{}`: needs to be bounded even before initialization\n handleWhitelist({ currentTarget: { value: paths } }) {\n for (const [rid, rtr] of this.deps) this.cleanup(rid), this.attachPaths(rtr, rid, this.getPaths(rid, paths));\n }\n // child wires when ready\n handlePath(e, rid = this.rids.get(e.reactor)) {\n (!this.config.blacklist || !matchPaths(this.getPaths(rid, this.config.blacklist, true), e.path)) && this.onPath(e, rid);\n }\n handlePathSync = (_, p) => this.handlePath(p);\n onPath(_e, _rid) {\n }\n handleSynchronous() {\n for (const [rid, rtr] of this.deps) this.cleanup(rid), this.attachPaths(rtr, rid);\n }\n // child wires when ready\n cleanup(rid) {\n const clups = this.clups.get(rid);\n if (clups) for (let i = 0, len = clups.length; i < len; i++) clups[i]();\n clups && (clups.length = 0);\n }\n /**\n * Path resolution utility for modules, provides automatic reactor id resolution for multi-reactor setups.\n * @param target Reactor or reactor id to resolve paths for when using per-reactor path lists`.\n * @param paths Paths to filter by, supports same formats as `ModulePaths`, will be resolved with the module's reactor id if applicable.\n * @returns Resolved paths array, defaults to `[\"*\"]` if no paths are found using search criteria.\n */\n getPaths(target, paths = this.config.whitelist, allowEmpty = paths !== this.config.whitelist) {\n const rid = target?.core ? this.rids.get(target) : target;\n return (paths && (Array.isArray(paths) ? paths : paths[String(rid)])) ?? (!allowEmpty ? wpArr : []);\n }\n /**\n * Compute the serialized payload for all attached reactors.\n * If multiple reactors are attached, returns a merged object keyed by reactor id. Honors `whitelist`, `snapshot` and `mirrorWrites` configuration on each reactor.\n * @param target Optional target reactor or id to compute payload for, useful when using per-reactor path lists.\n * @returns The payload to persist (or `undefined` for empty single-reactor payload).\n */\n getPayload(target, _rid, _nest = target ? false : this.deps.size > 1) {\n const _rtr = target?.core ? target : this.deps.get(target);\n let res = _nest ? {} : void 0;\n for (const [rid, rtr] of !target ? this.deps : [[_rid || target, _rtr]]) {\n const snap = this.config.snapshot ? (this.config.snapshot === true && (rtr.config.referenceTracking = rtr.config.smartCloning = true), rtr.snapshot()) : rtr.core, val = this.config.whitelist ? {} : snap;\n if (this.config.whitelist) {\n const paths = this.getPaths(rid);\n for (let i = 0, len = paths.length; i < len; i++) {\n const _path = paths[i], path = !this.config.mirrorReads || !_path.includes(\"intent\") ? _path : _path.replace(\"intent\", \"state\");\n setPath(val, _path, getPath(snap, path));\n }\n }\n _nest ? setPath(res, rid, val) : res = val;\n }\n return res;\n }\n};\nvar wpArr = [\"*\"];\n\nexport {\n BaseReactorModule,\n wpArr\n};\n","import \"./chunk-PLYS4CVP.js\";\nimport {\n clamp,\n setTimeout\n} from \"./chunk-JGEI2Q4M.js\";\nimport {\n BaseReactorModule\n} from \"./chunk-SPVWCBIV.js\";\nimport \"./chunk-PTNZ442E.js\";\nimport \"./chunk-ORK3EGB6.js\";\nimport {\n CTX,\n NIL,\n NOOP,\n deepClone,\n deletePath,\n endTx,\n fanout,\n fanoutOptsArr,\n force,\n getPath,\n hasPath,\n matchPaths,\n mergeObjs,\n parseEvtOpts,\n setPath,\n startTx,\n transaction,\n txId,\n withMeta\n} from \"./chunk-SHWIAQD2.js\";\n\n// src/ts/modules/persist/storage/base/index.ts\nvar BaseStorageAdapter = class {\n name = \"BaseStorageAdapter\";\n config;\n warn = (act = \"\", mssg = \"Support issue or Private Mode\", key = \"\", store = \"\") => this.config.debug && console.warn(`[${this.constructor.name} \\`${act}\\`] Failed${key ? ` for ${key}` : \"\"}${store ? ` on \"${store}\"` : \"\"}${this.config.dbName ? ` at ${this.config.dbName}` : \"\"} (${mssg})`);\n constructor(config) {\n this.config = { debug: false, ...config };\n }\n};\nvar StorageAdapter = class extends BaseStorageAdapter {\n name = \"StorageAdapter\";\n};\nvar AsyncStorageAdapter = class extends BaseStorageAdapter {\n name = \"AsyncStorageAdapter\";\n};\n\n// src/ts/modules/persist/storage/localStorage.ts\nvar LocalStorageAdapter = class extends StorageAdapter {\n name = \"LocalStorage\";\n /**\n * Reads and parses a value from localStorage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n get(key = this.config.key, reviver = this.config.reviver) {\n try {\n const v = localStorage.getItem(key);\n return v ? JSON.parse(v, reviver) : void 0;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return void 0;\n }\n }\n /**\n * Serializes and writes a value to localStorage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n set(key = this.config.key, value, replacer = this.config.replacer) {\n try {\n return localStorage.setItem(key, JSON.stringify(value, replacer)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"setItem\", void 0, key), false;\n }\n }\n /**\n * Removes a single key from localStorage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n remove(key = this.config.key) {\n try {\n return localStorage.removeItem(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"removeItem\", void 0, key), false;\n }\n }\n /**\n * Clears all localStorage entries for the current origin.\n * @returns `true` when clear succeeds, else `false`.\n */\n clear() {\n try {\n return localStorage.clear(), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", void 0), false;\n }\n }\n};\n\n// src/ts/modules/persist/storage/sessionStorage.ts\nvar SessionStorageAdapter = class extends StorageAdapter {\n name = \"SessionStorage\";\n /**\n * Reads and parses a value from sessionStorage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n get(key = this.config.key, reviver = this.config.reviver) {\n try {\n const v = sessionStorage.getItem(key);\n return v ? JSON.parse(v, reviver) : void 0;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return void 0;\n }\n }\n /**\n * Serializes and writes a value to sessionStorage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n set(key = this.config.key, value, replacer = this.config.replacer) {\n try {\n return sessionStorage.setItem(key, JSON.stringify(value, replacer)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"setItem\", void 0, key), false;\n }\n }\n /**\n * Removes a single key from sessionStorage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n remove(key = this.config.key) {\n try {\n return sessionStorage.removeItem(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"removeItem\", void 0, key), false;\n }\n }\n /**\n * Clears all sessionStorage entries for the current tab session.\n * @returns `true` when clear succeeds, else `false`.\n */\n clear() {\n try {\n return sessionStorage.clear(), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", void 0), false;\n }\n }\n};\n\n// src/ts/modules/persist/storage/memory/index.ts\nvar MemoryAdapter = class extends StorageAdapter {\n name = \"Memory\";\n constructor(build) {\n super({ store: /* @__PURE__ */ new Map(), ...build });\n }\n /**\n * Reads and parses a value from memory storage.\n * @param key Storage key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n get(key = this.config.key, reviver = this.config.reviver) {\n try {\n const v = this.config.store.get(key);\n return v ? JSON.parse(v, reviver) : void 0;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return void 0;\n }\n }\n /**\n * Serializes and writes a value to memory storage.\n * @param key Storage key.\n * @param value Value to serialize.\n * @returns `true` when write succeeds, else `false`.\n */\n set(key = this.config.key, value, replacer = this.config.replacer) {\n try {\n return this.config.store.set(key, JSON.stringify(value, replacer)), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"set\", void 0, key), false;\n }\n }\n /**\n * Removes a single key from memory storage.\n * @param key Storage key.\n * @returns `true` when removal succeeds, else `false`.\n */\n remove(key = this.config.key) {\n try {\n return this.config.store.delete(key), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"remove\", void 0, key), false;\n }\n }\n /**\n * Clears all entries from memory storage.\n * @returns `true` when clear succeeds, else `false`.\n */\n clear() {\n try {\n return this.config.store.clear(), true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\", void 0), false;\n }\n }\n};\n\n// src/ts/modules/persist/storage/cookie/build.ts\nvar COOKIE_ADAPTER_BUILD = {\n path: \"/\",\n sameSite: \"Lax\",\n domain: void 0,\n debug: false\n};\n\n// src/ts/modules/persist/storage/cookie/index.ts\nvar CookieAdapter = class extends StorageAdapter {\n name = \"Cookie\";\n deets = (opts = NIL, _d = opts.domain ?? this.config.domain, _m = opts.maxAge ?? this.config.maxAge, _e = opts.expires ?? this.config.expires) => `Path=${opts.path ?? this.config.path}; SameSite=${opts.sameSite ?? this.config.sameSite}${_d ? `; Domain=${_d}` : \"\"}${opts.secure ?? this.config.secure ? \"; Secure\" : \"\"}${_m !== void 0 ? `; Max-Age=${_m}` : \"\"}${_e !== void 0 ? `; Expires=${_e instanceof Date ? _e.toUTCString() : _e}` : \"\"}`;\n constructor(build) {\n super({ secure: \"undefined\" !== typeof window && location.protocol === \"https:\", ...COOKIE_ADAPTER_BUILD, ...build });\n }\n /**\n * Reads and parses a cookie visible to the current page scope.\n * @param key Cookie key.\n * @returns Parsed value, or `undefined` when missing/unreadable.\n */\n get(key = this.config.key, reviver = this.config.reviver) {\n try {\n const k = encodeURIComponent(key) + \"=\";\n for (const pair of document.cookie ? document.cookie.split(\"; \") : []) {\n if (!pair.startsWith(k)) continue;\n return JSON.parse(decodeURIComponent(pair.slice(k.length)), reviver);\n }\n return void 0;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return void 0;\n }\n }\n /**\n * Writes a cookie with optional per-call scope/lifetime overrides.\n * @param key Cookie key.\n * @param value Value to serialize.\n * @param opts Optional per-call cookie options.\n * @returns `true` when write succeeds, else `false`.\n */\n set(key = this.config.key, value, opts, replacer = this.config.replacer) {\n try {\n return document.cookie = `${encodeURIComponent(key)}=${encodeURIComponent(JSON.stringify(value, replacer))}; ${this.deets(opts)}`, true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"set\", void 0, key), false;\n }\n }\n /**\n * Removes a cookie key using matching scope attributes.\n * @param key Cookie key.\n * @param opts Optional per-call scope overrides.\n * @returns `true` when removal succeeds, else `false`.\n */\n remove(key = this.config.key, opts) {\n try {\n return document.cookie = `${encodeURIComponent(key)}=; ${this.deets({ ...opts, maxAge: 0, expires: /* @__PURE__ */ new Date(0) })}`, true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"remove\", void 0, key), false;\n }\n }\n /**\n * Attempts to remove all visible cookie keys for the given scope.\n * @param opts Optional per-call scope overrides.\n * @returns `true` when clear succeeds, else `false`.\n */\n clear(opts) {\n try {\n for (const pair of document.cookie ? document.cookie.split(\"; \") : []) {\n const idx = pair.indexOf(\"=\");\n document.cookie = `${idx === -1 ? pair : pair.slice(0, idx)}=; ${this.deets({ ...opts, maxAge: 0, expires: /* @__PURE__ */ new Date(0) })}`;\n }\n return true;\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"clear\"), false;\n }\n }\n};\n\n// src/ts/modules/persist/storage/indexedDB/build.ts\nvar INDEXED_DB_ADAPTER_BUILD = {\n dbName: \"REACTOR_IDB\",\n stores: [\"VAULT\"],\n version: 1,\n onidb: NOOP,\n onupgradeneeded: NOOP,\n onversionchange: NOOP,\n onsuccess: NOOP,\n onerror: NOOP,\n onblocked: NOOP\n};\n\n// src/ts/modules/persist/storage/indexedDB/index.ts\nvar IndexedDBAdapter = class extends AsyncStorageAdapter {\n name = \"IndexedDB\";\n db;\n constructor(build) {\n super({ ...INDEXED_DB_ADAPTER_BUILD, ...build });\n }\n /**\n * Returns a connected IndexedDB instance, opening it when needed.\n * @returns Connected database handle.\n */\n async idb() {\n const idb = this.config.onidb();\n if (idb || this.db) return Promise.resolve(idb || this.db);\n return new Promise((res, rej) => {\n const req = indexedDB.open(this.config.dbName, this.config.version);\n req.onupgradeneeded = (e) => (this.config.onupgradeneeded(req.result, e), this.config.stores.forEach((s) => !req.result.objectStoreNames.contains(s) && req.result.createObjectStore(s)));\n req.onsuccess = (e) => (this.config.onsuccess(req.result, e), req.result.onversionchange = (e2) => (this.config.onversionchange(req.result, e2), this.warn(\"update\", \"Updated in another tab\"), req.result.close()), res(this.db = req.result));\n req.onerror = (e) => (this.config.onerror(req.error, e), this.warn(\"open\", \"Something went wrong\"), rej(req.error));\n req.onblocked = (e) => (this.config.onblocked(e), this.warn(\"open\", \"Close other tabs for updates\"));\n });\n }\n /**\n * Reads a value by key from an object store.\n * @param key Record key.\n * @param store Optional object-store override.\n * @returns Stored value, or `undefined` when missing/unreadable.\n */\n async get(key = this.config.key, store = this.config.stores[0], options = this.config) {\n try {\n const req = (await this.idb()).transaction(store, \"readonly\", options).objectStore(store).get(key);\n return new Promise((res) => req.onsuccess = () => res(req.result));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"get\", void 0, store), void 0;\n }\n }\n /**\n * Writes a value by key into an object store.\n * @param key Record key.\n * @param value Value to store.\n * @param store Optional object-store override.\n * @returns `true` when write succeeds, else `false`.\n */\n async set(key = this.config.key, value, store = this.config.stores[0], options = this.config) {\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).put(value, key);\n return new Promise((res) => req.onsuccess = () => res(true));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"put\", void 0, store), false;\n }\n }\n /**\n * Deletes a value by key from an object store.\n * @param key Record key.\n * @param store Optional object-store override.\n * @returns `true` when delete succeeds, else `false`.\n */\n async remove(key = this.config.key, store = this.config.stores[0], options = this.config) {\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).delete(key);\n return new Promise((res) => req.onsuccess = () => res(true));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n return this.warn(\"delete\", void 0, store), false;\n }\n }\n /**\n * Clears one or more object stores.\n * @param stores Store name or list of store names to clear.\n * @returns `true` when all clears succeed, else `false`.\n */\n async clear(stores = this.config.stores, options = this.config) {\n let success = true;\n for (const store of Array.isArray(stores) ? stores : [stores])\n try {\n const req = (await this.idb()).transaction(store, \"readwrite\", options).objectStore(store).clear();\n await new Promise((res) => req.onsuccess = () => res(true));\n } catch (e) {\n if (this.config.throwErrors) throw e;\n this.warn(\"clear\", void 0, store), success = false;\n }\n return success;\n }\n};\n\n// src/ts/modules/persist/build.ts\nvar PERSIST_MODULE_BUILD = {\n disabled: false,\n key: \"REACTOR_STORE\",\n throttle: 2500,\n snapshot: false,\n mirrorReads: true,\n mirrorWrites: true,\n onSave: NOOP,\n strict: true\n};\n\n// src/ts/modules/persist/index.ts\nvar PersistModule = class extends BaseReactorModule {\n static moduleName = \"persist\";\n adapter;\n tickMap = /* @__PURE__ */ new Map();\n cache = null;\n hydrateSeq = 0;\n persistSeq = 0;\n saveTimeoutId = 0;\n constructor(config, rtr) {\n super(mergeObjs(PERSIST_MODULE_BUILD, config, rtr?.config), rtr, { hydrated: false });\n }\n wire() {\n \"undefined\" !== typeof window && window.addEventListener(\"pagehide\", this.onDestroy, { signal: this.signal });\n \"undefined\" !== typeof document && document.addEventListener(\"visibilitychange\", () => document.visibilityState === \"hidden\" && this.onDestroy(), { signal: this.signal });\n this.config.on(\"adapter\", this.handleAdapter, { signal: this.signal, init: true });\n this.config.on(\"disabled\", this.handleDisabled, { signal: this.signal, init: true });\n this.config.on(\"whitelist\", this.handleWhitelist, { signal: this.signal, init: true });\n this.config.on(\"synchronous\", this.handleSynchronous, { signal: this.signal });\n }\n onAttach(rtr, rid) {\n rtr.config.eventBubbling = true;\n this.attachPaths(rtr, rid);\n this.state.hydrated && this.cache && this.hydrate(this.deps.size > 1 ? getPath(this.cache, rid) : this.cache, rtr, rid);\n }\n onPath() {\n if (this.state.hydrated) this.saveTimeoutId ||= setTimeout(this.persist, this.config.throttle, this.signal);\n }\n async persist() {\n const seq = ++this.persistSeq;\n let payload = this.getPayload();\n if (this.config.beforeSave) {\n const res = this.config.beforeSave(payload);\n if (res === false) return;\n if (res && res !== true) payload = res;\n }\n this.saveTimeoutId = 0;\n if (this.config.onSave === NOOP) return void await this.adapter.set(this.config.key, payload);\n try {\n const bool = await this.adapter.set(this.config.key, payload);\n if (seq !== this.persistSeq) return;\n this.config.onSave(payload, bool ?? true);\n } catch (e) {\n this.config.onSave(payload, false, e);\n }\n }\n async handleAdapter({ value = LocalStorageAdapter }) {\n const seq = ++this.hydrateSeq;\n if (this.adapter && value === this.adapter.constructor) return;\n this.state.hydrated = false;\n this.adapter?.remove(this.config.key);\n this.adapter = \"function\" === typeof value ? new value({ debug: !!this.deps.values().next().value?.canLog }) : (value.config.debug = !!this.deps.values().next().value?.canLog, value);\n try {\n let saved = this.adapter.get(this.config.key);\n const isAsync = saved instanceof Promise, opts = parseEvtOpts(this.config.fanout ?? isAsync, fanoutOptsArr, \"depth\");\n saved = !isAsync ? saved : await saved;\n if (this.config.beforeHydrate && saved) {\n const res = this.config.beforeHydrate(saved);\n if (res === false) return;\n if (res && res !== true) saved = res;\n }\n if (seq !== this.hydrateSeq || !saved) return;\n this.cache = this.config.cachePayload ? saved : null;\n for (const [rid, rtr] of this.deps) this.hydrate(this.deps.size > 1 ? getPath(saved, rid) : saved, rtr, rid, opts, false);\n for (const [rid, rtr] of this.deps) rtr.tick(opts.depth || !this.config.whitelist ? \"*\" : this.tickMap.get(rid) || []);\n this.tickMap.clear();\n } finally {\n if (seq === this.hydrateSeq) this.state.hydrated = true;\n }\n }\n handleDisabled({ value }) {\n for (const [rid, rtr] of this.deps) this.attachPaths(rtr, rid);\n value && this.adapter?.remove(this.config.key);\n }\n hydrate(entry, rtr, rid = this.rids.get(rtr), { depth, merge = true, atomic, skipUndefined } = parseEvtOpts(this.config.fanout, fanoutOptsArr, \"depth\"), tick = true) {\n if (!entry) return;\n const whites = this.getPaths(rid), blacks = this.getPaths(rid, this.config.blacklist, true), set = (p, curr, prev) => (depth ? fanout : setPath)(rtr.core, p, merge ? mergeObjs(curr, prev, rtr.config) : prev, depth ? { depth, atomic, skipUndefined, crossRealms: rtr.config.crossRealms } : void 0);\n let ticks = this.tickMap.get(rid);\n for (let i = 0, len = blacks.length; i < len; i++) deletePath(entry, blacks[i]);\n for (let i = 0, len = whites.length; i < len; i++) {\n let mirror;\n const _path = whites[i], path = !this.config.mirrorWrites || !_path.includes(\"state\") || !hasPath(rtr.core, mirror = _path.replace(\"state\", \"intent\")) ? _path : mirror, value = getPath(entry, _path);\n value !== void 0 && (set(path, getPath(rtr.core, path), value), (ticks || (this.tickMap.set(rid, ticks = []), ticks)).push(path));\n }\n tick && (rtr.tick(depth || !this.config.whitelist ? \"*\" : ticks || []), this.tickMap.delete(rid));\n }\n /** Clears persisted payload for this module instance by removing the stored key from the adapter and drops any pending save. */\n clear() {\n clearTimeout(this.saveTimeoutId);\n this.saveTimeoutId = -1;\n queueMicrotask(() => this.saveTimeoutId = 0);\n this.adapter?.remove(this.config.key);\n }\n /** Clears stored `cache` for this module instance, call after all attachments that use the cached hydration payload. */\n clearCache() {\n this.cache = null;\n }\n onDestroy() {\n this.config.strict && this.state.hydrated && !this.config.disabled && this.adapter?.set(this.config.key, this.getPayload());\n }\n};\n\n// src/ts/modules/timeTravel/build.ts\nvar TIME_TRAVEL_MODULE_BUILD = {\n limit: 1e9,\n playbackRate: 1,\n maxPlaybackDelay: 2e3,\n mirrorReads: true,\n mirrorWrites: true,\n onApply: NOOP\n};\n\n// src/ts/modules/timeTravel/index.ts\nvar TimeTravelModule = class extends BaseReactorModule {\n static moduleName = \"timeTravel\";\n txMap = /* @__PURE__ */ new WeakMap();\n evtOpts = { capture: true, signal: this.signal };\n // capture for change immediacy devoid of UI lag\n lastTimestamp = 0;\n playbackSeq = 0;\n _tracking;\n // `untrack()` must `track()` in the same session to prevent hydration bugs\n constructor(config, rtr) {\n super({ ...TIME_TRAVEL_MODULE_BUILD, ...config }, rtr, { initialState: {}, history: [], tracking: true, currentFrame: 0, paused: true, forward: true });\n }\n // ===========================================================================\n // THE FOUNDATION & WIRETAP (Passive Recording)\n // ===========================================================================\n wire() {\n this.lastTimestamp = performance.now();\n this.config.on(\"whitelist\", this.handleWhitelist, { signal: this.signal, init: true });\n this.config.on(\"synchronous\", this.handleSynchronous, { signal: this.signal });\n !this.state.paused && this.automove(this.state.forward);\n }\n onAttach(rtr, rid) {\n rtr.config.eventCapturing = rtr.config.referenceTracking = rtr.config.smartCloning = rtr.config.eventTimeStamps = true;\n if (!this.state.history.length || !this.state.initialState[rid]) this.state.initialState[rid] = this.getPayload(rtr, rid);\n this.attachPaths(rtr, rid);\n }\n onPath = this.record;\n /** Chronicling the lifecycle of the system, Captures the essence of every mutation wave that bubbles up. */\n record(e, rid = this.rids.get(e.reactor)) {\n if (!this.state.paused || !(this._tracking ?? this.state.tracking) || e.silent) return;\n if (this.state.currentFrame < this.state.history.length) this.state.history.length = this.state.currentFrame;\n const timestamp = e.timestamp ?? performance.now();\n let en = { path: e.target.path, to: e.reactor.snapshot(false, e.target.value), from: !this.config.mirrorReads || !e.target.path.includes(\"intent\") ? e.reactor.snapshot(false, e.target.oldValue) : getPath(e.reactor.core, e.target.path.replace(\"intent\", \"state\")), type: e.staticType ?? e.type, rid, deltat: timestamp - this.lastTimestamp };\n !e.target.hadKey && (en.hadKey = false);\n if (this.config.beforeEntry) {\n const res = this.config.beforeEntry(en, this.state.history);\n if (res === false) return;\n if (res && res !== true) en = res;\n }\n if (e.tx) {\n let histTx = this.txMap.get(e.tx);\n if (!histTx) {\n this.txMap.set(e.tx, histTx = { id: e.tx.id, label: e.tx.label, nodes: [en], deltat: en.deltat, start: timestamp, end: timestamp });\n const parentTx = e.tx.parent ? this.txMap.get(e.tx.parent) : null;\n (parentTx ? parentTx.nodes : this.state.history).push(histTx);\n } else histTx.nodes.push(en), histTx.end = timestamp;\n } else this.state.history.push(en);\n force(() => this.state.currentFrame = this.state.history.length, !!e.tx);\n while (this.state.history.length > this.config.limit) this.state.history.shift(), this.state.currentFrame--;\n this.lastTimestamp = timestamp;\n }\n /** Resumes the passive recording of state changes. */\n track() {\n this.state.tracking = this._tracking = true, !this.state.paused && this.automove(this.state.forward);\n }\n /**\n * Pauses the passive recording of state changes and returns `this`. Useful to call at creation time to avoid recording hydration waves.\n * @returns `this`\n */\n untrack() {\n this.lastTimestamp = performance.now();\n return this.state.tracking = this._tracking = false, this;\n }\n /** Clears timeline history and resets the playhead and initial snapshots to current reactor state. */\n clear() {\n this.pause();\n this.state.history.length = this.state.currentFrame = 0;\n for (const [rid, rtr] of this.deps) this.state.initialState[rid] = this.getPayload(rtr, rid);\n this.lastTimestamp = performance.now();\n }\n // ===========================================================================\n // THE TIME MACHINE (Manual Controls)\n // ===========================================================================\n /**\n * Instant state reconstruction (teleport) to a given history frame index.\n * Applies recorded nodes forward or backward until the playhead reaches `index`.\n * @param index Target history frame index to jump to (clamped to bounds).\n * @param keepShield If true, keep the paused shield active after applying.\n */\n jumpTo(index = 0, keepShield = false) {\n this.state.paused = false;\n const target = clamp(0, index, this.state.history.length), forward = target > this.state.currentFrame;\n while (this.state.currentFrame !== target) {\n const frame = this.state.history[forward ? this.state.currentFrame : this.state.currentFrame - 1];\n this.applyNode(frame, forward);\n forward ? this.state.currentFrame++ : this.state.currentFrame--;\n this.config.onApply(frame, forward);\n }\n for (const rtr of this.deps.values()) rtr.tick();\n if (!keepShield) this.state.paused = true;\n }\n /** Re-enacting a node that represents a point in time be it a transaction of transactions or a solitary mutation. */\n applyNode(node, forward = true) {\n if (\"nodes\" in node) for (let len = node.nodes.length, i = forward ? 0 : len - 1; forward ? i < len : i >= 0; forward ? i++ : i--) this.applyNode(node.nodes[i], forward);\n else {\n let mirror;\n const rtr = this.deps.get(node.rid) || this.deps.values().next().value, path = !this.config.mirrorWrites || !node.path.includes(\"state\") || !hasPath(rtr.core, mirror = node.path.replace(\"state\", \"intent\")) ? node.path : mirror;\n if (forward) node.type === \"delete\" ? deletePath(rtr.core, path) : setPath(rtr.core, path, deepClone(node.to, rtr.config));\n else node.hadKey === false ? deletePath(rtr.core, path) : setPath(rtr.core, path, deepClone(node.from, rtr.config));\n }\n }\n /**\n * Step through time by a number of frames.\n * @param stride Number of frames to move the playhead by.\n * @param forward Direction: `true` for forward, `false` for backward.\n */\n step(stride = 1, forward = true) {\n if (forward ? this.state.currentFrame >= this.state.history.length : this.state.currentFrame <= 0) return;\n this.pause(), forward ? this.jumpTo(this.state.currentFrame + stride) : this.jumpTo(this.state.currentFrame - stride);\n }\n /** Returns `true` if there is history to step back into. */\n get canUndo() {\n return this.state.currentFrame > 0;\n }\n /**\n * Step back in time (undo).\n * @param stride Optional `number` of frames to undo.\n */\n undo(stride) {\n this.step(arguments.length && \"number\" === typeof stride ? stride : 1, false);\n }\n /** Returns `true` if there is a future to step forward into. */\n get canRedo() {\n return this.state.currentFrame < this.state.history.length;\n }\n /**\n * Step forward in time (redo).\n * @param stride Optional `number` of frames to redo.\n */\n redo(stride) {\n this.step(arguments.length && \"number\" === typeof stride ? stride : 1, true);\n }\n // ===========================================================================\n // THE VCR (Automated Playback)\n // ===========================================================================\n /**\n * Core automove engine. Replays or rewinds the recorded history honoring recorded time gaps.\n * @param forward Direction of playback: `true` to play forward, `false` to rewind.\n * @returns Promise<void> Resolves when playback completes or is paused/stopped.\n */\n async automove(forward = true) {\n const seq = ++this.playbackSeq;\n this.state.paused = false;\n this.state.forward = forward;\n while (seq === this.playbackSeq && !this.state.paused && (forward ? this.state.currentFrame < this.state.history.length : this.state.currentFrame > 0)) {\n const dFrame = this.state.history[this.state.currentFrame + (forward ? 0 : -1)], delay = Math.min((\"nodes\" in dFrame ? dFrame.end - dFrame.start + dFrame.deltat : dFrame.deltat) / this.config.playbackRate, this.config.maxPlaybackDelay);\n if (delay > 0) await new Promise((res) => setTimeout(res, delay, this.signal));\n if (!this.state.paused) this.jumpTo(this.state.currentFrame + (forward ? 1 : -1), true);\n }\n if (seq === this.playbackSeq) this.state.paused = true;\n }\n /**\n * Start chronological re-enactment of the session (play forward).\n * @returns Promise<void> Resolves when playback completes.\n */\n play() {\n return this.automove(true);\n }\n /**\n * Start reverse chronological re-enactment of the session (rewind).\n * @returns Promise<void> Resolves when rewind completes.\n */\n rewind() {\n return this.automove(false);\n }\n /** Pause any ongoing playback or rewinding. */\n pause() {\n this.playbackSeq++, this.state.paused = true;\n }\n // ===========================================================================\n // TELEMETRY & I/O (Session Import/Export)\n // ===========================================================================\n /**\n * Export the current time-travel session state as a JSON string.\n * @param replacer Optional replacer function used by `JSON.stringify`.\n * @param space Optional spacing parameter for pretty-printing.\n * @returns The serialized session JSON.\n */\n export(replacer, space) {\n return JSON.stringify(this.state, replacer, space);\n }\n /**\n * Import a serialized session JSON and reconstruct internal state and snapshots.\n * @param json The serialized session JSON produced by `export()`.\n * @param reviver Optional reviver function used by `JSON.parse`.\n */\n import(json, reviver, start = this.state.currentFrame, resume = !this.state.paused, forward = this.state.forward) {\n setPath(this.state, \"*\", JSON.parse(json, reviver));\n this.lastTimestamp = performance.now();\n this.state.paused = false;\n for (const [rid, rtr] of this.deps) {\n const paths = this.getPaths(rid);\n for (let i = 0, len = paths.length; i < len; i++) {\n const path = paths[i];\n fanout(rtr.core, path, getPath(this.state.initialState[rid], path));\n }\n }\n for (const [rid, rtr] of this.deps) rtr.tick(this.config.whitelist ? this.getPaths(rid) : \"*\");\n this.state.currentFrame = 0, this.jumpTo(start), resume && this.automove(forward);\n }\n};\n\n// src/ts/modules/timeTravel/silence.ts\nfunction silence(fn) {\n return withMeta({ silent: true }, fn);\n}\n\n// src/ts/modules/timeTravel/heuristics/text/index.ts\nfunction createTextBundler({ throttle = 700, boundaryRegex: rgx = /[\\s.,!?;:\\n()[\\]{}'\"`]/, maxGrowth = 48, bundleInserts = true, bundleDeletes = true, strictMerges = true, whitelist, blacklist, toString } = NIL) {\n return (entry, history) => {\n if (whitelist?.length && !matchPaths(whitelist, entry.path) || blacklist?.length && matchPaths(blacklist, entry.path)) return entry;\n const to = toString ? toString(entry.to, entry) : entry.to, from = toString ? toString(entry.from, entry) : entry.from;\n if (\"string\" !== typeof to || \"string\" !== typeof from) return entry;\n const last = history[history.length - 1];\n if (!last) return entry;\n if (\"nodes\" in last) return entry;\n if (last.path !== entry.path) return entry;\n const lastTo = toString ? toString(last.to, last) : last.to, lastFrom = toString ? toString(last.from, last) : last.from;\n if (\"string\" !== typeof lastTo || \"string\" !== typeof lastFrom) return entry;\n if (entry.deltat > throttle) return entry;\n const prevDelta = lastTo.length - lastFrom.length, nextDelta = to.length - from.length, op = nextDelta > 0 ? \"insert\" : nextDelta < 0 ? \"delete\" : from !== to ? \"replace\" : \"unknown\", lastOp = prevDelta > 0 ? \"insert\" : prevDelta < 0 ? \"delete\" : lastFrom !== lastTo ? \"replace\" : \"unknown\";\n if (strictMerges && op !== lastOp) return entry;\n if (Math.abs(to.length - lastFrom.length) > maxGrowth) return entry;\n const isInsert = op === \"insert\";\n if (isInsert || op === \"delete\") {\n const bundleOp = isInsert ? bundleInserts : bundleDeletes, lastChar = (isInsert ? lastTo : lastFrom).at(-1);\n if (!bundleOp && lastChar && rgx.test(lastChar)) return entry;\n history.pop();\n return { ...entry, from: last.from, deltat: last.deltat + entry.deltat };\n }\n return entry;\n };\n}\nfunction setValueWithCursor(el, value = \"\", selStart = 0, selEnd = 0, selDir = \"none\") {\n if (el) el.value = value, el.setSelectionRange(Math.min(selStart ?? el.selectionStart, value.length), Math.min(selEnd ?? el.selectionEnd, value.length), selDir ?? el.selectionDirection);\n}\n\n// src/ts/modules/timeTravel/heuristics/path.ts\nfunction createTxPathMerger() {\n const activeTxs = /* @__PURE__ */ new WeakMap();\n return (entry) => {\n const tx = CTX.meta?.tx;\n if (!tx) return entry;\n let txMap = activeTxs.get(tx);\n if (!txMap) activeTxs.set(tx, txMap = /* @__PURE__ */ new Map());\n if (txMap.has(entry.path)) {\n const existing = txMap.get(entry.path);\n existing.to = entry.to;\n existing.deltat += entry.deltat;\n return false;\n }\n return txMap.set(entry.path, entry), entry;\n };\n}\n\n// src/ts/modules/timeTravel/heuristics/index.ts\nfunction composeHeuristics(...heuristics) {\n const fns = heuristics.filter(Boolean);\n return (entry, history) => {\n let current = entry;\n for (let i = 0, len = fns.length; i < len; i++) if ((current = fns[i](current, history)) === false) return false;\n return current;\n };\n}\nexport {\n AsyncStorageAdapter,\n BaseReactorModule,\n BaseStorageAdapter,\n COOKIE_ADAPTER_BUILD,\n CookieAdapter,\n INDEXED_DB_ADAPTER_BUILD,\n IndexedDBAdapter,\n LocalStorageAdapter,\n MemoryAdapter,\n PERSIST_MODULE_BUILD,\n PersistModule,\n SessionStorageAdapter,\n StorageAdapter,\n TIME_TRAVEL_MODULE_BUILD,\n TimeTravelModule,\n composeHeuristics,\n createTextBundler,\n createTxPathMerger,\n endTx,\n setValueWithCursor,\n silence,\n startTx,\n transaction,\n txId\n};\n","import { isNum } from \"@t007/utils\";\r\n\r\n// Media Time Formatting\r\nexport function formatMediaTime({ time, format = \"digital\", elapsed = true, showMs = false, casing = \"normal\" }: { time?: number; format?: string; elapsed?: boolean; showMs?: boolean; casing?: \"normal\" | \"upper\" | \"title\" } = { time: 0 }): string {\r\n const long = format.endsWith(\"long\"),\r\n sx = (n = 0) => (n == 1 ? \"\" : \"s\"),\r\n cs = (str: string) => (casing === \"upper\" ? str.toUpperCase() : casing === \"title\" ? str.replace(/^([a-z])/i, (m) => m.toUpperCase()) : str.toLowerCase()),\r\n wrd = (n = 0) => ({ d: cs(long ? \" day\" + sx(n) + \" \" : \"d\"), h: cs(long ? \" hour\" + sx(n) + \" \" : \"h\"), m: cs(long ? \" minute\" + sx(n) + \" \" : \"m\"), s: cs(long ? \" second\" + sx(n) + \" \" : \"s\"), ms: cs(long ? \" millisecond\" + sx(n) + \" \" : \"ms\") }),\r\n pad = (v: string | number, n = 2, f?: boolean) => (long && !f ? v : String(v).padStart(n, isNum(+n) ? \"0\" : \"-\"));\r\n if (isNaN(time ?? NaN) || time === Infinity) return format !== \"digital\" ? (\"-\" + wrd().h + pad(\"-\") + wrd().m + (!elapsed ? \"left\" : \"\")).trim() : !elapsed ? \"-:--\" : \"-:--\";\r\n const s = Math.floor(Math.abs(time!) % 60),\r\n m = Math.floor(Math.abs(time!) / 60) % 60,\r\n h = Math.floor(Math.abs(time!) / 3600) % 24,\r\n d = Math.floor(Math.abs(time!) / 86400),\r\n ms = Math.floor((Math.abs(time!) % 1) * 1000); // returns early so \"!\"\r\n if (format === \"digital\") {\r\n const base = d ? d + \":\" + pad(h, 2, true) + \":\" + pad(m, 2, true) + \":\" + pad(s, 2, true) : h ? h + \":\" + pad(m, 2, true) + \":\" + pad(s, 2, true) : m + \":\" + pad(s, 2, true);\r\n return !elapsed ? \"-\" + base : base;\r\n }\r\n const base = d ? d + wrd(d).d + pad(h) + wrd(h).h + pad(m) + wrd(m).m + pad(s) + wrd(s).s : h ? h + wrd(h).h + pad(m) + wrd(m).m + pad(s) + wrd(s).s : m + wrd(m).m + pad(s) + wrd(s).s,\r\n msPart = showMs && ms ? pad(ms, 3) + wrd(ms).ms : \"\";\r\n return (base + msPart + (!long ? \" \" : \"\") + (!elapsed ? \"left\" : \"\")).trim();\r\n}\r\n\r\n// Time Ranges\r\n\r\nexport function createTimeRanges(ranges?: [number, number][] | TimeRanges | ArrayLike<any>): TimeRanges {\r\n if (ranges instanceof TimeRanges) return ranges;\r\n if (!ranges)\r\n return Object.create(TimeRanges.prototype, {\r\n length: { value: 0 },\r\n start: {\r\n value: () => {\r\n throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n },\r\n },\r\n end: {\r\n value: () => {\r\n throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n },\r\n },\r\n });\r\n // 1. Sort incoming intervals chronologically by start time\r\n const rawPairs = (Array.isArray(ranges) ? ranges : Array.from(ranges as ArrayLike<any>)).sort((a, b) => a[0] - b[0]);\r\n // 2. Spec Normalization Loop: Merge overlapping or touching timelines\r\n const pairs: [number, number][] = [];\r\n for (const current of rawPairs) {\r\n const last = pairs[pairs.length - 1];\r\n if (!last || current[0] > last[1]) pairs.push([current[0], current[1]]); // Clean discontinuity gap\r\n else last[1] = Math.max(last[1], current[1]); // Normalization: merge overlaps!\r\n }\r\n // 3. Return a fully normalized interface literal\r\n return Object.create(TimeRanges.prototype, {\r\n length: { value: pairs.length },\r\n start: {\r\n value: (i: number) => {\r\n if (i < 0 || i >= pairs.length) throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n return pairs[i][0];\r\n },\r\n },\r\n end: {\r\n value: (i: number) => {\r\n if (i < 0 || i >= pairs.length) throw new DOMException(\"Index out of bounds\", \"IndexSizeError\");\r\n return pairs[i][1];\r\n },\r\n },\r\n });\r\n}\r\n","import { createTimeRanges } from \"@utils/time\";\r\nimport type { MediaIntent, MediaState, MediaStatus, MediaSettings } from \"@defs/contract\";\r\nimport { DeepPartial } from \"sia-reactor\";\r\n\r\n// DEFAULT STATE (The Reality)\r\nexport const MEDIA_STATE_BUILD: Partial<MediaState> = {\r\n // Core\r\n src: \"\", // 1st for correct fanout sequence\r\n currentTime: 0,\r\n paused: true,\r\n // Engine\r\n volume: 100,\r\n muted: false,\r\n brightness: 100,\r\n dark: false,\r\n playbackRate: 1,\r\n // Modes\r\n pictureInPicture: false,\r\n fullscreen: false,\r\n theater: false,\r\n miniplayer: false,\r\n locked: false,\r\n // Casting\r\n airplay: false,\r\n cast: false,\r\n // VR / XR\r\n xrSession: false,\r\n xrMode: \"inline\",\r\n xrReferenceSpace: \"local\",\r\n projection: \"flat\",\r\n stereoMode: \"none\",\r\n fieldOfView: 90, // Standard FOV\r\n viewRatio: 16 / 9, // Standard Aspect Ratio\r\n panningX: 0,\r\n panningY: 0,\r\n panningZ: 0,\r\n xrInputSource: [],\r\n // Tracks & Streaming\r\n currentChapter: -1,\r\n currentTextTrack: -1,\r\n currentAudioTrack: -1,\r\n currentVideoTrack: -1,\r\n currentLevel: -1,\r\n textVisible: true,\r\n autoLevel: true, // Adaptive Streaming on by default\r\n // HTML Attributes\r\n poster: \"\",\r\n autoplay: false,\r\n loop: false,\r\n preload: \"auto\",\r\n playsInline: true,\r\n crossOrigin: null,\r\n controls: false, // We disable native controls\r\n controlsList: \"\",\r\n disablePictureInPicture: false,\r\n // HTML Lists\r\n sources: [],\r\n tracks: [],\r\n // Live Content\r\n live: true,\r\n // Misc\r\n objectFit: \"contain\",\r\n};\r\n\r\n// DEFAULT INTENT (The Wishes)\r\nexport const MEDIA_INTENT_BUILD: Partial<MediaIntent> = MEDIA_STATE_BUILD as MediaIntent; // Intent starts as State but can diverge\r\n\r\n// DEFAULT INFO (The Facts)\r\nexport const MEDIA_STATUS_BUILD: Partial<MediaStatus> = {\r\n // Network\r\n readyState: 0, // HAVE_NOTHING\r\n networkState: 0, // EMPTY\r\n error: null,\r\n bandwidth: null,\r\n // Buffering\r\n waiting: false,\r\n stalled: false,\r\n seeking: false,\r\n buffered: createTimeRanges(),\r\n played: createTimeRanges(),\r\n seekable: createTimeRanges(),\r\n duration: NaN, // HTML5 Standard for \"Unknown\"\r\n ended: false,\r\n // Dimensions\r\n videoWidth: 0,\r\n videoHeight: 0,\r\n // Gates\r\n loadedMetadata: false,\r\n loadedData: false,\r\n canPlay: false,\r\n canPlayThrough: false,\r\n // Lists (We start with empty lists or nulls)\r\n textTracks: [],\r\n audioTracks: [],\r\n videoTracks: [],\r\n levels: [],\r\n // Active\r\n activeCue: null,\r\n // VR\r\n xrCapabilities: null,\r\n // Live Content\r\n isLive: false,\r\n canSeekLive: false,\r\n};\r\n\r\n// DEFAULT SETTINGS (The Config)\r\nexport const MEDIA_SETTINGS_BUILD: DeepPartial<MediaSettings> = {\r\n // Defaults\r\n defaultMuted: false,\r\n defaultPlaybackRate: 1,\r\n // Streams\r\n srcObject: null,\r\n // Metadata\r\n metadata: {\r\n title: \"\",\r\n artist: \"\",\r\n profile: \"\",\r\n album: \"\",\r\n artwork: [],\r\n chapterInfo: [],\r\n links: {\r\n title: \"\",\r\n artist: \"\",\r\n profile: \"\",\r\n },\r\n allowOverride: true,\r\n },\r\n protection: null,\r\n // Live Content\r\n liveTolerance: 6,\r\n minDVRWindow: 60,\r\n};\r\n","import { MEDIA_INTENT_BUILD, MEDIA_SETTINGS_BUILD, MEDIA_STATE_BUILD, MEDIA_STATUS_BUILD } from \"@consts/media\";\r\nimport { MediaState, MediaStatus, MediaSettings, MediaReport, CtlrMedia } from \"@defs/contract\";\r\nimport { isStr, isNum, isIter, isSameURL, cleanURL } from \"@t007/utils\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { queryFullscreenEl, queryPictureInPictureEl } from \"@utils/dom\";\r\nimport { Dimensions, MediaType, Source, Sources, Track, Tracks } from \"@defs/generics\";\r\nimport { mergeObjs as merge } from \"sia-reactor/utils\";\r\nimport { DeepPartial } from \"sia-reactor\";\r\n\r\n// ============ Video Utilities ============\r\n// Types\r\ntype SourceLike = Source | (HTMLSourceElement & Record<string, any>);\r\ntype TrackLike = Track | (HTMLTrackElement & Record<string, any>);\r\n\r\n// Report Generation\r\nexport function getMediaReport(m: HTMLMediaElement, isVid = m instanceof HTMLVideoElement, opts = { skipUndefined: true }): MediaReport {\r\n const txtTrackIdx = getTrackIdx(m, \"Text\"),\r\n report = { state: getMediaState(m, isVid, txtTrackIdx), status: getMediaStatus(m, isVid, txtTrackIdx), settings: getMediaSettings(m) };\r\n return { state: merge(MEDIA_STATE_BUILD, report.state, opts), intent: merge(MEDIA_INTENT_BUILD, report.state, opts), status: merge(MEDIA_STATUS_BUILD, report.status, opts), settings: merge(MEDIA_SETTINGS_BUILD, report.settings, opts) } as MediaReport;\r\n}\r\nexport const getMediaState = (m: HTMLMediaElement, isVid = m instanceof HTMLVideoElement, _txtTrackIdx = getTrackIdx(m, \"Text\")): Partial<MediaState> => ({ src: m.src, currentTime: m.currentTime, paused: m.paused, volume: m.volume * 100, muted: m.muted, playbackRate: m.playbackRate, pictureInPicture: queryPictureInPictureEl() === m, fullscreen: queryFullscreenEl() === m, currentTextTrack: _txtTrackIdx, currentAudioTrack: getTrackIdx(m, \"Audio\"), currentVideoTrack: getTrackIdx(m, \"Video\"), poster: isVid ? (m as HTMLVideoElement).poster : \"\", autoplay: m.autoplay, loop: m.loop, preload: m.preload, playsInline: isVid ? m.playsInline : false, crossOrigin: m.crossOrigin, controls: m.controls, controlsList: m.controlsList ?? m.getAttribute(\"controlsList\"), disablePictureInPicture: isVid ? m.disablePictureInPicture ?? m.hasAttribute(\"disablePictureInPicture\") : false, sources: getSources(m), tracks: getTracks(m) });\r\nexport const getMediaStatus = (m: HTMLMediaElement, isVid = m instanceof HTMLVideoElement, _txtTrackIdx = getTrackIdx(m, \"Text\"), _flagsOnly = false): Partial<MediaStatus> => ({ readyState: m.readyState, networkState: m.networkState, error: m.error, seeking: m.seeking, buffered: m.buffered, played: m.played, seekable: m.seekable, duration: m.duration, ended: m.ended, loadedMetadata: m.readyState >= 1, loadedData: m.readyState >= 2, canPlay: m.readyState >= 3, canPlayThrough: m.readyState >= 4, videoWidth: isVid ? (m as HTMLVideoElement).videoWidth : 0, videoHeight: isVid ? (m as HTMLVideoElement).videoHeight : 0, textTracks: _flagsOnly ? undefined : m.textTracks, audioTracks: _flagsOnly ? undefined : (m as any).audioTracks, videoTracks: _flagsOnly ? undefined : (m as any).videoTracks, activeCue: _flagsOnly ? undefined : m.textTracks[_txtTrackIdx]?.activeCues?.[0] || null });\r\nexport const getMediaSettings = (m: HTMLMediaElement): DeepPartial<MediaSettings> => ({ defaultMuted: m.defaultMuted, defaultPlaybackRate: m.defaultPlaybackRate, srcObject: m.srcObject });\r\n\r\nexport function getMediaProgress({ state: s, status: st }: CtlrMedia, time = s.currentTime): number {\r\n if (st.isLive) {\r\n if (!st.seekable.length || s.live) return 1;\r\n const min = st.seekable.start(0),\r\n dvr = st.seekable.end(st.seekable.length - 1) - min;\r\n return dvr > 0 ? (time - min) / dvr : 1;\r\n } else return time / st.duration;\r\n}\r\nexport const getMediaTime = (media: CtlrMedia, percent: number, _min = getMediaMin(media)): number => (media.status.isLive ? _min! + percent * (getMediaMax(media) - _min!) : percent * media.status.duration);\r\nexport const getMediaMin = ({ status: st, state: s }: Pick<CtlrMedia, \"state\" | \"status\">): number => (st.isLive ? (st.seekable.length ? (st.canSeekLive ? st.seekable.start(0) : st.seekable.end(st.seekable.length - 1)) : s.currentTime) : 0); // live?, can't seek?, jump to edge\r\nexport const getMediaMax = ({ status: st, state: s }: Pick<CtlrMedia, \"state\" | \"status\">): number => (st.isLive ? (st.seekable.length ? st.seekable.end(st.seekable.length - 1) : s.currentTime) : st.duration);\r\n\r\nexport function getBooleanMediaProps(media: CtlrMedia, prop: \"intent\" | \"state\" = \"intent\"): string[] {\r\n return Object.keys(media[prop]).filter((k) => typeof media[prop][k as keyof MediaState] === \"boolean\");\r\n}\r\n\r\n// Geometry\r\nexport function getRenderedBox({ videoHeight, videoWidth }: { videoHeight?: number; videoWidth?: number }, { width: clientWidth = 0, height: clientHeight = 0 }: { width?: number; height?: number }, { objectFit = \"cover\", objectPosition = \"50% 50%\" }: { objectFit?: string; objectPosition?: string }): Partial<Dimensions & { left: number; top: number }> {\r\n const bbox = { width: clientWidth, height: clientHeight } as DOMRect,\r\n obj = (((videoHeight ||= 1080), (videoWidth ||= videoHeight * (16 / 9))), videoWidth && videoHeight ? { width: videoWidth, height: videoHeight } : null);\r\n if (!obj || !objectFit || !objectPosition) return {};\r\n if (objectFit === \"scale-down\") objectFit = bbox.width < obj.width || bbox.height < obj.height ? \"contain\" : \"none\";\r\n if (objectFit === \"none\") return { ...parseObjectPos(objectPosition, bbox, obj), ...obj };\r\n else if (objectFit === \"contain\") {\r\n const objRatio = obj.height / obj.width,\r\n bboxRatio = bbox.height / bbox.width,\r\n width = bboxRatio > objRatio ? bbox.width : bbox.height / objRatio,\r\n height = bboxRatio > objRatio ? bbox.width * objRatio : bbox.height;\r\n return { ...parseObjectPos(objectPosition, bbox, { width, height }), width, height };\r\n } else if (objectFit === \"fill\") {\r\n const { left, top, rawLeft, rawTop } = parseObjectPos(objectPosition, bbox, obj);\r\n return { left: rawLeft.endsWith(\"%\") ? 0 : left, top: rawTop.endsWith(\"%\") ? 0 : top, width: bbox.width, height: bbox.height }; // Relative positioning is discarded with `obj-fit: fill`, so we need to check here if it's relative or not\r\n } else if (objectFit === \"cover\") {\r\n const minRatio = Math.min(bbox.width / obj.width, bbox.height / obj.height);\r\n let width = obj.width * minRatio,\r\n height = obj.height * minRatio,\r\n outRatio = 1;\r\n if (width < bbox.width) outRatio = bbox.width / width;\r\n if (Math.abs(outRatio - 1) < 1e-14 && height < bbox.height) outRatio = bbox.height / height;\r\n (width *= outRatio), (height *= outRatio);\r\n return { ...parseObjectPos(objectPosition, bbox, { width, height }), width, height };\r\n }\r\n return {};\r\n}\r\nconst parsePosAsPx = (str: string, bboxSize: number, objectSize: number): number => {\r\n str === \"center\" ? (str = \"50%\") : str === \"left\" || str === \"top\" ? (str = \"0%\") : (str === \"right\" || str === \"bottom\") && (str = \"100%\");\r\n const num = parseFloat(str);\r\n return !str.endsWith(\"%\") ? num : (bboxSize - objectSize) * (num / 100);\r\n};\r\nconst parseObjectPos = (position: string, bbox: DOMRect, object: Dimensions): { left: number; top: number; rawLeft: string; rawTop: string } => {\r\n if (position === \"center\") position = \"50% 50%\";\r\n const [left, top = \"50%\"] = position.split(\" \");\r\n return { left: parsePosAsPx(left, bbox.width, object.width), top: parsePosAsPx(top, bbox.height, object.height), rawLeft: left, rawTop: top };\r\n};\r\n\r\nexport function getSizeTier(container: HTMLElement, { offsetWidth: w, offsetHeight: h } = container) {\r\n return { width: w, height: h, tier: h <= 130 ? \"xxxxx\" : w <= 280 ? \"xxxx\" : w <= 380 ? \"xxx\" : w <= 480 ? \"xx\" : w <= 630 ? \"x\" : \"\" };\r\n}\r\n\r\n// Media Element Cloning\r\nexport function cloneMedia<M extends HTMLMediaElement>(v: M): M {\r\n const newV = v.cloneNode(true) as M;\r\n newV.tmgPlayer = v.tmgPlayer;\r\n v.parentElement?.replaceChild(newV, v);\r\n if (v.currentTime) newV.currentTime = v.currentTime;\r\n if (v.playbackRate !== 1) newV.playbackRate = v.playbackRate;\r\n if (v.defaultPlaybackRate !== 1) newV.defaultPlaybackRate = v.defaultPlaybackRate;\r\n if (v.volume !== 1) newV.volume = v.volume;\r\n if (v.muted) newV.muted = true;\r\n if (v.defaultMuted) newV.defaultMuted = true;\r\n if (v.srcObject) newV.srcObject = v.srcObject;\r\n if (v.autoplay) newV.autoplay = true;\r\n if (v.loop) newV.loop = true;\r\n if (v.controls) newV.controls = true;\r\n if (v.crossOrigin) newV.crossOrigin = v.crossOrigin;\r\n if (v.playsInline) newV.playsInline = true;\r\n if (v.controlsList?.length) newV.controlsList = v.controlsList;\r\n if (v.disablePictureInPicture) newV.disablePictureInPicture = true;\r\n if (!v.paused && newV.isConnected) newV.play();\r\n return newV;\r\n}\r\n\r\n// Source Management\r\nexport function putSourceDetails(source: any, el: HTMLSourceElement | Record<string, any>): void {\r\n if (source.src) el.src = source.src;\r\n if (source.type) el.type = source.type;\r\n if (source.media) el.media = source.media;\r\n}\r\nexport function addSources(sources: SourceLike | Iterable<SourceLike> = [], medium: HTMLElement): HTMLSourceElement | HTMLSourceElement[] {\r\n const addSource = (source: SourceLike, med: HTMLElement) => {\r\n const sourceEl = createEl(\"source\");\r\n putSourceDetails(source, sourceEl);\r\n return med.appendChild(sourceEl);\r\n };\r\n return isIter(sources) ? Array.from(sources as Iterable<SourceLike>, (source) => addSource(source, medium)) : addSource(sources, medium);\r\n}\r\nexport function getSources(medium: HTMLElement): MediaState[\"sources\"] {\r\n const sources = medium.querySelectorAll<HTMLSourceElement>(\"source\"),\r\n _sources: SourceLike[] = [];\r\n for (const source of sources) {\r\n const obj: Record<string, any> = {};\r\n putSourceDetails(source, obj);\r\n _sources.push(obj as SourceLike);\r\n }\r\n return _sources as MediaState[\"sources\"];\r\n}\r\nexport const removeSources = (medium: HTMLElement, sources = medium?.querySelectorAll(\"source\")): void => {\r\n if (sources) for (const source of sources) source.remove();\r\n};\r\nexport function isSameSources(a?: Sources, b?: Sources): boolean {\r\n if (!a || !b || a.length !== b.length) return false;\r\n const set = new Set(b.map((s) => `${cleanURL(s.src)}|${s.type}|${s.media}`));\r\n return a.every((s) => set.has(`${cleanURL(s.src)}|${s.type}|${s.media}`));\r\n}\r\n\r\n// Track Management\r\nexport type TrackType = \"Audio\" | \"Video\" | \"Text\";\r\nexport function putTrackDetails(track: any, el: HTMLTrackElement | Record<string, any>): void {\r\n if (track.id) el.id = track.id;\r\n if (track.kind) el.kind = track.kind;\r\n if (track.label) el.label = track.label;\r\n if (track.srclang) el.srclang = track.srclang;\r\n if (track.src) el.src = track.src;\r\n if (track.default) el.default = track.default;\r\n}\r\nexport function addTracks(tracks: TrackLike | Iterable<TrackLike> = [], medium: HTMLElement): HTMLTrackElement | HTMLTrackElement[] {\r\n const addTrack = (track: TrackLike, med: HTMLElement) => {\r\n const trackEl = createEl(\"track\");\r\n return putTrackDetails(track, trackEl), med.appendChild(trackEl);\r\n };\r\n return isIter(tracks) ? Array.from(tracks as Iterable<TrackLike>, (track) => addTrack(track, medium)) : addTrack(tracks, medium);\r\n}\r\nexport function getTracks(medium: HTMLElement, cues = false): TrackLike[] {\r\n const tracks = medium.querySelectorAll<HTMLTrackElement>(!cues ? \"track\" : \"track:is([kind='captions'], [kind='subtitles'])\"),\r\n _tracks: TrackLike[] = [];\r\n for (const track of tracks) {\r\n const obj: Record<string, any> = {};\r\n putTrackDetails(track, obj), _tracks.push(obj as TrackLike);\r\n }\r\n return _tracks;\r\n}\r\nexport const removeTracks = (medium: HTMLElement, tracks = medium?.querySelectorAll(\"track\")): void => {\r\n if (tracks) for (const track of tracks) if (track.kind === \"subtitles\" || track.kind === \"captions\") track.remove();\r\n};\r\nexport function isSameTracks(a?: Tracks, b?: Tracks): boolean {\r\n if (!a || !b || a.length !== b.length) return false;\r\n const set = new Set(b.map((t) => `${cleanURL(t.src)}|${t.kind}|${t.label}|${t.srclang}|${t.default}`));\r\n return a.every((t) => set.has(`${cleanURL(t.src)}|${t.kind}|${t.label}|${t.srclang}|${t.default}`));\r\n}\r\nconst isTrack = (type: TrackType, term: any) => `${type}Track` in window && term instanceof (window as any)[`${type}Track`];\r\nexport function getTrackIdx(medium: HTMLMediaElement, type: TrackType = \"Text\", term: any = \"active\", list = (medium as any)[`${type.toLowerCase()}Tracks`]): number {\r\n if (isNum(term)) return term;\r\n if (list && term === \"active\") {\r\n if (type === \"Text\") for (let i = 0; i < +list.length; i++) if (list[i].mode === \"showing\") return i;\r\n if (type === \"Audio\") for (let i = 0; i < +list.length; i++) if (list[i].enabled) return i;\r\n if (type === \"Video\") return list.selectedIndex ?? -1;\r\n }\r\n if (list && isTrack(type, term)) return Array.prototype.indexOf.call(list, term);\r\n if (list && isStr(term)) {\r\n term = term.toLowerCase();\r\n return !isNaN(+term) ? +term : Array.prototype.findIndex.call(list, (t: any) => t.id.toLowerCase() === term || t.label.toLowerCase() === term || t.srclang?.toLowerCase() === term || t.language.toLowerCase() === term || isSameURL(t.src, term));\r\n }\r\n return -1;\r\n}\r\nexport function setCurrentTrack(medium: HTMLMediaElement, type: TrackType = \"Text\", term: any, flush = false, list = (medium as any)[`${type.toLowerCase()}Tracks`]): void {\r\n const idx = getTrackIdx(medium, type, term, list);\r\n if (list && type !== \"Video\") for (let i = 0; i < list.length; i++) type === \"Text\" ? (list[i].mode = i === idx ? \"showing\" : flush ? \"disabled\" : \"hidden\") : (list[i].enabled = i === idx);\r\n else list?.[idx] && (list[idx].selected = true);\r\n}\r\n\r\n// Capbailities\r\nexport const DUMMY_VID = createEl(\"video\");\r\nexport const DUMMY_AUD = createEl(\"audio\");\r\nexport function canUseVolume(type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean {\r\n try {\r\n const prev = dummy.volume;\r\n dummy.volume = 0.5;\r\n const works = dummy.volume === 0.5;\r\n return (dummy.volume = prev), works;\r\n } catch {\r\n return false;\r\n }\r\n}\r\nexport const canMuteVolume = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"muted\" in dummy;\r\nexport function canUseRate(type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean {\r\n try {\r\n const prev = dummy.playbackRate;\r\n dummy.playbackRate = 0.5;\r\n const works = dummy.playbackRate === 0.5;\r\n return (dummy.playbackRate = prev), works;\r\n } catch {\r\n return false;\r\n }\r\n}\r\nexport const canTextTracks = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"textTracks\" in dummy;\r\nexport const canVideoTracks = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"videoTracks\" in dummy;\r\nexport const canAudioTracks = (type: MediaType = \"video\", dummy = type === \"video\" ? DUMMY_VID : DUMMY_AUD): boolean => !!dummy && \"audioTracks\" in dummy;\r\n\r\n// ============ Caption/Subtitle Utilities ============\r\nexport const stripTags = (text: string): string => text.replace(/<(\\/)?([a-z0-9.:]+)([^>]*)>/gi, \"\");\r\n\r\nexport function srtToVtt(srt: string, vttLines: string[] = [\"WEBVTT\", \"\"]): string {\r\n const input = srt.replace(/\\r\\n?/g, \"\\n\").trim();\r\n for (const block of input.split(/\\n{2,}/)) {\r\n const lines = block.split(\"\\n\");\r\n let idx = /^\\d+$/.test(lines[0].trim()) ? 1 : 0;\r\n const timing = lines[idx]?.trim().replace(/\\s+/g, \" \"),\r\n m = timing?.match(/(\\d{1,2}:\\d{2}:\\d{2})(?:[.,](\\d{1,3}))?\\s*-->\\s*(\\d{1,2}:\\d{2}:\\d{2})(?:[.,](\\d{1,3}))?/);\r\n if (!m) continue;\r\n const [, startHms, startMsRaw = \"0\", endHms, endMsRaw = \"0\"] = m,\r\n to3 = (ms: string) => ms.padEnd(3, \"0\").slice(0, 3);\r\n vttLines.push(startHms + \".\" + to3(startMsRaw) + \" --> \" + endHms + \".\" + to3(endMsRaw));\r\n for (let i = idx + 1; i < lines.length; i++) vttLines.push(lines[i]);\r\n vttLines.push(\"\");\r\n }\r\n return vttLines.join(\"\\n\");\r\n}\r\n\r\nexport function parseVttText(text: string): string {\r\n const state = { tag: /<(\\/)?([a-z0-9.:]+)([^>]*)>/gi, o: \"\", l: 0, p: null as string | null, c: \"\" },\r\n esc = (s: string) => s.replace(/[&<>\"']/g, (c) => ({ \"&\": \"&amp;\", \"<\": \"&lt;\", \">\": \"&gt;\", '\"': \"&quot;\", \"'\": \"&#39;\" }[c]!));\r\n let m: RegExpExecArray | null;\r\n while ((m = state.tag.exec(text))) {\r\n const chunk = text.slice(state.l, m.index);\r\n if (chunk) state.c += esc(chunk);\r\n const [_, cls, tag_n, rest] = m,\r\n low = tag_n.toLowerCase();\r\n if (/^[0-9]/.test(tag_n)) {\r\n state.o += state.p ? `<span data-part=\"timed\" data-time=\"${state.p}\">${state.c}</span>` : state.c;\r\n state.p = tag_n;\r\n state.c = \"\";\r\n } else if (cls) state.c += [\"c\", \"v\", \"lang\"].includes(low) ? \"</span>\" : `</${low}>`;\r\n else if ([\"b\", \"i\", \"u\", \"ruby\", \"rt\"].includes(low)) state.c += `<${low}>`;\r\n else if (low === \"c\") state.c += `<span class=\"vtt-c ${rest.replace(/\\.([a-z0-9_-]+)/gi, \"$1 \").trim()}\">`;\r\n else if (low === \"v\") state.c += `<span data-part=\"voice\"${rest.trim() ? ` title=\"${esc(rest.trim())}\"` : \"\"}>`;\r\n else if (low === \"lang\") state.c += `<span lang=\"${esc(rest.trim())}\">`;\r\n state.l = state.tag.lastIndex;\r\n }\r\n const lChunk = text.slice(state.l);\r\n if (lChunk) state.c += esc(lChunk);\r\n return state.o + (state.p ? `<span data-part=\"timed\" data-time=\"${state.p}\">${state.c}</span>` : state.c);\r\n}\r\n\r\nexport function formatVttLine(p: string, maxChars: number): string[] {\r\n const state = { tokens: p.match(/<[^>]+>|\\S+/g) || [], stack: [] as string[], parts: [] as string[], line: \"\", len: 0, openStr: \"\", closeStr: \"\", timeTag: \"\", lastWasTag: false },\r\n updateTags = () => ((state.openStr = state.stack.map((n) => `<${n}>`).join(\"\")), (state.closeStr = state.stack.reduceRight((a, n) => a + `</${n}>`, \"\"))),\r\n flush = () => state.line && (state.parts.push(state.line + state.closeStr), (state.line = (state.timeTag || \"\") + state.openStr), (state.len = 0), (state.lastWasTag = true));\r\n for (const tok of state.tokens) {\r\n const tag = tok[0] === \"<\",\r\n closeTag = tag && tok[1] === \"/\";\r\n if (tag) {\r\n if (state.line && !state.lastWasTag && !closeTag) state.line += \" \";\r\n const m = tok.match(/^<\\/?\\s*([a-z0-9._:-]+)/i),\r\n n = m?.[1] || \"\",\r\n timing = /^\\d/.test(n);\r\n if (timing) {\r\n (state.timeTag = tok), (state.line += tok), (state.lastWasTag = true);\r\n continue;\r\n }\r\n if (!closeTag && !tok.endsWith(\"/>\") && n) state.stack.push(n), updateTags();\r\n if (closeTag && state.stack.length) state.stack.pop(), updateTags();\r\n (state.lastWasTag = true), (state.line += tok);\r\n continue;\r\n }\r\n const len = stripTags(tok).length,\r\n needSpace = state.line && !state.lastWasTag;\r\n if (state.len + (needSpace ? 1 : 0) + len > maxChars) flush();\r\n if (needSpace) (state.line += \" \"), (state.len += 1);\r\n (state.line += tok), (state.len += len), (state.lastWasTag = false);\r\n }\r\n return flush(), state.parts;\r\n}\r\n","import { Controllable } from \"@core/controllable\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia, MediaFeatures, MediaStatus } from \"@defs/contract\";\r\nimport { type REvent, type Reactive, ListenerOptions } from \"sia-reactor\";\r\nimport { fanout, force } from \"sia-reactor/utils\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaStatus } from \"@utils/media\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { isNum } from \"@utils/obj\";\r\n\r\nexport interface TechConstructor<T extends BaseTech = BaseTech> {\r\n new (ctlr: Controller, features?: MediaFeatures): T;\r\n techName: string;\r\n canPlaySource(src: string): boolean;\r\n}\r\n\r\nexport abstract class BaseTech<El extends HTMLElement = HTMLElement> extends Controllable<Reactive<CtlrMedia>> {\r\n public static readonly techName: string;\r\n public static canPlaySource(_src: string): boolean {\r\n return false;\r\n }\r\n public get name() {\r\n return (this.constructor as TechConstructor).techName;\r\n }\r\n public element!: El;\r\n public get el() {\r\n return this.element;\r\n }\r\n public readonly evtOpts: { EL: AddEventListenerOptions; CONFIG: ListenerOptions } = { EL: { capture: true, signal: this.signal }, CONFIG: { capture: true, signal: this.signal } }; // \"set\" -> Avengers(Resolution lineup) assemble!;\r\n public readonly wiredFeatures: Set<keyof MediaFeatures> = new Set(); // Tracking to avoid rewiring\r\n public wired = false; // for light status checks where needed\r\n protected readonly pending = new Map<string, () => void>();\r\n protected autoChapters: boolean = false;\r\n\r\n constructor(ctlr: Controller, features: MediaFeatures = {}) {\r\n ctlr.media.tech.destroy?.(), ctlr.log(`Using ${new.target.techName} media technology.`);\r\n super(ctlr, ctlr.media);\r\n ctlr.config.mediaPlayer = \"TMG\"; // tell them! tell them!! tell them!!! ~ Kendrick Lamar\r\n this.element = ctlr.media.element as any; // must reassign if not using original\r\n for (const key of Object.keys(ctlr.media.features)) ctlr.media.features[key as keyof MediaFeatures] = false;\r\n fanout(ctlr.media.features, features); // dynamics baby!\r\n }\r\n protected override onSetup(): void {\r\n this.mount();\r\n this.ctlr.state.readyState ? this.wire() : this.ctlr.state.wonce(\"readyState\", this.wire, { signal: this.signal }); // wire after all plugs setup\r\n }\r\n protected override onDestroy(): void {\r\n this.unmount(), (this.config.status.hostReady = false);\r\n }\r\n\r\n public mount(): void {\r\n (this.el as any) !== this.config.element && this.config.element.replaceWith(this.el);\r\n }\r\n public unmount(): void {\r\n (this.el as any) !== this.config.element && this.el.replaceWith(this.config.element);\r\n }\r\n\r\n public wire(): void {\r\n // Variables Assignments\r\n (this.el as any).tmgPlayer = this.config.element.tmgPlayer; // ref is maintained if element was replaced in mount\r\n // Ctlr Media Watchers\r\n this.config.watch(\"state.currentTime\", this.onCurrentTime, this.evtOpts.CONFIG);\r\n // --------- Listeners\r\n this.config.on(\"intent\", this.handleWrite, this.evtOpts.CONFIG); // protecting everybody\r\n this.config.on(\"settings\", this.handleWrite, this.evtOpts.CONFIG);\r\n // Bulk Wiring\r\n this.wireSrc(), this.wireCurrentTime(), this.wireDuration(), this.wirePaused(), this.wireEnded(), this.wireFeatures();\r\n // Post Wiring\r\n !this.ctlr.payload.wired && this.ctlr.isNativeEl && fanout(this.config.status, getMediaStatus(this.el as any, undefined, undefined, true), { skipUndefined: true }); // incase of async init\r\n silence(() => (fanout(this.config.intent, this.config[this.ctlr.techTruth]), fanout(this.config.settings, this.config.settings))); // // over to you, child. it go touch everybodyyyyy, no fear!\r\n !this.ctlr.payload.wired && force(() => this.config.tick()); // state isn't volatile but it must touch\r\n this.wired = true;\r\n }\r\n // --- THE MANDATORY CORE 5 (Media \"Must Haves\") ---\r\n protected abstract wireSrc(): void;\r\n protected abstract wireCurrentTime(): void;\r\n protected abstract wireDuration(): void;\r\n protected abstract wirePaused(): void;\r\n protected abstract wireEnded(): void;\r\n // --- THE EXTENSIONS & WIRING ---\r\n protected wireFeatures(): void {\r\n this.media.on(\"features\", this.handleFeatures, { init: true, signal: this.signal });\r\n }\r\n protected wireFeature(feature: keyof MediaFeatures): void {\r\n !this.wiredFeatures.has(feature) && (this.wiredFeatures.add(feature), (this as any)[`wire${capitalize(feature)}`]?.());\r\n }\r\n // Track Switching Wiring\r\n protected wireCurrentChapter(): void {\r\n this.config.set(\"intent.currentChapter\", (term) => (isNum(term) ? term : this.config.settings.metadata.chapterInfo.findIndex((c) => c.title === term || c.startTime === term || c.artwork === term)), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n this.config.on(\"intent.currentChapter\", this.handleCurrentChapterIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- THE HANDLERS ---\r\n protected handleFeatures({ type, target }: REvent<CtlrMedia, \"features\">): void {\r\n if (type === \"update\") this.wireFeature(target.key);\r\n else if (type === \"init\") for (const feature of Object.keys(target.value)) this.wireFeature(feature as keyof MediaFeatures);\r\n }\r\n protected handleWrite(e: REvent<CtlrMedia, \"intent\" | \"settings\">): void {\r\n if (e.type === \"update\" && this.config.features[e.target.key as keyof MediaFeatures] === false && e.value) return e.reject(this.name), e.stopImmediatePropagation(); // falsy values pass so that they can turn off but not on\r\n }\r\n protected handleCurrentChapterIntent(e: REvent<CtlrMedia, \"intent.currentChapter\">): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedMetadata\", e, (chapter = this.config.settings.metadata.chapterInfo[e.value as number]) => chapter && (this.media.intent.currentTime = chapter.startTime)); // #VALIDATED: mediated for cast conformity; no-opy // #FACADED: silenced intent actual op\r\n e.resolve(this.name);\r\n }\r\n // Dog Feeders\r\n protected onCurrentTime(v: number): void {\r\n if (!this.autoChapters) return;\r\n const chapters = this.config.settings.metadata.chapterInfo;\r\n if (chapters?.length) for (let len = chapters.length, i = len - 1; i >= 0; i--) if (v >= chapters[i].startTime) return void (this.config.state.currentChapter = i);\r\n this.media.state.currentChapter = -1;\r\n }\r\n // --- THE HELPERS ---\r\n public when<Evt extends REvent<CtlrMedia>>(status: keyof MediaStatus, e: Evt, task: () => void, always = true, _key = status + e.path, _value = !always && !(this.ctlr.state.readyState < 3) ? true : this.config.status[status], _log = !this.config.status[status]): void {\r\n const callback = this.ctlr.guard((v: any, __: any, late = true) => v && (late && this.pending.get(_key)?.(), this.pending.delete(_key), task(), _log && console.log(`Pending task for ${status} ${e.path} executed with ${e.value}.`, this.config.status[status], this.ctlr.payload.readyState)));\r\n this.pending.get(_key)?.(), _value ? callback(_value, null, false) : this.pending.set(_key, this.config.watch(`status.${status}`, callback, { signal: this.signal }));\r\n } // #PATIENT: only after first play (`always`)\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaStatus {\r\n hostReady: boolean;\r\n }\r\n}\r\n","/*\r\n * Portions of this code are derived from react-player\r\n * https://github.com/cookpete/react-player\r\n * Licensed under the MIT License\r\n * Copyright (c) 2017 Pete Cook\r\n */\r\n\r\n// ===========================================================================\r\n// MEDIA EXTENSION MATCHERS\r\n// ===========================================================================\r\nexport const AUDIO_EXTENSIONS = /\\.(m4a|m4b|mp4a|mpga|mp2|mp2a|mp3|m2a|m3a|wav|weba|aac|oga|spx|flac|wma|opus|midi?)($|\\?)/i;\r\nexport const VIDEO_EXTENSIONS = /\\.(mp4|mkv|avi|mov|webm|mpg|mpeg|og[gv]|m4v|flv|wmv|3gp|3g2|ts)(#t=[,\\d+]+)?($|\\?)/i;\r\nexport const HLS_EXTENSIONS = /\\.(m3u8)($|\\?)/i;\r\nexport const DASH_EXTENSIONS = /\\.(mpd)($|\\?)/i;\r\n\r\n// ===========================================================================\r\n// PLATFORM URL MATCHERS\r\n// ===========================================================================\r\n\r\n/** Match Mux m3u8 URLs without the extension so users can use hls.js with Mux */\r\nexport const MATCH_URL_MUX = /stream\\.mux\\.com\\/(?!\\w+\\.m3u8)(\\w+)/;\r\n\r\n/** Matches YouTube watch, embed, shorts, live, and nocookie URLs */\r\nexport const MATCH_URL_YOUTUBE = /(?:youtu\\.be\\/|youtube(?:-nocookie|education)?\\.com\\/(?:embed\\/|v\\/|watch\\/|watch\\?v=|watch\\?.+&v=|shorts\\/|live\\/))((\\w|-){11})|youtube\\.com\\/playlist\\?list=|youtube\\.com\\/user\\//;\r\n\r\n/** Matches Vimeo URLs, explicitly ignoring their progressive redirect links */\r\nexport const MATCH_URL_VIMEO = /vimeo\\.com\\/(?!progressive_redirect).+/;\r\n\r\n/** Matches Wistia embeds and medias */\r\nexport const MATCH_URL_WISTIA = /(?:wistia\\.(?:com|net)|wi\\.st)\\/(?:medias|embed)\\/(?:iframe\\/)?([^?]+)/;\r\n\r\n/** Matches Spotify open links */\r\nexport const MATCH_URL_SPOTIFY = /open\\.spotify\\.com\\/(\\w+)\\/(\\w+)/i;\r\n\r\n/** Matches Twitch streams and VODs */\r\nexport const MATCH_URL_TWITCH = /(?:www\\.|go\\.)?twitch\\.tv\\/([a-zA-Z0-9_]+|(videos?\\/|\\?video=)\\d+)($|\\?)/;\r\n\r\n/** Matches TikTok video and share links */\r\nexport const MATCH_URL_TIKTOK = /tiktok\\.com\\/(?:player\\/v1\\/|share\\/video\\/|@[^/]+\\/video\\/)([0-9]+)/;\r\n\r\n// ===========================================================================\r\n// MIME TYPE DICTIONARY\r\n// ===========================================================================\r\n// prettier-ignore\r\nexport const mimeTypes: Record<string, string> = {\r\n // Video formats\r\n avi: \"video/x-msvideo\", mp4: \"video/mp4\", mkv: \"video/x-matroska\", mov: \"video/quicktime\", \r\n flv: \"video/x-flv\", webm: \"video/webm\", ogg: \"video/ogg\", ogv: \"video/ogg\", wmv: \"video/x-ms-wmv\", \r\n \"3gp\": \"video/3gpp\", \"3g2\": \"video/3gpp2\", mpeg: \"video/mpeg\", mpg: \"video/mpeg\", \r\n ts: \"video/mp2t\", m4v: \"video/x-m4v\", m3u8: \"application/vnd.apple.mpegurl\", mpd: \"application/dash+xml\",\r\n // Audio formats\r\n mp3: \"audio/mpeg\", wav: \"audio/wav\", oga: \"audio/ogg\", flac: \"audio/flac\", aac: \"audio/aac\", \r\n m4a: \"audio/mp4\", m4b: \"audio/mp4\", mp4a: \"audio/mp4\", wma: \"audio/x-ms-wma\", opus: \"audio/opus\", \r\n mid: \"audio/midi\", midi: \"audio/midi\", mpga: \"audio/mpeg\", mp2: \"audio/mpeg\", mp2a: \"audio/mpeg\", \r\n m2a: \"audio/mpeg\", m3a: \"audio/mpeg\", weba: \"audio/webm\", spx: \"audio/ogg\",\r\n // Image formats\r\n jpg: \"image/jpeg\", jpeg: \"image/jpeg\", png: \"image/png\", webp: \"image/webp\", gif: \"image/gif\", \r\n bmp: \"image/bmp\", svg: \"image/svg+xml\", tif: \"image/tiff\", tiff: \"image/tiff\", avif: \"image/avif\", \r\n ico: \"image/x-icon\", heic: \"image/heic\", heif: \"image/heif\",\r\n // Document formats\r\n pdf: \"application/pdf\", txt: \"text/plain\", md: \"text/markdown\", csv: \"text/csv\", \r\n json: \"application/json\", xml: \"application/xml\", html: \"text/html\", doc: \"application/msword\", \r\n docx: \"application/vnd.openxmlformats-officedocument.wordprocessingml.document\", \r\n xls: \"application/vnd.ms-excel\", xlsx: \"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet\", \r\n ppt: \"application/vnd.ms-powerpoint\", pptx: \"application/vnd.openxmlformats-officedocument.presentationml.presentation\", \r\n zip: \"application/zip\", rar: \"application/vnd.rar\", \"7z\": \"application/x-7z-compressed\",\r\n};\r\n","/*\r\n * Portions of this code are derived from Video.js\r\n * https://github.com/videojs/video.js\r\n * Licensed under Apache License 2.0\r\n * Copyright (c) Brightcove, Inc. and contributors\r\n */\r\n\r\n// Types\r\ntype Version = string | null;\r\ntype BrandEntry = { brand?: string; version?: string };\r\n\r\n// Environment guards\r\nconst win = \"undefined\" !== typeof window ? window : undefined,\r\n nav = win?.navigator,\r\n ua = nav?.userAgent || \"\",\r\n uaData = (nav as Navigator & { userAgentData?: { platform?: string; brands?: BrandEntry[] } })?.userAgentData;\r\n\r\n// Base flags: bools first, versions second for readability\r\nexport let IS_ANDROID = false;\r\nexport let IS_WINDOWS = false;\r\nexport let IS_FIREFOX = false;\r\nexport let IS_EDGE = false;\r\nexport let IS_CHROME = false;\r\nexport let IS_CHROMIUM = false;\r\nexport let IS_SAFARI = false;\r\nexport let IS_IE = false;\r\nexport let IS_TIZEN = false;\r\nexport let IS_WEBOS = false;\r\nexport let IS_IPOD = false;\r\nexport let IS_IPAD = false;\r\nexport let IS_IPHONE = false;\r\n// Versioned details\r\nexport let IOS_VERSION: Version = null;\r\nexport let ANDROID_VERSION: Version = null;\r\nexport let CHROME_VERSION: Version = null;\r\nexport let CHROMIUM_VERSION: Version = null;\r\nexport let IE_VERSION: Version = null;\r\n// Composite Flags\r\nexport let IS_IOS = false;\r\nexport let IS_MOBILE = false;\r\nexport let IS_SMART_TV = false;\r\n// Capabilities\r\nexport const IS_CHROMECAST_RECEIVER = Boolean((win as any)?.cast?.framework?.CastReceiverContext);\r\nexport const MSE_ENABLED = Boolean(win && (\"MediaSource\" in win || \"webkitMediaSource\" in win));\r\nexport const TOUCH_ENABLED = Boolean(win && (\"ontouchstart\" in win || (nav as Navigator & { maxTouchPoints?: number })?.maxTouchPoints || ((win as any).DocumentTouch && win.document instanceof (win as any).DocumentTouch)));\r\n// Media Queries\r\nexport const queryMediaMobile = (query = `(max-width: 480px), (max-width: 940px) and (max-height: 480px) and (orientation: landscape)`) => Boolean(win && \"matchMedia\" in win && win.matchMedia(query).matches);\r\n\r\n// Modern detection first (userAgentData)\r\nif (uaData?.platform && uaData?.brands) {\r\n // Helpers\r\n const pickVersion = (brands: BrandEntry[], needle: string): Version => brands.find((b) => b.brand === needle && b.version)?.version || null;\r\n // Platform first\r\n IS_ANDROID = uaData.platform === \"Android\";\r\n IS_WINDOWS = uaData.platform === \"Windows\";\r\n // Browser family\r\n IS_EDGE = uaData.brands.some((b) => b.brand === \"Microsoft Edge\");\r\n IS_CHROMIUM = uaData.brands.some((b) => b.brand === \"Chromium\" || b.brand === \"Google Chrome\");\r\n IS_CHROME = IS_CHROMIUM && !IS_EDGE;\r\n // Versions\r\n CHROMIUM_VERSION = CHROME_VERSION = pickVersion(uaData.brands, \"Chromium\") || pickVersion(uaData.brands, \"Google Chrome\");\r\n}\r\n\r\n// Fallback / additional parsing via UA string\r\nif (true || !IS_CHROMIUM || !CHROMIUM_VERSION) {\r\n // General Platforms\r\n IS_ANDROID ||= /Android/i.test(ua);\r\n IS_WINDOWS ||= /Windows/i.test(ua);\r\n // Desktop & general browsers (include iOS-branded variants)\r\n IS_FIREFOX = /Firefox|FxiOS/i.test(ua);\r\n IS_EDGE ||= /Edg|EdgiOS/i.test(ua);\r\n IS_CHROMIUM ||= /Chrome|CriOS/i.test(ua);\r\n IS_CHROME = IS_CHROMIUM && !IS_EDGE;\r\n IS_SAFARI = /Safari/i.test(ua) && !IS_CHROME && !IS_FIREFOX && !IS_EDGE;\r\n IS_IE = /MSIE|(Trident\\/7.0)|(rv:11.0)/i.test(ua);\r\n // TVs\r\n IS_TIZEN = /Tizen/i.test(ua);\r\n IS_WEBOS = /Web0S/i.test(ua);\r\n // Apple desktop/mobile device refinement\r\n IS_IPOD = /iPod/i.test(ua);\r\n IS_IPAD = /iPad/i.test(ua) || (IS_SAFARI && TOUCH_ENABLED && !/iPhone/i.test(ua));\r\n IS_IPHONE = /iPhone/i.test(ua) && !IS_IPAD;\r\n // Versions\r\n IOS_VERSION = ua.match(/OS (\\d+)_/i)?.[1] ?? null;\r\n ANDROID_VERSION = ua.match(/Android\\s(\\d+(?:\\.\\d+)+)/i)?.[1] ?? null;\r\n CHROMIUM_VERSION = CHROME_VERSION = ua.match(/(?:Chrome|CriOS)\\/(\\d+)/)?.[1] ?? CHROMIUM_VERSION;\r\n IE_VERSION = ua.match(/MSIE\\s(\\d+)\\.\\d/)?.[1] || (/Trident\\/7.0/i.test(ua) && /rv:11.0/.test(ua) ? \"11.0\" : null);\r\n} // `true` override for devtools predictability\r\n\r\n// Composite Flags\r\nIS_IOS = IS_IPHONE || IS_IPAD || IS_IPOD;\r\nIS_MOBILE = Boolean(IS_ANDROID || IS_IPHONE || IS_IPOD || IS_IPAD);\r\nIS_SMART_TV = IS_TIZEN || IS_WEBOS;\r\n","import { AptRange } from \"@defs/generics\";\r\nimport { isNum, clamp } from \"@t007/utils\";\r\n\r\n// Validators\r\nexport { clamp };\r\n\r\nexport function isSafeNum(val: any): boolean {\r\n return isNum(val) && !isNaN(val ?? NaN) && val !== Infinity;\r\n}\r\n\r\nexport function safeNum(number: any, fallback = 0): number {\r\n return isSafeNum(number) ? number : fallback;\r\n}\r\n\r\n// Parsers\r\nexport function parseIfPercent(percent: any, amount: any, autocap = 0.25): number {\r\n const val = percent?.endsWith?.(\"%\") ? safeNum((parseFloat(percent) / 100) * amount) : percent;\r\n return val && amount && autocap && amount <= val ? amount * autocap : val;\r\n}\r\n\r\nexport function parseRomanNum(roman: string, valid = /^[IVXLCDM]+$/i.test(roman), ROMAN = { I: 1, V: 5, X: 10, L: 50, C: 100, D: 500, M: 1000 } as Record<string, number>): number {\r\n if (!valid) return 0; // ← Invalid input\r\n return roman\r\n .toUpperCase() // Ensure consistent uppercase (e.g., 'iv' becomes 'IV')\r\n .split(\"\") // Turn into array of characters: 'XIV' → ['X','I','V']\r\n .reduce((acc, val, i, arr) => {\r\n const curr = ROMAN[val] || 0, // Current character's value\r\n next = ROMAN[arr[i + 1]] || 0; // Look ahead to the next character (if any)\r\n return acc + (curr < next ? -curr : curr); // Subtractive notation: if current is less than next (e.g., I before V → 4); Otherwise, just add normally\r\n }, 0); // Start accumulator at 0\r\n}\r\n\r\n// Helpers\r\nexport function stepNum<T extends AptRange>(v = 0, { min, max, step }: T): number {\r\n const s = step ? Math.round((safeNum(v) - (min || 0)) / step) * step + (min || 0) : safeNum(v);\r\n return clamp(min, +s.toFixed(10), max); // no gymnastics, for sliders only; to reach near native speed\r\n}\r\n\r\nconst _stepsCache = new Map<string, number[]>();\r\nexport function rotateAny<T>(cur: T, steps: T[] | readonly T[], dir?: \"forwards\" | \"backwards\", wrap?: boolean): T;\r\nexport function rotateAny(cur: number, steps: AptRange, dir?: \"forwards\" | \"backwards\", wrap?: boolean): number;\r\nexport function rotateAny(cur: any, steps: any, dir: \"forwards\" | \"backwards\" = \"forwards\", wrap = true): any {\r\n let list: any[];\r\n if (Array.isArray(steps)) list = steps;\r\n else {\r\n const key = `${steps.min}|${steps.max}|${steps.step}`; // Generate cache key from min|max|step\r\n if (_stepsCache.has(key)) list = _stepsCache.get(key)!;\r\n else _stepsCache.set(key, (list = Array.from({ length: Math.floor((steps.max - steps.min) / steps.step) + 1 }, (_, i) => steps.min + i * steps.step)));\r\n }\r\n let idx = isNum(cur) ? list.reduce((p, c, x) => (Math.abs(c - cur) < Math.abs(list[p] - cur) ? x : p), 0) : list.indexOf(cur);\r\n idx = idx + (dir === \"forwards\" ? 1 : -1);\r\n return list[wrap ? (idx + list.length) % list.length : clamp(0, idx, list.length - 1)];\r\n}\r\n","import { BaseTech } from \"./base\";\r\nimport { type REvent, type Paths, inert } from \"sia-reactor\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia, MediaIntent, MediaFeatures } from \"@defs/contract\";\r\nimport type { Source, Track } from \"@defs/generics\";\r\nimport { AUDIO_EXTENSIONS, HLS_EXTENSIONS, VIDEO_EXTENSIONS } from \"@utils/match\";\r\nimport { MSE_ENABLED } from \"@utils/env\";\r\nimport { isStr } from \"@utils/obj\";\r\nimport type { TrackType } from \"@utils/media\";\r\nimport { enterFullscreen, exitFullscreen, queryFullscreenEl, supportsFullscreen, supportsPictureInPicture } from \"@utils/dom\";\r\nimport { observeMutation, createListRenderer as renderList } from \"@utils/dom\";\r\nimport { getTrackIdx, setCurrentTrack, canUseVolume, canMuteVolume, canUseRate, canTextTracks, canVideoTracks, canAudioTracks, getSources, getTracks, isSameSources, isSameTracks, DUMMY_VID, getMediaMax, getMediaMin } from \"@utils/media\";\r\nimport { isSameURL, cleanURL } from \"@utils/str\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { assignEl, createEl, force } from \"sia-reactor/utils\";\r\n\r\nexport class HTML5Tech extends BaseTech<HTMLMediaElement> {\r\n public static readonly techName: string = \"html5\";\r\n public static override canPlaySource(src: string): boolean {\r\n return VIDEO_EXTENSIONS.test(src) || AUDIO_EXTENSIONS.test(src) || !!(!MSE_ENABLED && DUMMY_VID.canPlayType(\"application/vnd.apple.mpegurl\") && HLS_EXTENSIONS.test(src)); // Safari has native HLS support, but only if MSE is not available (iOS)\r\n }\r\n protected strictTracks: boolean = false;\r\n constructor(ctlr: Controller, features?: MediaFeatures) {\r\n // prettier-ignore\r\n const isAudio = ctlr.media.type === \"audio\", canTxtTrack = canTextTracks(ctlr.media.type), canVidTrack = !isAudio && canVideoTracks(ctlr.media.type), canAudTrack = canAudioTracks(ctlr.media.type);\r\n // prettier-ignore\r\n super(ctlr, {\r\n // Kinda Core\r\n volume: canUseVolume(ctlr.media.type), muted: canMuteVolume(ctlr.media.type), playbackRate: canUseRate(ctlr.media.type),\r\n // Modes\r\n pictureInPicture: !isAudio && supportsPictureInPicture() && !ctlr.media.state.disablePictureInPicture, fullscreen: !isAudio && supportsFullscreen(),\r\n // Markup & States\r\n poster: !isAudio, autoplay: true, loop: true, playsInline: !isAudio, preload: true, crossOrigin: true, \r\n controls: true, controlsList: true, disablePictureInPicture: true, sources: true, tracks: true, live: false,\r\n // Lists\r\n textTracks: canTxtTrack, videoTracks: !isAudio && canVidTrack, audioTracks: canAudTrack,\r\n // Currents\r\n currentChapter: canTxtTrack, currentTextTrack: canTxtTrack, currentVideoTrack: canVidTrack, currentAudioTrack: canAudTrack, textVisible: canTxtTrack, activeCue: canTxtTrack,\r\n // Infos\r\n readyState: true, networkState: true, error: true, waiting: true, stalled: true,\r\n seeking: true, buffered: true, played: true, seekable: true, videoWidth: !isAudio, videoHeight: !isAudio, \r\n loadedMetadata: true, loadedData: true, canPlay: true, canPlayThrough: true, isLive: true, canSeekLive: true,\r\n // Settings\r\n defaultMuted: true, defaultPlaybackRate: true, srcObject: true, metadata: canTxtTrack, liveTolerance: true, minDVRWindow: true, ...features,\r\n });\r\n ctlr.media.status.hostReady = true; // always active!\r\n }\r\n // ===========================================================================\r\n // WIRING (Connections Only)\r\n // ===========================================================================\r\n // --- Core Wiring ---\r\n protected override wireSrc(): void {\r\n this.el.addEventListener(\"loadstart\", this.setLoadStartInfo, this.evtOpts.EL);\r\n this.config.on(\"intent.src\", this.handleSrcIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireCurrentTime(): void {\r\n this.el.addEventListener(\"timeupdate\", this.setTimeUpdateState, this.evtOpts.EL);\r\n this.el.addEventListener(\"seeking\", this.setSeekingState, this.evtOpts.EL);\r\n this.el.addEventListener(\"seeked\", this.setSeekedState, this.evtOpts.EL);\r\n this.config.get(\"state.currentTime\", () => this.el.currentTime, { signal: this.signal }); // #VIRTUAL: reliable return value, for those faster than the spec\r\n this.config.on(\"intent.currentTime\", this.handleCurrentTimeIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireDuration(): void {\r\n this.el.addEventListener(\"durationchange\", this.setDurationChangeState, this.evtOpts.EL);\r\n }\r\n protected override wirePaused(): void {\r\n this.el.addEventListener(\"play\", this.setPlayState, this.evtOpts.EL);\r\n this.el.addEventListener(\"pause\", this.setPauseState, this.evtOpts.EL);\r\n this.config.on(\"intent.paused\", this.handlePausedIntent, this.evtOpts.CONFIG);\r\n }\r\n protected override wireEnded(): void {\r\n this.el.addEventListener(\"ended\", this.setEndedState, this.evtOpts.EL);\r\n }\r\n // --- Features Wiring ---\r\n protected override wireFeatures(): void {\r\n super.wireFeatures(); // Calls individual feature wires (volume, etc.) above\r\n this.wireHTMLState(); // Attributes Reverse-Sync (Mutation Observer)\r\n // Status (Bulk wiring)\r\n const loadEvents = [\"loadstart\", \"progress\", \"suspend\", \"abort\", \"emptied\", \"stalled\"];\r\n for (const e of loadEvents) this.el.addEventListener(e, this.handleLoadStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"error\", this.handleErrorStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"waiting\", this.handleWaitingStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"playing\", this.handlePlayingStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"stalled\", this.handleStalledStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"loadedmetadata\", this.handleLoadedMetadataStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"loadeddata\", this.handleLoadedDataStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"canplay\", this.handleCanPlayStatus, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"canplaythrough\", this.handleCanPlayThroughStatus, this.evtOpts.CONFIG);\r\n }\r\n // --- Engine Inputs Wiring ---\r\n protected wireVolume(): void {\r\n this.el.addEventListener(\"volumechange\", this.setVolumeChangeState, this.evtOpts.EL);\r\n this.config.on(\"intent.volume\", this.handleVolumeIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireMuted(): void {\r\n // Native 'volumechange' handles state update\r\n this.config.on(\"intent.muted\", this.handleMutedIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wirePlaybackRate(): void {\r\n this.el.addEventListener(\"ratechange\", this.setRateChangeState, this.evtOpts.EL);\r\n this.config.on(\"intent.playbackRate\", this.handlePlaybackRateIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Presentation Modes Wiring ---\r\n protected wirePictureInPicture(): void {\r\n this.el.addEventListener(\"enterpictureinpicture\", this.setEnterPiPState, this.evtOpts.EL);\r\n this.el.addEventListener(\"leavepictureinpicture\", this.setLeavePiPState, this.evtOpts.EL);\r\n this.config.on(\"intent.pictureInPicture\", this.handlePictureInPictureIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireFullscreen(): void {\r\n this.el.addEventListener(\"webkitbeginfullscreen\", this.setWebkitBeginFullscreenState, this.evtOpts.CONFIG);\r\n this.el.addEventListener(\"webkitendfullscreen\", this.setWebkitEndFullscreenState, this.evtOpts.CONFIG);\r\n this.ctlr.state.watch(\"docInFullscreen\", this.setFullscreenChangeState, this.evtOpts.CONFIG);\r\n this.config.on(\"intent.fullscreen\", this.handleFullscreenIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Track Switching Wiring ---\r\n protected wireCurrentTrack(type: TrackType): void {\r\n this.config.set(`intent.current${type}Track`, (term) => getTrackIdx(this.el, type, term, this.config.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`]), { signal: this.signal }); // #VALIDATOR: intent type conformation\r\n (this.el as any)[`${type.toLowerCase()}Tracks`]?.addEventListener(\"change\", () => this.setCurrentTrackState(type), this.evtOpts.CONFIG);\r\n this.config.on(`intent.current${type}Track`, (e) => this.handleCurrentTrackIntent(e, type), this.evtOpts.CONFIG);\r\n }\r\n protected wireCurrentTextTrack(): void {\r\n this.wireCurrentTrack(\"Text\");\r\n }\r\n protected wireCurrentAudioTrack(): void {\r\n this.wireCurrentTrack(\"Audio\");\r\n }\r\n protected wireCurrentVideoTrack(): void {\r\n this.wireCurrentTrack(\"Video\");\r\n }\r\n protected wireTextVisible(): void {\r\n this.config.on(\"intent.textVisible\", this.handleTextVisibleIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- HTML (Bulk Wiring) ---\r\n protected wireHTMLState(): void {\r\n observeMutation(this.el, this.setHTMLStateFromMutation, { attributes: true, childList: true, subtree: false }, this.signal);\r\n }\r\n // --- Attribute Wiring ---\r\n protected bindAttribute<K extends keyof MediaIntent>(key: K, isBool = false): void {\r\n this.config.on(`intent.${key}` as Paths<CtlrMedia>, (e) => this.handleAttributeIntent(e, key, isBool), this.evtOpts.CONFIG); // non-casted union reached peak ts complexity :)\r\n }\r\n protected wirePoster(): void {\r\n this.bindAttribute(\"poster\");\r\n }\r\n protected wireAutoplay(): void {\r\n this.bindAttribute(\"autoplay\", true);\r\n }\r\n protected wireLoop(): void {\r\n this.bindAttribute(\"loop\", true);\r\n }\r\n protected wirePreload(): void {\r\n this.bindAttribute(\"preload\");\r\n }\r\n protected wirePlaysInline(): void {\r\n this.bindAttribute(\"playsInline\", true);\r\n }\r\n protected wireCrossOrigin(): void {\r\n this.bindAttribute(\"crossOrigin\");\r\n }\r\n protected wireControls(): void {\r\n this.bindAttribute(\"controls\", true);\r\n }\r\n protected wireControlsList(): void {\r\n this.bindAttribute(\"controlsList\");\r\n }\r\n protected wireDisablePictureInPicture(): void {\r\n this.bindAttribute(\"disablePictureInPicture\", true);\r\n this.config.watch(\"state.disablePictureInPicture\", this.onDisablePiPState);\r\n }\r\n // --- Lists Wiring ---\r\n protected wireSources(): void {\r\n this.config.on(\"intent.sources\", this.handleSourcesIntent, this.evtOpts.CONFIG);\r\n }\r\n protected wireTracks(): void {\r\n this.config.on(\"intent.tracks\", this.handleTracksIntent, this.evtOpts.CONFIG);\r\n }\r\n // --- Status Tracks Wiring ---\r\n protected wireMediaTracks(type: TrackType, list = (this.el as any)[`${type.toLowerCase()}Tracks`]): void {\r\n if (list) for (const e of [\"addtrack\", \"removetrack\"]) list.addEventListener(e, () => this.handleTracksStatus(type, list), this.evtOpts.CONFIG);\r\n if (list) this.handleTracksStatus(type, list, true);\r\n }\r\n protected wireTextTracks(): void {\r\n this.wireMediaTracks(\"Text\");\r\n }\r\n protected wireAudioTracks(): void {\r\n this.wireMediaTracks(\"Audio\");\r\n }\r\n protected wireVideoTracks(): void {\r\n this.wireMediaTracks(\"Video\");\r\n }\r\n // --- Active Cue Wiring ---\r\n protected textTrack: TextTrack | null = null;\r\n protected wireActiveCue(): void {\r\n const onChange = () => {\r\n const track = this.media.status.textTracks[!this.strictTracks ? this.config.state.currentTextTrack : getTrackIdx(this.el, \"Text\", this.config.status.textTracks[this.config.state.currentTextTrack]?.id, this.config.status.textTracks)];\r\n if (this.textTrack && this.textTrack !== track) this.textTrack.removeEventListener(\"cuechange\", this.handleActiveCueChange, this.evtOpts.EL);\r\n (this.textTrack = track)?.addEventListener(\"cuechange\", this.handleActiveCueChange, this.evtOpts.EL), this.handleActiveCueChange({ target: track });\r\n };\r\n this.config.on(\"state.currentTextTrack\", onChange, this.evtOpts.CONFIG), this.config.on(\"status.textTracks\", onChange, this.evtOpts.CONFIG);\r\n }\r\n protected chapterTrack: TextTrack | null = null;\r\n protected wireChapterCue(track: TextTrack): void {\r\n if (this.chapterTrack && this.chapterTrack !== track) this.chapterTrack.removeEventListener(\"cuechange\", this.handleChapterCueChange, this.evtOpts.EL);\r\n (this.chapterTrack = track).addEventListener(\"cuechange\", this.handleChapterCueChange, this.evtOpts.EL), this.handleChapterCueChange({ target: track });\r\n }\r\n // --- Live Content Wiring ---\r\n protected wireLive(): void {\r\n this.config.on(\"intent.live\", this.handleLiveIntent, this.evtOpts.CONFIG);\r\n this.config.watch(\"status.isLive\", this.onIsLiveStatus, this.evtOpts.CONFIG);\r\n }\r\n // --- Settings Wiring ---\r\n protected wireDefaultMuted(): void {\r\n this.config.on(\"settings.defaultMuted\", this.handleDefaultMutedSetting, this.evtOpts.CONFIG);\r\n }\r\n protected wireDefaultPlaybackRate(): void {\r\n this.config.on(\"settings.defaultPlaybackRate\", this.handleDefaultPlaybackRateSetting, this.evtOpts.CONFIG);\r\n }\r\n protected wireSrcObject(): void {\r\n this.config.on(\"settings.srcObject\", this.handleSrcObjectSetting, this.evtOpts.CONFIG);\r\n }\r\n // ===========================================================================\r\n // HANDLERS (The Logic - Auto-Guarded)\r\n // ===========================================================================\r\n // --- Core States ---\r\n protected setLoadStartInfo(): void {\r\n const { state: s, status: st } = this.config;\r\n st.error = st.activeCue = null;\r\n force(() => ((st.buffered = this.el.buffered), (st.seekable = this.el.seekable)));\r\n st.duration = this.el.duration;\r\n s.paused = this.el.paused;\r\n st.ended = st.stalled = st.loadedData = st.loadedMetadata = st.canPlay = st.canPlayThrough = false;\r\n }\r\n protected setTimeUpdateState(): void {\r\n const { status: st, settings: set, state: s } = this.config;\r\n s.currentTime = this.el.currentTime;\r\n if (st.isLive)\r\n if (st.seekable.length) {\r\n const max = st.seekable.end(st.seekable.length - 1);\r\n st.canSeekLive = max - st.seekable.start(0) >= set.minDVRWindow;\r\n s.live = max - s.currentTime <= set.liveTolerance;\r\n } else s.live = !(st.canSeekLive = false);\r\n else this.config.status.ended = this.el.currentTime === this.el.duration; // UX boost\r\n }\r\n protected setSeekingState(): void {\r\n this.config.status.seeking = true;\r\n force(() => (this.config.status.played = this.el.played));\r\n }\r\n protected setSeekedState(): void {\r\n this.config.status.seeking = false;\r\n }\r\n private durationSeq = 0;\r\n private durationSrc = \"\";\r\n protected setDurationChangeState(): void {\r\n if (this.el.currentSrc !== this.durationSrc) (this.durationSeq = 0), (this.durationSrc = this.el.currentSrc);\r\n const prev = this.config.status.duration;\r\n if ((this.config.status.duration = this.el.duration) === Infinity) return void (this.config.status.isLive = true);\r\n prev === Infinity ? (this.config.status.isLive = false) : prev > 0 && this.el.duration > prev && ++this.durationSeq > 3 && (this.config.status.isLive = true); // UX boost\r\n }\r\n protected setPlayState(): void {\r\n this.config.status.ended = this.config.state.paused = false;\r\n }\r\n protected setPauseState(): void {\r\n this.config.state.paused = true;\r\n force(() => (this.config.status.played = this.el.played));\r\n this.config.status.waiting = false; // UX boost\r\n }\r\n protected setEndedState(): void {\r\n this.config.status.ended = this.config.state.paused = true;\r\n }\r\n // --- Core Intents ---\r\n protected handleSrcIntent(e: REvent<CtlrMedia, \"intent.src\">): void {\r\n if (e.resolved || (this.wired && isSameURL(this.el.currentSrc, e.value))) return;\r\n this.el.src = e.value;\r\n e.resolve(this.name);\r\n }\r\n protected handleCurrentTimeIntent(e: REvent<CtlrMedia, \"intent.currentTime\">): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedData\", e, (min = getMediaMin(this.config), max = getMediaMax(this.config)) => {\r\n if (e.value < min! || e.value > max!) e.reject(this.name); // Out of bounds\r\n this.el.currentTime = clamp(min, e.value, max);\r\n }); // tested nd trusted status due to reactive dynamics\r\n e.resolve(this.name);\r\n }\r\n protected handlePausedIntent(e: REvent<CtlrMedia, \"intent.paused\">): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedMetadata\", e, () => (e.value ? this.el.pause() : this.el.play())?.catch?.((e) => this.ctlr.log(e, \"error\", true)), false); // #EYE-SERVICE: hinged only on init\r\n e.resolve(this.name);\r\n }\r\n // --- Feature States ---\r\n protected setVolumeChangeState(): void {\r\n this.config.state.volume = this.el.volume * 100;\r\n this.config.state.muted = this.el.muted;\r\n }\r\n protected setRateChangeState(): void {\r\n this.config.state.playbackRate = this.el.playbackRate;\r\n }\r\n protected setEnterPiPState(): void {\r\n this.config.state.pictureInPicture = true;\r\n }\r\n protected setLeavePiPState(): void {\r\n this.config.state.pictureInPicture = false;\r\n }\r\n protected setFullscreenChangeState(docInFs?: boolean): void {\r\n this.config.state.fullscreen = docInFs ? queryFullscreenEl() === this.el : false;\r\n }\r\n protected setWebkitBeginFullscreenState(): void {\r\n this.config.state.fullscreen = true;\r\n }\r\n protected setWebkitEndFullscreenState(): void {\r\n this.config.state.fullscreen = false;\r\n }\r\n protected setCurrentTrackState(type: TrackType, list = this.media.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`]): void {\r\n this.config.state[`current${type}Track`] = getTrackIdx(this.el, type, \"active\", list);\r\n }\r\n protected setHTMLStateFromMutation(mutations: MutationRecord[]): void {\r\n for (const m of mutations) {\r\n const { state, settings } = this.config; // Reverse Bind: DOM -> State\r\n if (m.type === \"childList\") {\r\n const nodes = [...m.addedNodes, ...m.removedNodes];\r\n if (nodes.some(({ nodeName: nm }) => nm === \"SOURCE\")) state.sources = inert(getSources(this.el));\r\n if (nodes.some(({ nodeName: nm }) => nm === \"TRACK\")) state.tracks = inert(getTracks(this.el));\r\n } else if (m.type !== \"attributes\" || !m.attributeName) return;\r\n switch (m.attributeName) {\r\n case \"poster\":\r\n return void (state.poster = (this.el as HTMLVideoElement).poster);\r\n case \"autoplay\":\r\n return void (state.autoplay = this.el.autoplay);\r\n case \"loop\":\r\n return void (state.loop = this.el.loop);\r\n case \"preload\":\r\n return void (state.preload = this.el.preload);\r\n case \"crossorigin\":\r\n return void (state.crossOrigin = this.el.crossOrigin);\r\n case \"controls\":\r\n return void (state.controls = this.el.controls);\r\n case \"playsinline\":\r\n case \"webkit-playsinline\":\r\n return void (state.playsInline = this.el.playsInline);\r\n case \"controlslist\":\r\n return void (state.controlsList = this.el.controlsList ?? this.el.getAttribute(m.attributeName));\r\n case \"disablepictureinpicture\":\r\n return void (state.disablePictureInPicture = this.el.disablePictureInPicture ?? this.el.hasAttribute(m.attributeName));\r\n case \"muted\":\r\n return void ((state.muted = this.el.muted), (settings.defaultMuted = this.el.defaultMuted));\r\n }\r\n } // Mutations report before Queued MicroTasks so double \"state.*\" sets is safely batched for `on` listeners :)\r\n }\r\n // --- Feature Intents ---\r\n protected handleVolumeIntent(e: REvent<CtlrMedia, \"intent.volume\">): void {\r\n if (e.resolved) return;\r\n if (e.value < 0 || e.value > 100) e.reject(this.name); // Out of bounds\r\n this.el.volume = clamp(0, e.value / 100, 1);\r\n e.resolve(this.name);\r\n }\r\n protected handleMutedIntent(e: REvent<CtlrMedia, \"intent.muted\">): void {\r\n if (e.resolved) return;\r\n this.el.muted = e.value;\r\n e.resolve(this.name);\r\n }\r\n protected handlePlaybackRateIntent(e: REvent<CtlrMedia, \"intent.playbackRate\">): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedMetadata\", e, () => (this.el.playbackRate = e.value));\r\n e.resolve(this.name);\r\n }\r\n protected handlePictureInPictureIntent(e: REvent<CtlrMedia, \"intent.pictureInPicture\">): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedMetadata\", e, () => (e.value ? (this.el as HTMLVideoElement).requestPictureInPicture()?.catch(this.ctlr.notice) : document.pictureInPictureElement === this.el && document.exitPictureInPicture()?.catch(this.ctlr.notice)), true); // #EYE-SERVICE: hinged only on init\r\n e.resolve(this.name);\r\n }\r\n protected handleFullscreenIntent(e: REvent<CtlrMedia, \"intent.fullscreen\">): void {\r\n if (e.resolved) return;\r\n (e.value ? enterFullscreen(this.el) : exitFullscreen(this.el))?.catch(this.ctlr.notice);\r\n e.resolve(this.name);\r\n }\r\n protected handleCurrentTrackIntent(e: REvent<CtlrMedia, `intent.current${TrackType}Track`>, type: TrackType): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedMetadata\", e, (list = this.config.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`]) => {\r\n if ((e.value as number) < list.length) {\r\n setCurrentTrack(this.el, type, e.value as number, true, list); // #VALIDATED: mediated for cast conformity; no-opy\r\n this.setCurrentTrackState(type, list); // tracks \"change\" event not reliable\r\n }\r\n });\r\n e.resolve(this.name);\r\n }\r\n protected handleTextVisibleIntent(e: REvent<CtlrMedia, \"intent.textVisible\">): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedMetadata\", e, () => {\r\n if (e.value && this.media.status.textTracks.length && this.media.state.currentTextTrack === -1) silence(() => (this.media.intent.currentTextTrack = Math.max(0, getTrackIdx(this.media.element, \"Text\", this.media.state.tracks.find((t) => t.default)?.id, this.media.status.textTracks))));\r\n if (this.textTrack) this.textTrack.mode = e.value ? \"showing\" : \"hidden\";\r\n this.config.state.textVisible = e.value;\r\n });\r\n e.resolve(this.name);\r\n }\r\n protected handleAttributeIntent(e: REvent<CtlrMedia>, key: string, isBool: boolean, attr = key.toLowerCase()): void {\r\n if (e.resolved || (key === \"poster\" && isSameURL((this.el as HTMLVideoElement).poster, e.value))) return;\r\n isBool ? this.el.toggleAttribute(attr, Boolean(e.value)) : e.value ? this.el.setAttribute(attr, e.value) : this.el.removeAttribute(attr); // (this.el as any)[key] = isBool ? Boolean(e.value) : (e.value ?? \"\"); // Generic handler for simple attributes\r\n if (key === \"playsInline\") this.el.toggleAttribute(\"webkit-playsinline\", Boolean(e.value));\r\n e.resolve(this.name);\r\n }\r\n private renderSources?: ReturnType<typeof renderList<any>>;\r\n protected handleSourcesIntent(e: REvent<CtlrMedia, \"intent.sources\">): void {\r\n if (e.resolved || isSameSources(Array.from(this.el.querySelectorAll(\"source\")), e.value)) return;\r\n (this.renderSources ??= renderList<Source, HTMLSourceElement>({ container: this.el, getKey: (s) => `${cleanURL(s.src)}|${s.type}${s.media}`, createNode: (s) => createEl(\"source\", s), updateNode: (el, s) => assignEl(el, s, undefined, undefined, false), initNode: (el, register) => el instanceof HTMLSourceElement && register(`${cleanURL(el.src)}|${el.type}${el.media}`) }))(e.currentTarget.value);\r\n e.resolve(this.name);\r\n }\r\n private renderTracks?: ReturnType<typeof renderList<any>>;\r\n protected handleTracksIntent(e: REvent<CtlrMedia, \"intent.tracks\">): void {\r\n if (e.resolved || isSameTracks(Array.from(this.el.querySelectorAll(\"track\")), e.value)) return;\r\n (this.renderTracks ??= renderList<Track>({ container: this.el, getKey: (t) => `${cleanURL(t.src)}|${t.kind}|${t.label}|${t.srclang}|${t.default}`, createNode: (t) => createEl(\"track\", t), updateNode: (el, t) => assignEl(el, t, undefined, undefined, false), initNode: (el, register) => el instanceof HTMLTrackElement && register(`${cleanURL(el.src)}|${el.kind}|${el.label}|${el.srclang}|${el.default}`) }))(e.currentTarget.value);\r\n e.resolve(this.name);\r\n }\r\n protected handleLiveIntent(e: REvent<CtlrMedia, \"intent.live\">): void {\r\n if (e.resolved) return;\r\n this.when(\"loadedMetadata\", e, (seekable = this.config.status.seekable) => e.value && seekable.length && (this.media.intent.currentTime = seekable.end(seekable.length - 1) - 1)); // #FACADED: silenced intent actual op\r\n e.resolve(this.name);\r\n }\r\n // --- Status (Bulk) ---\r\n protected handleLoadStatus(): void {\r\n this.config.status.readyState = this.el.readyState;\r\n this.config.status.networkState = this.el.networkState;\r\n force(() => ((this.config.status.buffered = this.el.buffered), (this.config.status.seekable = this.el.seekable)));\r\n }\r\n protected handleLoadedMetadataStatus(): void {\r\n (this.config.status.videoWidth = this.config.type === \"video\" ? this.config.element.videoWidth : 0), (this.config.status.videoHeight = this.config.type === \"video\" ? this.config.element.videoHeight : 0);\r\n this.config.status.isLive = (this.config.status.duration = this.el.duration) === Infinity;\r\n this.handleLoadStatus(); // Update buffers too\r\n this.config.status.loadedMetadata = true;\r\n }\r\n protected handleLoadedDataStatus(): void {\r\n this.config.status.loadedData = true;\r\n }\r\n protected handleCanPlayStatus(): void {\r\n this.config.status.canPlay = true;\r\n }\r\n protected handleCanPlayThroughStatus(): void {\r\n this.config.status.canPlayThrough = true;\r\n }\r\n protected handleStalledStatus(): void {\r\n this.config.status.stalled = true;\r\n }\r\n protected handleWaitingStatus(): void {\r\n this.config.status.waiting = true;\r\n }\r\n protected handlePlayingStatus(): void {\r\n this.config.status.error = null; // UX boost\r\n this.config.status.waiting = this.config.status.stalled = false;\r\n }\r\n protected handleErrorStatus(e: any, target = e?.target): void {\r\n if (target && target !== this.el) return this.ctlr.log({ message: `Media ${target.nodeName || \"Child\"} element error occurred!`, event: e, target }, \"error\", true); // not an error but u gotta know\r\n this.config.status.error = this.el.error ?? { message: (isStr(e) && e) || e?.message };\r\n this.config.status.waiting = false;\r\n }\r\n protected handleTracksStatus(type: TrackType, list: any, init = false): void {\r\n this.config.status[`${type.toLowerCase() as Lowercase<TrackType>}Tracks`] = Array.prototype.filter.call(list, (t) => (type === \"Text\" ? t.kind === \"subtitles\" || t.kind === \"captions\" : true)); // filter out non-cue text tracks\r\n type === \"Text\" && (this.autoChapters = this.config.settings.metadata.allowOverride) && this.handleChaptersStatus(list); // chapter \"cuechange\" over to u; base\r\n !init && silence(() => (this.config.intent[`current${type}Track`] = this.config.state[`current${type}Track`])); // #RE-TRIGGER: sync intent resolution\r\n !init && type === \"Text\" && silence(() => (this.config.intent.textVisible = this.config.state.textVisible)); // you too\r\n }\r\n protected handleChaptersStatus(list = this.el.textTracks): void {\r\n const track = Array.prototype.find.call(list, (t) => t.kind === \"chapters\") || null;\r\n if (!track) return void ((this.config.settings.metadata.chapterInfo = []), (this.config.state.currentChapter = -1));\r\n if (track.mode === \"disabled\") track.mode = \"hidden\"; // ensure cue access\r\n const extract = () => (this.config.settings.metadata.chapterInfo = track.cues?.length ? Array.from(track.cues, (cue: any) => ({ title: cue.text, startTime: cue.startTime, artwork: [] })) : []);\r\n track.cues.length ? extract() : track.addEventListener(\"cuechange\", extract, { ...this.evtOpts.EL, once: true }), this.wireChapterCue(track);\r\n }\r\n protected handleActiveCueChange(e?: globalThis.Event | { target?: TextTrack }, strict = false, track = e?.target as TextTrack | null): void {\r\n if (!strict || (track && getTrackIdx(this.el, \"Text\", track, this.config.status.textTracks) === this.config.state.currentTextTrack)) this.config.status.activeCue = track?.activeCues?.[0] || null; // incase of multiple tracks `cuechange`\r\n }\r\n protected handleChapterCueChange(e?: globalThis.Event | { target?: TextTrack }, track = e?.target as TextTrack | null, cue = track?.activeCues?.[0] || null): void {\r\n this.config.state.currentChapter = cue ? this.config.settings.metadata.chapterInfo?.findIndex((c) => c.startTime === cue.startTime) ?? -1 : -1;\r\n }\r\n // --- Settings ---\r\n protected handleDefaultMutedSetting(e: REvent<CtlrMedia, \"settings.defaultMuted\">): void {\r\n this.el.defaultMuted = e.value;\r\n }\r\n protected handleDefaultPlaybackRateSetting(e: REvent<CtlrMedia, \"settings.defaultPlaybackRate\">): void {\r\n this.el.defaultPlaybackRate = e.value;\r\n }\r\n protected handleSrcObjectSetting(e: REvent<CtlrMedia, \"settings.srcObject\">): void {\r\n this.el.srcObject = e.value;\r\n }\r\n // --- Dog Feeders ---\r\n protected onDisablePiPState(v: boolean): void {\r\n this.media.intent.pictureInPicture = false;\r\n this.config.features.pictureInPicture = !v;\r\n }\r\n protected onIsLiveStatus(v: boolean): void {\r\n this.config.features.live = v;\r\n }\r\n // --- Lifecycle ---\r\n protected override onDestroy(): void {\r\n this.el.removeAttribute(\"src\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface TechRegistryMap {\r\n html5: typeof HTML5Tech;\r\n }\r\n}\r\n","import type { CtlrConfig } from \"@defs/config\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { Action } from \"@defs/actions\";\r\nimport { TechRegistry, PlugRegistry } from \"./registries\";\r\nimport { STATE_BUILD, type CtlrState } from \"@tools/runtime\";\r\nimport { HTML5Tech } from \"@techs/html5\";\r\nimport type { TechConstructor } from \"@techs/base\";\r\nimport { PlugConstructor as PC, type BasePlug as Plug } from \"@plugs/base\";\r\nimport { guardAllMethods, guardMethod } from \"@utils/methd\";\r\nimport { setTimeout, throttle, cancelRAFLoop, RAFLoop, mockAsync, debounce } from \"@utils/fn\";\r\nimport { getWindow } from \"@utils/dom\";\r\nimport { createEl, observeIntersection, observeResize } from \"@utils/dom\";\r\nimport { uncamelize } from \"@utils/str\";\r\nimport { cloneMedia, getMediaReport, isSameSources, getSizeTier } from \"@utils/media\";\r\nimport { type Volatile, reactive, type Reactive, inert, intent, volatile, getRaw } from \"sia-reactor\";\r\nimport { fanout, getPath, mergeObjs as merge, nuke, setPath } from \"sia-reactor/utils\";\r\nimport type { PlugRegistryMap, ControllerDOMMap } from \"@defs/registries\";\r\nimport { isFunc, isStr } from \"@utils/obj\";\r\nimport { silence, transaction } from \"sia-reactor/modules\";\r\n\r\n// --- CONTROLLER (The Orchestrator) ---\r\nexport class Controller {\r\n // --- CORE SYSTEM ---\r\n private ac = new AbortController();\r\n public readonly signal = this.ac.signal;\r\n public plugs = new Map<string, Plug>();\r\n // --- RUNTIME (Global Controller States) ---\r\n public media: Reactive<CtlrMedia>;\r\n public state: Reactive<CtlrState> & Record<string, any>; // runtime state and states to be populated for easy reach\r\n public config: Reactive<Volatile<CtlrConfig>>;\r\n public get settings() {\r\n return this.config.settings; // can change ref\r\n } // for easy reach, better devx\r\n public get actions() {\r\n return this.config.actions; // for easy reach\r\n }\r\n // --- MEMORY ---\r\n public payload: { readyState: number; initialized: boolean; wired: boolean; destroyed: boolean; instance: Controller } = { instance: this } as any;\r\n public _build: CtlrConfig; // Build Cache\r\n // DOM References (Utilized by Externals)\r\n public DOM: ControllerDOMMap = {}; // To be populated with common elements for easy reach\r\n public mutatingDOMM = true; // mutatingDOMMedia: for external watchers that need to know\r\n\r\n constructor(medium: HTMLMediaElement, build: CtlrConfig) {\r\n guardAllMethods(this, this.guard);\r\n const defs = merge(getMediaReport(medium), build.media); // returns defaults and initials\r\n this.config = reactive(volatile(build), { referenceTracking: true, smartCloning: true, debug: false }); // `lineageTracing: false` so clone before reassigning \"already in state\" objects\r\n this.state = reactive<CtlrState>(structuredClone(STATE_BUILD), { debug: false });\r\n this.state.watch(\"readyState\", (v) => ((this.payload.readyState = v), (this.payload.initialized = v > 0), (this.payload.wired = v > 1), (this.payload.destroyed = v < 0)), { signal: this.signal });\r\n this.media = reactive({ intent: volatile(intent(defs.intent)), state: defs.state, status: defs.status, settings: volatile(intent(defs.settings)), tech: inert({}), features: {}, type: build.mediaType, element: medium, pseudoElement: createEl(build.mediaType), container: createEl(\"div\"), pseudoContainer: createEl(\"div\") }, { debug: false }) as any;\r\n this.media.set(\"tech\", (t) => inert(t!), { signal: this.signal });\r\n this.log((this._build = this.config.snapshot())), delete this.config.media; // clone for resets and fast subsequents\r\n this.setReadyState(0), this.boot();\r\n }\r\n\r\n private async boot(): Promise<void> {\r\n this.connectPlugs(), this.wireTechHandler(), this.wireStateHandler();\r\n await mockAsync(0), this.setReadyState(1); // wiring the machinery\r\n this.state.wonce(\"readyState\", () => (!this.media.state.paused ? this.setReadyState(3) : this.media.wonce(\"state.paused\", () => this.setReadyState(3), { signal: this.signal })), { signal: this.signal }); // first play(ed), matters to some\r\n await mockAsync(0), this.setReadyState(2); // block `set` to stall, e.g lightState\r\n setTimeout(() => (this.mutatingDOMM = false), 0, this.signal);\r\n }\r\n\r\n public connectPlugs(Plugs = PlugRegistry.getOrdered()): void {\r\n if (!this.payload.wired) for (const Plug of Plugs) this.plugIn(Plug); // solve the \"must wire before tech to capture\" or plugs go from \"higher power\" to slaves on re-connect\r\n const plugs = this.payload.wired && Plugs.filter((Plug) => this.config.noPlugList !== \"*\" && (!this.config.noPlugList.includes(Plug.fullName) || Plug.isCore)).map((Plug) => new Plug(this));\r\n if (plugs) plugs.forEach((plug) => plug.mount?.()), plugs.forEach((plug) => plug.wire?.()); // plugs might rely on others being plugged in\r\n }\r\n public disconnectPlugs(): void {\r\n for (const plug of [...this.plugs.values()].reverse()) plug.destroy();\r\n }\r\n public plugIn(Plug: PC, config?: any): this {\r\n return this.config.noPlugList !== \"*\" && (!this.config.noPlugList.includes(Plug.fullName) || Plug.isCore) && new Plug(this, config).setup(), this; // #RESPONSIBLE: no external setup\r\n }\r\n public plug<K extends keyof PlugRegistryMap>(fullName: K): InstanceType<PlugRegistryMap[K]> | undefined;\r\n public plug<T extends Plug = Plug>(fullName: string): T | undefined;\r\n public plug(fullName: string): any {\r\n return this.plugs.get(fullName);\r\n }\r\n\r\n protected wireTechHandler(): void {\r\n this.media.on(\"intent.src\", this.handleTech, { capture: true, signal: this.signal, init: true }); // load initial\r\n this.media.on(\"intent.sources\", this.handleTech, { capture: true, signal: this.signal });\r\n this.media.on(\"settings.srcObject\", this.handleTech, { capture: true, signal: this.signal });\r\n }\r\n protected handleTech(): void {\r\n const { src, sources } = this.media.intent;\r\n if (this.media.settings.srcObject) return this.useTech(); // `MediaProvider` is native only\r\n let selectedTech: TechConstructor | null = TechRegistry.pick(src, this.config.settings.techOrder),\r\n selectedSource: string | null = selectedTech ? src : null;\r\n if (!selectedTech && !isSameSources(sources, this.media.state.sources))\r\n for (const source of sources) {\r\n selectedTech = TechRegistry.pick(source.src, this.config.settings.techOrder);\r\n if (selectedTech) {\r\n selectedSource = source.src;\r\n break;\r\n }\r\n }\r\n (getRaw(this.media.state).src = src), (getRaw(this.media.state).sources = inert(sources)); // for tech fanout accuracy\r\n this.useTech(selectedTech || undefined);\r\n if (selectedSource !== src && !this.media.features.sources) silence(() => (this.media.intent.src = selectedSource!)); // bonus since tech can't handle sources\r\n }\r\n public useTech(TechClass: TechConstructor = HTML5Tech): void {\r\n TechClass !== this.media.tech.constructor && (this.media.tech = new TechClass(this)).setup(); // #RESPONSIBLE: no external setup\r\n }\r\n public get techTruth(): \"state\" | \"intent\" {\r\n return this.payload.wired ? \"state\" : \"intent\";\r\n }\r\n public get isNativeEl(): boolean {\r\n return this.media.element === this.media.tech.element;\r\n }\r\n\r\n private wireStateHandler(): void {\r\n observeIntersection(this.media.container.parentElement!, (entry) => (this.state.mediaParentIntersecting = entry.isIntersecting), this.signal);\r\n observeIntersection(this.media.container, (entry) => (this.state.mediaIntersecting = entry.isIntersecting), this.signal);\r\n observeResize(this.media.container, () => fanout(this.state.dimensions.container, getSizeTier(this.media.container)), this.signal);\r\n observeResize(this.media.pseudoContainer, () => fanout(this.state.dimensions.pseudoContainer, getSizeTier(this.media.pseudoContainer)), this.signal);\r\n }\r\n\r\n public setReadyState(state?: number): void {\r\n this.state.readyState = !this.state ? 0 : state ?? this.state.readyState + 1;\r\n const rS = this.state.readyState; // incase of blocked sets, e.g. lightState\r\n this.fire(\"tmgreadystatechange\", this.payload), this.fire(rS === 0 ? \"tmgcreate\" : rS === 1 ? \"tmginit\" : rS === 2 ? \"tmgwire\" : rS === 3 ? \"tmgfirstplay\" : rS === -1 ? \"tmgdestroy\" : \"\", this.payload);\r\n }\r\n\r\n public guard = <Fn extends Function>(fn: Fn, silent = false) => guardMethod(fn, (e) => this.notice(e, \"error\", !silent)); // `()=>{}`: needs to be bounded even before initialization\r\n public notice(mssg: any, type: \"error\" | \"warn\" | \"log\" = \"error\", toast?: string | boolean | null, swallow = true): void {\r\n this.log(mssg, type, swallow), toast !== false && (type === \"log\" || (type === \"error\" && swallow && !this.config.devMode) ? this.plug(\"settings.toasts\")?.toast : this.plug(\"settings.toasts\")?.toast?.[type])?.(toast === null || this.config.devMode ? mssg : isStr(toast) ? toast : \"Something went wrong\", { tag: \"tmg-stwr\" });\r\n }\r\n\r\n public log(mssg: any, type: \"error\" | \"warn\" | \"log\" = \"log\", swallow = false): void {\r\n if (!this.config.debug) return;\r\n if (type === \"error\") return swallow && !this.config.devMode ? console.warn(`[TMG Controller] Error swallowed:`, mssg) : console.error(`[TMG Controller] Error occurred:`, mssg);\r\n else type === \"warn\" ? console.warn(`[TMG Controller] Warning:`, mssg) : console.log(`[TMG Controller] Log:`, mssg);\r\n }\r\n\r\n public fire(eN: string, detail: any = null, el: HTMLElement | EventTarget = this.media.element, bubbles = true, cancelable = true): void {\r\n eN && el?.dispatchEvent(new CustomEvent(eN, { detail, bubbles, cancelable }));\r\n }\r\n\r\n public zenlist: string[] = [\"settings\"]; // plugs append here to block actions while their UI is active\r\n public registerAction(key: string, action: Omit<Action, \"id\">): void {\r\n const existing = this.actions[key] ?? {};\r\n this.actions[key] = { ...action, ...existing, id: key as any, fn: action.fn }; // fn always comes from the registering plug (runtime source of truth), persisted fields (label, logic, notify) survive from existing entry\r\n this.config.on(`actions.${key}` as any, () => this.actions[key] && this.actions[key].fn !== action.fn && (this.actions[key].fn = action.fn), { signal: this.signal });\r\n }\r\n public unregisterAction(key: string): void {\r\n delete this.actions[key];\r\n }\r\n public runAction(id: string, ...args: any[]): void {\r\n const action = this.actions[id];\r\n if (!action || (!action.zen && this.zenlist.some(this.isUIActive))) return;\r\n transaction(() => {\r\n if (action.logic?.length) {\r\n const root = { media: this.media, settings: this.config.settings } as any;\r\n for (const step of action.logic) {\r\n const cur = getPath(root, step.path as any);\r\n step.op === \"toggle\" ? setPath(root, step.path as any, !cur) : step.op === \"increment\" ? setPath(root, step.path as any, (cur as number) + (step.value ?? 1)) : step.op === \"decrement\" ? setPath(root, step.path as any, (cur as number) - (step.value ?? 1)) : setPath(root, step.path as any, step.value);\r\n }\r\n }\r\n action.fn?.(...args), action.notify && this.plug(\"settings.notifiers\")?.notify(action.notify), action.toast && this.plug(\"settings.toasts\")?.toast?.((isFunc(action.toast.render) ? action.toast.render() : action.toast.render) || \"Action Triggered\", action.toast);\r\n }, action.label ?? action.id);\r\n }\r\n public isLogicPath(path: string): boolean {\r\n return this.config.logicPathBlacklist.some((b) => path === b || path.startsWith(b + \".\")) || (path.startsWith(\"media.intent.\") && !(this.media.features as any)[path.split(\".\").pop()!]) ? false : true;\r\n }\r\n\r\n public throttle(key: string, fn: Function, delay = 30, strict: ((fn: Function) => number) | boolean = true, signal = this.signal) {\r\n throttle(this.config.id + key, fn, delay, strict, signal, getWindow(this.media.container));\r\n }\r\n public debounce(key: string, fn: Function, delay = 30, strict = true, signal = this.signal) {\r\n debounce(this.config.id + key, fn, delay, strict, signal, getWindow(this.media.container));\r\n }\r\n public RAFLoop(key: string, fn: Function, signal = this.signal): void {\r\n RAFLoop(this.config.id + key, fn, signal, getWindow(this.media.container));\r\n }\r\n public cancelRAFLoop(key: string): void {\r\n cancelRAFLoop(this.config.id + key);\r\n }\r\n public cancelAllLoops(): void {\r\n if (t007._RAFLoopers) for (const k of t007._RAFLoopers.keys()) k.startsWith(this.config.id) && cancelRAFLoop(k);\r\n }\r\n\r\n public isUIActive(mode: string): boolean {\r\n return this.media.container.classList.contains(`tmg-media-${uncamelize(mode === \"settings\" ? \"settings-view\" : mode, \"-\")}`);\r\n }\r\n public queryDOM<K extends keyof HTMLElementTagNameMap>(query: K, all: true, isPseudo?: boolean): NodeListOf<HTMLElementTagNameMap[K]>;\r\n public queryDOM<E extends Element = HTMLElement>(query: string, all: true, isPseudo?: boolean): NodeListOf<E>;\r\n public queryDOM<K extends keyof HTMLElementTagNameMap>(query: K, all?: false, isPseudo?: boolean): HTMLElementTagNameMap[K] | null;\r\n public queryDOM<E extends Element = HTMLElement>(query: string, all?: false, isPseudo?: boolean): E | null;\r\n public queryDOM(query: string, all = false, isPseudo = false) {\r\n return all ? (isPseudo ? this.media.pseudoContainer : this.media.container).querySelectorAll(query) : (isPseudo ? this.media.pseudoContainer : this.media.container).querySelector(query);\r\n }\r\n\r\n public syncImgLoadState(img: HTMLImageElement, now = true): HTMLImageElement {\r\n return [\"load\", \"error\"].forEach((ev) => img.addEventListener(ev, this.setImgLoadState, { signal: this.signal })), now && this.setImgLoadState({ target: img }), img;\r\n }\r\n public setImgLoadState<Ev extends Pick<Event, \"target\">>({ target: img }: Ev): void {\r\n img instanceof HTMLImageElement && img?.setAttribute(\"data-loaded\", String(img.complete && img.naturalWidth > 0));\r\n }\r\n public setImgFallback<Ev extends Pick<Event, \"target\">>({ target: img }: Ev): void {\r\n img instanceof HTMLImageElement && img.src !== window.TMG_MEDIA_ALT_IMG_SRC && (img.src = window.TMG_MEDIA_ALT_IMG_SRC!);\r\n }\r\n private altImg?: HTMLImageElement;\r\n public setCanvasFallback(canvas: HTMLCanvasElement, context?: CanvasRenderingContext2D | null, _callback = (img = this.altImg) => context?.drawImage((this.altImg = img)!, 0, 0, canvas.width, canvas.height)): void {\r\n const _img = canvas && (this.altImg && this.altImg.src === window.TMG_MEDIA_ALT_IMG_SRC ? _callback() : createEl(\"img\", { src: window.TMG_MEDIA_ALT_IMG_SRC, onload: () => _callback(_img as HTMLImageElement) }));\r\n }\r\n\r\n public destroy() {\r\n this.mutatingDOMM = true; // destruction will mutate, flag external watchers\r\n this.setReadyState(-1);\r\n this.ac.abort(\"[TMG Controller] Instance is being destroyed\"), this.cancelAllLoops();\r\n this.disconnectPlugs(), this.media.tech.destroy();\r\n const el = this.config.cloneOnDetach ? cloneMedia(this.media.element) : this.media.element;\r\n this.state.destroy(), this.config.destroy(), this.media.destroy();\r\n return nuke(this), el;\r\n }\r\n}\r\n","export interface QueueJob<T = any> {\r\n id?: string;\r\n task: () => Promise<T>;\r\n preTask?: () => void;\r\n resolve: (value: T | QueueResult) => void;\r\n cancelled?: boolean;\r\n}\r\n\r\nexport interface QueueResult {\r\n success: boolean;\r\n cancelled: boolean;\r\n dropped: boolean;\r\n}\r\n\r\n// for ffmpeg future tasks\r\nexport class AsyncQueue {\r\n // add jobs, performs and reports sequentially; drop job: reports; cancel job: records, reports when about to perform\r\n private jobs: QueueJob[] = [];\r\n private running = false;\r\n\r\n private async handle(): Promise<void> {\r\n if (this.running) return;\r\n this.running = true;\r\n while (this.jobs.length > 0) {\r\n const job = this.jobs.shift();\r\n if (job) job.cancelled ? job.resolve({ success: false, cancelled: true, dropped: false }) : (job.preTask?.(), job.resolve(await job.task()));\r\n }\r\n this.running = false;\r\n }\r\n\r\n public add<T = any>(task: () => Promise<T>, id?: string, cancelled?: boolean, preTask?: () => void): Promise<QueueResult | T> {\r\n return new Promise((resolve) => (this.jobs.push({ task, id, preTask, cancelled, resolve }), this.handle()));\r\n }\r\n\r\n public drop(id: string): boolean {\r\n const idx = this.jobs.findIndex((j) => j.id === id);\r\n this.jobs[idx]?.resolve({ success: false, cancelled: true, dropped: true });\r\n return idx !== -1 && this.jobs.splice(idx, 1), !!~idx; // stops immediately, cant't remove a running job\r\n }\r\n\r\n public cancel(id: string): boolean {\r\n const job = this.jobs.find((j) => j.id === id);\r\n return job && (job.cancelled = true), !!job?.cancelled; // stops when it should have for metrics, can't cancel a running job\r\n }\r\n\r\n public dropAll(): void {\r\n for (const job of this.jobs) job.resolve({ success: false, cancelled: true, dropped: true });\r\n this.jobs = [];\r\n }\r\n\r\n public cancelAll(): void {\r\n for (const job of this.jobs) job.cancelled = true;\r\n }\r\n}\r\n","export * from \"@techs/base\";\nimport \"../techs/z-register\";\n","export * from \"@plugs/base\";\nexport * from \"@plugs/main/disabled\";\nexport * from \"@plugs/main/lightState\";\nexport * from \"@plugs/main/playlist\";\nexport * from \"@plugs/main/skeleton\";\nexport * from \"@plugs/settings/airplay\";\nexport * from \"@plugs/settings/ambience\";\nexport * from \"@plugs/settings/auto\";\nexport * from \"@plugs/settings/brightness\";\nexport * from \"@plugs/settings/captions\";\nexport * from \"@plugs/settings/cast\";\nexport * from \"@plugs/settings/controlPanel\";\nexport * from \"@plugs/settings/css\";\nexport * from \"@plugs/settings/errors\";\nexport * from \"@plugs/settings/fastPlay\";\nexport * from \"@plugs/settings/frame\";\nexport * from \"@plugs/settings/gesture\";\nexport * from \"@plugs/settings/keys\";\nexport * from \"@plugs/settings/locked\";\nexport * from \"@plugs/settings/metadata\";\nexport * from \"@plugs/settings/modes\";\nexport * from \"@plugs/settings/notifiers\";\nexport * from \"@plugs/settings/objectFit\";\nexport * from \"@plugs/settings/overlay\";\nexport * from \"@plugs/settings/persist\";\nexport * from \"@plugs/settings/playbackRate\";\nexport * from \"@plugs/settings/poster\";\nexport * from \"@plugs/settings/settingsView\";\nexport * from \"@plugs/settings/sleepTimer\";\nexport * from \"@plugs/settings/time\";\nexport * from \"@plugs/settings/timeTravel\";\nexport * from \"@plugs/settings/toasts\";\nexport * from \"@plugs/settings/voice\";\nexport * from \"@plugs/settings/volume\";\nimport \"../../plugs/z-register\";\nimport \"./menus\";\n","import { Controllable } from \"@core/controllable\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { PlugConstructor as PC, PinConstructor as PIC } from \"./types\";\r\nimport type { PlugRegistryMap, PinRegistryMap, MenuRegistryMap } from \"@defs/registries\";\r\nimport { getPath } from \"sia-reactor/utils\";\r\nimport { MenuRegistry } from \"@core/registries\";\r\n\r\nexport abstract class BasePlug<Config = any, State = any> extends Controllable<Config, State> {\r\n public static readonly plugName: string;\r\n public static readonly isCore: boolean = false;\r\n public static readonly isMain: boolean = false;\r\n public static readonly BUILD: any;\r\n public static get surname() {\r\n return this.isMain ? \"\" : \"settings.\";\r\n }\r\n public static get fullName() {\r\n return (this.surname + this.plugName) as keyof PlugRegistryMap;\r\n }\r\n public get name() {\r\n return (this.constructor as PC).plugName;\r\n }\r\n\r\n constructor(ctlr: Controller, config: Config | undefined = getPath(ctlr.config as any, new.target.fullName), state?: State) {\r\n ctlr.plug(new.target.fullName)?.destroy();\r\n super(ctlr, config, state);\r\n const path = new.target.fullName as any;\r\n this.ctlr.config.watch(path, () => (this.config = getPath(this.ctlr.config, path)), { signal: this.signal }); // #COMPUTED: config can lose reference\r\n ctlr.plugs.set(new.target.fullName, this);\r\n }\r\n\r\n protected override onSetup(): void {\r\n this.mount?.();\r\n this.ctlr.state.readyState ? this.wire?.() : this.wire && this.ctlr.state.wonce(\"readyState\", this.wire, { signal: this.signal }); // wire after all plugs setup\r\n }\r\n protected override onDestroy(): void {\r\n this.unmount?.();\r\n this.ctlr.plugs.delete((this.constructor as PC).fullName);\r\n }\r\n\r\n public mount?(): void {}\r\n public unmount?(): void {}\r\n public wire(): void {\r\n this.registerMenu();\r\n }\r\n\r\n protected registerMenu(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.menu.register(MenuRegistry.get((this.constructor as PC).fullName as keyof MenuRegistryMap)?.(this as any));\r\n } // override to configure positioning\r\n}\r\n\r\nexport abstract class BasePin<Plug extends BasePlug = BasePlug, Config = any, State = any> extends Controllable<Config, State> {\r\n public static readonly pinName: string;\r\n public static readonly Plug: PC;\r\n public static readonly BUILD: any;\r\n public static get surname() {\r\n return this.Plug.plugName;\r\n }\r\n public static get fullName() {\r\n return (this.surname + \".\" + this.pinName) as keyof PinRegistryMap;\r\n }\r\n public get name() {\r\n return (this.constructor as PIC).Plug.fullName;\r\n }\r\n public get plug(): Plug {\r\n return this.ctlr.plug<Plug>((this.constructor as PIC).Plug.fullName)!; // `!`: only plug will instantiate after all\r\n }\r\n\r\n constructor(ctlr: Controller, config: Config, state?: State) {\r\n super(ctlr, config, state);\r\n const path = (new.target.Plug.fullName + \".\" + new.target.pinName) as any;\r\n this.ctlr.config.watch(path, () => (this.config = getPath(this.ctlr.config, path)), { signal: this.signal }); // #COMPUTED: config can lose reference\r\n }\r\n\r\n protected override onSetup(): void {} // plug handles mount and wire\r\n protected override onDestroy(): void {\r\n this.unmount?.();\r\n }\r\n\r\n public mount?(): void {}\r\n public unmount?(): void {}\r\n public wire?(): void {}\r\n}\r\n\r\nexport type * from \"./types\";\r\n","import { DisabledConfig } from \"./types\";\r\n\r\nexport const DISABLED_BUILD: DisabledConfig = false;\r\n","import { BasePlug } from \"../../base\";\r\nimport { DISABLED_BUILD } from \"./build\";\r\nimport type { DisabledConfig, DisabledState } from \"./types\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class DisabledPlug extends BasePlug<DisabledConfig, DisabledState> {\r\n public static readonly plugName = \"disabled\";\r\n public static readonly isMain: boolean = true;\r\n public static readonly BUILD = DISABLED_BUILD;\r\n\r\n constructor(ctlr: Controller, config = ctlr.config.disabled) {\r\n super(ctlr, config, { message: \"\" });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"disabled\", this.handle, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handle({ value }: REvent<CtlrConfig, \"disabled\">): void {\r\n if (value) {\r\n this.ctlr.plug(\"settings.settingsView\")?.leaveView();\r\n this.ctlr.cancelAllLoops();\r\n this.media.container.classList.add(\"tmg-media-disabled\");\r\n silence(() => (this.media.intent.paused = true));\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n this.ctlr.DOM.containerContent?.setAttribute(\"inert\", \"\");\r\n this.ctlr.plug(\"settings.keys\")?.setEventListeners(\"remove\");\r\n this.ctlr.notice(\"You cannot access the custom controls when disabled\", \"warn\", null);\r\n } else {\r\n this.media.container.classList.remove(\"tmg-media-disabled\");\r\n this.ctlr.DOM.containerContent?.removeAttribute(\"inert\");\r\n this.ctlr.plug(\"settings.keys\")?.setEventListeners();\r\n }\r\n }\r\n\r\n public deactivate(message: string): void {\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n this.ctlr.DOM.containerContent?.setAttribute(\"data-message\", (this.state.message = message));\r\n const timeline = this.ctlr.plug(\"settings.controlPanel\")?.comp(\"timeline\");\r\n if (timeline) this.ctlr.setCanvasFallback(timeline[\"previewCanvas\"], timeline[\"previewContext\"]!), this.ctlr.setCanvasFallback(timeline[\"thumbnailCanvas\"], timeline[\"thumbnailContext\"]!);\r\n this.media.container.classList.add(\"tmg-media-inactive\");\r\n }\r\n\r\n public reactivate(): void {\r\n t007.dialog?.dismiss(`${this.ctlr.config.id}-error-dialog`, \"recovered\");\r\n if (!this.media.container.classList.contains(\"tmg-media-inactive\")) return;\r\n this.state.message = null;\r\n this.ctlr.DOM.containerContent?.removeAttribute(\"data-message\");\r\n this.media.container.classList.remove(\"tmg-media-inactive\");\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n disabled: typeof DisabledPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n disabled: DisabledConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { LightStateConfig } from \"./types\";\r\n\r\nexport const LIGHT_STATE_BUILD: DeepPartial<LightStateConfig> = {\r\n disabled: false,\r\n controls: [\"meta\", \"bigplaypause\", \"fullscreenorientation\"],\r\n preview: {\r\n usePoster: true,\r\n time: 4,\r\n },\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { LightStateConfig } from \"./types\";\r\nimport { LIGHT_STATE_BUILD } from \"./build\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { TERMINATOR, type REvent } from \"sia-reactor\";\r\nimport { inBoolArrOpt } from \"@utils/obj\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class LightStatePlug extends BasePlug<LightStateConfig> {\r\n public static readonly plugName = \"lightState\";\r\n public static readonly isMain: boolean = true;\r\n public static readonly BUILD = LIGHT_STATE_BUILD;\r\n protected hasStalled = false;\r\n protected shadowTime?: number;\r\n\r\n public override wire(): void {\r\n // Ctlr State Setters\r\n this.ctlr.state.set(\"readyState\", (v) => (v === 2 && !this.config.disabled ? ((this.hasStalled = true), TERMINATOR) : v), { signal: this.signal }); // #DICTATOR: reliable authority\r\n // ---- Media Listeners\r\n this.media.on(\"intent.currentTime\", this.handleCurrentTimeIntent, { capture: true, signal: this.signal }); // #ISOLATION: peak compromise\r\n // ---- Config Listeners\r\n this.ctlr.config.on(\"lightState.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"lightState.controls\", this.handleControls, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"lightState.preview.usePoster\", this.handleUsePoster, { signal: this.signal });\r\n this.ctlr.config.on(\"lightState.preview.time\", this.handleTime, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleCurrentTimeIntent(e: REvent<CtlrMedia, \"intent.currentTime\">): void {\r\n if (e.resolved || this.config.disabled) return;\r\n if (e.value !== this.shadowTime) e.resolve(this.name); // tech will get it later, no fear\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"lightState.disabled\">): void {\r\n if (value) {\r\n if (this.settings.time.start != null) this.media.intent.currentTime = this.settings.time.start;\r\n this.media.container.classList.remove(\"tmg-media-light\");\r\n this.media.nowatch(\"state.paused\", this.remove);\r\n this.ctlr.DOM.controlsContainer?.removeEventListener(\"click\", this.handleClick);\r\n !this.ctlr.payload.wired && this.hasStalled && this.ctlr.setReadyState(2); // restoring order\r\n } else {\r\n this.config.preview.usePoster = this.config.preview.usePoster;\r\n this.media.container.classList.add(\"tmg-media-light\");\r\n this.media.watch(\"state.paused\", this.remove, { signal: this.signal });\r\n this.ctlr.DOM.controlsContainer?.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n }\r\n }\r\n\r\n protected handleControls(): void {\r\n for (const c of this.ctlr.queryDOM(\"[data-control-id]\", true)) c.dataset.lightControl = this.isLight(c.dataset.controlId!) ? \"true\" : \"false\";\r\n }\r\n\r\n protected handleUsePoster({ target: { value, object } }: REvent<CtlrConfig, \"lightState.preview.usePoster\">): void {\r\n if (this.config.disabled || (value && this.media.state.poster)) return;\r\n silence(() => (this.media.intent.currentTime = this.shadowTime = object.time));\r\n if (!this.media.status.loadedMetadata) this.media.once(\"status.loadedMetadata\", () => (this.config.preview.usePoster = value), { signal: this.signal }); // retrigger when metadata is ready in case time is a percentage\r\n }\r\n\r\n protected handleTime({ target: { object } }: REvent<CtlrConfig, \"lightState.preview.time\">): void {\r\n !this.config.disabled && (!object.usePoster || !this.media.state.poster) && silence(() => (this.media.intent.currentTime = this.shadowTime = object.time!));\r\n }\r\n\r\n protected handleClick({ target }: MouseEvent): void {\r\n target === this.ctlr.DOM.controlsContainer && this.remove();\r\n }\r\n\r\n protected add(): void {\r\n this.config.disabled = false;\r\n }\r\n protected remove(): void {\r\n this.config.disabled = true;\r\n this.isLight(\"bigplaypause\") && this.stall();\r\n this.media.intent.paused = false;\r\n }\r\n\r\n protected stall(): void {\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n const bigPlayBtn = this.ctlr.plug(\"settings.controlPanel\")?.compEl(\"bigplaypause\");\r\n bigPlayBtn && this.media.container.classList.add(\"tmg-media-stall\");\r\n bigPlayBtn?.addEventListener(\"animationend\", () => this.media.container.classList.remove(\"tmg-media-stall\"), { once: true, signal: this.signal });\r\n }\r\n\r\n protected isLight(controlId: string): boolean {\r\n return inBoolArrOpt(this.config.controls, controlId);\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n lightState: typeof LightStatePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n lightState: LightStateConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { PlaylistConfig, PlaylistItemConfig } from \"./types\";\r\n\r\nexport const PLAYLIST_BUILD: DeepPartial<PlaylistConfig> = {\r\n allowOverride: { add: true, delete: true, move: true },\r\n content: null,\r\n};\r\n\r\nexport const PLAYLIST_ITEM_BUILD: DeepPartial<PlaylistItemConfig> = {\r\n media: {\r\n intent: {\r\n src: \"\",\r\n tracks: [],\r\n },\r\n settings: {\r\n metadata: {\r\n title: \"\",\r\n chapterInfo: [],\r\n links: {\r\n title: \"\",\r\n },\r\n },\r\n },\r\n },\r\n settings: {\r\n time: {\r\n start: 0,\r\n },\r\n controlPanel: {\r\n timeline: {\r\n previews: false,\r\n marks: [],\r\n },\r\n },\r\n },\r\n}; // for a playlist\r\n","import { BasePlug } from \"../../base\";\r\nimport type { PlaylistConfig, PlaylistItemConfig } from \"./types\";\r\nimport { PLAYLIST_BUILD, PLAYLIST_ITEM_BUILD } from \"./build\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { mergeObjs, fanout, parsePathObj } from \"sia-reactor/utils\";\r\nimport { transaction } from \"sia-reactor/modules\";\r\nimport { isBool } from \"@utils/obj\";\r\nimport { isSameURL } from \"@utils/str\";\r\nimport { safeNum } from \"@utils/num\";\r\nimport { Controller } from \"@core/controller\";\r\n\r\nexport class PlaylistPlug extends BasePlug<PlaylistConfig> {\r\n public static readonly plugName = \"playlist\";\r\n public static readonly isMain: boolean = true;\r\n public static readonly BUILD = PLAYLIST_BUILD;\r\n public get atFirst() {\r\n return this.state.currentIndex <= 0;\r\n }\r\n public get atLast() {\r\n return !this.config.content || this.state.currentIndex >= this.config.content.length - 1;\r\n }\r\n\r\n constructor(ctlr: Controller, config = ctlr.config.playlist) {\r\n super(ctlr, config, { currentIndex: 0 });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Getters\r\n this.ctlr.config.get(\"playlist\", (v) => v ?? { content: null }, { signal: this.signal });\r\n // ----------- Setters\r\n this.ctlr.config.set(\"playlist.content\", (v) => (v ? (v.map((i) => mergeObjs(PLAYLIST_ITEM_BUILD as any, parsePathObj(i))) as any) : null), { init: true, signal: this.signal });\r\n // ---- Media Watchers\r\n this.media.on(\"settings.metadata.title\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].media.settings.metadata.title = value), { init: \"auto\", signal: this.signal });\r\n this.media.on(\"settings.metadata.chapterInfo\", ({ currentTarget: { value } }) => this.config.content && (this.config.content[this.state.currentIndex].media.settings.metadata.chapterInfo = value), { init: \"auto\", signal: this.signal });\r\n this.media.on(\"settings.metadata.links.title\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].media.settings.metadata.links.title = value), { init: \"auto\", signal: this.signal });\r\n // ---- Config -------\r\n this.ctlr.config.on(\"settings.time.start\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].settings.time.start = value), { init: \"auto\", signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.timeline.previews\", ({ value }) => this.config.content && (this.config.content[this.state.currentIndex].settings.controlPanel.timeline.previews = value), { init: \"auto\", signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.timeline.marks\", ({ currentTarget: { value } }) => this.config.content && (this.config.content[this.state.currentIndex].settings.controlPanel.timeline.marks = value), { init: \"auto\", signal: this.signal });\r\n // ----------- Listeners\r\n this.ctlr.config.on(\"playlist.content\", this.handleContent, { signal: this.signal, init: true, depth: 1 });\r\n this.ctlr.config.on(\"playlist.allowOverride\", this.syncFeatures, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"prev\", { fn: () => (this.previous(), this.ctlr.plug(\"settings.notifiers\")?.notify(\"mediaprev\")), keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"next\", { fn: () => (this.next(), this.ctlr.plug(\"settings.notifiers\")?.notify(\"medianext\")), keyboard: { phase: \"keydown\" } });\r\n super.wire();\r\n }\r\n\r\n protected handleContent({ currentTarget: { value: content } }: REvent<CtlrConfig, \"playlist.content\", 1>): void {\r\n this.syncFeatures();\r\n const v = content?.find((v) => (v.media.settings.metadata.id && v.media.settings.metadata.id === this.media.settings.metadata.id) || isSameURL(v.media.intent.src, this.media.intent.src)),\r\n pmdle = this.ctlr.plug(\"settings.persist\")?.module,\r\n apply = () => (v ? this.applyItem(v, false) : this.moveTo(this.state.currentIndex));\r\n this.state.currentIndex = (v && content!.indexOf(v)) ?? 0;\r\n pmdle && !pmdle.state.hydrated ? pmdle.state.wonce(\"hydrated\", apply, { signal: this.signal }) : apply();\r\n }\r\n\r\n protected applyItem(item: PlaylistItemConfig, _reset = true): void {\r\n fanout(this.settings, item.settings), fanout(this.media, item.media);\r\n }\r\n\r\n public moveTo(index: number, shouldPlay?: boolean, label = \"Move\"): void {\r\n if (!this.config.content || !this.config.content[index]) return;\r\n this.state.currentIndex = index;\r\n transaction(() => (this.applyItem(this.config.content![index]), isBool(shouldPlay) && (this.media.intent.paused = !shouldPlay)), `Playlist ${label}`);\r\n }\r\n\r\n public remove(index: number): void {\r\n if (!this.config.content) return;\r\n this.config.content.splice(index, 1);\r\n if (index === this.state.currentIndex && this.config.content.length > 0) this.moveTo(Math.min(index, this.config.content.length - 1));\r\n }\r\n\r\n public shuffle(): void {\r\n if (!this.config.content) return;\r\n const list = this.config.content;\r\n for (let i = list.length - 1; i > 0; i--) {\r\n const j = Math.floor(Math.random() * (i + 1));\r\n [list[i], list[j]] = [list[j], list[i]];\r\n }\r\n }\r\n\r\n public previous(): void {\r\n if (safeNum(this.media.state.currentTime) >= 3) transaction(() => ((this.media.intent.currentTime = 0), (this.media.intent.paused = false)), \"Playlist Previous (Restart)\");\r\n else if (this.config.content && this.state.currentIndex > 0) this.moveTo(this.state.currentIndex - 1, true, \"Previous\");\r\n }\r\n\r\n public next(): void {\r\n if (!this.config.content) return;\r\n if (this.state.currentIndex < this.config.content.length - 1) this.moveTo(this.state.currentIndex + 1, true, \"Next\");\r\n }\r\n\r\n protected syncFeatures(): void {\r\n this.media.features.playlist = !!(this.config.content?.length || this.config.allowOverride.add);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n playlist: typeof PlaylistPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n playlist: PlaylistConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n playlist?: boolean;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { SkeletonConfig } from \"./types\";\r\n\r\nexport const SKELETON_BUILD: Partial<SkeletonConfig> = {\r\n autoPauseAll: true,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { SkeletonConfig } from \"./types\";\r\nimport { SKELETON_BUILD } from \"./build\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { assignEl } from \"@utils/dom\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { IconRegistry, MenuRegistry } from \"@core/registries\";\r\n\r\nexport class SkeletonPlug extends BasePlug<SkeletonConfig> {\r\n public static readonly plugName = \"skeleton\";\r\n public static readonly BUILD = SKELETON_BUILD;\r\n public static readonly isCore: boolean = true;\r\n public static readonly isMain: boolean = true;\r\n\r\n public override mount(): void {\r\n // Properties Assignment\r\n assignEl(this.media.container, { role: \"region\", ariaLabel: `${capitalize(this.media.type)} Player`, className: `tmg-${this.media.type}-container tmg-media-container tmg-host-container${IS_MOBILE ? \" tmg-media-mobile\" : \"\"}${this.media.state.paused ? \" tmg-media-paused\" : \"\"}` }, { trackKind: \"captions\", volumeLevel: \"muted\", brightnessLevel: \"dark\", objectFit: \"contain\" });\r\n assignEl(this.media.pseudoContainer, { role: \"status\", className: `tmg-pseudo-${this.media.type}-container tmg-pseudo-media-container tmg-host-container` });\r\n assignEl(this.media.pseudoElement, { ariaHidden: \"true\", className: `tmg-pseudo-${this.media.type} tmg-pseudo-media tmg-host`, muted: true, autoplay: false });\r\n // DOM Injection\r\n this.media.pseudoContainer.appendChild(this.media.pseudoElement);\r\n this.media.element.parentElement?.insertBefore(this.media.container, this.media.element);\r\n this.injectInterface(), this.ctlr.DOM.containerContent?.prepend(this.media.element);\r\n }\r\n public override unmount(): void {\r\n if (this.media.pseudoElement.isConnected) this.media.element.isConnected && this.leavePseudoMode(true), this.media.container.remove();\r\n else if (this.media.element.isConnected) this.media.container.parentElement?.replaceChild(this.media.element, this.media.container);\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", this.handlePaused, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // this.media.on(\"intent.paused\", this.handlePaused, { signal: this.signal }); // #APPRENTICE: folklore embodiment\r\n this.media.on(\"state.poster\", ({ value }) => (this.settings.css.currentPosterUrl = `url(${value})`), { signal: this.signal });\r\n this.media.on(\"status.ended\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-replay\", value), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.waiting\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-buffering\", value), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.loadedMetadata\", this.handleLoadedMetadataStatus, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.on(\"readyState\", () => (this.media.container.dataset.readyTier = \"x\".repeat(this.ctlr.state.readyState)), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n const menu = this.ctlr.plug(\"settings.settingsView\")?.menu;\r\n menu?.register(MenuRegistry.get(\"main.skeleton\")?.(this.ctlr));\r\n menu?.register(MenuRegistry.get(\"settings.actions\")?.(this.ctlr));\r\n super.wire();\r\n }\r\n\r\n protected injectInterface(): void {\r\n !this.ctlr.queryDOM(\".tmg-media-container-content-wrapper\") &&\r\n this.media.container.insertAdjacentHTML(\r\n \"beforeend\",\r\n `<div class=\"tmg-media-container-content-wrapper\">\r\n <div class=\"tmg-media-container-content\">\r\n <div class=\"tmg-media-controls-container\">\r\n <div class=\"tmg-media-curtain tmg-media-top-curtain\"></div><div class=\"tmg-media-curtain tmg-media-bottom-curtain\"></div><div class=\"tmg-media-curtain tmg-media-cover-curtain\"></div>\r\n </div>\r\n </div>\r\n <div class=\"tmg-media-settings\" inert>\r\n <div class=\"tmg-media-settings-content\">\r\n <div class=\"tmg-media-settings-top-panel\"><button type=\"button\" class=\"tmg-media-settings-close-btn\">${IconRegistry.get(\"returnback\")}<span>Close Settings</span></button></div>\r\n <div class=\"tmg-media-settings-bottom-panel\"><p>More Settings Coming Soon!</p></div>\r\n </div>\r\n </div>\r\n </div>`\r\n );\r\n this.ctlr.DOM.containerContentWrapper = this.ctlr.queryDOM(\".tmg-media-container-content-wrapper\");\r\n this.ctlr.DOM.containerContent = this.ctlr.queryDOM(\".tmg-media-container-content\");\r\n this.ctlr.DOM.controlsContainer = this.ctlr.queryDOM(\".tmg-media-controls-container\");\r\n this.ctlr.DOM.settings = this.ctlr.queryDOM(\".tmg-media-settings\");\r\n this.ctlr.DOM.settingsContent = this.ctlr.queryDOM(\".tmg-media-settings-content\");\r\n this.ctlr.DOM.settingsTopPanel = this.ctlr.queryDOM(\".tmg-media-settings-top-panel\");\r\n this.ctlr.DOM.settingsBottomPanel = this.ctlr.queryDOM(\".tmg-media-settings-bottom-panel\");\r\n }\r\n\r\n protected handlePaused({ value, rejectable, resolved }: REvent<CtlrMedia, \"state.paused\" | \"intent.paused\">): void {\r\n if (rejectable && !resolved) return;\r\n if (!rejectable && !value && this.config.autoPauseAll) for (const media of document.querySelectorAll<HTMLMediaElement>(\"video, audio\")) media !== this.media.element && !media.paused && media.pause();\r\n this.media.container.classList.toggle(\"tmg-media-paused\", value);\r\n }\r\n\r\n protected handleLoadedMetadataStatus({ value }: REvent<CtlrMedia, \"status.loadedMetadata\">): void {\r\n if (!value) return;\r\n this.media.pseudoElement.src = this.media.element.currentSrc;\r\n this.media.pseudoElement.crossOrigin = this.media.element.crossOrigin;\r\n }\r\n\r\n public enterPseudoMode(): void {\r\n (this.media.pseudoElement.id = this.media.element.id), (this.media.element.id = \"\");\r\n this.media.pseudoElement.className += \" \" + this.media.element.className.replace(/tmg-media|tmg-video|tmg-audio|tmg-host/g, \"\");\r\n this.media.pseudoContainer.className += \" \" + this.media.container.className.replace(/tmg-media-container|tmg-video-container|tmg-audio-container|tmg-host-container/g, \"\");\r\n this.media.container.parentElement?.insertBefore(this.media.pseudoContainer, this.media.container);\r\n document.body.append(this.media.container);\r\n }\r\n\r\n public leavePseudoMode(destroy = false): void {\r\n (this.media.element.id = this.media.pseudoElement.id), (this.media.pseudoElement.id = \"\");\r\n this.media.pseudoElement.className = `tmg-pseudo-${this.media.type} tmg-pseudo-media tmg-host`;\r\n this.media.pseudoContainer.className = `tmg-pseudo-${this.media.type}-container tmg-pseudo-media-container tmg-host-container`;\r\n this.media.pseudoContainer.parentElement?.replaceChild(destroy ? this.media.element : this.media.container, this.media.pseudoContainer);\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n skeleton: typeof SkeletonPlug;\r\n }\r\n interface ControllerDOMMap {\r\n containerContentWrapper?: HTMLDivElement | null;\r\n containerContent?: HTMLDivElement | null;\r\n controlsContainer?: HTMLDivElement | null;\r\n settings?: HTMLDivElement | null;\r\n settingsContent?: HTMLDivElement | null;\r\n settingsTopPanel?: HTMLDivElement | null;\r\n settingsBottomPanel?: HTMLDivElement | null;\r\n }\r\n}\r\n","export const AIRPLAY_BUILD = undefined;\r\n","import { BasePlug } from \"../../base\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { AIRPLAY_BUILD } from \"./build\";\r\nimport { isFunc } from \"@utils/obj\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { AirPlayPlaceholder } from \"@components/holders/airplayplaceholder\";\r\n\r\nexport class AirPlayPlug extends BasePlug {\r\n public static readonly plugName = \"airplay\";\r\n public static readonly BUILD = AIRPLAY_BUILD;\r\n public isAvailable = false;\r\n protected placeholder: AirPlayPlaceholder | null = null;\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n if (isFunc(window.WebKitPlaybackTargetAvailabilityEvent)) {\r\n this.media.element.addEventListener(\"webkitplaybacktargetavailabilitychanged\", this.handleAvailability, { capture: true, signal: this.signal });\r\n this.media.element.addEventListener(\"webkitcurrentplaybacktargetiswirelesschanged\", this.handleWirelessChange, { capture: true, signal: this.signal });\r\n }\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.airplay ||= this.ctlr.isNativeEl && this.isAvailable), { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"intent.airplay\", this.handleAirPlayIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"airplay\", { keyboard: { phase: \"keyup\" } }), super.wire();\r\n }\r\n\r\n protected handleAvailability(e: any, can = e.availability === \"available\"): void {\r\n if (can) (this.placeholder ??= ComponentRegistry.init(\"airplayplaceholder\", this.ctlr))?.setup();\r\n if (this.ctlr.isNativeEl) this.media.features.airplay = this.isAvailable = can; // e.availability returns \"available\" if an Apple TV/HomePod is on the network\r\n }\r\n\r\n protected handleWirelessChange(): void {\r\n this.media.container.classList.toggle(\"tmg-media-airplay\", (this.media.state.airplay = !!this.media.element.webkitCurrentPlaybackTargetIsWireless)); // Safari handles the playback sync natively.\r\n }\r\n\r\n protected handleAirPlayIntent(e: REvent<CtlrMedia, \"intent.airplay\">): void {\r\n if (e.resolved || !e.value) return;\r\n if (!this.ctlr.isUIActive(\"airplay\")) {\r\n this.media.element?.webkitShowPlaybackTargetPicker?.(); // Apple requires this to be triggered by a direct user gesture (like a click)\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"airplay\"); // #STALLING: necessary optimistic distraction\r\n }\r\n e.resolve(this.name);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.placeholder?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.airplay\": typeof AirPlayPlug;\r\n }\r\n}\r\n\r\ndeclare global {\r\n interface Window {\r\n WebKitPlaybackTargetAvailabilityEvent?: any;\r\n }\r\n interface HTMLMediaElement {\r\n webkitShowPlaybackTargetPicker?: () => void;\r\n webkitCurrentPlaybackTargetIsWireless?: boolean;\r\n }\r\n}\r\n","import { Ambience } from \"./types\";\r\n\r\nexport const AMBIENT_BUILD: Ambience = {\r\n active: true,\r\n blur: 80,\r\n opacity: 1,\r\n interval: 100,\r\n smoothness: 0.3,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { AmbienceConfig } from \"./types\";\r\nimport { AMBIENT_BUILD } from \"./build\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { MenuRegistry } from \"@core/registries\";\r\n\r\nexport class AmbiencePlug extends BasePlug<AmbienceConfig> {\r\n public static readonly plugName = \"ambience\";\r\n public static readonly BUILD = AMBIENT_BUILD;\r\n public wrapper!: HTMLDivElement;\r\n public canvas!: HTMLCanvasElement;\r\n public context!: CanvasRenderingContext2D | null;\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.wrapper = createEl(\"div\", { className: \"tmg-media-ambience-wrapper tmg-media-filtered\", ariaHidden: \"true\" });\r\n this.canvas = createEl(\"canvas\", { className: \"tmg-media-ambience-canvas\" });\r\n this.context = this.canvas.getContext(\"2d\", { alpha: false });\r\n // DOM Injection\r\n this.ctlr.DOM.containerContent?.prepend((this.wrapper.append(this.canvas), this.wrapper));\r\n }\r\n public override unmount(): void {\r\n this.canvas.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"state.currentTime\", this.pulseGlow, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.poster\", this.syncFeatures, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"features.ambience\", ({ value }) => this.syncDisplay(!!value), { signal: this.signal });\r\n // ---- State ---------\r\n this.ctlr.state.on(\"dimensions.container.width\", this.syncSize, { init: true, signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.container.height\", this.syncSize, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.ambience.active\", ({ value }) => this.syncDisplay(value), { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.ambience.blur\", this.syncFilter, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.ambience.opacity\", this.syncFilter, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected pulseGlow(): void {\r\n this.ctlr.isNativeEl && this.media.type !== \"audio\" && this.ctlr.throttle(\"ambienceGlowing\", this.syncGlow, this.config.interval, false);\r\n }\r\n protected syncGlow(usePoster = !this.ctlr.isNativeEl || this.media.type === \"audio\"): void {\r\n if (!this.config.active || !this.media.features.ambience || !this.ctlr.state.mediaIntersecting || !this.context) return;\r\n if (usePoster) {\r\n if (!this.media.state.poster) return this.context.clearRect(0, 0, this.canvas.width, this.canvas.height);\r\n const seq = ++this.posterSeq,\r\n i = this.posterImg && this.posterImg.src === this.media.state.poster ? this.context.drawImage(this.posterImg, 0, 0, this.canvas.width, this.canvas.height) : (this.posterImg = createEl(\"img\", { src: this.media.state.poster, crossOrigin: \"anonymous\", onload: () => seq === this.posterSeq && this.context?.drawImage(i as HTMLImageElement, 0, 0, this.canvas.width, this.canvas.height) }));\r\n } else if (!this.ctlr.isNativeEl || this.media.element.readyState < 2) return;\r\n this.context.globalAlpha = this.config.smoothness;\r\n this.context.drawImage(this.media.element as HTMLVideoElement, 0, 0, this.canvas.width, this.canvas.height);\r\n }\r\n private posterSeq = 0;\r\n private posterImg?: HTMLImageElement;\r\n\r\n protected syncSize(): void {\r\n this.canvas.width = 32; // Small resolution is heavily performant for blurs; preserve aspect ratio\r\n this.canvas.height = Math.round(32 / (this.ctlr.state.dimensions.container.width / this.ctlr.state.dimensions.container.height));\r\n this.syncGlow();\r\n }\r\n\r\n protected syncDisplay(show: boolean): void {\r\n (this.canvas.style.display = !show ? \"none\" : \"block\"), show && this.syncGlow();\r\n }\r\n\r\n protected syncFilter(): void {\r\n this.canvas.style.filter = `blur(${this.config.blur}px) opacity(${this.config.opacity})`;\r\n }\r\n\r\n protected syncFeatures(): void {\r\n (this.media.features.ambience ||= !!this.media.state.poster), this.syncGlow();\r\n }\r\n\r\n protected override registerMenu(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.menu.registerFirst(MenuRegistry.get(\"settings.ambience\")?.(this));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.ambience\": typeof AmbiencePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n ambience: AmbienceConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n ambience: boolean;\r\n }\r\n}\r\n","import { AutoConfig } from \"./types\";\nimport { DeepPartial } from \"sia-reactor\";\nimport { capitalize, uncamelize } from \"@utils/str\";\n\nexport const APT_AUTOPLAY_OPTIONS = [\"in-view\", \"out-view\", \"in-view-always\", \"out-view-always\"] as const;\n\nconst AUTOPLAY_UI_OPTIONS = [{ value: false, display: \"Off\" }, ...APT_AUTOPLAY_OPTIONS.map((o) => ({ value: o, display: capitalize(uncamelize(String(o))) }))];\n\nexport const AUTO_BUILD: DeepPartial<AutoConfig> = {\n play: {\n value: false,\n options: AUTOPLAY_UI_OPTIONS\n },\n pause: {\n value: false,\n options: AUTOPLAY_UI_OPTIONS\n },\n next: {\n value: 20000,\n preview: {\n usePoster: true,\n time: 4,\n tease: true,\n },\n },\n};\n","import { BasePlug } from \"../../base\";\r\nimport type { AutoConfig, AptAutoplayOption } from \"./types\";\r\nimport { AUTO_BUILD } from \"./build\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { CtlrConfig } from \"@defs/config\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\nimport { isStr } from \"@utils/obj\";\r\nimport { clamp, safeNum } from \"@utils/num\";\r\nimport { addSources } from \"@utils/media\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { MenuRegistry } from \"@core/registries\";\r\n\r\nexport class AutoPlug extends BasePlug<AutoConfig> {\r\n public static readonly plugName = \"auto\";\r\n public static readonly BUILD = AUTO_BUILD;\r\n protected nextPreview: HTMLVideoElement | null = null;\r\n protected canAutoMovePlaylist = true;\r\n\r\n public override wire(): void {\r\n // Plug Watchers\r\n this.ctlr.plug(\"playlist\")?.state.watch(\"currentIndex\", () => (this.canAutoMovePlaylist = true), { signal: this.signal });\r\n // Ctlr Config Watchers\r\n this.ctlr.config.watch(\"settings.auto.play.value\", this.forwardAutoPlay, { init: \"auto\", signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"state.currentTime\", this.handleCurrentTimeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State ---------\r\n this.ctlr.state.on(\"mediaParentIntersecting\", this.handleMediaParentIntersecting, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.auto.next.preview.usePoster\", this.handleNextPreviewUsePoster, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.auto.next.preview.tease\", this.handleNextPreviewTease, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.auto.next.preview.time\", this.handleNextPreviewTime, { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected forwardAutoPlay(value?: boolean | AptAutoplayOption): void {\r\n silence(() => (this.media.intent.autoplay = isStr(value) ? false : !!value));\r\n }\r\n\r\n protected handleCurrentTimeState({ value: curr }: REvent<CtlrMedia, \"state.currentTime\">): void {\r\n if (this.media.status.readyState && curr && this.ctlr.payload.wired && Math.floor((this.settings.time.end ?? this.media.status.duration) - curr) <= this.config.next.value / 1000) this.autonextMedia();\r\n }\r\n\r\n protected handleMediaParentIntersecting(): void {\r\n this.mediaAptAutoplay(this.config.pause.value, false), this.mediaAptAutoplay();\r\n }\r\n\r\n protected handleNextPreviewUsePoster({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.usePoster\">): void {\r\n if (!this.nextPreview || (value && this.nextPreview.poster)) return;\r\n if (object.tease) this.config.next.preview.tease = true;\r\n else this.nextPreview.currentTime = object.time;\r\n }\r\n\r\n protected handleNextPreviewTease({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.tease\">): void {\r\n if (!this.nextPreview) return;\r\n this.nextPreview.ontimeupdate = () => this.nextPreview && Number(this.nextPreview.currentTime) >= object.time && this.nextPreview.pause();\r\n if (value && (!object.usePoster || !this.nextPreview.poster)) this.nextPreview.play();\r\n }\r\n\r\n protected handleNextPreviewTime({ target: { value, object } }: REvent<CtlrConfig, \"settings.auto.next.preview.time\">): void {\r\n if (!this.nextPreview || (object.usePoster && this.nextPreview.poster)) return;\r\n this.nextPreview.currentTime = Number(value);\r\n }\r\n\r\n protected mediaAptAutoplay(auto = this.config.play.value, bool = true, p = this.ctlr.state.mediaParentIntersecting ? \"in\" : \"out\"): void {\r\n if (auto === `${p}-view-always`) this.media.intent.paused = !bool;\r\n else if (auto === `${p}-view` && this.ctlr.state.readyState < 3) this.media.intent.paused = !bool; // #PATIENT: only after first play\r\n }\r\n\r\n protected autonextMedia(): void {\r\n if (!this.media.status.loadedMetadata || !this.ctlr.config.playlist.content || this.config.next.value < 0 || !this.canAutoMovePlaylist || this.ctlr.plug(\"playlist\")!.state.currentIndex >= this.ctlr.config.playlist.content.length - 1 || this.media.state.paused || this.media.status.waiting) return;\r\n this.canAutoMovePlaylist = false;\r\n const count = clamp(1, Math.round(safeNum(this.settings.time.end ?? this.media.status.duration) - safeNum(this.media.state.currentTime)), this.config.next.value / 1000),\r\n m = this.ctlr.config.playlist.content[this.ctlr.plug(\"playlist\")!.state.currentIndex + 1].media;\r\n const nVTId = this.ctlr.plug(\"settings.toasts\")?.toast?.(\"\", {\r\n autoClose: count * 1000,\r\n hideProgressBar: false,\r\n position: \"bottom-right\",\r\n bodyHTML: `<span title=\"Play next ${this.media.type}\" class=\"tmg-media-next-preview-wrapper\">\r\n <button type=\"button\"><svg viewBox=\"0 0 25 25\"><path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" /></svg></button>\r\n <video class=\"tmg-media-next-preview\" poster=\"${m.intent.poster || m.settings.metadata.artwork?.[0]?.src || \"\"}\" src=\"${m.intent.src || \"\"}\" muted playsinline webkit-playsinline preload=\"metadata\"></video>\r\n <p>${this.ctlr.plug(\"settings.time\")?.toTimeText(NaN) ?? \"0:00\"}</p>\r\n </span>\r\n <span class=\"tmg-media-next-info\"><h2>Next ${capitalize(this.media.type)} in <span class=\"tmg-media-next-countdown\">${count}</span></h2>${m.settings.metadata.title ? `<p class=\"tmg-media-next-title\">${m.settings.metadata.title}</p>` : \"\"}</span>`,\r\n onTimeUpdate: (time: number, el = this.ctlr.queryDOM(\".tmg-media-next-countdown\")) => el && (el.textContent = String(Math.round((count * 1000 - time) / 1000) || 1)),\r\n onClose: (elapsed?: boolean) => void (removeListeners(), elapsed && this.ctlr.plug(\"playlist\")?.next()),\r\n tag: \"tmg-anvi\",\r\n signal: this.signal,\r\n });\r\n const evtPaths = [\"state.currentTime\", \"state.paused\", \"status.waiting\"] as const,\r\n cleanUp = (permanent = false) => (nVTId && t007.toast?.dismiss(nVTId, \"instant\"), (this.nextPreview = null), (this.canAutoMovePlaylist = !permanent)),\r\n strictCleanUp = () => !this.media.status.ended && cleanUp(),\r\n autoCleanUp = () => Math.floor(safeNum((this.settings.time.end ?? this.media.status.duration) - this.media.state.currentTime)) > this.config.next.value / 1000 && cleanUp(),\r\n removeListeners = () => evtPaths.forEach((e, i) => this.media.off(e, !i ? autoCleanUp : strictCleanUp));\r\n evtPaths.forEach((e, i) => this.media.on(e, !i ? autoCleanUp : strictCleanUp, { signal: this.signal }));\r\n const nVP = (this.nextPreview = this.ctlr.queryDOM<HTMLVideoElement>(\".tmg-media-next-preview\"))!;\r\n if (m.intent.sources?.length) addSources(m.intent.sources, nVP);\r\n for (const e of [\"loadedmetadata\", \"loaded\", \"durationchange\"] as const) nVP?.addEventListener(e, ({ target: p }) => ((p as HTMLVideoElement).nextElementSibling!.textContent = this.ctlr.plug(\"settings.time\")?.toTimeText((p as HTMLVideoElement).duration) ?? \"-:--\"), { signal: this.signal });\r\n this.config.next.preview = this.config.next.preview; // force update\r\n nVP?.previousElementSibling?.addEventListener(\"click\", () => (cleanUp(true), this.ctlr.plug(\"playlist\")?.next()), { capture: true, signal: this.signal });\r\n }\r\n\r\n protected override registerMenu(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.menu.registerFirst(MenuRegistry.get(\"settings.auto\")?.(this));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.auto\": typeof AutoPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n auto: AutoConfig;\r\n }\r\n}\r\n","import { BasePlug } from \".\";\r\nimport { MediaIntent, MediaFeatures } from \"@defs/contract\";\r\nimport type { OptRange } from \"@defs/generics\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport interface SliderState {\r\n aptValue: number;\r\n}\r\n\r\nexport abstract class BaseSliderPlug<Config extends OptRange, State extends SliderState> extends BasePlug<Config, State> {\r\n public shouldToggle = false;\r\n public sliderAptValue = 100;\r\n public shouldSetAptValue = false;\r\n protected nextToggle: boolean | null = null;\r\n protected nextLevel: number | null = null;\r\n // ABSTRACT HOOKS: The Child classes will define these to route the math to the right place\r\n protected get prefix(): keyof MediaIntent {\r\n return this.name as keyof MediaIntent;\r\n } // e.g., \"volume\" or \"brightness\"\r\n protected abstract get toggleKey(): keyof MediaIntent; // e.g., \"muted\" or \"dark\"\r\n\r\n // --- 1. Shared CSS Boost & Limits Math ---\r\n protected handleMin(min: number): void {\r\n if (this.media.state[this.prefix] < min) this.media.intent[this.prefix] = min as never;\r\n if (this.state.aptValue < min) this.state.aptValue = min;\r\n }\r\n protected handleMax(max: number): void {\r\n if (this.media.state[this.prefix] > max) this.media.intent[this.prefix] = max as never;\r\n if (this.state.aptValue > max) this.state.aptValue = max;\r\n this.media.container.classList.toggle(`tmg-media-${this.prefix}-boost`, max > 100);\r\n this.settings.css[`${this.prefix}SliderPercent`] = Math.round((100 / max) * 100);\r\n this.settings.css[`max${capitalize(this.prefix)}Ratio`] = max / 100;\r\n }\r\n protected handleSliderState(value: number): void {\r\n const strLevel = value === 0 ? this.toggleKey : value < 50 ? \"low\" : value <= 100 ? \"high\" : \"boost\",\r\n percent = (value - 0) / (this.config.max - 0);\r\n this.media.container.dataset[`${this.prefix}Level`] = strLevel;\r\n const CSS = this.settings.css,\r\n capped = capitalize(this.prefix);\r\n if (this.config.max > 100) if (value <= 100) {\n CSS[`current${capped}SliderPosition`] = value / 100;\n CSS[`current${capped}SliderBoostPosition`] = CSS[`${this.prefix}SliderBoostPercent`] = 0;\n } else {\n CSS[`current${capped}SliderPosition`] = 1;\n CSS[`current${capped}SliderBoostPosition`] = (value - 100) / (this.config.max - 100);\n CSS[`${this.prefix}SliderBoostPercent`] = CSS[`${this.prefix}SliderPercent`];\n } else CSS[`current${capped}SliderPosition`] = percent;\r\n }\r\n // --- 2. The \"Sticky Note\" Architecture ---\r\n protected setValueState(value: number, isNext = this.nextLevel === value): void {\r\n if (!isNext && value > 0) silence(() => (this.media.intent[this.toggleKey] = (this.nextToggle = false) as never));\r\n }\r\n protected setToggleState(toggled: boolean, isNext = this.nextToggle === toggled): void {\r\n if (toggled) {\r\n if (this.media.state[this.prefix]) (this.state.aptValue = this.media.state[this.prefix]), (this.shouldSetAptValue = true);\r\n this.shouldToggle = true;\r\n if (!isNext && this.media.state[this.prefix]) silence(() => (this.media.intent[this.prefix] = (this.nextLevel = 0) as never));\r\n } else {\r\n const restore = this.shouldSetAptValue ? this.state.aptValue : this.media.state[this.prefix];\r\n if (!isNext) silence(() => (this.media.intent[this.prefix] = (this.nextLevel = restore ? restore : this.sliderAptValue) as never));\r\n this.shouldToggle = this.shouldSetAptValue = false;\r\n }\r\n }\r\n // --- 3. The Slider UI Input ---\r\n public handleSliderInput(value: number): void {\r\n this.shouldToggle = this.shouldSetAptValue = false;\r\n this.media.intent[this.prefix] = value as never;\r\n if (value > 5) this.sliderAptValue = value;\r\n }\r\n public toggle(option?: \"auto\"): void {\r\n if (option === \"auto\" && this.shouldSetAptValue && !this.state.aptValue) this.state.aptValue = this.config.skip;\r\n this.media.intent[this.toggleKey] = !(this.media.state[this.toggleKey] || !this.media.state[this.prefix]) as never;\r\n }\r\n // --- 4. The Mathematical Grid Snapping ---\r\n public changeAptValue(value: number): void {\r\n const sign = value >= 0 ? \"+\" : \"-\";\r\n value = Math.abs(value);\r\n let level = Math.round(this.shouldSetAptValue ? this.state.aptValue : this.media.state[this.prefix]);\r\n if (sign === \"-\") {\r\n if (level > this.config.min) level -= level % value || value;\r\n this.media.features[this.prefix as keyof MediaFeatures] && this.ctlr.plug(\"settings.notifiers\")?.notify(level === 0 ? `${this.prefix}${this.toggleKey}` : `${this.prefix}down`);\r\n } else {\r\n if (level < this.config.max) level += level % value ? value - (level % value) : value;\r\n this.media.features[this.prefix as keyof MediaFeatures] && this.ctlr.plug(\"settings.notifiers\")?.notify(`${this.prefix}up`);\r\n }\r\n this.shouldSetAptValue ? (this.state.aptValue = level) : (this.media.intent[this.prefix] = level as never);\r\n }\r\n} // ts, look what u made me do, \"never\" did I imagine :)\r\n","import { BrightnessConfig } from \".\";\r\n\r\nexport const BRIGHTNESS_BUILD: Partial<BrightnessConfig> = {\r\n min: 0,\r\n max: 150,\r\n skip: 5,\r\n};\r\n","import { BaseSliderPlug } from \"@plugs/base/slider\";\nimport type { BrightnessConfig, BrightnessState } from \"./types\";\nimport { BRIGHTNESS_BUILD } from \"./build\";\nimport type { Controller } from \"@core/controller\";\nimport { REvent } from \"sia-reactor\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { clamp } from \"@utils/num\";\n\nexport class BrightnessPlug extends BaseSliderPlug<BrightnessConfig, BrightnessState> {\n public static readonly plugName = \"brightness\";\n public static readonly BUILD = BRIGHTNESS_BUILD;\n protected get toggleKey() {\n return \"dark\" as const;\n }\n\n constructor(ctlr: Controller, config = ctlr.settings.brightness) {\n super(ctlr, config, { aptValue: 100 });\n }\n\n public override wire(): void {\n // Variables Assignment\n const brightness = this.media.intent.brightness ?? this.media.state.brightness ?? this.settings.css.brightness;\n this.state.aptValue = clamp(this.config.min, brightness, this.config.max);\n this.shouldToggle = this.shouldSetAptValue = this.media.intent.dark ?? false;\n this.media.intent.brightness = this.shouldToggle ? 0 : this.state.aptValue;\n // Ctlr Media Setters\n this.media.set(\"intent.brightness\", (v) => clamp(this.shouldToggle ? 0 : this.config.min, v, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\n // ----------- Watchers\n this.media.watch(\"tech\", () => ((this.media.features.brightness ||= true), (this.media.features.dark ||= true)), { init: true, signal: this.signal });\n // ----------- Listeners\n this.media.on(\"intent.brightness\", this.handleBrightnessIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"intent.dark\", this.handleDarkIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"state.brightness\", (e) => this.handleSliderState(e.value), { init: this.ctlr.payload.wired, signal: this.signal });\n // ---- Config ---------\n this.ctlr.config.on(\"settings.brightness.min\", (e) => this.handleMin(e.value), { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.brightness.max\", (e) => this.handleMax(e.value), { init: true, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"dark\", { fn: this.handleKeyDark, keyboard: { phase: \"keyup\" } });\n this.ctlr.registerAction(\"brightnessUp\", { fn: this.handleKeyBrightnessUp, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"brightnessDown\", { fn: this.handleKeyBrightnessDown, keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleBrightnessIntent(e: REvent<CtlrMedia, \"intent.brightness\">, isNext = this.nextLevel === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextLevel = null;\n this.setValueState(e.value, isNext);\n this.settings.css.brightness = e.value;\n this.media.state.brightness = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleDarkIntent(e: REvent<CtlrMedia, \"intent.dark\">, isNext = this.nextToggle === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextToggle = null;\n else if (this.media.state.dark === e.value && !!this.media.state.brightness) return e.resolve(this.name);\n this.setToggleState(e.value, isNext);\n this.media.state.dark = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleKeyDark = (): void => {\n this.toggle(\"auto\");\n this.media.features.brightness && this.media.wonce(\"state.brightness\", (v) => this.ctlr.plug(\"settings.notifiers\")?.notify(!v ? \"brightnessdark\" : \"brightnessup\"), { signal: this.signal });\n };\n protected handleKeyBrightnessUp = (): void => {\n this.changeAptValue(this.ctlr.plug(\"settings.keys\")?.getModded(\"brightness\", \"\", this.config.skip) ?? this.config.skip);\n };\n protected handleKeyBrightnessDown = (): void => {\n this.changeAptValue(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"brightness\", \"\", this.config.skip) ?? this.config.skip));\n };\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.brightness\": typeof BrightnessPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n brightness: BrightnessConfig;\n }\n}\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { CaptionsConfig } from \"./types\";\r\n\r\nexport const STYLE_PATHS = [\"captions.font.family.value\", \"captions.font.size.value\", \"captions.font.color.value\", \"captions.font.opacity.value\", \"captions.font.weight.value\", \"captions.font.variant.value\", \"captions.background.color.value\", \"captions.background.opacity.value\", \"captions.window.color.value\", \"captions.window.opacity.value\", \"captions.characterEdgeStyle.value\", \"captions.textAlignment.value\"] as const;\r\nexport const ROTATE_PATHS = [\"captions.font.family.value\", \"captions.font.weight.value\", \"captions.font.variant.value\", \"captions.font.opacity.value\", \"captions.background.opacity.value\", \"captions.window.opacity.value\", \"captions.characterEdgeStyle.value\", \"captions.textAlignment.value\"] as const;\r\n\r\nexport const CAPTIONS_BUILD: DeepPartial<CaptionsConfig> = {\r\n multiple: false,\r\n allowOverride: true,\r\n font: {\r\n family: {\r\n value: \"\",\r\n options: [\r\n { value: \"\", display: \"Default\" },\r\n { value: \"monospace\", display: \"Monospace\" },\r\n { value: \"sans-serif\", display: \"Sans Serif\" },\r\n { value: \"serif\", display: \"Serif\" },\r\n { value: \"cursive\", display: \"Cursive\" },\r\n { value: \"fantasy\", display: \"Fantasy\" },\r\n { value: \"system-ui\", display: \"System UI\" },\r\n { value: \"arial\", display: \"Arial\" },\r\n { value: \"verdana\", display: \"Verdana\" },\r\n { value: \"tahoma\", display: \"Tahoma\" },\r\n { value: \"times new roman\", display: \"Times New Roman\" },\r\n { value: \"georgia\", display: \"Georgia\" },\r\n { value: \"impact\", display: \"Impact\" },\r\n { value: \"comic sans ms\", display: \"Comic Sans MS\" },\r\n ],\r\n },\r\n size: {\r\n min: 100,\r\n max: 400,\r\n value: 100,\r\n skip: 100,\r\n options: [\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n { value: 150, display: \"150%\" },\r\n { value: 200, display: \"200%\" },\r\n { value: 300, display: \"300%\" },\r\n { value: 400, display: \"400%\" },\r\n ],\r\n },\r\n color: {\r\n value: \"#ffffff\",\r\n options: [\r\n { value: \"#ffffff\", display: \"White\" },\r\n { value: \"#ffff00\", display: \"Yellow\" },\r\n { value: \"#00ff00\", display: \"Green\" },\r\n { value: \"#00ffff\", display: \"Cyan\" },\r\n { value: \"#0000ff\", display: \"Blue\" },\r\n { value: \"#ff00ff\", display: \"Magenta\" },\r\n { value: \"#ff0000\", display: \"Red\" },\r\n { value: \"#000000\", display: \"Black\" },\r\n ],\r\n },\r\n opacity: {\r\n value: 100,\r\n options: [\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n ],\r\n },\r\n weight: {\r\n value: \"400\",\r\n options: [\r\n { value: \"100\", display: \"Thin\" },\r\n { value: \"200\", display: \"Extra Light\" },\r\n { value: \"300\", display: \"Light\" },\r\n { value: \"400\", display: \"Normal\" },\r\n { value: \"500\", display: \"Medium\" },\r\n { value: \"600\", display: \"Semi Bold\" },\r\n { value: \"700\", display: \"Bold\" },\r\n { value: \"800\", display: \"Extra Bold\" },\r\n { value: \"900\", display: \"Black\" },\r\n ],\r\n },\r\n variant: {\r\n value: \"normal\",\r\n options: [\r\n { value: \"normal\", display: \"Normal\" },\r\n { value: \"small-caps\", display: \"Small Caps\" },\r\n { value: \"all-small-caps\", display: \"All Small Caps\" },\r\n ],\r\n },\r\n },\r\n background: {\r\n color: {\r\n value: \"#000000\",\r\n options: [\r\n { value: \"#ffffff\", display: \"White\" },\r\n { value: \"#ffff00\", display: \"Yellow\" },\r\n { value: \"#00ff00\", display: \"Green\" },\r\n { value: \"#00ffff\", display: \"Cyan\" },\r\n { value: \"#0000ff\", display: \"Blue\" },\r\n { value: \"#ff00ff\", display: \"Magenta\" },\r\n { value: \"#ff0000\", display: \"Red\" },\r\n { value: \"#000000\", display: \"Black\" },\r\n ],\r\n },\r\n opacity: {\r\n value: 75,\r\n options: [\r\n { value: 0, display: \"0%\" },\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n ],\r\n },\r\n },\r\n window: {\r\n color: {\r\n value: \"#000000\",\r\n options: [\r\n { value: \"#ffffff\", display: \"White\" },\r\n { value: \"#ffff00\", display: \"Yellow\" },\r\n { value: \"#00ff00\", display: \"Green\" },\r\n { value: \"#00ffff\", display: \"Cyan\" },\r\n { value: \"#0000ff\", display: \"Blue\" },\r\n { value: \"#ff00ff\", display: \"Magenta\" },\r\n { value: \"#ff0000\", display: \"Red\" },\r\n { value: \"#000000\", display: \"Black\" },\r\n ],\r\n },\r\n opacity: {\r\n value: 0,\r\n options: [\r\n { value: 0, display: \"0%\" },\r\n { value: 25, display: \"25%\" },\r\n { value: 50, display: \"50%\" },\r\n { value: 75, display: \"75%\" },\r\n { value: 100, display: \"100%\" },\r\n ],\r\n },\r\n },\r\n characterEdgeStyle: {\r\n value: \"none\",\r\n options: [\r\n { value: \"none\", display: \"None\" },\r\n { value: \"drop-shadow\", display: \"Drop Shadow\" },\r\n { value: \"raised\", display: \"Raised\" },\r\n { value: \"depressed\", display: \"Depressed\" },\r\n { value: \"outline\", display: \"Outline\" },\r\n ],\r\n },\r\n textAlignment: {\r\n value: \"left\",\r\n options: [\r\n { value: \"left\", display: \"Left\" },\r\n { value: \"center\", display: \"Center\" },\r\n { value: \"right\", display: \"Right\" },\r\n ],\r\n },\r\n previewTimeout: 1500,\r\n};\r\n","import { BasePlug } from \"../../base\";\nimport type { Controller } from \"@core/controller\";\nimport type { CueLike, CaptionsConfig, CaptionsState } from \"./types\";\nimport { CAPTIONS_BUILD } from \"./build\";\nimport { ROTATE_PATHS, STYLE_PATHS } from \"./build\";\nimport type { CaptionsView } from \"@components/captionsview\";\nimport { ComponentRegistry, MenuRegistry } from \"@core/registries\";\nimport { type REvent, type PathValue, TERMINATOR } from \"sia-reactor\";\nimport { setPath } from \"sia-reactor/utils\";\nimport type { CtlrConfig } from \"@defs/config\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { rotateAny } from \"@utils/num\";\nimport { getTrackIdx } from \"@utils/media\";\nimport { camelize } from \"@utils/str\";\nimport { silence } from \"sia-reactor/modules\";\nimport { parseUIObj } from \"@utils/obj\";\n\nexport class CaptionsPlug extends BasePlug<CaptionsConfig, CaptionsState> {\n public static readonly plugName = \"captions\";\n public static readonly BUILD = CAPTIONS_BUILD;\n protected view: CaptionsView | null = null;\n protected iView: CaptionsView | null = null; // info view\n protected shadowCurrentIndex?: number;\n protected secondaryViews = new Map<number, CaptionsView>();\n\n constructor(ctlr: Controller, config = ctlr.settings.captions) {\n super(ctlr, config, { secondaryTracks: [] });\n }\n\n public override mount(): void {\n // Variables Assignment\n if ((this.view = ComponentRegistry.init(\"captionsview\", this.ctlr))) this.ctlr.DOM.captionsContainer = this.view.element;\n this.iView = ComponentRegistry.init(\"captionsview\", this.ctlr);\n }\n\n public override wire(): void {\n // Variables Assignment\n this.config.multiple ??= false;\n this.settings.css.currentCaptionsX, this.settings.css.currentCaptionsY; // Read once so CSSPlug can cache computed values.\n // State Watchers\n this.state.watch(\"secondaryTracks\", this.syncTracks, { signal: this.signal });\n // Ctlr Media Setters\n this.media.set(\"state.currentTextTrack\", (v) => (this.ctlr.isNativeEl && v !== this.shadowCurrentIndex ? TERMINATOR : v), { signal: this.signal }); // #DICTATOR: reliable authority\n // ----------- Watchers\n this.media.watch(\"tech\", () => ((this.media.features.textTracks ||= this.ctlr.isNativeEl), (this.media.features.currentTextTrack ||= this.ctlr.isNativeEl && this.media.features.textTracks), (this.media.features.textVisible ||= this.media.features.activeCue), (this.media.features.multipleCaptions ||= this.media.features.currentTextTrack)), { init: true, signal: this.signal });\n // ---- Config -------\n this.ctlr.config.watch(\"settings.captions.multiple\", this.syncTracks, { signal: this.signal });\n for (const p of STYLE_PATHS) this.ctlr.config.watch(`settings.${p}`, (value) => ((this.settings.css[camelize(p.replace(\".value\", \"\"), /\\./)] = p.includes(\"opacity\") ? +value / 100 : value), this.view?.syncSize()), { init: true, signal: this.signal });\n // ---- Media Listeners\n this.media.on(\"intent.currentTextTrack\", this.handleCurrentTextTrackIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"intent.textVisible\", this.handleTextVisibleIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"state.currentTextTrack\", this.syncUI, { init: this.ctlr.payload.wired, signal: this.signal });\n this.media.on(\"state.textVisible\", this.handleTextVisibleState, { init: true, signal: this.signal });\n this.media.on(\"state.currentTime\", () => (this.view?.syncKaraoke(), this.secondaryViews.forEach((view) => view.syncKaraoke())), { init: this.ctlr.payload.wired, signal: this.signal });\n this.media.on(\"state.src\", () => ((this.state.secondaryTracks = []), (this.config.multiple = false)), { signal: this.signal });\n this.media.on(\"status.textTracks\", () => (this.syncTracks(), this.syncUI()), { signal: this.signal });\n this.media.on(\"status.activeCue\", this.handleActiveCueStatus, { init: this.ctlr.payload.wired, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"captions\", { fn: () => (this.toggleVisible(), this.media.features.textVisible && this.ctlr.plug(\"settings.notifiers\")?.notify(\"captions\")), keyboard: { phase: \"keyup\" } });\n this.ctlr.registerAction(\"captionsFontSizeUp\", { fn: () => this.changeFontSize(this.ctlr.plug(\"settings.keys\")?.getModded(\"captionsFontSize\", \"\", this.config.font.size.skip) ?? this.config.font.size.skip), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontSizeDown\", { fn: () => this.changeFontSize(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"captionsFontSize\", \"\", this.config.font.size.skip) ?? this.config.font.size.skip)), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontFamily\", { fn: () => this.rotateProp(parseUIObj(this.config).font.family.values, \"captions.font.family.value\", false, true), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontWeight\", { fn: () => this.rotateProp(parseUIObj(this.config).font.weight.values, \"captions.font.weight.value\", false, true), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontVariant\", { fn: () => this.rotateProp(parseUIObj(this.config).font.variant.values, \"captions.font.variant.value\", false, true), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsFontOpacity\", { fn: () => this.rotateProp(parseUIObj(this.config).font.opacity.values, \"captions.font.opacity.value\"), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsBackgroundOpacity\", { fn: () => this.rotateProp(parseUIObj(this.config).background.opacity.values, \"captions.background.opacity.value\"), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsWindowOpacity\", { fn: () => this.rotateProp(parseUIObj(this.config).window.opacity.values, \"captions.window.opacity.value\"), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsCharacterEdgeStyle\", { fn: () => this.rotateProp(parseUIObj(this.config).characterEdgeStyle.values, \"captions.characterEdgeStyle.value\", false), keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"captionsTextAlignment\", { fn: () => this.rotateProp(parseUIObj(this.config).textAlignment.values, \"captions.textAlignment.value\", false), keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleCurrentTextTrackIntent(e: REvent<CtlrMedia, \"intent.currentTextTrack\">): void {\n if (!this.ctlr.isNativeEl) return e.reject(this.name);\n this.media.tech.when(\"loadedMetadata\", e, () => {\n this.media.state.currentTextTrack = this.shadowCurrentIndex = e.value as number; // #VALIDATED: mediated for cast conformity; no-opy\n this.syncTracks();\n });\n e.resolve(this.name);\n }\n\n protected handleTextVisibleIntent(e: REvent<CtlrMedia, \"intent.textVisible\">): void {\n if (e.resolved) return;\n if (!this.media.features.activeCue) return e.reject(this.name); // this ain't no cue mega lib\n this.media.tech.when(\"loadedMetadata\", e, () => {\n if (e.value && this.media.status.textTracks.length && this.media.state.currentTextTrack === -1) silence(() => (this.media.intent.currentTextTrack = Math.max(0, getTrackIdx(this.media.element, \"Text\", this.media.state.tracks.find((t) => t.default)?.id, this.media.status.textTracks))));\n const cssPlug = this.ctlr.plug(\"settings.css\");\n if (cssPlug) (this.settings.css.currentCaptionsX = cssPlug._cache.currentCaptionsX!), (this.settings.css.currentCaptionsY = cssPlug._cache.currentCaptionsY!);\n this.media.state.textVisible = e.value;\n });\n e.resolve(this.name); // hid everytin already but need minors to shutup\n }\n\n protected handleTextVisibleState({ value }: REvent<CtlrMedia, \"state.textVisible\">): void {\n this.media.container.classList.toggle(\"tmg-media-captions\", this.canVisible && value);\n const track = this.media.status.textTracks[this.media.state.currentTextTrack]; // native, hls, dash compat\n value && track && this.iView?.preview(this.getPreviewTip(track));\n }\n\n protected handleActiveCueStatus({ value }: REvent<CtlrMedia, \"status.activeCue\">): void {\n !(!this.ctlr.isUIActive(\"captions\") && this.view?.isPreviewing()) && this.view?.render(value);\n }\n\n protected handleCueChange(e?: globalThis.Event | { target?: TextTrack }, track = e?.target as TextTrack | null): void {\n const idx = Array.prototype.indexOf.call(this.media.status.textTracks, track);\n track && idx !== -1 && idx !== this.media.state.currentTextTrack && this.secondaryViews.get(idx)?.render(track.activeCues?.[0] || null);\n }\n\n public toggleVisible(): void {\n if (!this.canVisible) return this.view?.preview(this.media.features.textTracks ? `No captions available for this ${this.media.type}` : `Captions not supported for this ${this.media.type}`);\n this.media.intent.textVisible = !this.media.state.textVisible;\n }\n\n public changeFontSize(value: number): void {\n const sign = value >= 0 ? \"+\" : \"-\";\n value = Math.abs(value);\n const size = Number(this.settings.css.captionsFontSize);\n switch (sign) {\n case \"-\":\n if (size > this.config.font.size.min) this.config.font.size.value = size - (size % value || value);\n break;\n default:\n if (size < this.config.font.size.max) this.config.font.size.value = size + (size % value ? size % value : value);\n }\n this.media.features.activeCue && this.view && this.ctlr.config.stall(this.view.preview), this.iView && this.ctlr.config.stall(() => this.iView!.isPreviewing() && this.iView!.preview(this.getPreviewTip()));\n }\n\n protected rotateProp(steps: PathValue<CtlrConfig[\"settings\"], (typeof ROTATE_PATHS)[number]>[], prop: (typeof ROTATE_PATHS)[number], numeric = true, rerender = false): void {\n if (!steps.length) return;\n const cssVal = this.settings.css[camelize(prop.replace(\".value\", \"\"), /\\./)];\n setPath(this.settings, prop, rotateAny((numeric ? Number : String)(prop.includes(\"opacity\") ? Number(cssVal) * 100 : cssVal), steps));\n rerender && this.media.features.activeCue && this.view && this.ctlr.config.stall(this.view.preview);\n }\n\n public syncUI(): void {\n this.media.container.classList.toggle(\"tmg-media-captions\", this.canVisible && this.media.state.textVisible);\n this.media.container.dataset.trackKind = this.getTrackKind();\n }\n\n public get canVisible(): boolean {\n return (this.media.features.textTracks && this.media.features.activeCue ? !!this.media.status.textTracks.length : !this.media.features.activeCue) && !!this.media.features.textVisible;\n }\n\n public getTrackKind(track = this.media.status.textTracks[this.media.state.currentTextTrack]): string {\n return (track?.kind ?? track?.type) || \"captions\";\n }\n\n public getPreviewTip(track = this.media.status.textTracks[this.media.state.currentTextTrack]): CueLike {\n return { text: `${track?.label ?? track?.name} ${this.getTrackKind(track)} \\n Click ⚙ for settings`, region: { viewportAnchorX: 10, viewportAnchorY: 20 } };\n }\n\n protected syncTracks(): void {\n const list = this.media.status.textTracks;\n if (!list) return;\n for (const [idx, view] of this.secondaryViews) {\n if (!this.config.multiple || !this.state.secondaryTracks.includes(idx)) {\n view.destroy(), this.secondaryViews.delete(idx);\n const track = list[idx];\n this.ctlr.isNativeEl && idx !== this.media.state.currentTextTrack && track && ((track.mode = \"disabled\"), track.removeEventListener(\"cuechange\", this.handleCueChange));\n }\n }\n if (!this.ctlr.isNativeEl) return;\n for (let i = 0, len = list.length; i < len; i++) {\n const isSecondary = this.config.multiple && this.state.secondaryTracks.includes(i);\n list[i].mode = i === this.media.state.currentTextTrack || isSecondary ? \"hidden\" : \"disabled\";\n if (isSecondary && !this.secondaryViews.has(i)) {\n const view = ComponentRegistry.init(\"captionsview\", this.ctlr, { secondaryOrder: this.secondaryViews.size + 1 });\n if (view) this.secondaryViews.set(i, view), list[i].addEventListener(\"cuechange\", this.handleCueChange, { signal: this.signal }), this.handleCueChange({ target: list[i] });\n }\n }\n }\n\n protected override registerMenu(items = MenuRegistry.get(\"settings.captions\")?.(this), menu = this.ctlr.plug(\"settings.settingsView\")?.menu): void {\n if (items && menu) menu.unregister(\"captions\"), Array.isArray(items) ? items.forEach((item) => menu.registerBefore(\"chapters\", item)) : menu.registerBefore(\"chapters\", items);\n }\n\n protected override onDestroy(): void {\n this.view?.destroy(), this.iView?.destroy();\n for (const view of this.secondaryViews.values()) view.destroy();\n this.secondaryViews.clear();\n const list = this.media.status.textTracks;\n if (list) for (let i = 0; i < list.length; i++) list[i].removeEventListener(\"cuechange\", this.handleCueChange);\n if (this.ctlr.DOM.captionsContainer === this.view?.element) this.ctlr.DOM.captionsContainer = null;\n super.onDestroy();\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.captions\": typeof CaptionsPlug;\n }\n interface ControllerDOMMap {\n captionsContainer?: HTMLDivElement | null;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n captions: CaptionsConfig;\n }\n}\n\ndeclare module \"@plugs/settings/css/types\" {\n interface CSSMap {\n captionsCharacterEdgeStyle: \"none\" | \"raised\" | \"depressed\" | \"outline\" | \"drop-shadow\";\n captionsTextAlignment: \"left\" | \"center\" | \"right\";\n }\n}\n","import { CastConfig } from \"./types\";\r\n\r\nexport const CAST_BUILD: CastConfig = { options: {} };\r\n","import { NOOP } from \"sia-reactor\";\r\nimport { parseRomanNum } from \"./num\";\r\nimport { mimeTypes, VIDEO_EXTENSIONS } from \"./match\";\r\n\r\n// File Size Formatting\r\nexport { formatSize } from \"@t007/utils\";\r\n\r\n// Extension Helpers\r\nexport function getExtension(fn: string): string {\r\n return fn.slice(fn.lastIndexOf(\".\") + 1).toLowerCase() ?? \"\";\r\n}\r\n\r\nexport function noExtension(fn: string, generic = false): string {\r\n return fn.replace(!generic ? VIDEO_EXTENSIONS : /(?:\\.[a-z0-9]{2,5})+$/i, \"\");\r\n}\r\n\r\n// MIME Type Resolution\r\nexport function getMimeTypeFromExtension(name: string) {\r\n return mimeTypes[getExtension(name)] || \"application/octet-stream\"; // Default to binary stream\r\n}\r\n\r\n// Sorters\r\nexport function smartFlatSort<F extends { name: string }>(files: F[], debug = false, stripExt = noExtension, log = debug ? (title: string, ...body: any[]) => console.log(`[Sorter][${title}]`, ...body) : NOOP, bCache = new Map(), kCache = new Map(), groups = new Map()) {\r\n debug && console.time(\"[Sorter]\"), log(\"Init\", `Sorting ${files.length} items...`);\r\n // Extracts the main series title + optional season\r\n function getNamePrefix(name: string, base = stripExt(name), match = base.match(/(.*?)(?:(?:s|season)[\\s\\-]?)(\\d+).*?(?:(?:e|ep|episode)[\\s\\-]?)(\\d+)?/i)) {\r\n // prettier-ignore\r\n return bCache.set(name, base), (match ? (match[1].replace(/[^a-z0-9]+/gi, \" \").trim().toLowerCase() + \" s\" + match[2].padStart(2, \"0\")) : base.replace(/(?:(?:e|ep|episode|part)[\\s\\-]?)\\d+/gi, \"\").replace(/[^a-z0-9]+/gi, \" \").trim().toLowerCase()) || \"unknown\";\r\n }\r\n // Extract episode key: season, episode number(s), or special flags\r\n function extractEpisodeKey(name: string, base = bCache.get(name).toLowerCase()) {\r\n // Match lazy formats like \"S02 - Episode 3\", \"S3 ep4\", \"S5E 7\" (not strict SxxEyy)\r\n const combo = base.match(/(?:(?:s|season)[\\s\\-]?)(\\d+).*?(?:(?:e|ep|episode)[\\s\\-]?)(\\d+)/);\r\n if (combo) return [parseInt(combo[1]), parseInt(combo[2])];\r\n // Match \"1x01\", \"5x12\", alternate style used by some encoders or fansubs\r\n const alt = base.match(/(\\d+)x(\\d+)/);\r\n if (alt) return [parseInt(alt[1]), parseInt(alt[2])];\r\n // Match Roman numerals like \"Season IV Episode IX\"\r\n const roman = base.match(/(?:(?:s|season)[\\s\\-]?)([ivxlcdm]+).*?(?:(?:e|ep|episode)[\\s\\-]?)([ivxlcdm]+)/i);\r\n if (roman) return [parseRomanNum(roman[1], true), parseRomanNum(roman[2], true)];\r\n // Match fallback single-episode formats like \"Ep12\", \"Episode 5\", \"E7\", \"Part 2\" without season info\r\n const loose = base.match(/(?:(?:e|ep|episode|part)[\\s\\-]?)(\\d+)/);\r\n if (loose) return [999, parseInt(loose[1])]; // Put these at the end with fake season 999\r\n // Totally unmatchable junk (e.g. \"Behind the Scenes\", \"Bonus Feature\")\r\n return [Infinity, Infinity]; // Hard fallback, gets sorted dead last\r\n }\r\n for (const file of files) {\r\n const key = getNamePrefix(file.name);\r\n let group = groups.get(key);\r\n log(\"Prefix\", `\"${file.name}\" -> \"${key}\"`), (group ?? (groups.set(key, (group = [])), group)).push(file);\r\n }\r\n const sortedFiles = [],\r\n byGroup = ([a]: [string, F[]], [b]: [string, F[]], diff = a === \"unknown\" ? 1 : b === \"unknown\" ? -1 : a.localeCompare(b)) => (log(\"Group Compare\", `[${a}] vs [${b}] = ${diff > 0 ? \"B first\" : diff < 0 ? \"A first\" : \"Tie\"}`), diff), // Sort groups alphabetically by their prefix\r\n getKey = (name: string, key = kCache.get(name)) => (key ? key : (kCache.set(name, (key = extractEpisodeKey(name))), key)),\r\n byEpisode = (a: F, b: F, ak = getKey(a.name), bk = getKey(b.name), diff = ak[0] !== bk[0] ? ak[0] - bk[0] : ak[1] - bk[1]) => (log(\"Episode Compare\", `[${ak}] vs [${bk}] = ${diff > 0 ? \"B first\" : diff < 0 ? \"A first\" : \"Tie\"} (\"${a.name}\" / \"${b.name}\")`), diff), // season | episode\r\n sortedGroups = (log(\"Groups\", `Identified ${groups.size} group(s)`, groups), [...groups.entries()].sort(byGroup)); // Sort groups alphabetically by their prefix\r\n for (const [, group] of sortedGroups) group.sort(byEpisode), sortedFiles.push(...group);\r\n return log(\"Done\", sortedFiles), debug && console.timeEnd(\"[Sorter]\"), sortedFiles;\r\n}\r\n","import { BasePlug } from \"../../base\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { loadResource } from \"@utils/dom\";\r\nimport { CastConfig } from \"./types\";\r\nimport { CAST_BUILD } from \"./build\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { CastPlaceholder } from \"@components/holders/castplaceholder\";\r\nimport { getMimeTypeFromExtension } from \"@utils/file\";\r\n\r\nexport class CastPlug extends BasePlug<CastConfig> {\r\n public static readonly plugName = \"cast\";\r\n public static readonly BUILD = CAST_BUILD;\r\n public remotePlayer: cast.framework.RemotePlayer | null = null;\r\n public remoteController: cast.framework.RemotePlayerController | null = null;\r\n public apiSetup = false;\r\n protected placeholder: CastPlaceholder | null = null;\r\n\r\n public override mount(): void {\r\n this.ctlr.payload.wired ? this.initApi() : this.ctlr.state.wonce(\"readyState\", this.initApi, { signal: this.signal }); // #HEAVY: waits for !lightState\r\n }\r\n protected async initApi(): Promise<void> {\r\n if (this.apiSetup) return;\r\n if (typeof cast === \"undefined\") {\r\n const prev = (window as any).__onGCastApiAvailable;\r\n ((window as any).__onGCastApiAvailable = (can: boolean) => (prev?.(can), can && \"cast\" in window && this.setupApi())), await loadResource(window.TMG_CAST_SENDER_SRC!, \"script\");\r\n } else this.setupApi();\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.cast ||= this.ctlr.isNativeEl && this.apiSetup), { init: true, signal: this.signal }); // no YT or Vimeo until d custom client\r\n // --------- Listeners\r\n this.media.on(\"intent.cast\", this.handleCastIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal });\r\n this.media.on(\"intent.paused\", this.handlePausedIntent, { capture: true, signal: this.signal });\r\n this.media.on(\"intent.currentTime\", this.handleCurrentTimeIntent, { capture: true, signal: this.signal });\r\n this.media.on(\"intent.volume\", this.handleVolumeIntent, { capture: true, signal: this.signal });\r\n this.media.on(\"intent.muted\", this.handleMutedIntent, { capture: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"cast\", { fn: () => (this.media.intent.cast = !this.media.state.cast), keyboard: { phase: \"keyup\" } }), super.wire();\r\n }\r\n\r\n protected handleCastIntent(e: REvent<CtlrMedia, \"intent.cast\">): void {\r\n if (e.resolved || !this.apiSetup) return;\r\n const context = cast.framework.CastContext.getInstance(),\r\n active = this.ctlr.isUIActive(\"cast\");\r\n if (e.value && !active) {\r\n this.ctlr.plug(\"settings.metadata\")?.syncSession();\r\n context.requestSession().then(this.loadMediaSession).catch(this.ctlr.notice);\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"cast\"); // #STALLING: necessary optimistic distraction\r\n } else if (active) {\r\n context.endCurrentSession(true);\r\n this.media.container.classList.remove(\"tmg-media-cast\");\r\n this.media.state.cast = false;\r\n }\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handlePausedIntent(e: REvent<CtlrMedia, \"intent.paused\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n if (e.value !== this.remotePlayer!.isPaused) this.remoteController!.playOrPause();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleCurrentTimeIntent(e: REvent<CtlrMedia, \"intent.currentTime\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n this.remotePlayer!.currentTime = e.value;\r\n this.remoteController!.seek();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleVolumeIntent(e: REvent<CtlrMedia, \"intent.volume\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n this.remotePlayer!.volumeLevel = e.value / 100;\r\n this.remoteController!.setVolumeLevel();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleMutedIntent(e: REvent<CtlrMedia, \"intent.muted\">): void {\r\n if (!this.media.state.cast || e.resolved) return;\r\n if (this.remotePlayer!.isMuted !== e.value) this.remoteController!.muteOrUnmute();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected setupApi(): void {\r\n if (!chrome.cast) return;\r\n const context = cast.framework.CastContext.getInstance();\r\n context.setOptions({ receiverApplicationId: chrome.cast.media.DEFAULT_MEDIA_RECEIVER_APP_ID, autoJoinPolicy: chrome.cast.AutoJoinPolicy.ORIGIN_SCOPED, ...this.config.options });\r\n this.remotePlayer = new cast.framework.RemotePlayer();\r\n this.remoteController = new cast.framework.RemotePlayerController(this.remotePlayer);\r\n this.remoteController.addEventListener(cast.framework.RemotePlayerEventType.ANY_CHANGE, this.syncRemoteState);\r\n (this.placeholder = ComponentRegistry.init(\"castplaceholder\", this.ctlr))?.setup();\r\n this.media.features.cast = this.apiSetup = true; // Unlock the feature UI\r\n }\r\n\r\n protected async loadMediaSession(): Promise<void> {\r\n const session = cast.framework.CastContext.getInstance().getCurrentSession();\r\n if (!session) return;\r\n silence(() => (this.media.intent.paused = true)); // pause local playback to avoid double audio\r\n const textEl = this.placeholder?.el.querySelector(\"p\"),\r\n request = new chrome.cast.media.LoadRequest(new chrome.cast.media.MediaInfo(this.media.state.src, getMimeTypeFromExtension(this.media.state.src)));\r\n request.currentTime = this.media.state.currentTime;\r\n await session.loadMedia(request);\r\n if (textEl) textEl.textContent = `Casting to ${session.getCastDevice().friendlyName || \"External Display\"}`;\r\n this.media.container.classList.add(\"tmg-media-cast\");\r\n this.media.state.cast = true;\r\n // console.log(\"Media loaded to TV\", this.media.state.src, this.media.state.currentTime); // dev\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected syncRemoteState(event: cast.framework.RemotePlayerChangedEvent): void {\r\n const isConnected = this.remotePlayer!.isConnected;\r\n if (this.media.state.cast !== isConnected) this.media.state.cast = isConnected;\r\n if (!isConnected) return;\r\n switch (event.field) {\r\n case \"currentTime\":\r\n return void (this.media.state.currentTime = this.remotePlayer!.currentTime);\r\n case \"isPaused\":\r\n return void (this.media.state.paused = this.remotePlayer!.isPaused);\r\n case \"volumeLevel\":\r\n return void (this.media.state.volume = this.remotePlayer!.volumeLevel * 100);\r\n case \"isMuted\":\r\n return void (this.media.state.muted = this.remotePlayer!.isMuted);\r\n case \"duration\":\r\n return void (this.media.status.duration = this.remotePlayer!.duration);\r\n }\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.remoteController?.removeEventListener(cast.framework.RemotePlayerEventType.ANY_CHANGE, this.syncRemoteState);\r\n this.media.state.cast && cast.framework.CastContext.getInstance().endCurrentSession(true);\r\n this.placeholder?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.cast\": typeof CastPlug;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { ControlPanelConfig, ControlPanelDraggable } from \"./types\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\n\r\nexport const ROWS_ARR = [1, 2, 3] as const;\r\n\r\nexport const CONTROLS = [\"expandminiplayer\", \"removeminiplayer\", \"meta\", \"timeline\", \"capture\", \"fullscreenorientation\", \"fullscreenlock\", \"backward10\", \"prev\", \"playpause\", \"next\", \"forward10\", \"brightness\", \"volume\", \"timeandduration\", \"spacer\", \"captions\", \"settings\", \"objectfit\", \"pictureinpicture\", \"theater\", \"fullscreen\", \"cast\", \"airplay\", \"chapter\"] as const;\r\n\r\nexport const BIG_CONTROLS = [\"bigprev\", \"bigplaypause\", \"bignext\"] as const;\r\n\r\nexport const CONTROL_PANEL_DRAGGABLE_BUILD: ControlPanelDraggable = [\"\", \"big\", \"wrapper\"];\r\n\r\nexport const CONTROL_PANEL_BUILD: DeepPartial<ControlPanelConfig> = {\r\n profile: true,\r\n title: true,\r\n artist: true,\r\n top: [\"expandminiplayer\", \"spacer\", \"meta\", \"spacer\", \"capture\", \"fullscreenlock\", \"airplay\", \"cast\", \"fullscreenorientation\", \"removeminiplayer\"],\r\n center: [\"bigprev\", \"bigplaypause\", \"bignext\"],\r\n bottom: {\r\n 1: [],\r\n 2: [\"spacer\", \"timeline\", \"spacer\"],\r\n 3: [...(!IS_MOBILE ? ([\"prev\", \"playpause\", \"next\"] as const) : []), \"brightness\", \"volume\", \"timeandduration\", \"chapter\", \"spacer\", \"captions\", \"settings\", \"objectfit\", \"pictureinpicture\", \"theater\", \"fullscreen\"] as const,\r\n },\r\n buffer: {\r\n value: \"eclipse\",\r\n options: [\r\n { value: \"eclipse\", display: \"Eclipse\" },\r\n { value: \"accent\", display: \"Accent\" },\r\n { value: false, display: \"Off\" },\r\n ]\r\n },\r\n timeline: {\r\n thumb: {\r\n value: true,\r\n options: [\r\n { value: \"auto\", display: \"Auto\" },\r\n { value: true, display: \"On\" },\r\n { value: false, display: \"Off\" },\r\n ]\r\n },\r\n previews: false,\r\n scrub: {\r\n sync: false,\r\n relative: !IS_MOBILE,\r\n cancel: {\r\n delta: 15,\r\n timeout: 2000,\r\n },\r\n },\r\n label: \"Media Timeline\",\r\n tooltip: false,\r\n autopause: true,\r\n compact: IS_MOBILE,\r\n bufferMarks: false,\r\n playedMarks: false,\r\n },\r\n progressBar: IS_MOBILE,\r\n // draggable: CONTROL_PANEL_DRAGGABLE_BUILD,\r\n};\r\n","import { ToastsConfig } from \"./types\";\r\n\r\nexport const TOASTS_BUILD = {\r\n disabled: false,\r\n limit: 7,\r\n position: \"bottom-left\",\r\n hideProgressBar: true,\r\n closeButton: false,\r\n animation: \"slide-up\",\r\n dragToCloseDir: \"x||y\",\r\n} satisfies ToastsConfig;\r\n","import { BasePlug } from \"../../base\";\r\nimport type { ToastsConfig, ToastReminder, ToastsState } from \"./types\";\r\nimport { TOASTS_BUILD } from \"./build\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { Controller } from \"@core/controller\";\r\nimport { setTimeout } from \"sia-reactor/utils\";\r\nimport { ToastOptions } from \"@t007/toast\";\r\nimport { NOOP } from \"sia-reactor\";\r\n\r\nexport class ToastsPlug extends BasePlug<ToastsConfig, ToastsState> {\r\n public static readonly plugName = \"toasts\";\r\n public static readonly BUILD = TOASTS_BUILD;\r\n public container?: HTMLElement;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.toasts) {\r\n super(ctlr, config, { reminders: [] });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.toasts.disabled\", ({ value }) => value && t007.toast?.dismissAll(this.ctlr.config.id), { signal: this.signal });\r\n this.ctlr.config.on(\"settings.toasts\", ({ type, target: { path, key, value } }) => type === \"update\" && !/disabled/.test(path) && t007.toast?.doForAll(\"update\", { [key]: value }, this.ctlr.config.id), { signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n public override mount(): void {\r\n this.container = createEl(\"div\", { className: \"tmg-media-toasts-container\" });\r\n this.media.container.append(this.container);\r\n }\r\n public override unmount(): void {\r\n this.container?.remove();\r\n }\r\n\r\n public get toast() {\r\n if (!this.config || this.config.disabled || !t007.toaster) return null; // after the nuke, ctlr might need me for errors but one of use is the wiser\r\n return t007.toaster({ groupId: this.ctlr.config.id, rootElement: this.container || this.media.container, signal: this.signal, ...this.config });\r\n }\r\n\r\n public addReminder(opts: Omit<ToastReminder, \"id\" | \"timeoutId\">): void {\r\n if (!opts.message) return;\r\n const id = Date.now().toString(),\r\n reminder = { id, ...opts, timeoutId: 0 } as ToastReminder;\r\n if (!opts.delay) return this.triggerReminder(id, reminder);\r\n reminder.timeoutId = setTimeout(() => this.triggerReminder(id), opts.delay, this.signal);\r\n this.state.reminders.push(reminder);\r\n }\r\n public removeReminder(id: string): void {\r\n const idx = this.state.reminders.findIndex((r) => r.id === id);\r\n if (idx !== -1) clearTimeout(this.state.reminders[idx].timeoutId), this.state.reminders.splice(idx, 1);\r\n }\r\n public triggerReminder(id: string, temp?: ToastReminder): void {\r\n const r = temp || this.state.reminders.find((x) => x.id === id);\r\n if (!r) return;\r\n this.removeReminder(id);\r\n if (r.actionId) this.ctlr.runAction(r.actionId);\r\n const { id: _i, message: _m, delay: _d, actionId: _a, timeoutId: _t, autoClose, ...opts } = r as any;\r\n this.toast?.(r.message, { ...Object.fromEntries(Object.entries(opts).filter(([, v]) => v !== undefined)) }), this.ctlr.plug(\"settings.settingsView\")?.menu.syncUI();\r\n }\r\n}\r\n\r\nexport const tutorialOpts = (onGotIt: () => void = NOOP): Partial<ToastOptions> => ({ type: \"info\", icon: \"💡\", position: \"center-center\", closeButton: true, hideProgressBar: false, animation: \"fade\", actions: { \"Got it!\": onGotIt } });\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.toasts\": typeof ToastsPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n toasts: ToastsConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { BasePin } from \"../../base\";\r\nimport { CONTROL_PANEL_DRAGGABLE_BUILD } from \"./build\";\r\nimport { ControlPanelPlug } from \"./index\";\r\nimport { getPath, setPath } from \"sia-reactor/utils\";\r\nimport { getElSiblingAt } from \"@utils/dom\";\r\nimport { limited, setTimeout, requestAnimationFrame, mockAsync } from \"@utils/fn\";\r\nimport { inBoolArrOpt, getPanelLocation } from \"@utils/obj\";\r\nimport type { ControlPanelDraggable, PanelShell, PanelSlot, AnyControl, ControlPanelShells } from \"./types\";\r\nimport { Paths } from \"sia-reactor\";\r\nimport { tutorialOpts } from \"../toasts\";\r\n\r\nexport class ControlPanelDraggablePin extends BasePin<ControlPanelPlug, ControlPanelDraggable> {\r\n public static readonly pinName = \"draggable\";\r\n public static get Plug() {\r\n return ControlPanelPlug;\r\n }\r\n public static readonly BUILD = CONTROL_PANEL_DRAGGABLE_BUILD;\r\n protected draggingEl: HTMLElement | null = null;\r\n protected replaced: { target: HTMLElement; child: HTMLElement } | null = null;\r\n protected safeTimeoutId = -1;\r\n\r\n public override wire(): void {\r\n this.ctlr.config.on(\"settings.controlPanel.draggable\", ({ value }) => this.setEventListeners(value ? \"add\" : \"remove\"), { init: true, signal: this.signal });\r\n }\r\n\r\n public setEventListeners(action: \"add\" | \"remove\" = this.config ? \"add\" : \"remove\"): void {\r\n for (const c of this.ctlr.queryDOM(\"[data-draggable-control]\", true)) {\r\n c.dataset.dragId = c.dataset.dragId ?? \"\";\r\n const act = !inBoolArrOpt(this.config, c.dataset.dragId) ? \"remove\" : action;\r\n c.dataset.draggableControl = String((c.draggable = act === \"add\"));\r\n c[`${act as \"add\"}EventListener`](\"dragstart\", this.handleDragStart, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"drag\", this.handleDrag, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"dragend\", this.handleDragEnd, { signal: this.signal });\r\n }\r\n for (const c of [...this.ctlr.queryDOM(\"[data-drop-zone][data-drag-id]\", true), ...this.plug.zoneEls]) {\r\n c.dataset.dragId = c.dataset.dragId ?? \"\";\r\n const act = !inBoolArrOpt(this.config, c.dataset.dragId) ? \"remove\" : action;\r\n c.dataset.dropZone = String(act === \"add\");\r\n c[`${act as \"add\"}EventListener`](\"dragenter\", this.handleDragEnter, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"dragover\", this.handleDragOver, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"drop\", this.handleDragLeave, { signal: this.signal });\r\n c[`${act as \"add\"}EventListener`](\"dragleave\", this.handleDragLeave, { signal: this.signal });\r\n }\r\n }\r\n\r\n protected handleDragStart(e: DragEvent): void {\r\n const { target: t, dataTransfer } = e as DragEvent & { target: HTMLElement };\r\n if (!t?.tagName || t.dataset.draggableControl !== \"true\") return;\r\n if (t.matches(\":has(:is(input,[role='slider']):is(:hover, :active))\")) return e.preventDefault();\r\n dataTransfer!.effectAllowed = \"move\";\r\n this.draggingEl = t;\r\n requestAnimationFrame(() => (t.classList.add(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.add(\"tmg-media-control-dragging\")), this.signal);\r\n this.safeTimeoutId = setTimeout(() => (t.classList.remove(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.remove(\"tmg-media-control-dragging\")), 1000, this.signal);\r\n if (t.dataset.dragId !== \"wrapper\" || t.parentElement?.dataset.dragId !== \"wrapper\") return;\r\n const { path, shell } = this.getShellPath(t, true);\r\n setPath(this.plug.slots, path, shell);\r\n this.replaced = { target: t.parentElement!, child: shell.cover };\r\n }\r\n\r\n protected handleDrag(): void {\r\n clearTimeout(this.safeTimeoutId);\r\n }\r\n\r\n protected handleDragEnd(e: DragEvent, t = e.target as HTMLElement): void {\r\n if (!t?.tagName) return;\r\n t.classList.remove(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.remove(\"tmg-media-control-dragging\");\r\n this.replaced = this.draggingEl = null;\r\n if (t.dataset.dragId === \"wrapper\" && t.parentElement?.dataset.dragId === \"wrapper\") setPath(this.plug.slots, this.getShellPath(t), t);\r\n this.syncConfig(), this.teachBasics(t.dataset.controlId as any);\r\n }\r\n\r\n protected handleDragEnter(e: DragEvent): void {\r\n !this.noDropOff(e.target as HTMLElement) && this.draggingEl && (e.target as HTMLElement).classList.add(\"tmg-media-dragover\");\r\n }\r\n\r\n protected handleDragOver(e: DragEvent): void {\r\n const { target: t, clientX: x, dataTransfer } = e as DragEvent & { target: HTMLElement };\r\n if (this.noDropOff(t)) return;\r\n e.preventDefault();\r\n if (dataTransfer) dataTransfer.dropEffect = \"move\";\r\n this.ctlr.throttle(\r\n \"dragOver\",\r\n () => {\r\n if (t.dataset.dragId === \"wrapper\") {\r\n const atWrapper = getElSiblingAt(x, \"x\", t.querySelectorAll<HTMLElement>('.tmg-media-side-controls-wrapper-cover:has([data-drop-zone=\"true\"][data-drag-id=\"\"]:empty)'), \"at\");\r\n if (!atWrapper) return;\r\n this.replaced?.target.replaceChild(this.replaced.child, this.draggingEl!);\r\n this.replaced = { target: t, child: atWrapper };\r\n return t.replaceChild(this.draggingEl!, atWrapper);\r\n }\r\n const afterCtrl = getElSiblingAt(x, \"x\", t.querySelectorAll<HTMLElement>(\"[draggable=true]:not(.tmg-media-control-dragging)\"));\r\n afterCtrl ? t.insertBefore(this.draggingEl!, afterCtrl) : t.append(this.draggingEl!);\r\n if (!t.dataset.dragId) for (const el of this.plug.zoneEls) this.plug.handleCompsView(el);\r\n },\r\n 500,\r\n false\r\n );\r\n }\r\n\r\n protected handleDragLeave(e: DragEvent): void {\r\n !this.noDropOff(e.target as HTMLElement) && (e.target as HTMLElement).classList.remove(\"tmg-media-dragover\");\r\n }\r\n\r\n protected noDropOff(t: HTMLElement, drop = this.draggingEl): boolean {\r\n return !drop?.tagName || t.dataset.dropZone !== \"true\" || (t.dataset.dragId !== drop.dataset.dragId && (t.dataset.dragId === \"wrapper\" || drop.dataset.dragId === \"wrapper\"));\r\n }\r\n\r\n protected getShellPath(target: HTMLElement, both?: false): Paths<ControlPanelShells>;\r\n protected getShellPath(target: HTMLElement, both?: true): { path: Paths<ControlPanelShells>; shell: PanelShell };\r\n protected getShellPath(target: HTMLElement, both = false): string | { path: string; shell: PanelShell } {\r\n let key = \"\";\r\n const pos = ({ 0: \"left\", 1: \"center\", 2: \"right\" } as const)[[...target.parentElement!.children].indexOf(target) as 0 | 1 | 2],\r\n cws = this.ctlr.queryDOM(\".tmg-media-top-controls-wrapper, .tmg-media-bottom-sub-controls-wrapper\", true);\r\n cws.forEach((w, i) => w.contains(target) && (key = ({ 0: \"top.\", 1: \"bottom.1.\", 2: \"bottom.2.\", 3: \"bottom.3.\" } as const)[i as 0 | 1 | 2 | 3]));\r\n return both ? { path: key + pos, shell: getPath(this.plug.shells as any, key + pos) } : key + pos;\r\n }\r\n\r\n public syncConfig(): void {\r\n const id = (el: HTMLElement) => el.dataset.controlId,\r\n derive = (slot: PanelSlot, center = false) => [center ? \"spacer\" : \"\", ...(slot instanceof HTMLElement ? [id(slot)] : Array.from(slot.zone.children as HTMLCollectionOf<HTMLElement>, id)), center && (slot instanceof HTMLElement || slot.zone.children.length) ? \"spacer\" : \"\"].filter(Boolean) as AnyControl[];\r\n this.settings.controlPanel.top = [...derive(this.plug.slots.top.left), ...derive(this.plug.slots.top.center, true), ...derive(this.plug.slots.top.right)];\r\n this.settings.controlPanel.center = derive(this.plug.shells.center);\r\n this.settings.controlPanel.bottom = { 1: [...derive(this.plug.slots.bottom[1].left), ...derive(this.plug.slots.bottom[1].center, true), ...derive(this.plug.slots.bottom[1].right)], 2: [...derive(this.plug.slots.bottom[2].left), ...derive(this.plug.slots.bottom[2].center, true), ...derive(this.plug.slots.bottom[2].right)], 3: [...derive(this.plug.slots.bottom[3].left), ...derive(this.plug.slots.bottom[3].center, true), ...derive(this.plug.slots.bottom[3].right)] };\r\n }\r\n\r\n protected teachBasics = limited(\r\n async (id: AnyControl = \"meta\", toast = this.ctlr.plug(\"settings.toasts\")?.toast) => {\r\n if (!toast) return;\r\n const el = this.ctlr.queryDOM(`[data-control-id=\"meta\"]`, true)[0] as HTMLElement,\r\n loc = getPanelLocation(this.ctlr._build.settings.controlPanel, \"meta\"),\r\n pos = (p: string, z: string) => (p === \"center\" ? \"center-center\" : (`${p.startsWith(\"top\") ? \"top\" : \"bottom\"}-${z === \"left\" ? \"left\" : z === \"right\" ? \"right\" : \"center\"}` as any)),\r\n startPos = pos(loc.path, loc.zone),\r\n emptyZones: { pos: string; zone: HTMLElement }[] = [],\r\n cleanup = () => (el?.classList.remove(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.remove(\"tmg-media-control-dragging\"), emptyZones.forEach((x) => x.zone.classList.remove(\"tmg-media-dragover\")), this.setEventListeners()),\r\n highlightZone = (z?: HTMLElement) => toast.isActive(tId) && (emptyZones.forEach((x) => x.zone.classList.remove(\"tmg-media-dragover\")), z?.classList.add(\"tmg-media-dragover\"));\r\n for (const r of [\"top\", \"bottom.1\", \"bottom.2\", \"bottom.3\"])\r\n for (const z of [\"left\", \"center\", \"right\"]) {\r\n const row = r === \"top\" ? this.plug.slots.top : this.plug.slots.bottom[Number(r.split(\".\")[1]) as 1 | 2 | 3],\r\n slot = row[z as \"left\" | \"center\" | \"right\"];\r\n if (!(slot instanceof HTMLElement) && slot.zone && !slot.zone.querySelector('[data-control-id]:not([data-control-id=\"spacer\"])') && pos(r, z) !== startPos) emptyZones.push({ pos: pos(r, z), zone: slot.zone });\r\n }\r\n this.setEventListeners(\"remove\"), el?.classList.add(\"tmg-media-control-dragging\"), this.ctlr.media.container.classList.add(\"tmg-media-control-dragging\"), this.ctlr.plug(\"settings.overlay\")?.show();\r\n const tId = toast(`Did you know you can drag the <b>Title</b> around${id !== \"meta\" ? \" too\" : \"\"}?`, { ...tutorialOpts(() => (this.teachBasics.block(), toast.dismiss(tId))), autoClose: false, onClose: cleanup, signal: this.signal });\r\n await mockAsync(3500);\r\n if (!toast.isActive(tId)) return;\r\n toast(`You can move it from here...`, { id: tId, position: startPos });\r\n if (emptyZones.length) {\r\n await mockAsync(2500);\r\n if (!toast.isActive(tId)) return;\r\n highlightZone(emptyZones[0].zone), toast(`...to an empty space like here!`, { id: tId, position: emptyZones[0].pos });\r\n for (let i = 1; i < emptyZones.length; i++) await mockAsync(2000), toast.isActive(tId) && (highlightZone(emptyZones[i].zone), toast(`...or here!`, { id: tId, position: emptyZones[i].pos }));\r\n }\r\n await mockAsync(emptyZones.length ? 2000 : 2500);\r\n if (toast.isActive(tId)) highlightZone(), toast(`Try dragging it to an empty space now!`, { id: tId, position: \"center-center\", autoClose: 3500 }), cleanup();\r\n },\r\n { key: \"tmg_cp_tut_1\", maxTimes: 5 }\r\n );\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"controlPanel.draggable\": typeof ControlPanelDraggablePin;\r\n }\r\n}\r\n","import { BasePlug } from \"../../base\";\r\nimport { CONTROL_PANEL_BUILD } from \"./build\";\r\nimport type { ControlPanelConfig, ControlPanelBottomTuple, ControlPanelSlots, ControlPanelShells, AnyControl, PanelSlot, PanelShell } from \"./types\";\r\nimport { ControlPanelDraggablePin } from \"./draggable\";\r\nimport { ROWS_ARR } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport type { ComponentRegistryMap } from \"@defs/registries\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { BaseComponent } from \"@components/base\";\r\nimport { ComponentRegistry, PinRegistry } from \"@core/registries\";\r\nimport { createEl, createListRenderer, observeResize } from \"@utils/dom\";\r\nimport { getPanelSplitCtrls, isBool, parsePanelBottomObj } from \"@utils/obj\";\r\nimport { initScrollAssist, removeScrollAssist } from \"@t007/utils/hooks/vanilla\";\r\nimport { fanout } from \"sia-reactor/utils\";\r\n\r\nexport class ControlPanelPlug extends BasePlug<ControlPanelConfig> {\r\n public static readonly plugName = \"controlPanel\";\r\n public static readonly BUILD = CONTROL_PANEL_BUILD;\r\n public controls = new Map<string, BaseComponent<any, any>>();\r\n public draggable?: ControlPanelDraggablePin;\r\n public zoneEls!: HTMLElement[];\r\n public shells!: ControlPanelShells;\r\n public slots!: ControlPanelSlots;\r\n protected slotters = new WeakMap<HTMLElement, ReturnType<typeof createListRenderer<string>>>();\r\n protected wratters = new WeakMap<HTMLElement, ReturnType<typeof createListRenderer<PanelSlot>>>();\r\n protected scrollers: HTMLElement[] = [];\r\n protected topWrapper!: HTMLElement;\r\n protected bigWrapper!: HTMLElement;\r\n protected bottomWrapper!: HTMLElement;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.controlPanel) {\r\n super(ctlr, config);\r\n const Pin = PinRegistry.get(\"controlPanel.draggable\");\r\n if (Pin) this.draggable = new Pin(this.ctlr, this.config.draggable);\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.ctlr.DOM.topControlsWrapper = this.topWrapper = createEl(\"div\", { className: \"tmg-media-top-controls-wrapper tmg-media-apt-controls-wrapper\" }, { dropZone: \"\", dragId: \"wrapper\" });\r\n this.ctlr.DOM.bigControlsWrapper = this.bigWrapper = createEl(\"div\", { className: \"tmg-media-big-controls-wrapper\" }, { dropZone: \"\", dragId: \"big\" });\r\n this.ctlr.DOM.bottomControlsWrapper = this.bottomWrapper = createEl(\"div\", { className: \"tmg-media-bottom-controls-wrapper\" });\r\n this.shells = { top: {}, center: {}, bottom: { 1: {}, 2: {}, 3: {} } } as ControlPanelShells;\r\n this.shells.top = { left: this.buildShell(\"left\"), center: this.buildShell(\"center\"), right: this.buildShell(\"right\") };\r\n this.shells.center = { zone: this.bigWrapper, cover: createEl(\"div\", { className: \"tmg-media-big-controls-wrapper-cover\" }) };\r\n for (const i of ROWS_ARR) this.shells.bottom[i] = { left: this.buildShell(\"left\"), center: this.buildShell(\"center\"), right: this.buildShell(\"right\") };\r\n this.slots = { top: {}, center: this.shells.center, bottom: { 1: {}, 2: {}, 3: {} } } as ControlPanelSlots;\r\n this.zoneEls = [...Object.values(this.shells.top), ...Object.values(this.shells.bottom).map((v) => Object.values(v))].flat().map((w) => w.zone);\r\n // DOM Injection\r\n this.shells.center.cover.append(this.shells.center.zone);\r\n for (const i of ROWS_ARR) this.bottomWrapper.append(createEl(\"div\", { className: `tmg-media-bottom-sub-controls-wrapper tmg-media-bottom-${i}-sub-controls-wrapper tmg-media-apt-controls-wrapper` }, { dropZone: \"\", dragId: \"wrapper\" }));\r\n this.ctlr.DOM.controlsContainer?.append(this.topWrapper, this.shells.center.cover, this.bottomWrapper);\r\n // DOM! -> Ctlr Config Setters\r\n this.ctlr.config.set(\"settings.controlPanel.bottom\", (v) => parsePanelBottomObj(v), { init: true, signal: this.signal });\r\n // DOM! -> Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.controlPanel.top\", this.handleTop, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.center\", this.handleCenter, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.bottom\", this.handleBottom, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.buffer.value\", this.handleBuffer, { init: true, signal: this.signal });\r\n // Utility Injection\r\n this.draggable?.mount?.();\r\n }\r\n public override unmount(): void {\r\n for (const w of [this.topWrapper, this.bigWrapper.parentElement, this.bottomWrapper]) w?.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.controlPanel.timeline.thumb.value\", ({ value }) => (this.media.container.dataset.timelineThumb = String(value)), { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.timeline\", (e, comp = this.comp(\"timeline\")) => comp && fanout(comp.config, e.currentTarget.value), { signal: this.signal }); // #STABLE: snubs unchanged writes\r\n this.ctlr.config.on(\"settings.controlPanel.progressBar\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-progress-bar\", value), { init: true, signal: this.signal });\r\n // Utility Injection\r\n this.draggable?.wire();\r\n // Post Wiring\r\n this.initScrollAndResize(), super.wire();\r\n }\r\n\r\n protected handleTop({ currentTarget: { value } }: REvent<CtlrConfig, \"settings.controlPanel.top\">): void {\r\n if (!value || isBool(value)) return;\r\n const { left, center, right } = getPanelSplitCtrls(value as AnyControl[]);\r\n this.fillWrapper(this.topWrapper, [(this.slots.top.left = this.getSlot(left, this.shells.top.left)), (this.slots.top.center = this.getSlot(center, this.shells.top.center)), (this.slots.top.right = this.getSlot(right, this.shells.top.right))]);\r\n this.fillSlot(this.slots.top.left, left), this.fillSlot(this.slots.top.center, center), this.fillSlot(this.slots.top.right, right), this.ctlr.payload.wired && this.config.draggable && this.draggable?.setEventListeners(\"add\");\r\n }\r\n\r\n protected handleCenter({ currentTarget: { value } }: REvent<CtlrConfig, \"settings.controlPanel.center\">): void {\r\n value && !isBool(value) && this.fillSlot(this.slots.center, value), this.ctlr.payload.wired && this.config.draggable && this.draggable?.setEventListeners(\"add\");\r\n }\r\n\r\n protected handleBottom({ currentTarget: { value } }: REvent<CtlrConfig, \"settings.controlPanel.bottom\">): void {\r\n if (!value || isBool(value)) return;\r\n for (const i of ROWS_ARR) {\r\n const { left, center, right } = getPanelSplitCtrls((value as ControlPanelBottomTuple)[i]);\r\n this.fillWrapper(this.bottomWrapper.children[i - 1] as HTMLElement, [(this.slots.bottom[i].left = this.getSlot(left, this.shells.bottom[i].left)), (this.slots.bottom[i].center = this.getSlot(center, this.shells.bottom[i].center)), (this.slots.bottom[i].right = this.getSlot(right, this.shells.bottom[i].right))]);\r\n this.fillSlot(this.slots.bottom[i].left, left), this.fillSlot(this.slots.bottom[i].center, center), this.fillSlot(this.slots.bottom[i].right, right);\r\n }\r\n this.ctlr.payload.wired && this.config.draggable && this.draggable?.setEventListeners(\"add\");\r\n }\r\n\r\n protected handleBuffer({ value }: REvent<CtlrConfig, \"settings.controlPanel.buffer.value\">): void {\r\n if (value && !this.controls.has(\"buffer\")) this.initComp(\"buffer\");\r\n this.media.container.dataset.buffer = String(value);\r\n }\r\n\r\n public initComp<K extends keyof ComponentRegistryMap>(name: K, comp?: InstanceType<ComponentRegistryMap[K]>): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public initComp<T extends BaseComponent = BaseComponent>(name: string, comp?: T): T | undefined;\r\n public initComp(name: string, comp = ComponentRegistry.init(name, this.ctlr, (this.config as any)[name])) {\r\n return comp ? (this.controls.set(name, comp), comp) : undefined;\r\n }\r\n\r\n public comp<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public comp<T extends BaseComponent = BaseComponent>(name: string): T | undefined;\r\n public comp(name: string): BaseComponent | undefined {\r\n return this.controls.get(name);\r\n }\r\n public compEl<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]>[\"element\"] | undefined;\r\n public compEl<T extends BaseComponent = BaseComponent>(name: string): T[\"element\"] | undefined;\r\n public compEl(name: string): HTMLElement | undefined {\r\n return this.controls.get(name)?.element;\r\n }\r\n\r\n public getSlot(comps: AnyControl[], fallback: PanelShell): PanelSlot {\r\n return comps.length === 1 ? (comps.includes(\"meta\") ? (this.comp(\"meta\") ?? this.initComp(\"meta\"))?.element ?? fallback : comps.includes(\"timeline\") ? (this.comp(\"timeline\") ?? this.initComp(\"timeline\"))?.element ?? fallback : fallback) : fallback;\r\n }\r\n\r\n public fillSlot(slot: PanelSlot, comps: AnyControl[]): void {\r\n if (slot instanceof HTMLElement || !slot.zone) return;\r\n let render = this.slotters.get(slot.zone); // slot.zone.innerHTML = \"\"; for (const id of comps) slot.zone.append((this.comp(id) ?? this.initComp(id))?.element ?? \"\");\r\n !render && this.slotters.set(slot.zone, (render = createListRenderer({ container: slot.zone, getKey: (id) => id, createNode: (id) => (this.comp(id) ?? this.initComp(id))?.element })));\r\n render(comps), this.handleCompsView(slot.zone);\r\n }\r\n\r\n public fillWrapper(wrapper: HTMLElement, slots: PanelSlot[]): void {\r\n let render = this.wratters.get(wrapper); // wrapper.innerHTML = \"\"; wrapper.append(...slots.map((slot) => (slot instanceof HTMLElement ? slot : slot.cover ?? slot.zone)));\r\n !render && this.wratters.set(wrapper, (render = createListRenderer({ container: wrapper, getKey: (slot) => (\"cover\" in slot ? slot.cover.dataset.shellId! : slot.dataset.controlId!), createNode: (slot) => (slot instanceof HTMLElement ? slot : slot.cover ?? slot.zone) })));\r\n render(slots, false);\r\n }\r\n\r\n public buildShell(side: string): PanelShell {\r\n const zone = createEl(\"div\", { className: `tmg-media-side-controls-wrapper tmg-media-${side}-side-controls-wrapper` }, { dropZone: \"\", shellId: side, scroller: side === \"right\" ? \"reverse\" : \"\" }),\r\n cover = createEl(\"div\", { className: `tmg-media-side-controls-wrapper-cover tmg-media-${side}-side-controls-wrapper-cover` }, { shellId: side });\r\n return cover.append(zone), { cover, zone };\r\n }\r\n\r\n protected initScrollAndResize(): void {\r\n for (const el of [...this.zoneEls, this.shells.center.zone]) {\r\n this.handleCompsView(el);\r\n this.scrollers.push((initScrollAssist(el, { pxPerSecond: el.dataset.dragId === \"big\" ? 120 : 60 }), el));\r\n observeResize(el, () => this.handleCompsView(el), this.signal);\r\n el.addEventListener(\"scroll\", this.handleDirtyScroll, { passive: true, signal: this.signal });\r\n }\r\n }\r\n public handleDirtyScroll(e: globalThis.Event): void {\r\n const el = e.currentTarget as HTMLElement;\r\n if (el.scrollLeft > 0) el.dataset.hasScrolled = \"true\";\r\n el.dataset.resetScrolled = String(el.scrollLeft === (el.dataset.scroller === \"reverse\" ? el.scrollWidth - el.clientWidth : 0));\r\n }\r\n\r\n public handleCompsView(w: HTMLElement): void {\r\n if (!w.isConnected) return;\r\n let spacer: HTMLElement | undefined,\r\n c: HTMLElement | null = w.firstElementChild as HTMLElement | null;\r\n do {\r\n c?.setAttribute(\"data-displayed\", getComputedStyle(c).display !== \"none\" ? \"true\" : \"false\");\r\n c?.setAttribute(\"data-spacer\", \"false\");\r\n if (c?.dataset.displayed === \"true\" && !spacer) spacer = c;\r\n } while ((c = (c?.nextElementSibling ?? null) as HTMLElement | null));\r\n this.settings.css.currentTopWrapperHeight = `${this.topWrapper.offsetHeight}px`;\r\n this.settings.css.currentBottomWrapperHeight = `${this.bottomWrapper.offsetHeight}px`;\r\n if (w.dataset.scroller !== \"reverse\") return;\r\n spacer?.setAttribute(\"data-spacer\", \"true\");\r\n if (w.dataset.resetScrolled === \"true\") w.dataset.hasScrolled = \"false\";\r\n if (w.dataset.hasScrolled === \"true\" || w.scrollWidth <= w.clientWidth || w.scrollLeft === w.scrollWidth - w.clientWidth) return void (w.scrollWidth <= w.clientWidth && (w.dataset.hasScrolled = \"false\"));\r\n w.addEventListener(\"scroll\", () => (w.dataset.hasScrolled = \"false\"), { once: true, signal: this.signal });\r\n w.scrollLeft = w.scrollWidth - w.clientWidth;\r\n }\r\n\r\n protected override onDestroy(): void {\r\n for (const scroller of this.scrollers) removeScrollAssist(scroller);\r\n this.draggable?.destroy();\r\n for (const control of this.controls.values()) control.destroy();\r\n super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\nexport * from \"./draggable\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.controlPanel\": typeof ControlPanelPlug;\r\n }\r\n interface ControllerDOMMap {\r\n topControlsWrapper?: HTMLDivElement;\r\n bigControlsWrapper?: HTMLDivElement;\r\n bottomControlsWrapper?: HTMLDivElement;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n controlPanel: ControlPanelConfig;\r\n }\r\n}\r\n","import { CssConfig } from \"./types\";\r\n\r\nexport const CSS_BUILD = {\r\n syncWithMedia: {},\r\n} as CssConfig;\r\n","import { BasePlug } from \"../../base\";\r\nimport type { CssConfig } from \"./types\";\r\nimport { CSS_BUILD } from \"./build\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { uncamelize } from \"@utils/str\";\r\n\r\nexport class CSSPlug extends BasePlug<CssConfig> {\r\n public static readonly plugName = \"css\";\r\n public static readonly BUILD = CSS_BUILD;\r\n public classKeys: string[] = [\"captionsCharacterEdgeStyle\", \"captionsTextAlignment\"]; // #DEFAULT: build privilege\r\n public _cache: Record<string, string | number> = {};\r\n\r\n public override wire(): void {\r\n // Variables Assignment\r\n const entries = Object.entries(this.config);\r\n this.settings.css.altImgUrl = `url(${window.TMG_MEDIA_ALT_IMG_SRC})`;\r\n // Blackbox Handlers\r\n this.ctlr.config.get(\"*\", (val, { target: { key, path } }: any) => (!path.startsWith(\"settings.css.\") || banRgx.test(path) ? val : ((val = this.get(key)), (this._cache[key] ||= val), val)), { signal: this.signal }); // #BLACKBOX: immediacy requirement\r\n this.ctlr.config.watch(\"*\", (val, { target: { key, path } }: any) => path.startsWith(\"settings.css.\") && !banRgx.test(path) && this.set(key, val), { signal: this.signal }); // #BLACKBOX: immediacy requirement\r\n // ---- Media Watchers\r\n this.media.watch(\"status.videoWidth\", this.syncAspectRatio, { init: true, signal: this.signal });\r\n this.media.watch(\"status.videoHeight\", this.syncAspectRatio, { signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.watch(\"dimensions.container.width\", (w) => (this.settings.css.currentContainerWidth = `${w || 0}px`), { init: true, signal: this.signal });\r\n this.ctlr.state.watch(\"dimensions.container.height\", (h) => (this.settings.css.currentContainerHeight = `${h || 0}px`), { init: true, signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"status.loadedMetadata\", this.handleLoadedMetadataStatus, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State ----------\r\n this.ctlr.state.on(\"dimensions.container.tier\", ({ value: tier }) => (this.media.container.dataset.sizeTier = tier || \"\"), { init: true, signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.pseudoContainer.tier\", ({ value: tier }) => (this.media.pseudoContainer.dataset.sizeTier = tier || \"\"), { init: true, signal: this.signal });\r\n // Post Wiring\r\n for (const [k, v] of entries) k !== \"syncWithMedia\" && ((this._cache[k] ||= this.config[k]), this.set(k, v));\r\n super.wire();\r\n }\r\n\r\n protected async handleLoadedMetadataStatus({ value }: REvent<CtlrMedia, \"status.loadedMetadata\">): Promise<void> {\r\n const color = value && (await this.ctlr.plug(\"settings.frame\")?.getMainColor());\r\n for (const k of Object.keys(this.settings.css.syncWithMedia).filter((k) => this.settings.css.syncWithMedia[k])) this.settings.css[k] = String((value ? color : null) ?? this._cache[k]);\r\n }\r\n\r\n protected getCSSValue(key: string): string {\r\n const cssVar = `--tmg-media-${uncamelize(key, \"-\")}`,\r\n val = getComputedStyle(this.media.container).getPropertyValue(cssVar);\r\n return val;\r\n }\r\n protected getClassValue(key: string): string {\r\n const prefix = `tmg-media-${uncamelize(key, \"-\")}`,\r\n val = Array.prototype.find.call(this.media.container.classList, (c) => c.startsWith(prefix))?.replace(`${prefix}-`, \"\");\r\n return val || \"none\"; // Validation logic (can be expanded to use tmg.parseUIObj if available)\r\n }\r\n\r\n protected setCssVariable(key: string, value: any): void {\r\n const strVal = String(value),\r\n cssVar = `--tmg-media-${uncamelize(key, \"-\")}`;\r\n for (const el of [this.media.container, this.media.pseudoContainer]) el?.style.setProperty(cssVar, strVal);\r\n }\r\n protected setClassValue(key: string, value: any): void {\r\n const pre = `tmg-media-${uncamelize(key, \"-\")}`;\r\n for (const c of this.media.container.classList) c.startsWith(pre) && this.media.container.classList.remove(c);\r\n this.media.container.classList.add(`${pre}-${value}`);\r\n }\r\n\r\n protected get(key: string): string | number {\r\n return this[this.classKeys.includes(key) ? \"getClassValue\" : \"getCSSValue\"](key);\r\n }\r\n protected set(key: string, value: any): void {\r\n this[this.classKeys.includes(key) ? \"setClassValue\" : \"setCssVariable\"](key, value);\r\n }\r\n\r\n public syncAspectRatio(): void {\r\n const { videoWidth: w, videoHeight: h } = this.media.status;\r\n this.settings.css.aspectRatio = w && h ? `${w} / ${h}` : \"16 / 9\";\r\n }\r\n}\r\nconst banRgx = /\\.(?:(constructor|syncWithMedia))/; // __proto__|prototype|toString|valueOf|hasOwnProperty|\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.css\": typeof CSSPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n css: CssConfig;\r\n }\r\n}\r\n","import { ErrorsConfig } from \"./types\";\r\n\r\nexport const ERROR_CODES = [\r\n 1, // MEDIA_ERR_ABORTED\r\n 2, // MEDIA_ERR_NETWORK\r\n 3, // MEDIA_ERR_DECODE\r\n 4, // MEDIA_ERR_SRC_NOT_SUPPORTED\r\n 5, // MEDIA_ERR_UNKNOWN\r\n] as const;\r\n\r\nexport const ERRORS_BUILD: Partial<ErrorsConfig> = {\r\n 1: \"The media playback was aborted.\",\r\n 2: \"The media failed due to a network error.\",\r\n 3: \"The media could not be decoded.\",\r\n 4: \"The media source is not supported.\",\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport { ERRORS_BUILD } from \"./build\";\r\nimport type { ErrorsConfig, ErrorCode } from \"./types\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { transaction } from \"sia-reactor/modules\";\r\n\r\nexport class ErrorsPlug extends BasePlug<ErrorsConfig> {\r\n public static readonly plugName = \"errors\";\r\n public static readonly BUILD = ERRORS_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Listeners\r\n this.media.on(\"status.error\", this.handleErrorStatus, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected async handleErrorStatus({ value }: REvent<CtlrMedia, \"status.error\">): Promise<void> {\r\n if (!value) return this.ctlr.plug(\"disabled\")?.reactivate(); // In case it was a transient error that got resolved, we can try reactivating the UI\r\n this.ctlr.log(value, \"error\"); // no `.notice` since that's our job, no \"swallow\" mod since we breaking the player anyways\r\n const mssg = this.config[(value.code as ErrorCode) ?? 5]?.replaceAll(\"media\", this.media.type) || value.message || `An unknown error occurred with the ${this.media.type} :(`;\r\n if (this.ctlr.state.readyState < 3) return this.ctlr.plug(\"disabled\")?.deactivate(mssg); // #PATIENT: only after first play\r\n if (t007.dialog?.isActive(`${this.ctlr.config.id}-error-dialog`)) return; // Prevent spamming dialogs\\\r\n const res = await t007.confirm(mssg, { id: `${this.ctlr.config.id}-error-dialog`, rootElement: this.ctlr.DOM.containerContent, confirmText: \"Try Again\", cancelText: \"Dismiss\" });\r\n if (res === true) {\r\n const time = this.media.state.currentTime;\r\n transaction(() => (this.ctlr.isNativeEl && this.media.element.load(), (this.media.intent.currentTime = time), (this.media.intent.paused = false)), \"Error Recovery\");\r\n } else if (res !== \"recovered\") this.ctlr.plug(\"disabled\")?.deactivate(mssg);\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.errors\": typeof ErrorsPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n errors: ErrorsConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\nimport { FastPlayConfig } from \"./types\";\n\nexport const FAST_PLAY_BUILD: DeepPartial<FastPlayConfig> = {\n playbackRate: 2,\n key: true,\n pointer: {\n type: {\n value: \"all\",\n options: [\n { value: \"all\", display: \"All\" },\n { value: \"mouse\", display: \"Mouse\" },\n { value: \"touch\", display: \"Touch\" },\n { value: \"pen\", display: \"Pen\" },\n { value: \"none\", display: \"None\" },\n ]\n },\n threshold: 800,\n inset: 20,\n },\n resetPaused: true,\n rewind: true,\n};\n","import { silence } from \"sia-reactor/modules\";\nimport { BasePlug } from \"../../base\";\nimport { FAST_PLAY_BUILD } from \"./build\";\nimport type { FastPlayConfig, FastPlayState } from \"./types\";\nimport type { Controller } from \"@core/controller\";\nimport { setTimeout, setInterval } from \"@utils/fn\";\n\nexport class FastPlayPlug extends BasePlug<FastPlayConfig, FastPlayState> {\n public static readonly plugName = \"fastPlay\";\n public static readonly BUILD = FAST_PLAY_BUILD;\n public speedCheck = false;\n public speedPtrCheck = false;\n protected wasPaused = false;\n protected prevRate = 1;\n protected rewindRate = 0;\n protected speedIntervalId: number | null = null;\n protected speedDirection: \"forwards\" | \"backwards\" = \"forwards\";\n protected speedTimeoutId: number | null = null;\n\n constructor(ctlr: Controller, config = ctlr.settings.fastPlay) {\n super(ctlr, config, { isRewinding: false });\n }\n\n public override wire(): void {\n const run = () => this.ctlr.DOM.controlsContainer?.addEventListener(\"pointerdown\", this.handleSpeedPointerDown, { capture: true, signal: this.signal });\n this.ctlr.payload.wired ? run() : this.ctlr.state.wonce(\"readyState\", run, { signal: this.signal }); // #HEAVY: waits for !lightState\n // Post Wiring\n super.wire();\n }\n\n public fastPlay(pos: \"forwards\" | \"backwards\"): void {\n if (this.speedCheck) return;\n this.speedCheck = true;\n this.wasPaused = this.media.state.paused;\n this.prevRate = this.media.state.playbackRate;\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"fastplaynotifier\")?.active();\n setTimeout(pos === \"backwards\" && this.config.rewind ? this.rewind : this.fastForward, 0, this.signal);\n }\n\n public fastForward(rate = this.config.playbackRate): void {\n silence(() => (this.media.intent.playbackRate = rate));\n this.state.isRewinding = false;\n this.ctlr.plug(\"settings.notifiers\")?.compEl(\"fastplaynotifier\")?.classList.remove(\"tmg-media-rewind\");\n silence(() => (this.media.intent.paused = false));\n }\n\n public rewind(rate = this.config.playbackRate): void {\n silence(() => (this.media.intent.playbackRate = 1));\n this.rewindRate = rate;\n this.state.isRewinding = true;\n this.ctlr.plug(\"settings.notifiers\")?.compEl(\"fastplaynotifier\")?.classList.add(\"tmg-media-rewind\");\n this.media.on(\"state.paused\", this.rewindReset, { signal: this.signal });\n this.speedIntervalId = setInterval(this.rewindMedia, Math.round(1000 / this.settings.frame.fps) - 18, this.signal); // intervals lag nd i'm 18 now so, yeah!\n }\n\n protected rewindMedia(): void {\n const textEl = this.ctlr.plug(\"settings.notifiers\")?.comp(\"fastplaynotifier\")?.text;\n if (textEl) textEl.textContent = `${this.rewindRate}x`;\n if (!this.media.state.paused) silence(() => (this.media.intent.paused = true));\n silence(() => (this.media.intent.currentTime = this.media.state.currentTime - this.rewindRate / this.settings.frame.fps)); // Apprentice Slider syncs, no CSS hack\n // this.settings.css.currentPlayedPosition = this.settings.css.currentThumbPosition = this.media.state.currentTime / this.media.status.duration; // #REBORN: old things have passed away\n }\n\n protected rewindReset(): void {\n if (this.media.state.paused) return;\n if (this.speedIntervalId) {\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"mediapause\");\n silence(() => (this.media.intent.paused = true));\n clearInterval(this.speedIntervalId);\n this.speedIntervalId = null;\n } else this.speedIntervalId ??= setInterval(this.rewindMedia, Math.round(1000 / this.settings.frame.fps) - 18, this.signal);\n }\n\n public slowDown(): void {\n if (!this.speedCheck) return;\n this.speedCheck = false;\n if (this.speedIntervalId) clearInterval(this.speedIntervalId);\n this.media.off(\"state.paused\", this.rewindReset);\n silence(() => (this.media.intent.playbackRate = this.prevRate));\n this.rewindRate = 0;\n this.state.isRewinding = false;\n silence(() => (this.media.intent.paused = this.config.resetPaused ? this.wasPaused : false));\n this.ctlr.plug(\"settings.overlay\")?.hide();\n this.ctlr.plug(\"settings.notifiers\")?.compEl(\"fastplaynotifier\")?.classList.remove(\"tmg-media-control-active\", \"tmg-media-rewind\");\n }\n\n protected handleSpeedPointerDown(e: PointerEvent): void {\n if (!new RegExp(`all|${e.pointerType}`).test(this.config.pointer.type.value) || e.target !== this.ctlr.DOM.controlsContainer || this.ctlr.isUIActive(\"miniplayer\") || this.speedCheck) return;\n for (const evt of [\"touchmove\", \"mouseup\", \"touchend\", \"touchcancel\"]) this.media.container?.addEventListener(evt, this.handleSpeedPointerUp, { signal: this.signal });\n this.media.container?.addEventListener(\"mouseleave\", this.handleSpeedPointerOut, { signal: this.signal });\n clearTimeout(this.speedTimeoutId!);\n this.speedTimeoutId = setTimeout(\n () => {\n this.media.container?.removeEventListener(\"touchmove\", this.handleSpeedPointerUp);\n this.speedPtrCheck = true;\n const x = e.clientX ?? (e as unknown as TouchEvent).targetTouches?.[0]?.clientX;\n const rect = this.media.container.getBoundingClientRect();\n const rLeft = x - rect.left;\n this.speedDirection = rLeft >= rect.width * 0.5 ? \"forwards\" : \"backwards\";\n if (rLeft < this.config.pointer.inset || rLeft > rect.width - this.config.pointer.inset) return;\n if (this.config.rewind) for (const evt of [\"mousemove\", \"touchmove\"]) this.media.container?.addEventListener(evt, this.handleSpeedPointerMove, { signal: this.signal });\n this.fastPlay(this.speedDirection);\n },\n this.config.pointer.threshold,\n this.signal\n );\n }\n\n protected handleSpeedPointerMove(e: globalThis.Event): void {\n if ((e as TouchEvent).touches?.length > 1) return;\n this.ctlr.throttle(\n \"speedPointerMove\",\n () => {\n const rect = this.media.container.getBoundingClientRect(),\n x = (e as MouseEvent).clientX ?? (e as TouchEvent).targetTouches?.[0]?.clientX,\n currPos = x - rect.left >= rect.width * 0.5 ? \"forwards\" : \"backwards\";\n if (currPos !== this.speedDirection) (this.speedDirection = currPos), this.slowDown(), this.fastPlay(this.speedDirection);\n },\n 200\n );\n }\n\n protected handleSpeedPointerUp(): void {\n clearTimeout(this.speedTimeoutId!);\n this.speedPtrCheck = false;\n if (this.speedCheck && (this.ctlr.plug(\"settings.keys\")?.playTriggerSeq ?? 0) < 1) setTimeout(this.slowDown, 350, this.signal); // safe dbl clicks need 300ms wait for singles\n for (const evt of [\"touchmove\", \"mouseup\", \"touchend\", \"touchcancel\"]) this.media.container?.removeEventListener(evt, this.handleSpeedPointerUp);\n for (const evt of [\"mousemove\", \"touchmove\"]) this.media.container?.removeEventListener(evt, this.handleSpeedPointerMove);\n this.media.container?.removeEventListener(\"mouseleave\", this.handleSpeedPointerOut);\n }\n\n protected handleSpeedPointerOut(): void {\n !this.media.container?.matches(\":hover\") && this.handleSpeedPointerUp();\n }\n}\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.fastPlay\": typeof FastPlayPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n fastPlay: FastPlayConfig;\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n","import { FrameConfig } from \"./types\";\r\n\r\nexport const FRAME_BUILD: Partial<FrameConfig> = {\r\n disabled: false,\r\n fps: 30,\r\n captureAutoClose: 15000,\r\n};\r\n","import { isStr } from \"@t007/utils\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { clamp } from \"@utils/num\";\r\n\r\n// Types\r\ntype RGB = [number, number, number];\r\n\r\n// RGB Analysis\r\nexport function getRGBBri([r, g, b]: RGB): number {\r\n return 0.299 * r + 0.587 * g + 0.114 * b;\r\n}\r\n\r\nexport function getRGBSat([r, g, b]: RGB): number {\r\n return Math.max(r, g, b) - Math.min(r, g, b);\r\n}\r\n\r\nexport function clampRGBBri([r, g, b]: RGB, m = 40): RGB {\r\n const br = getRGBBri([r, g, b]),\r\n d = br < m ? m - br : br > 255 - m ? -(br - (255 - m)) : 0;\r\n return [r + d, g + d, b + d].map((v) => clamp(0, v << 0, 255)) as RGB;\r\n}\r\n\r\n// Dominant Color Detection\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format: \"hex\", raw?: false): Promise<string | null>;\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format: \"rgb\", raw: true): Promise<RGB | null>;\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format?: \"rgb\", raw?: false): Promise<string | null>;\r\nexport async function getDominantColor(src: string | HTMLImageElement | HTMLCanvasElement | { canvas: HTMLCanvasElement; width: number; height: number }, format: \"rgb\" | \"hex\" = \"hex\", raw = false): Promise<string | RGB | null> {\r\n if (isStr(src))\r\n src = await new Promise<HTMLImageElement>((res, rej) => {\r\n const i = createEl(\"img\", { src: String(src), crossOrigin: \"anonymous\", onload: () => res(i), onerror: () => rej(new Error(`Image load error: ${src}`)) });\r\n });\r\n if ((src as { canvas?: HTMLCanvasElement })?.canvas) src = (src as { canvas: HTMLCanvasElement }).canvas;\r\n const s = Math.min(64, (src as HTMLImageElement | HTMLCanvasElement).width, (src as HTMLImageElement | HTMLCanvasElement).height),\r\n c = createEl(\"canvas\", { width: s, height: s }),\r\n x = c.getContext(\"2d\", { willReadFrequently: true, alpha: false });\r\n const d = src?.width && src?.height ? (x?.drawImage(src as CanvasImageSource, 0, 0, s, s), x?.getImageData(0, 0, s, s).data as Uint8ClampedArray) : null, // had to fool ts, coallesced to 0 below\r\n ct: Record<string, number> = {},\r\n pt: Record<string, RGB> = {} as Record<string, RGB>;\r\n for (let i = 0; i < (d?.length ?? 0); i += 4) {\r\n if (d![i + 3] < 128) continue;\r\n const r = d![i] & 0xf0,\r\n g = d![i + 1] & 0xf0,\r\n b = d![i + 2] & 0xf0; // Optimized bitwise extraction\r\n const k = (r << 16) | (g << 8) | b;\r\n ct[k] = (ct[k] || 0) + 1;\r\n pt[k] = pt[k] ? [pt[k][0] + d![i], pt[k][1] + d![i + 1], pt[k][2] + d![i + 2]] : [d![i], d![i + 1], d![i + 2]];\r\n }\r\n const clrs = Object.keys(ct)\r\n .sort((a, b) => ct[b] - ct[a])\r\n .slice(0, 7)\r\n .map((k) => ({ key: k, rgb: pt[k].map((v) => Math.round(v / ct[k])) as RGB }));\r\n if (!clrs.length) return null;\r\n const [r, g, b] = clampRGBBri(clrs.reduce((sat, curr) => (getRGBSat(sat.rgb) > getRGBSat(curr.rgb) ? sat : curr), clrs[0]).rgb, 70);\r\n return format === \"hex\" ? `#${((1 << 24) + (r << 16) + (g << 8) + b).toString(16).slice(1)}` : raw == false ? `rgb(${r},${g},${b})` : [r, g, b];\r\n}\r\n\r\nexport function convertToMonoChrome(canvas: HTMLCanvasElement, context: CanvasRenderingContext2D): void {\r\n const frame = context.getImageData(0, 0, canvas.width || 1, canvas.height || 1);\r\n for (let i = 0; i < frame.data.length / 4; i++) {\r\n const grey = (frame.data[i * 4 + 0] + frame.data[i * 4 + 1] + frame.data[i * 4 + 2]) / 3;\r\n (frame.data[i * 4 + 0] = grey), (frame.data[i * 4 + 1] = grey), (frame.data[i * 4 + 2] = grey);\r\n }\r\n context.putImageData(frame, 0, 0);\r\n}\r\n","import { BasePlug } from \"../../base\";\r\nimport type { FrameConfig } from \"./types\";\r\nimport { FRAME_BUILD } from \"./build\";\r\nimport { getDominantColor, getRGBBri, getRGBSat } from \"@utils/color\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { clamp, safeNum } from \"@utils/num\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { formatMediaTime } from \"@utils/time\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaMin, getMediaMax } from \"@utils/media\";\r\n\r\nexport class FramePlug extends BasePlug<FrameConfig> {\r\n public static readonly plugName = \"frame\";\r\n public static readonly BUILD = FRAME_BUILD;\r\n public exportCanvas: HTMLCanvasElement = createEl(\"canvas\");\r\n public exportContext: CanvasRenderingContext2D = this.exportCanvas.getContext(\"2d\", { alpha: false })!;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.frameCapture ||= this.ctlr.isNativeEl && this.media.type === \"video\" && !this.config.disabled), { init: true, signal: this.signal });\r\n // ---- Config Listeners\r\n this.ctlr.config.on(\"settings.frame.disabled\", ({ value }) => (this.media.features.frameCapture = !value), { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"capture\", { fn: () => this.capture(\"\"), keyboard: { phase: \"keyup\" } });\r\n this.ctlr.registerAction(\"stepFwd\", { fn: () => this.moveFrame(\"forwards\"), keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"stepBwd\", { fn: () => this.moveFrame(\"backwards\"), keyboard: { phase: \"keydown\" } });\r\n super.wire();\r\n }\r\n\r\n public async extract(display: \"\" | \"monochrome\", time?: number, raw?: false, min?: number, video?: HTMLVideoElement): Promise<{ blob: Blob | null; url: string }>;\r\n public async extract(display: \"\" | \"monochrome\", time?: number, raw?: true, min?: number, video?: HTMLVideoElement): Promise<{ canvas: HTMLCanvasElement; context: CanvasRenderingContext2D }>;\r\n public async extract(display: string = \"\", time = safeNum(this.media.state.currentTime), raw = false, min = 0, video = this.media.pseudoElement as HTMLVideoElement): Promise<any> {\r\n if (video !== this.media.element) {\r\n if (this.ctlr.state.frameReadyPromise) await this.ctlr.state.frameReadyPromise; // wait for it to get set by last getter 5 lines below\r\n if (Math.abs(video.currentTime - time) > 0.01 || !video.readyState) {\r\n this.ctlr.state.frameReadyPromise ??= new Promise<null>((res) => video.addEventListener(video.readyState ? \"timeupdate\" : \"loadeddata\", () => res(null), { once: true, signal: this.signal })); // me sef no small, been burned before this\r\n video.currentTime = time; // small epsilon tolerance for video time comparison - 0.01(10ms)\r\n }\r\n this.ctlr.state.frameReadyPromise = await this.ctlr.state.frameReadyPromise;\r\n }\r\n (this.exportCanvas.width = video.videoWidth || min), (this.exportCanvas.height = video.videoHeight || min);\r\n this.exportContext.filter = this.settings.css.filter as string;\r\n display === \"monochrome\" && (this.exportContext.filter = `${this.exportContext.filter} grayscale(100%)`);\r\n this.exportContext.drawImage(video, 0, 0, this.exportCanvas.width, this.exportCanvas.height);\r\n this.exportContext.filter = \"none\";\r\n if (raw === true) return { canvas: this.exportCanvas, context: this.exportContext };\r\n const blob = (this.exportCanvas.width || this.exportCanvas.height) && (await new Promise<Blob | null>((res) => this.exportCanvas.toBlob(res)));\r\n return { blob: blob || null, url: blob ? URL.createObjectURL(blob) : \"\" };\r\n }\r\n\r\n public async capture(display: \"\" | \"monochrome\" = \"\", time = safeNum(this.media.state.currentTime)): Promise<void> {\r\n if (!this.media.features.frameCapture) return;\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"capture\"); // #STALLING: necessary optimistic distraction\r\n const toast = this.ctlr.plug(\"settings.toasts\")?.toast,\r\n tTxt = formatMediaTime({ time, format: \"human\", showMs: true }),\r\n fTxt = `video frame ${display === \"monochrome\" ? \"in b&w \" : \"\"}at ${tTxt}`,\r\n frameToastId = toast?.loading(`Capturing ${fTxt}...`, { delay: parseCSSTime(this.settings.css.notifiersAnimationTime), image: window.TMG_MEDIA_ALT_IMG_SRC, tag: `tmg-${this.media.settings.metadata.title ?? \"Video\"}fcpa${tTxt}${display}` }) as string,\r\n frame = await this.extract(display, time, false, 0, this.media.element as HTMLVideoElement),\r\n filename = `${this.media.settings.metadata.title ?? \"Video\"}_${display === \"monochrome\" ? `black&white_` : \"\"}at_${tTxt}.png`.replace(/[\\/:*?\"<>|\\s]+/g, \"_\"); // system filename safe\r\n const Save = () => {\r\n toast?.loading(frameToastId, { render: `Saving ${fTxt}`, actions: {} });\r\n createEl(\"a\", { href: frame.url as string, download: filename })?.click?.();\r\n toast?.success(frameToastId, { delay: 1000, render: `Saved ${fTxt}`, actions: {} });\r\n };\r\n const Share = () => {\r\n toast?.loading(frameToastId, { render: `Sharing ${fTxt}`, actions: {} });\r\n navigator.share?.({ title: this.media.settings.metadata.title ?? \"Video\", text: `Captured ${fTxt}`, files: [new File([frame.blob as Blob], filename, { type: (frame.blob as Blob).type })] }).then(\r\n () => toast?.success(frameToastId, { render: `Shared ${fTxt}`, actions: {} }),\r\n () => toast?.error(frameToastId, { render: `Failed sharing ${fTxt}`, actions: { Save } })\r\n ) || toast?.warn(frameToastId, { delay: 1000, render: `Couldn't share ${fTxt}`, actions: { Save } });\r\n };\r\n frame?.url ? toast?.success(frameToastId, { render: `Captured ${fTxt}`, image: frame.url, autoClose: this.config.captureAutoClose, actions: { Save, Share }, onClose: () => URL.revokeObjectURL(frame.url) }) : toast?.error(frameToastId, { render: `Failed capturing ${fTxt}` });\r\n }\r\n\r\n public async findGoodTime({ time: t = safeNum(this.media.state.currentTime), secondsLimit: s = 25, saturation: sat = 12, brightness: bri = 40 } = {}): Promise<number | null> {\r\n const end = clamp(getMediaMin(this.media), t + s, getMediaMax(this.media));\r\n for (; t <= end; t += 0.333) {\r\n const rgb = await getDominantColor((await this.extract(\"\", t, true, 1)).canvas, \"rgb\", true);\r\n if (rgb && getRGBBri(rgb) > bri && getRGBSat(rgb) > sat) return t; // <= FIRST legit content frame\r\n }\r\n return null;\r\n }\r\n\r\n public async getMainColor(time?: number, poster = (this.media.element as HTMLVideoElement).poster, config = {}): Promise<string | null> {\r\n return getDominantColor(poster ? poster : (await this.extract(\"\", time ? time : (await this.findGoodTime(config)) ?? undefined, true, 1)).canvas);\r\n }\r\n\r\n public moveFrame(dir: \"forwards\" | \"backwards\" = \"forwards\"): void {\r\n this.media.state.paused && this.ctlr.throttle(\"frameStepping\", () => silence(() => (this.media.intent.currentTime = clamp(getMediaMin(this.media), Math.round(this.media.state.currentTime * this.config.fps) + (dir === \"backwards\" ? -1 : 1), Math.floor(getMediaMax(this.media) * this.config.fps)) / this.config.fps)), Math.round(1000 / this.config.fps));\r\n }\r\n} // Video only\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.frame\": typeof FramePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n frame: FrameConfig;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n frameCapture: boolean;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { GestureConfig, GestureTouchConfig, GestureWheelConfig } from \".\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\n\r\nexport const GESTURE_TOUCH_BUILD: Partial<GestureTouchConfig> = {\r\n volume: true,\r\n brightness: true,\r\n timeline: true,\r\n threshold: 200,\r\n axesRatio: 3,\r\n inset: 20,\r\n sliderTimeout: 1000,\r\n xRatio: 1,\r\n yRatio: 1,\r\n};\r\n\r\nexport const GESTURE_WHEEL_BUILD: Partial<GestureWheelConfig> = {\r\n volume: true,\r\n brightness: true,\r\n timeline: true,\r\n timeout: 2000,\r\n xRatio: 12,\r\n yRatio: 6,\r\n};\r\n\r\nexport const GESTURE_BUILD: DeepPartial<GestureConfig> = {\r\n click: IS_MOBILE ? false : \"paused\",\r\n dblClick: IS_MOBILE ? \"paused\" : \"fullscreen\",\r\n // touch: GESTURE_TOUCH_BUILD,\r\n // wheel: GESTURE_WHEEL_BUILD,\r\n};\r\n","import { clamp } from \"sia-reactor/utils\";\r\nimport { GesturePlug } from \".\";\r\nimport { safeNum } from \"@utils/num\";\r\nimport { BasePin } from \"../../base\";\r\nimport { getMediaMin, getMediaMax, getMediaTime } from \"@utils/media\";\r\n\r\nexport class GestureBasePin<Config> extends BasePin<GesturePlug, Config> {\r\n public static readonly plugName = \"gesture\";\r\n protected nextTime = 0;\r\n\r\n protected applyTimeline({ percent, sign, multiplier }: { percent: number; sign: string; multiplier: number }): void {\r\n multiplier = +multiplier.toFixed(1);\r\n percent = percent * multiplier;\r\n const curr = safeNum(this.media.state.currentTime),\r\n change = safeNum(getMediaTime(this.media, percent)) * multiplier,\r\n next = curr + (sign === \"+\" ? change : -change),\r\n textEl = this.ctlr.plug(\"settings.notifiers\")?.compEl(\"touchtimelinenotifier\"),\r\n toText = this.ctlr.plug(\"settings.time\")?.toTimeText;\r\n this.nextTime = clamp(getMediaMin(this.media), next, getMediaMax(this.media));\r\n if (textEl) textEl.textContent = `${sign}${toText?.(Math.abs(this.nextTime - curr))} (${toText?.(this.nextTime, true)}) ${multiplier < 1 ? `x${multiplier}` : \"\"}`;\r\n }\r\n\r\n protected applyRange(key: \"volume\" | \"brightness\", percent: number, sign: string): void {\r\n const range = this.settings[key],\r\n value = sign === \"+\" ? this.media.state[key] + percent * range.max : this.media.state[key] - percent * range.max;\r\n this.ctlr.plug((\"settings.\" + key) as \"settings.volume\")?.handleSliderInput?.(clamp(0, Math.round(value), range.max));\r\n }\r\n}\r\n","import { GESTURE_TOUCH_BUILD } from \"./build\";\r\nimport { GesturePlug } from \"./index\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { GestureBasePin } from \"./base\";\r\nimport { GestureTouchConfig } from \"./types\";\r\n\r\nexport class GestureTouchPin extends GestureBasePin<GestureTouchConfig> {\r\n public static readonly pinName = \"touch\";\r\n public static get Plug() {\r\n return GesturePlug;\r\n }\r\n public static readonly BUILD = GESTURE_TOUCH_BUILD;\r\n protected lastX = 0;\r\n protected lastY = 0;\r\n protected zone: { x: \"left\" | \"right\"; y: \"top\" | \"bottom\" } | null = null;\r\n public xCheck = false;\r\n public yCheck = false;\r\n protected canCancel = true;\r\n protected cancelTimeoutId = -1;\r\n protected sliderTimeoutId = -1;\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.ctlr.DOM.controlsContainer?.addEventListener(\"touchstart\", this.handleStart, { capture: true, signal: this.signal });\r\n }\r\n\r\n protected canHandle(e: TouchEvent): boolean {\r\n return !this.ctlr.config.disabled && e.touches?.length === 1 && e.target === this.ctlr.DOM.controlsContainer && !this.ctlr.plug(\"settings.fastPlay\")?.speedCheck;\r\n }\r\n\r\n protected handleStart(e: TouchEvent): void {\r\n if (!this.canHandle(e)) return;\r\n this.handleEnd();\r\n this.lastX = e.touches[0].clientX;\r\n this.lastY = e.touches[0].clientY;\r\n this.media.container.addEventListener(\"touchmove\", this.handleInit, { once: true, signal: this.signal });\r\n this.cancelTimeoutId = setTimeout(() => (this.canCancel = false), this.config.threshold, this.signal);\r\n for (const evt of [\"touchend\", \"touchcancel\"]) this.media.container.addEventListener(evt, this.handleEnd, { signal: this.signal });\r\n }\r\n\r\n protected handleInit(e: Event): void {\r\n const te = e as TouchEvent;\r\n if (te.touches?.length > 1 || this.ctlr.plug(\"settings.fastPlay\")?.speedCheck) return;\r\n te.preventDefault();\r\n const tc = this.config,\r\n rect = this.media.container.getBoundingClientRect(),\r\n x = te.touches[0].clientX,\r\n y = te.touches[0].clientY,\r\n deltaX = Math.abs(this.lastX - x),\r\n deltaY = Math.abs(this.lastY - y);\r\n this.zone = { x: x - rect.left > rect.width * 0.5 ? \"right\" : \"left\", y: y - rect.top > rect.height * 0.5 ? \"bottom\" : \"top\" };\r\n const rLeft = this.lastX - rect.left,\r\n rTop = this.lastY - rect.top;\r\n if (deltaX > deltaY * tc.axesRatio && rLeft > tc.inset && rLeft < rect.width - tc.inset) {\r\n if (tc.timeline) {\r\n this.xCheck = true;\r\n this.media.container.addEventListener(\"touchmove\", this.handleXMove, { passive: false, signal: this.signal });\r\n }\r\n } else if (deltaY > deltaX * tc.axesRatio && rTop > tc.inset && rTop < rect.height - tc.inset) {\r\n if ((tc.volume && this.zone?.x === \"right\") || (tc.brightness && this.zone?.x === \"left\")) {\r\n this.yCheck = true;\r\n this.media.container.addEventListener(\"touchmove\", this.handleYMove, { passive: false, signal: this.signal });\r\n }\r\n }\r\n }\r\n\r\n protected handleXMove(e: Event): void {\r\n const te = e as TouchEvent;\r\n if (this.canCancel) return this.handleEnd();\r\n te.preventDefault();\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.active();\r\n this.ctlr.throttle(\r\n \"gestureTouchMove\",\r\n () => {\r\n const tc = this.config,\r\n { offsetWidth: width, offsetHeight: height } = this.media.container,\r\n x = te.touches[0].clientX,\r\n y = te.touches[0].clientY,\r\n deltaX = x - this.lastX,\r\n deltaY = y - this.lastY,\r\n sign = deltaX >= 0 ? \"+\" : \"-\",\r\n percent = clamp(0, Math.abs(deltaX), width * tc.xRatio) / (width * tc.xRatio),\r\n mY = clamp(0, Math.abs(deltaY), height * tc.yRatio * 0.5),\r\n multiplier = 1 - mY / (height * tc.yRatio * 0.5);\r\n this.applyTimeline({ percent, sign, multiplier });\r\n },\r\n 30,\r\n false\r\n );\r\n }\r\n\r\n protected handleYMove(e: Event): void {\r\n const te = e as TouchEvent;\r\n if (this.canCancel && !this.ctlr.isUIActive(\"fullscreen\")) return this.handleEnd();\r\n te.preventDefault();\r\n // prettier-ignore\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(this.zone?.x === \"right\" ? \"touchvolumenotifier\" : \"touchbrightnessnotifier\")?.active();\r\n this.ctlr.throttle(\r\n \"gestureTouchMove\",\r\n () => {\r\n const tc = this.config,\r\n height = this.media.container.offsetHeight,\r\n y = te.touches[0].clientY,\r\n deltaY = y - this.lastY,\r\n sign = deltaY >= 0 ? \"-\" : \"+\",\r\n percent = clamp(0, Math.abs(deltaY), height * tc.yRatio) / (height * tc.yRatio);\r\n this.lastY = y;\r\n this.applyRange(this.zone?.x === \"right\" ? \"volume\" : \"brightness\", percent, sign);\r\n },\r\n 30,\r\n false\r\n );\r\n }\r\n\r\n protected handleEnd(): void {\r\n if (this.xCheck) {\r\n this.xCheck = false;\r\n this.media.container.removeEventListener(\"touchmove\", this.handleXMove);\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.inactive();\r\n if (!this.canCancel) this.media.intent.currentTime = this.nextTime;\r\n }\r\n if (this.yCheck) {\r\n this.yCheck = false;\r\n this.media.container.removeEventListener(\"touchmove\", this.handleYMove);\r\n clearTimeout(this.sliderTimeoutId);\r\n this.sliderTimeoutId = setTimeout(() => (this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchvolumenotifier\")?.inactive(), this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchbrightnessnotifier\")?.inactive()), this.config.sliderTimeout, this.signal);\r\n if (!this.canCancel) this.ctlr.plug(\"settings.overlay\")?.hide();\r\n }\r\n clearTimeout(this.cancelTimeoutId);\r\n this.canCancel = true;\r\n this.media.container.removeEventListener(\"touchmove\", this.handleInit);\r\n for (const evt of [\"touchend\", \"touchcancel\"]) this.media.container.removeEventListener(evt, this.handleEnd);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"gesture.touch\": typeof GestureTouchPin;\r\n }\r\n}\r\n","import { GESTURE_WHEEL_BUILD } from \"./build\";\r\nimport { GesturePlug } from \"./index\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { GestureBasePin } from \"./base\";\r\nimport { GestureWheelConfig } from \"./types\";\r\n\r\nexport class GestureWheelPin extends GestureBasePin<GestureWheelConfig> {\r\n public static readonly pinName = \"wheel\";\r\n public static get Plug() {\r\n return GesturePlug;\r\n }\r\n public static readonly BUILD = GESTURE_WHEEL_BUILD;\r\n protected timeoutId: number | null = null;\r\n protected zone: { x: \"left\" | \"right\"; y: \"top\" | \"bottom\" } | null = null;\r\n protected xCheck = false;\r\n protected yCheck = false;\r\n protected timePercent = 0;\r\n protected timeMultiplier = 1;\r\n protected deltaY = 0;\r\n protected nextTime = 0;\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.media.container.addEventListener(\"wheel\", this.handleWheel, { passive: false, signal: this.signal });\r\n }\r\n\r\n protected canHandle(e: WheelEvent): boolean {\r\n return !this.media.state.locked && !this.ctlr.config.disabled && e.target === this.ctlr.DOM.controlsContainer && !this.plug?.touch?.xCheck && !this.plug?.touch?.yCheck && !this.ctlr.plug(\"settings.fastPlay\")?.speedCheck && (this.ctlr.isUIActive(\"fullscreen\") || this.ctlr.isUIActive(\"floatingPlayer\"));\r\n }\r\n\r\n protected handleWheel(e: WheelEvent): void {\r\n if (!this.canHandle(e)) return;\r\n e.preventDefault();\r\n this.timeoutId ? clearTimeout(this.timeoutId) : this.handleInit(e);\r\n this.timeoutId = setTimeout(this.handleStop, this.config.timeout, this.signal);\r\n this.handleMove(e);\r\n }\r\n\r\n protected handleInit({ clientX: x, clientY: y }: WheelEvent): void {\r\n const rect = this.media.container.getBoundingClientRect();\r\n this.zone = { x: x - rect.left > rect.width * 0.5 ? \"right\" : \"left\", y: y - rect.top > rect.height * 0.5 ? \"bottom\" : \"top\" };\r\n this.deltaY = this.timePercent = 0;\r\n this.timeMultiplier = 1;\r\n }\r\n\r\n protected handleMove({ clientX: x, deltaX, deltaY, shiftKey }: WheelEvent): void {\r\n deltaX = shiftKey ? deltaY : deltaX;\r\n const wc = this.config,\r\n rect = this.media.container.getBoundingClientRect(),\r\n width = shiftKey ? rect.height : rect.width,\r\n height = shiftKey ? rect.width : rect.height;\r\n let xPercent = -deltaX / (width * wc.xRatio);\r\n xPercent = this.timePercent += xPercent;\r\n const xSign = xPercent >= 0 ? \"+\" : \"-\";\r\n xPercent = Math.abs(xPercent);\r\n if (deltaX || shiftKey) {\r\n if (!wc.timeline || this.yCheck) return this.handleStop();\r\n this.xCheck = true;\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.active();\r\n this.applyTimeline({ percent: xPercent, sign: xSign, multiplier: this.timeMultiplier });\r\n if (shiftKey) return;\r\n }\r\n if (deltaY) {\r\n if (this.xCheck) {\r\n const mY = clamp(0, Math.abs((this.deltaY += deltaY)), height * wc.yRatio * 0.5);\r\n this.timeMultiplier = 1 - mY / (height * wc.yRatio * 0.5);\r\n return this.applyTimeline({ percent: xPercent, sign: xSign, multiplier: this.timeMultiplier });\r\n }\r\n const cancel = (this.zone?.x === \"right\" && !wc.volume) || (this.zone?.x === \"left\" && !wc.brightness),\r\n currentXZone = x - rect.left > width * 0.5 ? \"right\" : \"left\";\r\n if (cancel || currentXZone !== this.zone?.x) return this.handleStop();\r\n this.yCheck = true;\r\n // prettier-ignore\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(this.zone?.x === \"right\" ? \"touchvolumenotifier\" : \"touchbrightnessnotifier\")?.active();\r\n const ySign = -deltaY >= 0 ? \"+\" : \"-\",\r\n yPercent = clamp(0, Math.abs(deltaY), height * wc.yRatio) / (height * wc.yRatio);\r\n this.applyRange(this.zone?.x === \"right\" ? \"volume\" : \"brightness\", yPercent, ySign);\r\n }\r\n }\r\n\r\n protected handleStop(): void {\r\n this.timeoutId = null;\r\n if (this.yCheck) {\r\n this.yCheck = false;\r\n this.ctlr.plug(\"settings.overlay\")?.hide();\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchvolumenotifier\")?.inactive(), this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchbrightnessnotifier\")?.inactive();\r\n }\r\n if (this.xCheck) {\r\n this.xCheck = false;\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"touchtimelinenotifier\")?.inactive();\r\n this.media.intent.currentTime = this.nextTime;\r\n }\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"gesture.wheel\": typeof GestureWheelPin;\r\n }\r\n}\r\n","import { BasePlug } from \"../../base\";\r\nimport type { GestureConfig, GestureState } from \"./types\";\r\nimport type { GestureWheelPin } from \"./wheel\";\r\nimport type { GestureTouchPin } from \"./touch\";\r\nimport { GESTURE_BUILD } from \"./build\";\r\nimport { PinRegistry } from \"@core/registries\";\r\nimport { Controller } from \"@core/controller\";\r\nimport { addSafeClicks } from \"@utils/dom\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { rippleHandler } from \"@t007/utils/hooks/vanilla\";\r\nimport { setTimeout } from \"sia-reactor/utils\";\r\n\r\nexport class GesturePlug extends BasePlug<GestureConfig, GestureState> {\r\n public static readonly plugName = \"gesture\";\r\n public static readonly BUILD = GESTURE_BUILD;\r\n public wheel?: GestureWheelPin;\r\n public touch?: GestureTouchPin;\r\n public skipPersistPos: \"left\" | \"right\" | null = null;\r\n protected focusSubjectId = \"\";\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.gesture) {\r\n super(ctlr, config, { skipPersist: false });\r\n const WheelPin = PinRegistry.get(\"gesture.wheel\"),\r\n TouchPin = PinRegistry.get(\"gesture.touch\");\r\n WheelPin && (this.wheel = new WheelPin(this.ctlr, this.config.wheel)), TouchPin && (this.touch = new TouchPin(this.ctlr, this.config.touch));\r\n }\r\n\r\n public override wire(): void {\r\n const run = () => {\r\n // Event Listeners\r\n addSafeClicks(this.ctlr.DOM.controlsContainer, this.handleClick, this.handleDblClick, { capture: true, signal: this.signal });\r\n for (const el of [this.ctlr.DOM.controlsContainer, this.ctlr.DOM.bottomControlsWrapper]) {\r\n el?.addEventListener(\"click\", this.handleAnyClick, { capture: true, signal: this.signal });\r\n el?.addEventListener(\"contextmenu\", this.handleRightClick, { signal: this.signal });\r\n el?.addEventListener(\"focusin\", this.handleFocusIn, { capture: true, signal: this.signal });\r\n el?.addEventListener(\"keydown\", this.handleKeyFocusIn, { capture: true, signal: this.signal });\r\n for (const evt of [\"pointermove\", \"dragenter\", \"scroll\"]) el?.addEventListener(evt, this.handleHoverPointerActive, { capture: true, signal: this.signal });\r\n el?.addEventListener(\"mouseleave\", this.handleHoverPointerOut, { capture: true, signal: this.signal });\r\n }\r\n // Utility Injection\r\n this.wheel?.wire(), this.touch?.wire();\r\n };\r\n this.ctlr.payload.wired ? run() : this.ctlr.state.wonce(\"readyState\", run, { signal: this.signal }); // #HEAVY: waits for !lightState\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n public override mount(): void {\r\n this.wheel?.mount?.(), this.touch?.mount?.();\r\n }\r\n\r\n protected handleAnyClick(): void {\r\n this.ctlr.plug(\"settings.overlay\")?.delay();\r\n // this.ctlr.plug(\"settings.controlPanel\")?.comp(\"timeline\")?.stopScrubbing();\r\n }\r\n\r\n protected handleRightClick(e: MouseEvent): void {\r\n e.preventDefault();\r\n }\r\n\r\n protected handleClick(e: MouseEvent): void {\r\n if (e.target !== this.ctlr.DOM.controlsContainer) return;\r\n if (this.ctlr.plug(\"settings.fastPlay\")?.speedCheck && (this.ctlr.plug(\"settings.keys\")?.playTriggerSeq ?? 1) < 1) return;\r\n if (IS_MOBILE && !this.ctlr.isUIActive(\"pictureInPicture\") && !this.media.status.waiting && !this.media.status.ended && (!this.ctlr.plug(\"settings.time\")?.skipNotifier || !this.ctlr.isUIActive(\"overlay\"))) !/hidden|persistent/.test(this.settings.overlay.behavior.value) && this.media.container.classList.toggle(\"tmg-media-overlay\");\r\n if (!this.ctlr.isUIActive(\"miniplayer\") && this.config.click) (this.media.intent[this.config.click] = !this.media.state[this.config.click] as never), this.config.click === \"paused\" && this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\");\r\n }\r\n\r\n protected handleDblClick(e: MouseEvent): void {\r\n const { clientX: x, target, detail } = e;\r\n if (target !== this.ctlr.DOM.controlsContainer) return;\r\n const rect = this.media.container.getBoundingClientRect(),\r\n pos = x - rect.left > rect.width * 0.65 ? \"right\" : x - rect.left < rect.width * 0.35 ? \"left\" : \"center\";\r\n if (this.state.skipPersist && pos !== this.skipPersistPos) {\r\n this.stopSkipPersist();\r\n if (detail === 1) return;\r\n }\r\n if (pos === \"center\" && this.config.dblClick) return void ((this.media.intent[this.config.dblClick] = !this.media.state[this.config.dblClick] as never), this.config.dblClick === \"paused\" && this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\"));\r\n if (this.state.skipPersist && detail === 2) return;\r\n if (!this.state.skipPersist) this.startSkipPersist(pos as \"left\" | \"right\");\r\n this.ctlr.plug(\"settings.time\")?.skip(pos === \"right\" ? this.settings.time.skip : -this.settings.time.skip);\r\n rippleHandler(e, { target: this.ctlr.plug(\"settings.time\")?.skipNotifier });\r\n }\r\n\r\n protected handleFocusIn({ target }: FocusEvent, t = target as HTMLElement): void {\r\n this.focusSubjectId = String(!t.matches(\":focus-visible\") && (t?.dataset?.controlId ?? t?.parentElement?.dataset?.controlId));\r\n }\r\n protected handleKeyFocusIn({ target }: KeyboardEvent, t = target as HTMLElement): void {\r\n if ((t?.dataset?.controlId ?? t?.parentElement?.dataset?.controlId) === this.focusSubjectId) t.blur();\r\n }\r\n\r\n protected handleHoverPointerActive(e: Event): void {\r\n const { target, pointerType } = e as PointerEvent,\r\n overlay = this.ctlr.plug(\"settings.overlay\");\r\n (!pointerType || !IS_MOBILE) && overlay?.show();\r\n pointerType && (target as HTMLElement).closest(\".tmg-media-side-controls-wrapper\") && clearTimeout(overlay?.overlayDelayId ?? -1);\r\n }\r\n protected handleHoverPointerOut(): void {\r\n setTimeout(() => !IS_MOBILE && !this.media.container.matches(\":hover\") && this.ctlr.plug(\"settings.overlay\")?.hide(), 0, this.signal);\r\n }\r\n\r\n public startSkipPersist(pos: \"left\" | \"right\"): void {\r\n if (this.state.skipPersist) return;\r\n this.media.container.addEventListener(\"click\", this.handleDblClick, { signal: this.signal });\r\n (this.state.skipPersist = true), (this.skipPersistPos = pos);\r\n }\r\n public stopSkipPersist(): void {\r\n if (!this.state.skipPersist) return;\r\n this.media.container.removeEventListener(\"click\", this.handleDblClick);\r\n (this.state.skipPersist = false), (this.skipPersistPos = null);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.wheel?.destroy(), this.touch?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\nexport * from \"./touch\";\r\nexport * from \"./wheel\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.gesture\": typeof GesturePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n gesture: GestureConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { KeysConfig } from \"./types\";\r\nimport { KEYS_BLOCKS } from \"@t007/utils\";\r\n\r\nexport const KEYS_WHITELIST = [\"Space\", \"Enter\", \"Escape\", \"ArrowUp\", \"ArrowDown\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\", \"0\", \"1\", \"2\", \"3\", \"4\", \"5\", \"6\", \"7\", \"8\", \"9\"];\r\n\r\nexport const KEY_SHORTCUT_MOD_ACTIONS = [\"skip\", \"volume\", \"brightness\", \"playbackRate\", \"captionsFontSize\"] as const; // numerical values\r\n\r\nexport const KEYS_BUILD: DeepPartial<KeysConfig> = {\r\n disabled: false,\r\n strictMatches: false,\r\n overrides: [\"Space\", \"ArrowDown\", \"ArrowUp\", \"ArrowLeft\", \"ArrowRight\", \"Home\", \"End\"],\r\n shortcuts: {\r\n prev: \"Shift+p\",\r\n next: \"Shift+n\",\r\n playPause: \"k\",\r\n mute: \"m\",\r\n dark: \"d\",\r\n skipBwd: \"j\",\r\n skipFwd: \"l\",\r\n stepFwd: \".\",\r\n stepBwd: \",\",\r\n volumeUp: \"ArrowUp\",\r\n volumeDown: \"ArrowDown\",\r\n brightnessUp: \"y\",\r\n brightnessDown: \"h\",\r\n playbackRateUp: \">\",\r\n playbackRateDown: \"<\",\r\n timeFormat: \"z\",\r\n timeMode: \"q\",\r\n capture: \"s\",\r\n objectFit: \"a\",\r\n pictureInPicture: \"i\",\r\n theater: \"t\",\r\n fullscreen: \"f\",\r\n captions: \"c\",\r\n captionsFontSizeUp: [\"+\", \"=\"],\r\n captionsFontSizeDown: [\"-\", \"_\"],\r\n captionsFontFamily: \"u\",\r\n captionsFontWeight: \"g\",\r\n captionsFontVariant: \"v\",\r\n captionsFontOpacity: \"o\",\r\n captionsBackgroundOpacity: \"b\",\r\n captionsWindowOpacity: \"w\",\r\n captionsCharacterEdgeStyle: \"e\",\r\n captionsTextAlignment: \"x\",\r\n settings: \"?\",\r\n cast: \"Shift+r\",\r\n airplay: \"Shift+r\"\r\n },\r\n blocks: KEYS_BLOCKS,\r\n whitelist: KEYS_WHITELIST,\r\n mods: {\r\n disabled: false,\r\n skip: {\r\n ctrl: 60,\r\n shift: 10,\r\n },\r\n volume: {\r\n ctrl: 50,\r\n shift: 10,\r\n },\r\n brightness: {\r\n ctrl: 50,\r\n shift: 10,\r\n },\r\n playbackRate: {\r\n ctrl: 1,\r\n },\r\n captionsFontSize: {},\r\n },\r\n};\r\n","import { cleanKeyCombo } from \"@t007/utils\";\nexport { type KeysSettings, type KeyStruct, parseKeyCombo, stringifyKeyEvent, cleanKeyCombo, matchKeys, getTermsForKey, keyEventAllowed, formatKeyShortcutsForDisplay, parseForARIAKS } from \"@t007/utils\";\n\nexport function formatActionForDisplay(keyShortcut: string | string[] | undefined, voiceCmd?: string[] | undefined): string {\n const kArr = Array.isArray(keyShortcut) ? keyShortcut : keyShortcut ? [keyShortcut] : [];\n return [kArr.length ? `⌨️ ${kArr.map((c) => cleanKeyCombo(c).replace(\" \", \"space\")).join(\" or \")}` : \"\", voiceCmd?.length ? `🎙️ \"${voiceCmd[0]}\"` : \"\"].filter(Boolean).join(\" · \");\n}\n\nexport function formatKeyForDisplay(keyShortcut: string | string[] | undefined, voiceCmd?: string[] | undefined): string {\n const combined = formatActionForDisplay(keyShortcut, voiceCmd);\n return combined ? ` ( ${combined} )` : \"\";\n}\n","import { BasePlug } from \"../../base\";\nimport type { KeyMod, KeyPhase, KeysConfig, KeyShortcutMods } from \"./types\";\nimport { KEYS_BUILD } from \"./build\";\nimport { isArr } from \"@t007/utils\";\nimport { keyEventAllowed as allowed } from \"@utils/keys\";\nimport { getMediaTime } from \"@utils/media\";\nimport { limited } from \"@utils/fn\";\nimport { tutorialOpts } from \"../toasts\";\n\nexport class KeysPlug extends BasePlug<KeysConfig> {\n public static readonly plugName = \"keys\";\n public static readonly BUILD = KEYS_BUILD;\n public playTriggerSeq = 0;\n protected teachBasics = limited((_id?: string) => ((_id = this.ctlr.plug(\"settings.toasts\")?.toast?.(`Press the spacebar to play/pause, or hold it to fast forward/rewind(+Shift). Click ⚙ for settings`, { ...tutorialOpts(() => (this.teachBasics.block(), t007.toast?.dismiss(_id))), signal: this.signal })), { key: \"tmg_keys_tut_1\", maxTimes: 5 }));\n\n public override wire(): void {\n // Ctlr Media Listeners\n this.ctlr.media.on(\"state.locked\", this.syncEventListeners, { signal: this.signal });\n // ---- State --------\n this.ctlr.state.on(\"mediaIntersecting\", this.syncEventListeners, { signal: this.signal });\n // ---- Config --------\n this.ctlr.config.on(\"settings.keys.disabled\", this.syncEventListeners, { signal: this.signal });\n this.ctlr.config.on(\"disabled\", this.syncEventListeners, { signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"playPause\", { fn: this.handlePlayTriggerDown, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\" \", { fn: this.handlePlayTriggerDown, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"escape\", { fn: this.handleEscape, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowleft\", { fn: this.handleArrowLeft, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowright\", { fn: this.handleArrowRight, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowup\", { fn: this.handleArrowUp, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"arrowdown\", { fn: this.handleArrowDown, keyboard: { phase: \"keydown\" }, private: true });\n this.ctlr.registerAction(\"home\", { fn: () => (this.media.intent.currentTime = 0), keyboard: { phase: \"keyup\" }, private: true });\n this.ctlr.registerAction(\"0\", { fn: () => (this.media.intent.currentTime = 0), keyboard: { phase: \"keyup\" }, private: true });\n this.ctlr.registerAction(\"end\", { fn: () => (this.media.intent.currentTime = this.media.status.duration), keyboard: { phase: \"keyup\" }, private: true });\n for (const n of \"123456789\".split(\"\")) this.ctlr.registerAction(n, { fn: () => (this.media.intent.currentTime = getMediaTime(this.media, +n / 10)), keyboard: { phase: \"keyup\" }, private: true });\n this.ctlr.payload.wired ? this.syncEventListeners() : this.ctlr.state.wonce(\"readyState\", this.syncEventListeners, { signal: this.signal }); // #HEAVY: waits for !lightState\n super.wire();\n }\n\n protected getHook(phase: KeyPhase, action: string): string | undefined {\n const entry = this.ctlr.actions[action];\n if (!entry || !entry.keyboard) return;\n const matches = isArr(entry.keyboard.phase) ? entry.keyboard.phase.includes(phase) : entry.keyboard.phase === phase;\n return matches ? action : undefined;\n }\n protected handleKeyDown(e: KeyboardEvent, action = allowed(e, this.settings.keys), mod = this.getMod(e)): void {\n if (action === false) return;\n action && this.ctlr.plug(\"settings.overlay\")?.show();\n const hook = this.getHook(\"keydown\", action as string);\n hook && this.ctlr.throttle(\"keyDown\", () => this.ctlr.runAction(hook, e, mod), 30);\n }\n protected handleKeyUp(e: KeyboardEvent, action = allowed(e, this.settings.keys), mod = this.getMod(e)): void {\n if (action === false) return;\n action ? this.ctlr.plug(\"settings.overlay\")?.show() : this.teachBasics();\n const hook = this.getHook(\"keyup\", action as string);\n hook && this.ctlr.runAction(hook, e, mod);\n }\n\n protected handlePlayTriggerDown(e?: KeyboardEvent): void {\n if (!e) return (this.media.intent.paused = !this.media.state.paused), this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\");\n this.playTriggerSeq++;\n this.playTriggerSeq === 1 && (e.currentTarget as Window | null)?.addEventListener(\"keyup\", this.handlePlayTriggerUp, { signal: this.signal });\n this.playTriggerSeq === 2 && this.settings.fastPlay.key && this.ctlr.plug(\"settings.fastPlay\")?.fastPlay(e.shiftKey ? \"backwards\" : \"forwards\");\n }\n\n protected handlePlayTriggerUp(e: KeyboardEvent, action = allowed(e, this.settings.keys)): void {\n action && this.ctlr.plug(\"settings.overlay\")?.show();\n if (action !== false && [\" \", \"playPause\"].includes(action as string)) {\n e.stopImmediatePropagation();\n if (this.playTriggerSeq === 1) this.media.intent.paused = !this.media.state.paused;\n this.ctlr.plug(\"settings.notifiers\")?.notify(this.media.intent.paused ? \"mediapause\" : \"mediaplay\");\n }\n const fastPlug = this.ctlr.plug(\"settings.fastPlay\");\n if (fastPlug?.speedCheck && this.playTriggerSeq > 1 && !fastPlug?.speedPtrCheck) fastPlug.slowDown();\n this.playTriggerSeq = 0;\n (e.currentTarget as Window | null)?.removeEventListener(\"keyup\", this.handlePlayTriggerUp);\n }\n\n protected handleEscape(): void {\n this.ctlr.isUIActive(\"miniplayer\") && (this.media.intent.miniplayer = false);\n (this.ctlr.isUIActive(\"pictureInPicture\") || this.ctlr.isUIActive(\"floatingPlayer\")) && (this.media.intent.pictureInPicture = false);\n }\n\n protected handleArrowLeft(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\n this.ctlr.plug(\"settings.time\")?.skip(-this.getModded(\"skip\", mod, 5));\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"bwd\");\n }\n protected handleArrowRight(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\n this.ctlr.plug(\"settings.time\")?.skip(this.getModded(\"skip\", mod, 5));\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"fwd\");\n }\n protected handleArrowUp(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.volume\")?.changeAptValue(this.getModded(\"volume\", mod, 5));\n this.media.features.volume && this.ctlr.plug(\"settings.notifiers\")?.notify(\"volumeup\");\n }\n protected handleArrowDown(_: KeyboardEvent, mod: KeyMod): void {\n this.ctlr.plug(\"settings.volume\")?.changeAptValue(-this.getModded(\"volume\", mod, 5));\n this.media.features.volume && this.ctlr.plug(\"settings.notifiers\")?.notify(!this.media.state.volume ? \"volumemuted\" : \"volumedown\");\n }\n\n public setEventListeners(action: \"add\" | \"remove\" = \"add\"): void {\n const ws = this.getWindows();\n for (const w of ws) w.removeEventListener(\"keydown\", this.handleKeyDown), w.removeEventListener(\"keyup\", this.handleKeyUp);\n if (action === \"remove\" || !this.shouldListen()) return;\n for (const w of ws) w.addEventListener(\"keydown\", this.handleKeyDown, { signal: this.signal });\n for (const w of ws) w.addEventListener(\"keyup\", this.handleKeyUp, { signal: this.signal });\n }\n public syncEventListeners(): void {\n this.setEventListeners(this.shouldListen() ? \"add\" : \"remove\");\n }\n protected shouldListen(): boolean {\n return this.ctlr.payload.wired && this.ctlr.state.mediaIntersecting && !this.ctlr.config.disabled && !this.config.disabled && !this.media.state.locked;\n }\n\n protected getWindows(): Window[] {\n const floating = this.ctlr.plug(\"settings.modes\")?.pictureInPicture?.floatingWindow;\n return floating ? [floating, window] : [window];\n }\n protected getMod(e: KeyboardEvent): KeyMod {\n return this.config.mods.disabled ? \"\" : e.ctrlKey ? \"ctrl\" : e.altKey ? \"alt\" : e.shiftKey ? \"shift\" : \"\";\n }\n public getModded(action: keyof KeyShortcutMods, mod: KeyMod, base: number): number {\n return mod ? this.config.mods[action]?.[mod] ?? base : base;\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.keys\": typeof KeysPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n keys: KeysConfig;\n }\n}\n","import { IS_MOBILE } from \"@utils/env\";\r\nimport { LockedConfig } from \"./types\";\r\n\r\nexport const LOCKED_BUILD: Partial<LockedConfig> = {\r\n disabled: !IS_MOBILE,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { LockedConfig, LockedState } from \"./types\";\r\nimport { LOCKED_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { ScreenLockButton } from \"@components/screenlock\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { setTimeout, mockAsync } from \"@utils/fn\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\nimport { CtlrConfig } from \"@defs/config\";\r\n\r\nexport class LockedPlug extends BasePlug<LockedConfig, LockedState> {\r\n public static readonly plugName = \"locked\";\r\n public static readonly BUILD = LOCKED_BUILD;\r\n public lockOverlayDelayId = -1;\r\n public wrapper!: HTMLDivElement;\r\n public control: ScreenLockButton | null = null;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.locked) {\r\n super(ctlr, config, { visible: false });\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.wrapper = createEl(\"div\", { className: \"tmg-media-screen-locked-wrapper\", innerHTML: `<p>Screen Locked</p><p>Tap to Unlock</p>` });\r\n this.control = ComponentRegistry.init(\"screenlock\", this.ctlr);\r\n // DOM Injection\r\n this.ctlr.DOM.containerContentWrapper?.append(this.wrapper);\r\n }\r\n public override unmount(): void {\r\n this.wrapper.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.media.container.addEventListener(\"click\", this.handleScreenClick, { signal: this.signal });\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.locked ||= !this.config.disabled), { init: true, signal: this.signal });\r\n // ---------- Listeners\r\n this.media.on(\"intent.locked\", this.handleLockedIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.locked.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.locked.disabled\">): void {\r\n this.media.features.locked = !value;\r\n if (value && this.ctlr.isUIActive(\"locked\")) this.media.intent.locked = false;\r\n }\r\n\r\n protected handleLockedIntent(e: REvent<CtlrMedia, \"intent.locked\">): void {\r\n if (e.resolved) return;\r\n const active = this.ctlr.isUIActive(\"locked\");\r\n e.value && !active ? this.enter() : active && this.exit();\r\n e.resolve(this.name);\r\n }\r\n\r\n protected enter(): void {\r\n this.ctlr.plug(\"settings.settingsView\")?.leaveView();\r\n setTimeout(this.showOverlay, 0, this.signal);\r\n this.media.container.classList.add(\"tmg-media-locked\", \"tmg-media-progress-bar\");\r\n // this.ctlr.plug(\"settings.overlay\")?.hide(\"force\"), this.ctlr.plug(\"settings.keys\")?.setEventListeners(\"remove\");\r\n } // #STANDALONE: suitable partner courtesy\r\n\r\n protected async exit(): Promise<void> {\r\n this.removeOverlay();\r\n await mockAsync(parseCSSTime(this.settings.css.switchTransitionTime));\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n this.media.container.classList.remove(\"tmg-media-locked\");\r\n // this.ctlr.plug(\"settings.overlay\")?.show(), this.ctlr.plug(\"settings.keys\")?.setEventListeners();\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected handleScreenClick(): void {\r\n if (!this.config.disabled) this.state.visible ? this?.removeOverlay() : this?.showOverlay();\r\n }\r\n\r\n public showOverlay(): void {\r\n this.media.container.classList.add(\"tmg-media-locked-overlay\");\r\n this.state.visible = true;\r\n this.delayOverlay();\r\n }\r\n\r\n public removeOverlay(): void {\r\n this.media.container.classList.remove(\"tmg-media-locked-overlay\");\r\n this.state.visible = false;\r\n }\r\n\r\n public delayOverlay(): void {\r\n clearTimeout(this.lockOverlayDelayId);\r\n this.lockOverlayDelayId = setTimeout(this.removeOverlay, this.settings.overlay.delay, this.signal);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.control?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.locked\": typeof LockedPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n locked: LockedConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { MetadataConfig } from \"./types\";\r\n\r\nexport const METADATA_BUILD: DeepPartial<MetadataConfig> = {\r\n autoGenerate: true,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { MetadataConfig } from \"./types\";\r\nimport { METADATA_BUILD } from \"./build\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { queryPictureInPicture } from \"@utils/dom\";\r\n\r\nexport class MetadataPlug extends BasePlug<MetadataConfig> {\r\n public static readonly plugName = \"metadata\";\r\n public static readonly BUILD = METADATA_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"settings.metadata.title\", this.forwardTitle, { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n this.media.watch(\"settings.metadata.artist\", this.forwardArtist, { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n this.media.watch(\"settings.metadata.profile\", this.forwardProfile, { init: this.ctlr.payload.wired && \"auto\", signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.syncSession(), { signal: this.signal });\r\n this.media.on(\"state.poster\", this.handlePoster, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.loadedMetadata\", this.autoGenerate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.links.title\", this.handleMetadataLinksSetting, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.links.artist\", this.handleMetadataLinksSetting, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.links.profile\", this.handleMetadataLinksSetting, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata\", () => !this.media.state.paused && this.syncSession(), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected forwardTitle(value: string): void {\r\n this.settings.controlPanel.title = value;\r\n }\r\n protected forwardArtist(value: string): void {\r\n this.settings.controlPanel.artist = value;\r\n }\r\n protected forwardProfile(value: string): void {\r\n this.settings.controlPanel.profile = value;\r\n }\r\n\r\n protected handleMetadataLinksSetting({ target: { key, value } }: REvent<CtlrMedia, \"settings.metadata.links.title\" | \"settings.metadata.links.artist\" | \"settings.metadata.links.profile\">): void {\r\n const el = key !== \"profile\" ? (this.ctlr.DOM[`media${capitalize(key)}`] as HTMLAnchorElement) : (this.ctlr.DOM.mediaProfile as HTMLImageElement)?.parentElement;\r\n if (el) for (const [attr, val] of Object.entries({ href: value, \"tab-index\": value ? \"0\" : null, target: value ? \"_blank\" : null, rel: value ? \"noopener noreferrer\" : null })) val ? el.setAttribute(attr, val) : el.removeAttribute(attr);\r\n }\r\n\r\n protected handlePoster({ value }: REvent<CtlrMedia, \"state.poster\">): void {\r\n if (this.media.settings.metadata.allowOverride) this.media.settings.metadata.artwork = value ? [{ src: value }] : [];\r\n }\r\n\r\n public syncSession(): void {\r\n if (!navigator.mediaSession || (queryPictureInPicture() && !this.ctlr.isUIActive(\"pictureInPicture\"))) return;\r\n navigator.mediaSession.metadata = new MediaMetadata(this.media.settings.metadata as MediaMetadataInit);\r\n const set = (...args: Parameters<typeof navigator.mediaSession.setActionHandler>) => navigator.mediaSession.setActionHandler(...args),\r\n [timePlug, listPlug, playlist] = [this.ctlr.plug(\"settings.time\"), this.ctlr.plug(\"playlist\"), this.ctlr.config.playlist.content];\r\n set(\"play\", () => (this.media.intent.paused = false));\r\n set(\"pause\", () => (this.media.intent.paused = true));\r\n set(\"seekbackward\", timePlug ? () => timePlug.skip(-this.settings.time.skip) : null);\r\n set(\"seekforward\", timePlug ? () => timePlug.skip(this.settings.time.skip) : null);\r\n set(\"previoustrack\", playlist && (listPlug?.state.currIdx ?? 0) > 0 && listPlug ? listPlug.previous : null);\r\n set(\"nexttrack\", playlist && (listPlug?.state.currIdx ?? 0) < (playlist.length ?? 0) - 1 && listPlug ? listPlug.next : null);\r\n }\r\n\r\n public async autoGenerate(): Promise<void> {\r\n const url = this.media.state.poster;\r\n if (!this.config.autoGenerate || (url && !url.startsWith(\"blob:\"))) return;\r\n const frame = await this.ctlr.plug(\"settings.frame\")?.extract(\"\", this.ctlr.config.lightState.preview.time);\r\n silence(() => (this.media.intent.poster = frame?.url || \"\")), url && URL.revokeObjectURL(url);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.metadata\": typeof MetadataPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface CtlrConfig {\r\n metadata: MetadataConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { ModesFullscreenConfig, ModesPictureInPictureConfig, ModesMiniplayerConfig, ModesConfig, ModesTheaterConfig } from \"./types\";\r\nimport { capitalize, uncamelize } from \"@utils/str\";\r\n\r\nexport const ORIENTATION_OPTIONS = [\"auto\", \"landscape\", \"portrait\", \"portrait-primary\", \"portrait-secondary\", \"landscape-primary\", \"landscape-secondary\"] as const;\r\n\r\nexport const MODES_FULLSCREEN_BUILD: Partial<ModesFullscreenConfig> = {\r\n disabled: false,\r\n orientationLock: {\r\n value: \"auto\",\r\n options: [{ value: false, display: \"Off\" }, ...ORIENTATION_OPTIONS.map((o) => ({ value: o, display: capitalize(uncamelize(o)) }))],\r\n },\r\n onRotate: {\r\n value: 90,\r\n options: [\r\n { value: false, display: \"Off\" },\r\n { value: 0, display: \"0° Portrait\" },\r\n { value: 90, display: \"90° Landscape\" },\r\n { value: 180, display: \"180° Inverted\" },\r\n { value: 270, display: \"270° Landscape\" },\r\n ],\r\n },\r\n};\r\n\r\nexport const MODES_THEATER_BUILD: Partial<ModesTheaterConfig> = {\r\n disabled: IS_MOBILE,\r\n};\r\n\r\nexport const MODES_PICTURE_IN_PICTURE_BUILD: Partial<ModesPictureInPictureConfig> = {\r\n disabled: false,\r\n floatingPlayer: {\r\n disabled: false,\r\n width: 500,\r\n height: 280,\r\n disallowReturnToOpener: false,\r\n preferInitialWindowPlacement: false,\r\n },\r\n};\r\n\r\nexport const MODES_MINIPLAYER_BUILD: Partial<ModesMiniplayerConfig> = {\r\n disabled: false,\r\n minWindowWidth: 240,\r\n};\r\n\r\nexport const MODES_BUILD: DeepPartial<ModesConfig> = {\r\n // fullscreen: MODES_FULLSCREEN_BUILD,\r\n // theater: MODES_THEATER_BUILD,\r\n // pictureInPicture: MODES_PICTURE_IN_PICTURE_BUILD,\r\n // miniplayer: MODES_MINIPLAYER_BUILD,\r\n};\r\n","import { BasePin } from \"../../base\";\r\nimport { MODES_FULLSCREEN_BUILD } from \"./build\";\r\nimport type { ModesFullscreenConfig, OrientationOption } from \"./types\";\r\nimport { ModesPlug } from \"./index\";\r\nimport { TERMINATOR, type REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { IS_IOS, IS_MOBILE } from \"@utils/env\";\r\nimport { enterFullscreen, exitFullscreen, queryFullscreenEl, supportsFullscreen } from \"@utils/dom\";\r\nimport { isBool, isFunc } from \"@utils/obj\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class ModesFullscreenPin extends BasePin<ModesPlug, ModesFullscreenConfig> {\r\n public static readonly pinName = \"fullscreen\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_FULLSCREEN_BUILD;\r\n public inFullscreen = false; // a quick notice flag for external deps\r\n protected shadowFullscreen = false;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.watch(\"docInFullscreen\", this.onDocInFullscreen, { signal: this.signal });\r\n this.ctlr.state.watch(\"screenOrientation\", this.onScreenOrientation, { signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.fullscreen\", this.handleFullscreenIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.set(\"state.fullscreen\", (v) => (v !== this.shadowFullscreen && !IS_IOS ? TERMINATOR : v), { signal: this.signal }); // #DICTATOR: reliable authority\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.modes.fullscreen.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"fullscreen\", { keyboard: { phase: \"keyup\" } });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.fullscreen.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && this.ctlr.isUIActive(\"fullscreen\")) this.media.intent.fullscreen = false;\r\n }\r\n\r\n protected handleFullscreenIntent(e: REvent<CtlrMedia, \"intent.fullscreen\">): void {\r\n if (e.resolved || IS_IOS) return;\r\n if (e.value && !this.inFullscreen) {\r\n const fW = this.ctlr.plug(\"settings.modes\")?.pictureInPicture?.floatingWindow;\r\n if (this.ctlr.isUIActive(\"floatingPlayer\")) return fW?.addEventListener(\"pagehide\", this.enter, { signal: this.signal }), fW?.close(), e.resolve(this.name);\r\n if (this.ctlr.isUIActive(\"pictureInPicture\")) silence(() => (this.media.intent.pictureInPicture = false));\r\n if (this.ctlr.isUIActive(\"miniplayer\")) silence(() => (this.media.intent.miniplayer = false));\r\n this.enter();\r\n } else if (this.inFullscreen) {\r\n exitFullscreen(this.media.container);\r\n this.inFullscreen = this.shadowFullscreen = false;\r\n }\r\n e.resolve(this.name);\r\n }\r\n protected async enter(): Promise<void> {\r\n await enterFullscreen(this.media.container);\r\n this.inFullscreen = true;\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected onDocInFullscreen(docInFs: boolean): void {\r\n const inFs = docInFs && queryFullscreenEl() === this.media.container;\r\n if (inFs) {\r\n this.media.container.classList.add(\"tmg-media-fullscreen\");\r\n this.media.state.fullscreen = this.shadowFullscreen = true;\r\n if (IS_MOBILE) this.changeScreenOrientation(this.config.orientationLock.value);\r\n } else if (this.ctlr.isUIActive(\"fullscreen\")) {\r\n this.media.container.classList.remove(\"tmg-media-fullscreen\");\r\n this.inFullscreen = this.media.intent.locked = false;\r\n this.ctlr.plug(\"settings.modes\")?.miniplayer?.toggle();\r\n this.media.state.fullscreen = this.shadowFullscreen = false;\r\n }\r\n }\r\n\r\n protected onScreenOrientation(orientation: { angle: number }): void {\r\n if (!this.ctlr.state.mediaParentIntersecting || !IS_MOBILE || this.ctlr.state.readyState < 3 || this.config.onRotate.value === false || this.ctlr.isUIActive(\"fullscreen\") || this.ctlr.isUIActive(\"miniplayer\")) return; // #PATIENT: only after first play\r\n const deg = isBool(this.config.onRotate.value) ? 90 : parseInt(this.config.onRotate.value as unknown as string);\r\n if (orientation.angle === deg || orientation.angle === 360 - deg) this.media.intent.fullscreen = !this.media.state.fullscreen;\r\n }\r\n\r\n public async changeScreenOrientation(option: boolean | OrientationOption = true): Promise<void> {\r\n const orientation = screen.orientation as any;\r\n option === false ? orientation?.unlock?.() : await orientation?.lock?.(option === \"auto\" ? (this.media.status.videoHeight > this.media.status.videoWidth ? \"portrait\" : \"landscape\") : option !== true ? option : orientation?.angle === 0 ? \"landscape\" : \"portrait\");\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.fullscreen = this.media.features.fullscreenOrientation = false);\r\n this.media.features.fullscreen ||= supportsFullscreen();\r\n this.media.features.fullscreenOrientation ||= this.media.features.fullscreen && IS_MOBILE && isFunc(screen.orientation?.lock);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.fullscreen\": typeof ModesFullscreenPin;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n fullscreenOrientation: boolean;\r\n }\r\n}\r\n","import { BasePin } from \"../../base\";\r\nimport { MODES_THEATER_BUILD } from \"./build\";\r\nimport { ModesPlug } from \"./index\";\r\nimport type { ModesTheaterConfig } from \"./types\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\n\r\nexport class ModesTheaterPin extends BasePin<ModesPlug, ModesTheaterConfig> {\r\n public static readonly pinName = \"theater\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_THEATER_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.theater\", this.handleTheaterIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n // ---- Config ---------\r\n this.ctlr.config.on(\"settings.modes.theater.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"theater\", { keyboard: { phase: \"keyup\" } });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.theater.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && this.ctlr.isUIActive(\"theater\")) this.media.intent.theater = false;\r\n }\r\n\r\n protected handleTheaterIntent(e: REvent<CtlrMedia, \"intent.theater\">): void {\r\n if (e.resolved || (e.value && (this.ctlr.isUIActive(\"fullscreen\") || this.ctlr.isUIActive(\"miniplayer\") || this.ctlr.isUIActive(\"floatingPlayer\")))) return;\r\n this.media.container.classList.toggle(\"tmg-media-theater\", e.value);\r\n this.media.state.theater = e.value;\r\n e.resolve(this.name);\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.theater = false);\r\n this.media.features.theater ||= true;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.theater\": typeof ModesTheaterPin;\r\n }\r\n}\r\n","import { BasePin } from \"../../base\";\r\nimport { ModesPlug } from \"./index\";\r\nimport type { ModesPictureInPictureConfig } from \"./types\";\r\nimport { MODES_PICTURE_IN_PICTURE_BUILD } from \"./build\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { handleDOMMutation } from \"@tools/runtime\";\r\nimport { createEl, loadResource, observeMutation, supportsPictureInPicture } from \"@utils/dom\";\r\nimport { mockAsync, breath } from \"@utils/fn\";\r\nimport { isStr } from \"@utils/obj\";\r\nimport { isSameURL } from \"@utils/str\";\r\nimport { PiPPlaceholder } from \"@components/holders/pipplaceholder\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class ModesPictureInPicturePin extends BasePin<ModesPlug, ModesPictureInPictureConfig> {\r\n public static readonly pinName = \"pictureInPicture\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_PICTURE_IN_PICTURE_BUILD;\r\n public inFloatingPlayer = false; // a quick notice flag for external deps\r\n public floatingWindow: (Window & typeof globalThis) | null = null;\r\n protected placeholder: PiPPlaceholder | null = null;\r\n protected pseudoPlaceholder: PiPPlaceholder | null = null;\r\n public whitelist: string[] = [];\r\n public blacklist: string[] = [];\r\n\r\n public override mount(): void {\r\n // Utility Injection\r\n this.placeholder = ComponentRegistry.init(\"pipplaceholder\", this.ctlr);\r\n if ((window as any).documentPictureInPicture) this.pseudoPlaceholder = ComponentRegistry.init(\"pipplaceholder\", this.ctlr);\r\n this.placeholder?.mount(), this.pseudoPlaceholder && this.media.pseudoContainer.prepend(this.pseudoPlaceholder.el);\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.pictureInPicture\", this.handlePictureInPictureIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"state.pictureInPicture\", this.handlePictureInPictureState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.disablePictureInPicture\", this.syncFeatures, { signal: this.signal });\r\n // ---- Config ------\r\n this.ctlr.config.on(\"settings.modes.pictureInPicture.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.modes.pictureInPicture.floatingPlayer.disabled\", this.handleDisabled, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"pictureInPicture\", { keyboard: { phase: \"keyup\" } });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.pictureInPicture.disabled\" | \"settings.modes.pictureInPicture.floatingPlayer.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && (this.ctlr.isUIActive(\"pictureInPicture\") || this.ctlr.isUIActive(\"floatingPlayer\"))) this.media.intent.pictureInPicture = false;\r\n }\r\n\r\n protected handlePictureInPictureIntent(e: REvent<CtlrMedia, \"intent.pictureInPicture\">): void {\r\n if (e.resolved) return;\r\n const pipActive = this.ctlr.isUIActive(\"pictureInPicture\");\r\n if (!this.ctlr.isNativeEl && this.config.floatingPlayer.disabled) return e.reject(this.name);\r\n if (this.ctlr.plug(\"settings.modes\")?.fullscreen?.inFullscreen) silence(() => (this.media.intent.fullscreen = false));\r\n if (!pipActive && this.media.features.floatingPlayer) {\r\n e.value && !this.inFloatingPlayer ? this.initFloatingPlayer() : this.floatingWindow?.close();\r\n e.resolve(this.name);\r\n } // tech will handle PiP toggle if not using floating player\r\n }\r\n\r\n protected async handlePictureInPictureState({ value }: REvent<CtlrMedia, \"state.pictureInPicture\">): Promise<void> {\r\n if (this.floatingWindow) return;\r\n if (value) {\r\n this.media.container.classList.add(\"tmg-media-picture-in-picture\"), this.media.pseudoContainer.classList.add(\"tmg-media-in-picture-in-picture\");\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n silence(() => (this.media.intent.miniplayer = false));\r\n this.ctlr.plug(\"settings.metadata\")?.syncSession();\r\n } else {\r\n await mockAsync(180);\r\n this.media.container.classList.remove(\"tmg-media-picture-in-picture\"), this.media.pseudoContainer.classList.remove(\"tmg-media-in-picture-in-picture\");\r\n this.ctlr.plug(\"settings.modes\")?.miniplayer?.toggle();\r\n this.ctlr.plug(\"settings.overlay\")?.delay();\r\n }\r\n }\r\n\r\n protected async initFloatingPlayer(): Promise<void> {\r\n if (this.inFloatingPlayer) return;\r\n (window as any).documentPictureInPicture?.window?.close?.();\r\n silence(() => (this.media.intent.miniplayer = false));\r\n this.floatingWindow = await (window as any).documentPictureInPicture.requestWindow(this.config.floatingPlayer);\r\n this.inFloatingPlayer = true;\r\n this.floatingWindow!.document.documentElement.style.cssText = `height:100%; background:url(${this.media.settings.metadata.profile}) center / 32px no-repeat, url(${this.media.state.poster}) center / ${this.settings.css.bgObjectFit} no-repeat, black;`;\r\n await breath(this.floatingWindow!); // rendering style to keep UI visible during heavy lifting\r\n const cssTexts = [],\r\n parse = (src: any) => (isStr(src) ? src : null),\r\n whitelist = this.whitelist.concat([parse(window.TMG_MEDIA_CSS_SRC), parse(window.T007_TOAST_CSS_SRC), parse(window.T007_INPUT_CSS_SRC), parse(window.T007_DIALOG_CSS_SRC)].filter(Boolean) as string[]); // CSS too experimental; needs a link (href) :)\r\n for (const sheet of document.styleSheets) {\r\n try {\r\n const nope = (src: string) => isSameURL(src, sheet.href);\r\n if (!whitelist.some(nope) && !this.blacklist.some(nope)) for (const cssRule of sheet.cssRules) if ((cssRule as CSSStyleRule).selectorText?.includes(\":root\") || cssRule.cssText.includes(\"tmg\") || cssRule.cssText.includes(\"t007\")) cssTexts.push(cssRule.cssText);\r\n } catch {\r\n continue;\r\n }\r\n }\r\n this.floatingWindow!.document.head.append(createEl(\"style\", { textContent: cssTexts.join(\"\\n\") }));\r\n await Promise.all(whitelist.map((href) => href.includes(\".css\") && loadResource(href, \"style\", undefined, this.floatingWindow!)));\r\n this.ctlr.plug(\"skeleton\")?.enterPseudoMode();\r\n this.media.container.classList.add(\"tmg-media-floating-player\", \"tmg-media-progress-bar\"), this.media.pseudoContainer.classList.add(\"tmg-media-in-floating-player\");\r\n this.floatingWindow!.document.body.append(this.media.container);\r\n this.floatingWindow!.document.documentElement.id = document.documentElement.id;\r\n this.floatingWindow!.document.documentElement.className = document.documentElement.className;\r\n for (const attr of document.documentElement.getAttributeNames()) this.floatingWindow!.document.documentElement.setAttribute(attr, document.documentElement.getAttribute(attr)!);\r\n this.signal.addEventListener(\"abort\", observeMutation(this.floatingWindow!.document.documentElement, handleDOMMutation, { childList: true, subtree: true }), { once: true });\r\n this.floatingWindow!.addEventListener(\"resize\", this.handleFloatingPlayerResize, { signal: this.signal });\r\n this.floatingWindow!.addEventListener(\"pagehide\", this.handleFloatingPlayerClose, { signal: this.signal });\r\n this.ctlr.plug(\"settings.keys\")?.setEventListeners();\r\n this.media.state.pictureInPicture = true;\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n protected handleFloatingPlayerResize(): void {\r\n if (!this.config.floatingPlayer.preferInitialWindowPlacement) return;\r\n this.config.floatingPlayer.width = this.floatingWindow?.innerWidth ?? this.config.floatingPlayer.width;\r\n this.config.floatingPlayer.height = this.floatingWindow?.innerHeight ?? this.config.floatingPlayer.height;\r\n }\r\n\r\n protected handleFloatingPlayerClose(): void {\r\n this.inFloatingPlayer = false;\r\n this.floatingWindow = null;\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n this.media.container.classList.remove(\"tmg-media-floating-player\"), this.media.pseudoContainer.classList.remove(\"tmg-media-in-floating-player\");\r\n this.ctlr.plug(\"skeleton\")?.leavePseudoMode();\r\n this.ctlr.plug(\"settings.modes\")?.miniplayer?.toggle();\r\n this.media.state.pictureInPicture = false;\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.pictureInPicture = this.media.features.floatingPlayer = false);\r\n if (!this.config.floatingPlayer.disabled) this.media.features.floatingPlayer ||= (window as any).documentPictureInPicture && this.ctlr.isNativeEl;\r\n else this.media.features.floatingPlayer = false;\r\n this.media.features.pictureInPicture ||= this.ctlr.isNativeEl && ((supportsPictureInPicture() && !this.media.state.disablePictureInPicture) || this.media.features.floatingPlayer);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.floatingWindow?.close(), this.placeholder?.destroy(), this.pseudoPlaceholder?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.pictureInPicture\": typeof ModesPictureInPicturePin;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/contract\" {\r\n interface MediaExtraFeatures {\r\n floatingPlayer: boolean;\r\n }\r\n}\r\n","import { BasePin } from \"../../base\";\r\nimport { MODES_MINIPLAYER_BUILD } from \"./build\";\r\nimport type { ModesMiniplayerConfig } from \"./types\";\r\nimport { ModesPlug } from \"./index\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { inDocView, getWindow } from \"@utils/dom\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { clamp } from \"@utils/num\";\r\nimport { INTERACTIVE_SELECTOR } from \"@t007/utils\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class ModesMiniplayerPin extends BasePin<ModesPlug, ModesMiniplayerConfig> {\r\n public static readonly pinName = \"miniplayer\";\r\n public static get Plug() {\r\n return ModesPlug;\r\n }\r\n public static readonly BUILD = MODES_MINIPLAYER_BUILD;\r\n protected lastMiniplayerPosX = 0;\r\n protected lastMiniplayerPosY = 0;\r\n protected lastMiniplayerPtrX = 0;\r\n protected lastMiniplayerPtrY = 0;\r\n protected nextMiniplayerX = \"\";\r\n protected nextMiniplayerY = \"\";\r\n protected wildMiniplayerX = \"\";\r\n protected wildMiniplayerY = \"\";\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", this.syncFeatures, { init: true, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.watch(\"dimensions.window.width\", () => !this.ctlr.isUIActive(\"fullscreen\") && this.toggle(), { signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"intent.miniplayer\", this.handleMiniplayerIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.toggle(), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.on(\"mediaParentIntersecting\", () => this.ctlr.payload.wired && this.toggle(), { signal: this.signal }); // #HEAVY: waits for !lightState\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.modes.miniplayer.disabled\", this.handleDisabled, { init: true, signal: this.signal });\r\n }\r\n\r\n protected handleDisabled({ value }: REvent<CtlrConfig, \"settings.modes.miniplayer.disabled\">): void {\r\n this.syncFeatures();\r\n if (value && this.ctlr.isUIActive(\"miniplayer\")) this.media.intent.miniplayer = false;\r\n }\r\n\r\n protected handleMiniplayerIntent(e: REvent<CtlrMedia, \"intent.miniplayer\">): void {\r\n if (e.resolved) return;\r\n const active = this.ctlr.isUIActive(\"miniplayer\");\r\n e.value && !active ? this.enter() : active && this.exit();\r\n e.resolve(this.name); // btw this is a smart behavioral implementation rather than just a toggler\r\n }\r\n\r\n protected enter(): void {\r\n this.ctlr.plug(\"skeleton\")?.enterPseudoMode();\r\n this.media.container.classList.add(\"tmg-media-miniplayer\", \"tmg-media-progress-bar\"), this.media.pseudoContainer.classList.add(\"tmg-media-in-miniplayer\");\r\n for (const type of [\"mousedown\", \"touchstart\"]) this.media.container.addEventListener(type, this.handleDragStart, { signal: this.signal });\r\n this.media.state.miniplayer = true;\r\n } // #STANDALONE: partner courtesy\r\n\r\n protected exit(behavior?: ScrollBehavior): void {\r\n if (behavior && inDocView(this.media.pseudoContainer)) this.media.pseudoContainer.scrollIntoView({ behavior, block: \"center\", inline: \"center\" });\r\n this.ctlr.plug(\"skeleton\")?.leavePseudoMode();\r\n this.media.container.classList.remove(\"tmg-media-miniplayer\"), this.media.pseudoContainer.classList.remove(\"tmg-media-in-miniplayer\");\r\n this.media.container.classList.toggle(\"tmg-media-progress-bar\", this.settings.controlPanel.progressBar);\r\n for (const type of [\"mousedown\", \"touchstart\"]) this.media.container.removeEventListener(type, this.handleDragStart);\r\n this.media.state.miniplayer = false;\r\n } // #STANDALONE: needs scoped behavior\r\n public expand(): void {\r\n this.media.container.classList.contains(\"tmg-media-miniplayer\") && this.exit(\"smooth\");\r\n }\r\n public remove(): void {\r\n silence(() => (this.media.intent.paused = true)), this.exit();\r\n }\r\n\r\n public toggle(bool?: boolean): void {\r\n const active = this.ctlr.isUIActive(\"miniplayer\");\r\n if (!active && (bool === true || this.shouldEnter())) this.media.intent.miniplayer = true;\r\n else if (active && (bool === false || this.shouldExit())) this.media.intent.miniplayer = false;\r\n }\r\n public shouldEnter(): boolean {\r\n const modes = this.ctlr.plug(\"settings.modes\");\r\n return !this.ctlr.isUIActive(\"pictureInPicture\") && !modes?.pictureInPicture?.inFloatingPlayer && !modes?.fullscreen?.inFullscreen && !this.ctlr.state.mediaParentIntersecting && getWindow(this.media.container).innerWidth >= this.config.minWindowWidth && !this.media.state.paused;\r\n }\r\n public shouldExit(): boolean {\r\n return this.ctlr.state.mediaParentIntersecting || getWindow(this.media.container).innerWidth < this.config.minWindowWidth;\r\n }\r\n\r\n protected handleDragStart(e: globalThis.Event): void {\r\n const target = e.target as HTMLElement,\r\n clientX = (e as MouseEvent).clientX ?? (e as TouchEvent).targetTouches?.[0]?.clientX ?? 0,\r\n clientY = (e as MouseEvent).clientY ?? (e as TouchEvent).targetTouches?.[0]?.clientY ?? 0;\r\n if (!this.ctlr.isUIActive(\"miniplayer\") || target.scrollWidth >= target.clientWidth + 3 || [this.ctlr.DOM.topControlsWrapper, this.ctlr.DOM.bottomControlsWrapper, this.ctlr.DOM.captionsContainer].some((w) => w?.contains(target)) || target.closest(`:is(${INTERACTIVE_SELECTOR},[class$='toast-container'])`)) return;\r\n const { left, bottom } = getComputedStyle(this.media.container);\r\n (this.lastMiniplayerPosX = parseFloat(left)), (this.lastMiniplayerPosY = parseFloat(bottom));\r\n (this.lastMiniplayerPtrX = clientX), (this.lastMiniplayerPtrY = clientY);\r\n (this.nextMiniplayerX = this.settings.css.currentMiniplayerX as string), (this.nextMiniplayerY = this.settings.css.currentMiniplayerY as string);\r\n (this.wildMiniplayerX = this.nextMiniplayerX), (this.wildMiniplayerY = this.nextMiniplayerY);\r\n document.addEventListener(\"mousemove\", this.handleDragging, { signal: this.signal });\r\n document.addEventListener(\"touchmove\", this.handleDragging, { passive: false, signal: this.signal });\r\n for (const type of [\"mouseup\", \"mouseleave\", \"touchend\", \"touchcancel\"]) document.addEventListener(type, this.handleDragEnd, { signal: this.signal });\r\n this.media.container.style.setProperty(\"transition\", \"none\", \"important\");\r\n }\r\n\r\n protected handleDragging(e: globalThis.Event): void {\r\n if ((e as TouchEvent).touches?.length > 1) return;\r\n e.preventDefault();\r\n this.ctlr.plug(\"settings.overlay\")?.hide(\"force\");\r\n this.media.container.classList.add(\"tmg-media-player-dragging\");\r\n this.ctlr.RAFLoop(\"miniplayerDragging\", () => {\r\n const x = (e as MouseEvent).clientX ?? (e as TouchEvent).changedTouches?.[0]?.clientX ?? 0,\r\n y = (e as MouseEvent).clientY ?? (e as TouchEvent).changedTouches?.[0]?.clientY ?? 0;\r\n if (this.prevEX === x && this.prevEY === y) return; // #CONSERVATION: peak stays peak\r\n (this.prevEX = x), (this.prevEY = y);\r\n const { innerWidth: ww, innerHeight: wh } = window,\r\n { offsetWidth: w, offsetHeight: h } = this.media.container,\r\n newX = this.lastMiniplayerPosX + (x - this.lastMiniplayerPtrX),\r\n newY = this.lastMiniplayerPosY - (y - this.lastMiniplayerPtrY),\r\n posX = clamp(w / 2, newX, ww - w / 2),\r\n posY = clamp(h / 2, newY, wh - h / 2);\r\n this.media.container.style.setProperty(\"transform\", `translate(${x - this.lastMiniplayerPtrX}px, ${y - this.lastMiniplayerPtrY}px)`, \"important\");\r\n (this.nextMiniplayerX = `${(posX / ww) * 100}%`), (this.nextMiniplayerY = `${(posY / wh) * 100}%`);\r\n (this.wildMiniplayerX = `${(newX / ww) * 100}%`), (this.wildMiniplayerY = `${(newY / wh) * 100}%`);\r\n });\r\n }\r\n private prevEX?: number;\r\n private prevEY?: number;\r\n\r\n protected handleDragEnd(): void {\r\n this.ctlr.cancelRAFLoop(\"miniplayerDragging\");\r\n this.media.container.classList.remove(\"tmg-media-player-dragging\");\r\n this.media.container.style.setProperty(\"left\", this.wildMiniplayerX, \"important\");\r\n this.media.container.style.setProperty(\"bottom\", this.wildMiniplayerY, \"important\");\r\n this.media.container.style.removeProperty(\"transform\");\r\n setTimeout(() => ((this.settings.css.currentMiniplayerX = this.nextMiniplayerX), (this.settings.css.currentMiniplayerY = this.nextMiniplayerY), [\"transition\", \"left\", \"bottom\"].forEach((prop) => this.media.container.style.removeProperty(prop))), 0, this.signal);\r\n document.removeEventListener(\"mousemove\", this.handleDragging);\r\n document.removeEventListener(\"touchmove\", this.handleDragging);\r\n for (const type of [\"mouseup\", \"mouseleave\", \"touchend\", \"touchcancel\"]) document.removeEventListener(type, this.handleDragEnd);\r\n }\r\n\r\n public syncFeatures(): void {\r\n if (this.config.disabled) return void (this.media.features.miniplayer = false);\r\n this.media.features.miniplayer ||= this.ctlr.isNativeEl;\r\n }\r\n\r\n protected override onDestroy(): void {\r\n document.removeEventListener(\"mousemove\", this.handleDragging);\r\n document.removeEventListener(\"touchmove\", this.handleDragging);\r\n for (const type of [\"mouseup\", \"mouseleave\", \"touchend\", \"touchcancel\"]) document.removeEventListener(type, this.handleDragEnd);\r\n for (const type of [\"mousedown\", \"touchstart\"]) this.media.container.removeEventListener(type, this.handleDragStart);\r\n super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PinRegistryMap {\r\n \"modes.miniplayer\": typeof ModesMiniplayerPin;\r\n }\r\n}\r\n","import { Controller } from \"@core/controller\";\r\nimport { BasePlug } from \"../../base\";\r\nimport { ModesFullscreenPin } from \"./fullscreen\";\r\nimport { ModesTheaterPin } from \"./theater\";\r\nimport { ModesPictureInPicturePin } from \"./pictureInPicture\";\r\nimport { ModesMiniplayerPin } from \"./miniplayer\";\r\nimport type { ModesConfig } from \"./types\";\r\nimport { MODES_BUILD } from \"./build\";\r\nimport { PinRegistry } from \"@core/registries\";\r\n\r\nexport class ModesPlug extends BasePlug<ModesConfig> {\r\n public static readonly plugName = \"modes\";\r\n public static readonly BUILD = MODES_BUILD;\r\n public fullscreen?: ModesFullscreenPin;\r\n public theater?: ModesTheaterPin;\r\n public pictureInPicture?: ModesPictureInPicturePin;\r\n public miniplayer?: ModesMiniplayerPin;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.modes) {\r\n super(ctlr, config);\r\n const FullscreenPin = PinRegistry.get(\"modes.fullscreen\"),\r\n TheaterPin = PinRegistry.get(\"modes.theater\"),\r\n PictureInPicturePin = PinRegistry.get(\"modes.pictureInPicture\"),\r\n MiniplayerPin = PinRegistry.get(\"modes.miniplayer\");\r\n FullscreenPin && (this.fullscreen = new FullscreenPin(this.ctlr, this.config.fullscreen)), TheaterPin && (this.theater = new TheaterPin(this.ctlr, this.config.theater)), PictureInPicturePin && (this.pictureInPicture = new PictureInPicturePin(this.ctlr, this.config.pictureInPicture)), MiniplayerPin && (this.miniplayer = new MiniplayerPin(this.ctlr, this.config.miniplayer));\r\n }\r\n\r\n public override mount(): void {\r\n // Utility Injection\r\n this.fullscreen?.mount?.(), this.theater?.mount?.(), this.pictureInPicture?.mount?.(), this.miniplayer?.mount?.();\r\n }\r\n\r\n public override wire(): void {\r\n // Utility Injection\r\n this.fullscreen?.wire(), this.theater?.wire(), this.pictureInPicture?.wire(), this.miniplayer?.wire();\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.fullscreen?.destroy(), this.theater?.destroy(), this.pictureInPicture?.destroy(), this.miniplayer?.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\nexport * from \"./fullscreen\";\r\nexport * from \"./theater\";\r\nexport * from \"./pictureInPicture\";\r\nexport * from \"./miniplayer\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.modes\": typeof ModesPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n modes: ModesConfig;\r\n }\r\n}\r\n","import { NotifiersConfig } from \"./types\";\r\n\r\nexport const NOTIFIERS_BUILD: Partial<NotifiersConfig> = {\r\n disabled: false,\r\n list: [\"playpausenotifier\", \"prevnextnotifier\", \"captionsnotifier\", \"capturenotifier\", \"playbackratenotifier\", \"fastplaynotifier\", \"volumenotifier\", \"brightnessnotifier\", \"objectfitnotifier\", \"fwdbwdnotifier\", \"scrubnotifier\", \"cancelscrubnotifier\", \"touchvolumenotifier\", \"touchbrightnessnotifier\", \"touchtimelinenotifier\", \"chapternotifier\", \"castnotifier\", \"airplaynotifier\", \"timernotifier\"] as const,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { NotifiersConfig, NotifiersState } from \"./types\";\r\nimport { NOTIFIERS_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { BaseNotifier } from \"@components/notifiers/base\";\r\nimport { ComponentRegistry } from \"@core/registries\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport type { ComponentRegistryMap } from \"@defs/registries\";\r\n\r\nexport class NotifiersPlug extends BasePlug<NotifiersConfig, NotifiersState> {\r\n public static readonly plugName = \"notifiers\";\r\n public static readonly BUILD = NOTIFIERS_BUILD;\r\n public components = new Map<string, BaseNotifier>();\r\n public container!: HTMLDivElement;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.notifiers) {\r\n super(ctlr, config, { events: [] }); // [\"mediaplay\", \"mediapause\", \"mediaprev\", \"medianext\", \"playbackrateup\", \"playbackratedown\", \"volumeup\", \"volumedown\", \"volumemuted\", \"brightnessup\", \"brightnessdown\", \"brightnessdark\", \"objectfitcontain\", \"objectfitcover\", \"objectfitfill\", \"captions\", \"capture\", \"theater\", \"fullscreen\", \"fwd\", \"bwd\"]\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.ctlr.DOM.notifiersContainer = this.container = createEl(\"div\", { className: \"tmg-media-notifiers-container\" }, { notify: \"\" });\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.container);\r\n // DOM -> Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.notifiers.list\", this.handleList, { init: true, signal: this.signal });\r\n }\r\n public override unmount(): void {\r\n this.container.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // State Listeners\r\n this.state.on(\"events\", this.handleEventsState, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleEventsState({ currentTarget: { value: events = [] } }: REvent<NotifiersState, \"events\">): void {\r\n for (const eN of events) this.container.addEventListener(eN, this.handleEvent, { signal: this.signal });\r\n }\r\n\r\n protected handleList({ value: list = [] }: REvent<CtlrConfig, \"settings.notifiers.list\">): void {\r\n for (const id of list) !this.components.has(id) && this.initComp(id);\r\n }\r\n\r\n public initComp<K extends keyof ComponentRegistryMap>(name: K, comp?: InstanceType<ComponentRegistryMap[K]>): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public initComp<T extends BaseNotifier = BaseNotifier>(name: string, comp?: T): T | undefined;\r\n public initComp(name: string, comp = ComponentRegistry.init(name, this.ctlr)) {\r\n return comp ? (this.components.set(name, comp as BaseNotifier), comp) : undefined;\r\n }\r\n\r\n public comp<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]> | undefined;\r\n public comp<T extends BaseNotifier = BaseNotifier>(name: string): T | undefined;\r\n public comp(name: string): BaseNotifier | undefined {\r\n return this.components.get(name);\r\n }\r\n public compEl<K extends keyof ComponentRegistryMap>(name: K): InstanceType<ComponentRegistryMap[K]>[\"element\"] | undefined;\r\n public compEl<T extends BaseNotifier = BaseNotifier>(name: string): T[\"element\"] | undefined;\r\n public compEl(name: string): HTMLElement | undefined {\r\n return this.components.get(name)?.element;\r\n }\r\n\r\n public handleEvent({ type: eN }: Event): void {\r\n this.reset(), this.ctlr.RAFLoop(\"notifying\", () => this.reset(eN), this.signal);\r\n }\r\n\r\n public reset(token = \"\", flush = false): void {\r\n flush && this.ctlr.cancelRAFLoop(\"notifying\");\r\n this.container.setAttribute(\"data-notify\", token);\r\n }\r\n\r\n public notify(key: string): void {\r\n if (!this.config.disabled) this.ctlr.fire(key, null, this.container);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.reset(\"\", true);\r\n for (const comp of this.components.values()) comp.destroy();\r\n this.components.clear();\r\n this.ctlr.DOM.notifiersContainer = null;\r\n super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.notifiers\": typeof NotifiersPlug;\r\n }\r\n interface ControllerDOMMap {\r\n notifiersContainer?: HTMLDivElement | null;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n notifiers: NotifiersConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport type { ObjectFitConfig } from \"./types\";\r\n\r\nexport const objectFits = [\"contain\", \"cover\", \"fill\"] as const;\r\n\r\nexport const OBJECT_FIT_BUILD: DeepPartial<ObjectFitConfig> = {\r\n options: [\r\n { value: \"contain\", display: \"Crop to fit\" },\r\n { value: \"cover\", display: \"Fit to screen\" },\r\n { value: \"fill\", display: \"Stretch\" },\r\n ]\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport { OBJECT_FIT_BUILD } from \"./build\";\r\nimport type { ObjectFitConfig, ObjectFit } from \"./types\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { rotateAny } from \"@utils/num\";\r\nimport { getUIOpt, parseUIOpts } from \"@utils/obj\";\r\nimport { getRenderedBox } from \"@utils/media\";\r\n\r\nexport class ObjectFitPlug extends BasePlug<ObjectFitConfig> {\r\n public static readonly plugName = \"objectFit\";\r\n public static readonly BUILD = OBJECT_FIT_BUILD;\r\n\r\n public override wire(): void {\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => (this.media.features.objectFit ||= true), { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"intent.objectFit\", this.handleObjectFitIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"state.objectFit\", this.handleObjectFitState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- State ---------\r\n this.ctlr.state.on(\"dimensions.container.width\", this.syncObjectSize, { init: true, signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.container.height\", this.syncObjectSize, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.css.objectFit\", this.syncObjectSize, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.css.objectPosition\", this.syncObjectSize, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"objectFit\", { fn: this.rotateFit, keyboard: { phase: \"keydown\" } }), super.wire();\r\n }\r\n\r\n protected handleObjectFitIntent(e: REvent<CtlrMedia, \"intent.objectFit\">): void {\r\n if (e.resolved) return;\r\n this.media.state.objectFit = e.value || \"contain\";\r\n e.resolve(this.name);\r\n }\r\n\r\n protected handleObjectFitState({ value: fit }: REvent<CtlrMedia, \"state.objectFit\">): void {\r\n this.settings.css.objectFit = this.media.container.dataset.objectFit = fit;\r\n this.settings.css.bgObjectFit = fit === \"fill\" ? \"100% 100%\" : fit; // prolly only 2 ppl on dis planet nd AI know dis trick\r\n }\r\n\r\n public get nextFit(): ObjectFit {\r\n return ({ contain: \"cover\", cover: \"fill\", fill: \"contain\" } as const)[this.media.state.objectFit];\r\n }\r\n public rotateFit(): void {\r\n this.media.intent.objectFit = rotateAny(this.media.state.objectFit, parseUIOpts(this.config.options!) as ObjectFit[]);\r\n this.media.features.objectFit && this.ctlr.plug(\"settings.notifiers\")?.notify(`objectfit${this.media.intent.objectFit}`); // must notify for visual aid\r\n }\r\n\r\n public toLabel(fit = this.media.state.objectFit): string {\r\n return getUIOpt(this.config.options, fit);\r\n }\r\n\r\n public syncObjectSize(): void {\r\n const { width = this.ctlr.state.dimensions.container.width, height = this.ctlr.state.dimensions.container.height, left, top } = getRenderedBox(this.media.status, this.ctlr.state.dimensions.container, this.settings.css as any); // just had to be u, video frame\r\n (this.settings.css.currentObjectHeight = height + \"px\"), (this.settings.css.currentObjectWidth = width + \"px\"), (this.settings.css.currentObjectTop = top + \"px\"), (this.settings.css.currentObjectLeft = left + \"px\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.objectFit\": typeof ObjectFitPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n objectFit: ObjectFitConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { OverlayConfig } from \"./types\";\nimport { DeepPartial } from \"sia-reactor\";\n\nexport const OVERLAY_BUILD: DeepPartial<OverlayConfig> = {\n delay: 3000,\n behavior: {\n value: \"strict\",\n options: [\n { value: \"strict\", display: \"Strict\" },\n { value: \"auto\", display: \"Auto\" },\n { value: \"persistent\", display: \"Persistent\" },\n { value: \"hidden\", display: \"Hidden\" },\n ]\n },\n curtain: {\n value: \"edged\",\n options: [\n { value: \"edged\", display: \"Edged\" },\n { value: \"cover\", display: \"Cover\" },\n { value: \"none\", display: \"None\" },\n ]\n }\n};\n","import { BasePlug } from \"../../base\";\r\nimport type { OverlayConfig } from \"./types\";\r\nimport { OVERLAY_BUILD } from \"./build\";\r\nimport type { OverlayState } from \"./types\";\r\nimport { Controller } from \"@core/controller\";\r\nimport type { CtlrConfig } from \"@defs/config\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { setTimeout } from \"@utils/fn\";\r\n\r\nexport class OverlayPlug extends BasePlug<OverlayConfig, OverlayState> {\r\n public static readonly plugName = \"overlay\";\r\n public static readonly BUILD = OVERLAY_BUILD;\r\n public overlayDelayId = -1;\r\n public whitelist: string[] = [\"pictureInPicture\", \"settings\", \"settingsMenu\", \"controlDragging\"]; // #DEFAULT: build privilege\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.overlay) {\r\n super(ctlr, config, { visible: false });\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => (value ? this.show() : this.delay()), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.locked\", ({ value }) => (value ? this.hide(\"force\") : this.show()), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.overlay.curtain.value\", this.handleCurtain, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.overlay.behavior.value\", this.handleBehavior, { init: true, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handleCurtain({ value }: REvent<CtlrConfig, \"settings.overlay.curtain.value\">): void {\r\n this.media.container.dataset.curtain = value;\r\n }\r\n\r\n protected handleBehavior({ value }: REvent<CtlrConfig, \"settings.overlay.behavior.value\">): void {\r\n this.show(), value === \"hidden\" && this.hide(\"force\");\r\n }\r\n\r\n public show(): void {\r\n if (!this.canShow()) return;\r\n this.media.container.classList.add(\"tmg-media-overlay\");\r\n this.state.visible = true;\r\n this.delay();\r\n }\r\n\r\n public delay(): void {\r\n clearTimeout(this.overlayDelayId);\r\n if (this.canHide()) this.overlayDelayId = setTimeout(this.hide, this.config.delay, this.signal);\r\n }\r\n\r\n public hide(manner?: \"force\"): void {\r\n if (!this.canHide(manner)) return;\r\n this.media.container.classList.remove(\"tmg-media-overlay\");\r\n this.state.visible = false;\r\n }\r\n\r\n public canShow(): boolean {\r\n return this.config.behavior.value !== \"hidden\" && !this.media.state.locked && !this.ctlr.isUIActive(\"playerDragging\");\r\n }\r\n public canHide(manner?: \"force\"): boolean {\r\n return this.config.behavior.value !== \"persistent\" && (manner === \"force\" || (!this.whitelist.some(this.ctlr.isUIActive) && (IS_MOBILE ? !this.media.status.waiting && !this.media.state.paused : this.config.behavior.value === \"strict\" || !this.media.state.paused)));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.overlay\": typeof OverlayPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n overlay: OverlayConfig;\r\n }\r\n}\r\n","import { CTX } from \"sia-reactor\";\r\nimport { PersistConfig } from \"./types\";\r\n\r\nexport const PERSIST_BUILD: Partial<PersistConfig> = {\r\n strict: !CTX.isDevEnv,\r\n whitelist: {\r\n config: [\"lightState\", \"settings\", \"actions\"],\r\n media: [\"state\", \"settings\"],\r\n },\r\n blacklist: {\r\n media: [\"state.sources\", \"state.tracks\", \"state.poster\", \"state.fullscreen\", \"state.pictureInPicture\", \"settings.srcObject\"], // \"state.src\", \"state.paused\"\r\n },\r\n mirrorReads: true,\r\n mirrorWrites: true,\r\n cachePayload: true,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { PersistConfig } from \"./types\";\r\nimport { PERSIST_BUILD } from \"./build\";\r\nimport { fanout } from \"sia-reactor/utils\";\r\nimport { PersistModule } from \"sia-reactor/modules\";\r\n\r\nexport class PersistPlug extends BasePlug<PersistConfig> {\r\n public static readonly plugName = \"persist\";\r\n public static readonly BUILD = PERSIST_BUILD;\r\n public module!: PersistModule<any>;\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.module = new PersistModule({ key: `${this.ctlr.config.id}_STORE`, ...(this.config as Partial<PersistConfig>) });\r\n // Utility Injection\r\n this.module.attach(this.media, \"media\").setup(this.ctlr.config, \"config\");\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.persist\", (e) => fanout<PersistConfig>(this.module.config, e.currentTarget.value), { depth: 1, signal: this.signal, init: false }); // #STABLE: snubs unchanged writes\r\n // Post Wiring\r\n this.module.clearCache(), super.wire();\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.module.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.persist\": typeof PersistPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n persist: PersistConfig;\r\n }\r\n}\r\n","import { PlaybackRateConfig } from \"./types\";\r\n\r\nexport const PLAYBACK_RATE_BUILD: Partial<PlaybackRateConfig> = {\r\n min: 0.1,\r\n max: 8,\r\n skip: 0.25,\r\n options: [1, 1.25, 1.5, 2, 3],\r\n};\r\n","import { BasePlug } from \"../../base\";\nimport type { PlaybackRateConfig } from \"./types\";\nimport { PLAYBACK_RATE_BUILD } from \"./build\";\nimport type { REvent } from \"sia-reactor\";\nimport { CtlrConfig } from \"@defs/config\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { clamp, rotateAny } from \"@utils/num\";\n\nexport class PlaybackRatePlug extends BasePlug<PlaybackRateConfig> {\n public static readonly plugName = \"playbackRate\";\n public static readonly BUILD = PLAYBACK_RATE_BUILD;\n\n public override wire(): void {\n // Ctlr Media Setters\n this.media.set(\"intent.playbackRate\", (value) => clamp(this.config.min, value!, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\n // ---- Media Listeners\n this.media.on(\"state.playbackRate\", this.handlePlaybackRateState, { init: this.ctlr.payload.wired, signal: this.signal });\n // ---- Config --------\n this.ctlr.config.on(\"settings.playbackRate.min\", this.handleMin, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.playbackRate.max\", this.handleMax, { init: true, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"playbackRateUp\", { fn: this.handleKeyRateUp, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"playbackRateDown\", { fn: this.handleKeyRateDown, keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleMin({ value: min }: REvent<CtlrConfig, \"settings.playbackRate.min\">): void {\n if (this.media.state.playbackRate < min) this.media.intent.playbackRate = min;\n }\n\n protected handleMax({ value: max }: REvent<CtlrConfig, \"settings.playbackRate.max\">): void {\n if (this.media.state.playbackRate > max) this.media.intent.playbackRate = max;\n }\n\n protected handlePlaybackRateState({ value }: REvent<CtlrMedia, \"state.playbackRate\">): void {\n this.media.settings.defaultPlaybackRate = value; // UX boost\n }\n\n protected handleKeyRateUp = (): void => {\n this.changeValue(this.ctlr.plug(\"settings.keys\")?.getModded(\"playbackRate\", \"\", this.config.skip) ?? this.config.skip);\n }\n protected handleKeyRateDown = (): void => {\n this.changeValue(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"playbackRate\", \"\", this.config.skip) ?? this.config.skip));\n }\n\n public rotateRate(dir: \"forwards\" | \"backwards\" = \"forwards\"): void {\n this.media.intent.playbackRate = rotateAny(this.media.state.playbackRate, { min: this.config.min, max: this.config.max, step: this.config.skip }, dir);\n }\n\n public changeValue(value: number): void {\n const sign = value >= 0 ? \"+\" : \"-\";\n value = Math.abs(Math.round(value * 100));\n let rate = Math.round(this.media.state.playbackRate * 100);\n if (sign === \"-\") {\n if (rate > this.config.min * 100) rate -= rate % value || value;\n this.media.features.playbackRate && this.ctlr.plug(\"settings.notifiers\")?.notify(\"playbackratedown\");\n } else {\n if (rate < this.config.max * 100) rate += rate % value ? value - (rate % value) : value;\n this.media.features.playbackRate && this.ctlr.plug(\"settings.notifiers\")?.notify(\"playbackrateup\");\n }\n this.media.intent.playbackRate = clamp(this.config.min, +(rate / 100).toFixed(2), this.config.max);\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.playbackRate\": typeof PlaybackRatePlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n playbackRate: PlaybackRateConfig;\n }\n}\n","import { PosterConfig } from \"./types\";\r\n\r\nexport const POSTER_BUILD: Partial<PosterConfig> = {\r\n strict: false,\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { PosterConfig, PosterState } from \"./types\";\r\nimport { POSTER_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport class PosterPlug extends BasePlug<PosterConfig, PosterState> {\r\n public static readonly plugName = \"poster\";\r\n public static readonly BUILD = POSTER_BUILD;\r\n public element!: HTMLImageElement;\r\n\r\n constructor(ctlr: Controller, config?: any) {\r\n super(ctlr, config, { visible: true });\r\n }\r\n\r\n public override mount(): void {\r\n // Variables Assignment\r\n this.element = this.ctlr.syncImgLoadState(createEl(\"img\", { className: \"tmg-media-poster tmg-media-filtered tmg-media-object\", alt: \"Poster Image\" }));\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.element);\r\n }\r\n public override unmount(): void {\r\n this.element.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // State Listeners\r\n this.state.on(\"visible\", this.syncView, { signal: this.signal });\r\n // Ctlr Media Watchers\r\n this.media.watch(\"tech\", () => ((this.media.features.poster ||= true), this.syncView()), { init: true, signal: this.signal });\r\n // --------- Listeners\r\n this.media.on(\"intent.poster\", this.handlePosterIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\r\n this.media.on(\"intent.src\", (e) => e.resolved && (this.state.visible = true), { signal: this.signal });\r\n this.media.on(\"state.paused\", ({ value }) => !value && !this.config.strict && (this.state.visible = false), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.currentTime\", () => (this.config.strict || this.media.state.currentTime) && (this.state.visible = false), { init: this.ctlr.payload.wired, signal: this.signal }); // if strict, sets hides like html5, lightState Plug blocks\r\n this.media.on(\"status.ended\", this.syncView, { signal: this.signal });\r\n this.media.on(\"state.poster\", ({ value }) => (value ? (this.element.src = value) : this.element.removeAttribute(\"src\")), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n super.wire();\r\n }\r\n\r\n protected handlePosterIntent(e: REvent<CtlrMedia, \"intent.poster\">): void {\r\n if (e.resolved) return;\r\n if (e.value) (this.element.dataset.loaded = \"false\"), (this.element.src = e.value); // start the load\r\n this.media.state.poster = e.value;\r\n e.resolve(this.name);\r\n }\r\n\r\n protected syncView(): void {\r\n this.media.container.classList.toggle(\"tmg-media-poster-shown\", this.media.type === \"audio\" || this.state.visible || (!this.config.strict && this.media.status.ended));\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.poster\": typeof PosterPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n poster: PosterConfig;\r\n }\r\n}\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { SettingsViewConfig } from \"./types\";\r\n\r\nexport const SETTINGS_BUILD: DeepPartial<SettingsViewConfig> = {\r\n autoPause: true,\r\n menu: {\r\n disabled: false,\r\n showView: true,\r\n viewLabel: \"See More\",\r\n preserveStack: false,\r\n },\r\n};\n","import { REvent } from \"sia-reactor\";\r\nimport { Controllable } from \"@core/controllable\";\r\nimport { Controller } from \"@core/controller\";\r\nimport { parseForARIAKS } from \"@utils/keys\";\r\nimport { CtlrMedia, MediaFeatures } from \"@defs/contract\";\r\nimport { ComponentConstructor, ComponentState } from \"./types\";\r\n\r\nexport abstract class BaseComponent<Config = any, State extends ComponentState = any, El extends HTMLElement = HTMLElement> extends Controllable<Config, State> {\r\n public static readonly componentName: string;\r\n public static readonly isControl: boolean = false;\r\n public get name() {\r\n return (this.constructor as ComponentConstructor).componentName;\r\n }\r\n public element!: El;\r\n public get el() {\r\n return this.element;\r\n }\r\n\r\n constructor(ctlr: Controller, config: Config, state?: State) {\r\n super(ctlr, config, { label: \"\", cmd: \"\", active: false, disabled: false, hidden: false, ...state } as State);\r\n }\r\n protected override onSetup(): void {\r\n this.mount?.();\r\n this.ctlr.state.readyState ? this.wire?.() : this.wire && this.ctlr.state.wonce(\"readyState\", this.wire, { signal: this.signal }); // wire after all plugs setup\r\n }\r\n protected override onDestroy(): void {\r\n this.unmount();\r\n }\r\n\r\n public abstract create(): El; // Must assign to this.element before returning\r\n public mount?(): void {}\r\n public unmount(): void {\r\n this.el.remove();\r\n }\r\n public wire?(): void {} // auto unwiring\r\n\r\n public active() {\r\n this.el.classList.toggle(\"tmg-media-control-active\", (this.state.active = true));\r\n }\r\n public inactive() {\r\n this.el.classList.toggle(\"tmg-media-control-active\", (this.state.active = false));\r\n }\r\n public disable(): void {\r\n this.el.classList.toggle(\"tmg-media-control-disabled\", (this.state.disabled = true));\r\n }\r\n public enable(): void {\r\n this.el.classList.toggle(\"tmg-media-control-disabled\", (this.state.disabled = false));\r\n }\r\n public hide(): void {\r\n this.el.classList.toggle(\"tmg-media-control-hidden\", (this.state.hidden = true));\r\n }\r\n public show(): void {\r\n this.el.classList.toggle(\"tmg-media-control-hidden\", (this.state.hidden = false));\r\n }\r\n protected gate(e: REvent<CtlrMedia, `features.${keyof MediaFeatures}`>): void {\r\n !e.value ? this.hide() : this.canShow && this.show();\r\n }\r\n protected get canShow(): boolean {\r\n return true;\r\n } // override to make gating smarter\r\n\r\n protected setBtnARIA(dblAction?: string, target: HTMLElement = this.el): void {\r\n this.state.label && target.setAttribute(\"aria-label\", this.state.label);\r\n this.state.cmd && target.setAttribute(\"aria-keyshortcuts\", parseForARIAKS(this.state.cmd));\r\n if (dblAction) target.setAttribute(\"aria-description\", `Double-press to ${dblAction}`);\r\n else if (target.hasAttribute(\"aria-description\")) target.removeAttribute(\"aria-description\");\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\n","import { createEl } from \"@utils/dom\";\r\nimport { Controllable } from \"@core/controllable\";\r\nimport type { Controller } from \"@core/controller\";\r\n\r\nexport type PanelDir = \"forward\" | \"backward\" | \"none\";\r\n\r\nexport abstract class BaseMenuPanel extends Controllable {\r\n public readonly element: HTMLElement;\r\n protected readonly content: HTMLElement;\r\n\r\n constructor(ctlr: Controller, config: any, className: string) {\r\n super(ctlr, config);\r\n this.element = createEl(\"div\", { className: `tmg-media-smenu-panel ${className}` });\r\n this.element.append((this.content = createEl(\"div\", { className: \"tmg-media-smenu-panel-content\" })));\r\n }\r\n\r\n public enter(dir: PanelDir = \"forward\"): void {\r\n this.element.classList.remove(\"tmg-media-smenu-panel-exit\", \"tmg-media-smenu-panel-active\");\r\n (this.element.dataset.dir = dir), this.element.style.removeProperty(\"display\"), this.element.removeAttribute(\"inert\");\r\n void this.element.offsetWidth, this.element.classList.add(\"tmg-media-smenu-panel-active\");\r\n }\r\n public exit(dir: PanelDir = \"backward\"): void {\r\n (this.element.dataset.dir = dir), this.element.setAttribute(\"inert\", \"\");\r\n this.element.classList.remove(\"tmg-media-smenu-panel-active\", \"tmg-media-smenu-panel-exit\");\r\n this.element.style.display = \"none\";\r\n }\r\n\r\n public get isActive(): boolean {\r\n return this.element.classList.contains(\"tmg-media-smenu-panel-active\");\r\n }\r\n\r\n public get contentHeight(): number {\r\n // prettier-ignore\r\n return Array.prototype.reduce.call(this.element.children, ((acc: number, el: HTMLElement) => {\r\n const oldHeight = el.style.height;\r\n el.style.height = \"auto\";\r\n const h = el.scrollHeight;\r\n return (oldHeight ? (el.style.height = oldHeight) : el.style.removeProperty(\"height\"), acc + h);\r\n }) as any, 0) as number;\r\n }\r\n}\r\n","import type { SettingsMenuItem } from \"../../types\";\r\nimport { Controllable } from \"@core/controllable\";\r\nimport { BaseRegistry } from \"@core/registries\";\r\nimport type { Controller } from \"@core/controller\";\r\n\r\nexport abstract class BaseWidget<T = unknown> extends Controllable {\r\n protected item: SettingsMenuItem<T>;\r\n public element!: HTMLElement;\r\n\r\n constructor(item: SettingsMenuItem<T>, ctlr: Controller) {\r\n super(ctlr, undefined);\r\n this.item = item;\r\n }\r\n\r\n public abstract render(): HTMLElement;\r\n public abstract syncUI(): void;\r\n protected override onSetup(): void {\r\n this.item.mediaPaths?.forEach((path) => this.media.on(path, this.syncUI, { signal: this.signal }));\r\n this.item.configPaths?.forEach((path) => this.ctlr.config.on(path, this.syncUI, { signal: this.signal }));\r\n this.item.onWire?.(this.syncUI, this.signal);\r\n }\r\n protected override onDestroy(): void {}\r\n}\r\n\r\nexport type WidgetConstructor = new (item: SettingsMenuItem<any>, ctlr: Controller) => BaseWidget<any>;\r\n\r\nexport class WidgetRegistry extends BaseRegistry<WidgetConstructor> {\r\n private static instance = new WidgetRegistry();\r\n\r\n public static register(type: string, Ctor: WidgetConstructor): void {\r\n this.instance.register(type, Ctor);\r\n }\r\n public static create(item: SettingsMenuItem, ctlr: Controller): BaseWidget | null {\r\n const Ctor = this.instance.get(item.widget);\r\n if (!Ctor) return null;\r\n const widget = new Ctor(item, ctlr);\r\n return widget.setup(), widget;\r\n }\r\n}\r\n","export * from \"@utils/color\";\nexport * from \"@utils/dom\";\nexport * from \"@utils/env\";\nexport * from \"@utils/file\";\nexport * from \"@utils/fn\";\nexport * from \"@utils/keys\";\nexport * from \"@utils/match\";\nexport * from \"@utils/media\";\nexport * from \"@utils/methd\";\nexport * from \"@utils/num\";\nexport * from \"@utils/obj\";\nexport * from \"@utils/str\";\nexport * from \"@utils/time\";\n","import type { SettingsMenuItem, SettingsRowElement } from \"../../types\";\r\nimport { BaseWidget, WidgetRegistry } from \".\";\r\nimport { createEl, createListRenderer } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { isFunc } from \"../../../../../super/utils\";\r\n\r\nexport class GroupWidget extends BaseWidget {\r\n private renderRows!: ReturnType<typeof createListRenderer<SettingsMenuItem>>;\r\n public onSubItemClick?: (item: SettingsMenuItem) => void;\r\n\r\n public override render(): HTMLElement {\r\n this.element = createEl(\"ul\", { className: \"tmg-media-smenu-group-list\" });\r\n this.renderRows = createListRenderer<SettingsMenuItem>({\r\n container: this.element,\r\n getKey: (sub) => sub.id,\r\n createNode: (item) => this.buildRow(item),\r\n destroyNode: (node) => ((node as any)._ac?.abort(), (node as SettingsRowElement).widget?.destroy(), node.remove()),\r\n });\r\n return this.syncUI(), this.element;\r\n }\r\n\r\n public override syncUI(): void {\r\n const active = (this.item.items ?? []).filter((sub) => {\r\n if (isFunc(sub.hidden) ? sub.hidden() : sub.hidden) return false;\r\n return !sub.feature || Boolean(this.media.features[sub.feature]);\r\n });\r\n this.renderRows(active);\r\n active.forEach((sub) => {\r\n const li = this.element.querySelector<SettingsRowElement>(`.tmg-media-smenu-group-row[data-sub-id=\"${sub.id}\"]`);\r\n if (li) {\r\n const valNode = li.querySelector<HTMLElement>(\".tmg-media-smenu-group-value\");\r\n valNode ? (valNode.textContent = sub.getValue?.() || \"\") : li.widget?.syncUI();\r\n }\r\n });\r\n }\r\n\r\n private buildRow(sub: SettingsMenuItem): HTMLElement {\r\n const isWidget = sub.widget === \"toggle\" || sub.inline,\r\n disabled = sub.getDisabled?.() ?? ([\"select\", \"drag-select\"].includes(sub.widget as string) && sub.getOptions?.()?.length === 0),\r\n li = createEl(\"li\", { className: \"tmg-media-smenu-group-row\" + (disabled ? \" tmg-media-control-disabled\" : \"\"), tabIndex: 0, inert: disabled || undefined }, { subId: sub.id }) as SettingsRowElement,\r\n lbl = createEl(\"span\", { className: \"tmg-media-smenu-group-label\", textContent: sub.label });\r\n if (sub.title) li.title = isFunc(sub.title) ? sub.title() : sub.title;\r\n if (sub.icon) {\r\n const iconSvg = IconRegistry.get(sub.icon, true);\r\n if (iconSvg) li.append(createEl(\"span\", { className: \"tmg-media-smenu-group-icon\", innerHTML: iconSvg }));\r\n }\r\n if (isWidget) {\r\n const widget = WidgetRegistry.create(sub, this.ctlr);\r\n if (widget) {\r\n sub.inline && sub.widget !== \"toggle\" ? (li.removeAttribute(\"tabindex\"), li.classList.replace(\"tmg-media-smenu-group-row\", \"tmg-media-smenu-inline-wrapper\"), li.append(widget.render()), sub.widget === \"range\" && li.classList.add(\"tmg-media-smenu-row-inline-block\")) : (li.append(lbl, widget.render()), li.classList.add(\"tmg-media-smenu-row-inline\"));\r\n li.widget = widget;\r\n li.addEventListener(\"click\", (e) => !disabled && (e.target === li || e.target === lbl) && li.querySelector<HTMLElement>(\"input, button\")?.click());\r\n } else li.append(lbl);\r\n } else {\r\n const val = createEl(\"span\", { className: \"tmg-media-smenu-group-value\", textContent: sub.getValue() || \"\" });\r\n sub.widget !== \"button\" ? li.append(lbl, val, createEl(\"span\", { className: \"tmg-media-smenu-group-arrow\", ariaHidden: \"true\", innerHTML: \"&#8250;\" })) : li.append(lbl);\r\n li.addEventListener(\"click\", () => !disabled && (sub.widget === \"button\" ? sub.onChange?.(null) : this.onSubItemClick?.(sub)));\r\n if (sub.mediaPaths || sub.configPaths || sub.onWire) {\r\n const ac = new AbortController(),\r\n syncUI = () => {\r\n const valNode = li.querySelector<HTMLElement>(\".tmg-media-smenu-group-value\");\r\n valNode ? (valNode.textContent = sub.getValue() || \"\") : (li as SettingsRowElement).widget?.syncUI();\r\n const _d = sub.getDisabled?.() ?? ([\"select\", \"drag-select\"].includes(sub.widget as string) && sub.getOptions?.()?.length === 0);\r\n (li.inert = !!_d), li.classList.toggle(\"tmg-media-control-disabled\", !!_d);\r\n };\r\n sub.mediaPaths?.forEach((path) => this.media.on(path, syncUI, { signal: ac.signal }));\r\n sub.configPaths?.forEach((path) => this.ctlr.config.on(path, syncUI, { signal: ac.signal }));\r\n sub.onWire?.(syncUI, ac.signal);\r\n (li as any)._ac = ac;\r\n }\r\n }\r\n return li;\r\n }\r\n}\r\n\r\nWidgetRegistry.register(\"group\", GroupWidget);\r\n","import { BaseMenuPanel } from \".\";\r\nimport type { SettingsMenuItem, SettingsMenuConfig, SettingsRowElement } from \"../../types\";\r\nimport { createEl, createListRenderer } from \"@utils/dom\";\r\nimport { WidgetRegistry } from \"../widgets\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { isFunc } from \"@utils/obj\";\r\nimport { requestAnimationFrame } from \"@utils/fn\";\r\n\r\nexport class MainMenuPanel extends BaseMenuPanel {\r\n private viewBtn!: HTMLButtonElement;\r\n private renderRows!: ReturnType<typeof createListRenderer<SettingsMenuItem>>;\r\n public onItemClick?: (item: SettingsMenuItem) => void;\r\n public onViewClick?: () => void;\r\n\r\n constructor(ctlr: Controller, private readonly menuConfig: SettingsMenuConfig) {\r\n super(ctlr, undefined, \"tmg-media-smenu-main-panel\");\r\n }\r\n\r\n protected override onSetup() {}\r\n\r\n public build(): void {\r\n const list = createEl(\"ul\", { className: \"tmg-media-smenu-main-list\", role: \"menu\" });\r\n this.renderRows = createListRenderer<SettingsMenuItem>({\r\n container: list,\r\n getKey: (item) => item.id,\r\n createNode: (item) => this.buildRow(item),\r\n destroyNode: (node) => ((node as any)._ac?.abort(), (node as SettingsRowElement).widget?.destroy(), node.remove()),\r\n });\r\n this.content.append(list);\r\n if (this.menuConfig.showView) {\r\n this.viewBtn = createEl(\"button\", { type: \"button\", className: \"tmg-media-smenu-view-btn\", innerHTML: `<span class=\"tmg-media-smenu-row-icon\">${IconRegistry.get(\"returnback\")}</span><span class=\"tmg-media-smenu-view-label\">${this.menuConfig.viewLabel}</span>` });\r\n this.viewBtn.addEventListener(\"click\", () => this.onViewClick?.()), this.content.append(createEl(\"div\", { className: \"tmg-media-smenu-divider\" }), this.viewBtn);\r\n }\r\n }\r\n\r\n public sync(items: SettingsMenuItem[]): void {\r\n this.renderRows(items), this.isActive && this.focusFirst();\r\n }\r\n public override enter(dir?: \"forward\" | \"backward\" | \"none\"): void {\r\n super.enter(dir), this.focusFirst();\r\n }\r\n private focusFirst(): void {\r\n requestAnimationFrame(() => this.element.querySelector<HTMLElement>(\".tmg-media-smenu-row[tabindex='0']\")?.focus(), this.ctlr.signal);\r\n }\r\n\r\n private buildRow(item: SettingsMenuItem): HTMLElement {\r\n const isWidget = item.widget === \"toggle\" || item.widget === \"button\" || item.inline,\r\n li = createEl(\"li\", { className: \"tmg-media-smenu-row\" + (item.getDisabled?.() ? \" tmg-media-control-disabled\" : \"\"), role: \"menuitem\", tabIndex: 0, inert: item.getDisabled?.() || undefined }, { itemId: item.id }) as SettingsRowElement,\r\n lbl = createEl(\"span\", { className: \"tmg-media-smenu-row-label\", textContent: item.label });\r\n if (item.title) li.title = isFunc(item.title) ? item.title() : item.title;\r\n if (item.icon) {\r\n const iconSvg = IconRegistry.get(item.icon, true);\r\n if (iconSvg) li.append(createEl(\"span\", { className: \"tmg-media-smenu-row-icon\", innerHTML: iconSvg }));\r\n }\r\n if (isWidget) {\r\n const widget = WidgetRegistry.create(item, this.ctlr);\r\n if (widget) {\r\n item.inline && item.widget !== \"toggle\" ? (li.removeAttribute(\"tabindex\"), li.classList.replace(\"tmg-media-smenu-row\", \"tmg-media-smenu-inline-wrapper\"), li.append(widget.render()), item.widget === \"range\" && li.classList.add(\"tmg-media-smenu-row-inline-block\")) : (li.append(lbl, widget.render()), li.classList.add(\"tmg-media-smenu-row-inline\"));\r\n li.widget = widget;\r\n li.addEventListener(\"click\", (e) => !item.getDisabled?.() && (e.target === li || e.target === lbl) && li.querySelector<HTMLElement>(\"input, button\")?.click());\r\n } else li.append(lbl);\r\n } else {\r\n const val = createEl(\"span\", { className: \"tmg-media-smenu-row-value\", textContent: item.getValue() || \"\" });\r\n if (item.infoText) {\r\n const info = createEl(\"span\", { className: \"tmg-media-smenu-row-info\", textContent: isFunc(item.infoText) ? item.infoText() : item.infoText });\r\n li.append(lbl, info, val, createEl(\"span\", { className: \"tmg-media-smenu-row-arrow\", ariaHidden: \"true\", innerHTML: \"&#8250;\" }));\r\n } else li.append(lbl, val, createEl(\"span\", { className: \"tmg-media-smenu-row-arrow\", ariaHidden: \"true\", innerHTML: \"&#8250;\" }));\r\n li.addEventListener(\"click\", () => !item.getDisabled?.() && this.onItemClick?.(item));\r\n if (item.mediaPaths || item.configPaths || item.onWire) {\r\n const ac = new AbortController(),\r\n syncUI = () => {\r\n const valNode = li.querySelector<HTMLElement>(\".tmg-media-smenu-row-value\");\r\n valNode ? (valNode.textContent = item.getValue() || \"\") : (li as SettingsRowElement).widget?.syncUI();\r\n (li.inert = !!item.getDisabled?.()), li.classList.toggle(\"tmg-media-control-disabled\", !!item.getDisabled?.());\r\n };\r\n item.mediaPaths?.forEach((path) => this.media.on(path, syncUI, { signal: ac.signal }));\r\n item.configPaths?.forEach((path) => this.ctlr.config.on(path, syncUI, { signal: ac.signal }));\r\n item.onWire?.(syncUI, ac.signal);\r\n (li as any)._ac = ac;\r\n }\r\n }\r\n return li;\r\n }\r\n}\r\n","import { BaseMenuPanel } from \".\";\r\nimport type { SettingsMenuItem } from \"../../types\";\r\nimport { BaseWidget, WidgetRegistry } from \"../widgets\";\r\nimport { GroupWidget } from \"../widgets/group\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { isFunc } from \"@utils/obj\";\r\nimport { requestAnimationFrame } from \"@utils/fn\";\r\n\r\nexport class SubMenuPanel extends BaseMenuPanel {\r\n private headerLabel!: HTMLElement;\r\n private widgetSlot!: HTMLElement;\r\n private backBtn!: HTMLButtonElement;\r\n private widget: BaseWidget | null = null;\r\n private item: SettingsMenuItem | null = null;\r\n private headerActions!: HTMLElement;\r\n private footerSlot!: HTMLElement;\r\n public onBack?: () => void;\r\n public onSubItemClick?: (item: SettingsMenuItem) => void;\r\n\r\n constructor(ctlr: Controller) {\r\n super(ctlr, undefined, \"tmg-media-smenu-sub-panel\");\r\n }\r\n\r\n protected override onSetup(): void {\r\n this.buildShell();\r\n }\r\n\r\n private buildShell(): void {\r\n const header = createEl(\"div\", { className: \"tmg-media-smenu-sub-header\" });\r\n this.backBtn = createEl(\"button\", { type: \"button\", className: \"tmg-media-smenu-back-btn\", ariaLabel: \"Back\", innerHTML: `<span class=\"tmg-media-smenu-back-arrow\">&#8249;</span>`, tabIndex: 0 });\r\n this.headerLabel = createEl(\"span\", { className: \"tmg-media-smenu-sub-title\", tabIndex: -1 });\r\n this.backBtn.addEventListener(\"click\", (e) => (e.stopPropagation(), this.onBack?.()));\r\n header.addEventListener(\"click\", () => this.onBack?.());\r\n this.headerActions = createEl(\"div\", { className: \"tmg-media-smenu-sub-actions\" });\r\n header.append(this.backBtn, this.headerLabel, this.headerActions);\r\n this.widgetSlot = createEl(\"div\", { className: \"tmg-media-smenu-widget-slot\" });\r\n this.footerSlot = createEl(\"div\", { className: \"tmg-media-smenu-sub-footer\" });\r\n this.content.append(header, this.widgetSlot, this.footerSlot);\r\n }\r\n\r\n public override enter(dir?: \"forward\" | \"backward\" | \"none\") {\r\n super.enter(dir), requestAnimationFrame(() => this.element.querySelector<HTMLElement>(\":is([tabindex='0'], button:not([disabled]), input:not([type='checkbox'], [type='radio'], [disabled])):not(.tmg-media-smenu-back-btn, .tmg-media-range-container)\")?.focus(), this.ctlr.signal);\r\n }\r\n\r\n public load(item: SettingsMenuItem): void {\r\n this.headerLabel.textContent = item.label;\r\n if (this.item?.id === item.id) return void this.widget?.syncUI();\r\n if (this.widget) this.widget.element?.remove(), this.widget.destroy();\r\n this.item = item;\r\n const widget = WidgetRegistry.create(item, this.ctlr);\r\n if (!widget) return;\r\n if (widget instanceof GroupWidget) widget.onSubItemClick = (sub) => this.onSubItemClick?.(sub);\r\n this.widget = widget;\r\n this.widgetSlot.append(widget.render());\r\n // Populate actions\r\n this.headerActions.innerHTML = \"\";\r\n if (item.actions) {\r\n for (const action of item.actions) {\r\n const label = action.getLabel(),\r\n btn = createEl(\"button\", { className: \"tmg-media-smenu-sub-action-btn\" + (!action.icon ? \" tmg-media-smenu-input-btn tmg-media-smenu-text-action\" : \"\"), type: \"button\", ariaLabel: label, title: label });\r\n if (action.id === \"delete\" || action.icon === \"delete\") btn.classList.add(\"tmg-media-smenu-delete-btn\");\r\n action.icon ? (btn.innerHTML = IconRegistry.get(action.icon, true) || label) : (btn.textContent = label);\r\n btn.addEventListener(\"click\", (e) => (e.stopPropagation(), action.onClick()));\r\n this.headerActions.append(btn);\r\n }\r\n }\r\n // Populate footer\r\n this.footerSlot.innerHTML = \"\";\r\n if (item.tipHTML) this.footerSlot.innerHTML = isFunc(item.tipHTML) ? item.tipHTML() : item.tipHTML;\r\n if (item.footerActions?.length) {\r\n const actionsWrap = createEl(\"div\", { className: \"tmg-media-smenu-footer-actions\" });\r\n for (const action of item.footerActions) {\r\n const btn = createEl(\"button\", { className: \"tmg-media-smenu-input-btn\", type: \"button\", textContent: action.getLabel() });\r\n btn.addEventListener(\"click\", () => action.onClick()), actionsWrap.append(btn);\r\n }\r\n this.footerSlot.append(actionsWrap);\r\n }\r\n }\r\n\r\n public syncUI(): void {\r\n this.widget?.syncUI();\r\n if (this.item?.footerActions?.length) {\r\n const btns = this.footerSlot.querySelectorAll(\"button\");\r\n this.item.footerActions.forEach((action, i) => btns[i] && (btns[i].textContent = action.getLabel()));\r\n }\r\n if (this.item?.actions?.length) {\r\n const btns = this.headerActions.querySelectorAll(\"button\");\r\n this.item.actions.forEach((action, i) => {\r\n if (!btns[i]) return;\r\n const lbl = action.getLabel();\r\n btns[i].innerHTML = action.icon ? IconRegistry.get(action.icon, true) || lbl : lbl;\r\n });\r\n }\r\n }\r\n\r\n public get activeId(): string | null {\r\n return this.item?.id ?? null;\r\n }\r\n}\r\n","import { BaseComponent, type ComponentState } from \"@components/base\";\r\nimport { CTX } from \"sia-reactor\";\r\nimport type { SettingsMenuItem, SettingsMenuConfig } from \"../types\";\r\nimport { MainMenuPanel } from \"./panel/main\";\r\nimport { SubMenuPanel } from \"./panel/sub\";\r\nimport type { BaseMenuPanel, PanelDir } from \"./panel\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { getActiveEl, isFunc } from \"@t007/utils\";\r\nimport { initArrowNavigation, initOutsideClick, initFocusTrap, removeArrowNavigation, removeOutsideClick, removeFocusTrap, syncFocusTrap, syncArrowNavigation } from \"@t007/utils/hooks/vanilla\";\r\nimport { requestAnimationFrame } from \"@utils/fn\";\r\nimport { OrderedRegistry } from \"@core/registries\";\r\n// Side-effect imports so all widgets self-register\r\nimport \"./widgets/select\";\r\nimport \"./widgets/range\";\r\nimport \"./widgets/toggle\";\r\nimport \"./widgets/color\";\r\nimport \"./widgets/group\";\r\n\r\nexport class SettingsMenu extends BaseComponent<SettingsMenuConfig, ComponentState, HTMLElement> {\r\n public static readonly componentName = \"SettingsMenu\";\r\n private registry = new OrderedRegistry<SettingsMenuItem>();\r\n private mainPanel!: MainMenuPanel;\r\n private subPanels: SubMenuPanel[] = [];\r\n public navStack: string[] = [];\r\n private menuOpen = false;\r\n private anchorEl?: HTMLElement;\r\n\r\n public override create(): HTMLElement {\r\n this.element = createEl(\"div\", { className: \"tmg-media-smenu-overlay\", inert: true });\r\n this.el.addEventListener(\"keydown\", (e: KeyboardEvent, active = getActiveEl(this.el.ownerDocument) as HTMLElement) => {\r\n if ((e.key === \"Enter\" || e.key === \" \") && active && !active.matches(\"input,textarea,[contenteditable]\") && active.tagName !== \"BUTTON\" && active.closest(\".tmg-media-smenu-panel-active\")) e.preventDefault(), active.click();\r\n else if (e.key === \"ArrowRight\" && active?.querySelector(\".tmg-media-smenu-row-arrow, .tmg-media-smenu-group-arrow\")) e.stopImmediatePropagation(), active.click();\r\n else if (e.key === \"ArrowLeft\" && !active?.matches(\"input,textarea,[contenteditable]\")) e.stopImmediatePropagation(), this.goBack();\r\n });\r\n return this.element;\r\n }\r\n\r\n public override mount(onViewClick?: () => void): void {\r\n if (!this.element) this.create();\r\n this.mainPanel = new MainMenuPanel(this.ctlr, this.config);\r\n this.mainPanel.setup(), this.mainPanel.build();\r\n this.mainPanel.onItemClick = (item) => this.goTo(item.id);\r\n this.mainPanel.onViewClick = onViewClick;\r\n this.el.append(this.mainPanel.element);\r\n this.media.container.append(this.element);\r\n }\r\n\r\n public override wire(): void {\r\n // ---- Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.close(), { signal: this.signal });\r\n this.media.on(\"features\", () => this.menuOpen && (this.syncMain(), this.subPanels.forEach((p) => p.syncUI())), { signal: this.signal });\r\n // ---- State --------\r\n this.ctlr.state.on(\"dimensions.container.width\", () => this.menuOpen && this.reposition(this.anchorEl), { signal: this.signal });\r\n this.ctlr.state.on(\"dimensions.container.height\", () => this.menuOpen && this.reposition(this.anchorEl), { signal: this.signal });\r\n }\r\n\r\n public override unmount(): void {\r\n removeOutsideClick(this.element), removeArrowNavigation(this.element), removeFocusTrap(this.element), super.unmount();\r\n }\r\n\r\n private mergeItem(item: SettingsMenuItem): SettingsMenuItem {\r\n const existing = this.getItem(item.id);\r\n if (existing) {\r\n if (item.items) existing.items = [...(existing.items || []), ...item.items];\r\n if (item.actions) existing.actions = [...(existing.actions || []), ...item.actions];\r\n if (item.footerActions) existing.footerActions = [...(existing.footerActions || []), ...item.footerActions];\r\n if (item.tipHTML && !existing.tipHTML) existing.tipHTML = item.tipHTML;\r\n return existing;\r\n }\r\n return item;\r\n }\r\n public register(items?: SettingsMenuItem | SettingsMenuItem[]): void {\r\n if (items) Array.isArray(items) ? items.forEach((item) => ((item = this.mergeItem(item)), this.registry.register(item.id, item))) : ((items = this.mergeItem(items)), this.registry.register(items.id, items)), this.menuOpen && this.syncMain();\r\n }\r\n public registerFirst(item?: SettingsMenuItem): void {\r\n if (item) (item = this.mergeItem(item)), this.registry.registerFirst(item.id, item), this.menuOpen && this.syncMain();\r\n }\r\n public registerBefore(key: string, item?: SettingsMenuItem): void {\r\n if (item) (item = this.mergeItem(item)), this.registry.registerBefore(key, item.id, item), this.menuOpen && this.syncMain();\r\n }\r\n public registerAfter(key: string, item?: SettingsMenuItem): void {\r\n if (item) (item = this.mergeItem(item)), this.registry.registerAfter(key, item.id, item), this.menuOpen && this.syncMain();\r\n }\r\n public unregister(id: string): void {\r\n this.registry.unregister(id), this.menuOpen && this.syncMain();\r\n }\r\n\r\n public getItem(id: string, items = this.registry.getAll()): SettingsMenuItem | undefined {\r\n for (const item of items)\r\n if (item.id === id) return item;\r\n else if (item.items) {\r\n const found = this.getItem(id, item.items);\r\n if (found) return found;\r\n }\r\n return undefined;\r\n }\r\n\r\n public syncUI(id?: string): void {\r\n if (id) this.subPanels[this.navStack.indexOf(id)]?.syncUI(), this.syncMain();\r\n else this.syncMain(), this.subPanels.forEach((p) => p.syncUI());\r\n }\r\n\r\n private lastClosedTime = 0;\r\n public toggle(anchorEl: HTMLElement): void {\r\n this.menuOpen ? this.close() : this.open(anchorEl);\r\n }\r\n\r\n public open(anchorEl: HTMLElement): void {\r\n if (this.menuOpen || performance.now() - this.lastClosedTime < 50) return;\r\n this.menuOpen = true;\r\n this.anchorEl = anchorEl;\r\n if (!this.config.preserveStack) this.navStack = [];\r\n if (this.navStack.length === 0) this.syncMain(), this.showPanel(this.mainPanel, \"none\"), this.subPanels.forEach((p) => this.hidePanel(p));\r\n else this.syncUI(this.navStack[this.navStack.length - 1]), this.showPanel(this.subPanels[this.navStack.length - 1], \"none\"), this.hidePanel(this.mainPanel), this.subPanels.forEach((p, idx) => idx !== this.navStack.length - 1 && this.hidePanel(p));\r\n this.reposition(anchorEl), this.el.removeAttribute(\"inert\"), this.el.classList.add(\"tmg-media-smenu-overlay-open\"), this.el.classList.remove(\"tmg-media-smenu-overlay-closed\");\r\n this.media.container.classList.add(\"tmg-media-settings-menu\");\r\n initOutsideClick(this.element, { enabled: true, onOutside: (e) => !this.anchorEl?.contains(e?.target as Node) && this.close(), outOnFocusOut: !CTX.isDevEnv }), initFocusTrap(this.element, { enabled: true });\r\n initArrowNavigation(this.element, { enabled: true, rovingTab: false, focusOnHover: false, grid: { x: 1 }, selector: \".tmg-media-smenu-panel :is([tabindex='0'], button:not([disabled]), input:not([type='checkbox'], [type='radio'], [disabled])):not(.tmg-media-smenu-back-btn, .tmg-media-range-container)\" });\r\n }\r\n public close(): void {\r\n if (!this.menuOpen) return;\r\n this.menuOpen = false;\r\n this.lastClosedTime = performance.now();\r\n this.el.setAttribute(\"inert\", \"\"), this.el.classList.remove(\"tmg-media-smenu-overlay-open\", \"tmg-media-smenu-drop-down\"), this.media.container.classList.remove(\"tmg-media-settings-menu\");\r\n removeOutsideClick(this.element), removeArrowNavigation(this.element), removeFocusTrap(this.element);\r\n this.anchorEl?.focus(), (this.anchorEl = undefined);\r\n }\r\n public get isOpen(): boolean {\r\n return this.menuOpen;\r\n }\r\n\r\n private getSubPanel(depth: number): SubMenuPanel {\r\n if (!this.subPanels[depth]) {\r\n const p = new SubMenuPanel(this.ctlr);\r\n p.setup();\r\n p.onBack = this.goBack;\r\n p.onSubItemClick = (item) => this.goTo(item.id);\r\n this.element.append(p.element), syncFocusTrap(this.element);\r\n this.subPanels[depth] = p;\r\n }\r\n return this.subPanels[depth];\r\n }\r\n\r\n public goTo(id: string): void {\r\n const item = this.getItem(id);\r\n if (!item || (!item.items && !item.widget) || item.widget === \"button\" || item.widget === \"toggle\") return;\r\n const activePanel = this.navStack.length === 0 ? this.mainPanel : this.subPanels[this.navStack.length - 1];\r\n this.navStack.push(id);\r\n const nextPanel = this.getSubPanel(this.navStack.length - 1);\r\n nextPanel.load(item);\r\n this.showPanel(nextPanel, \"forward\"), this.hidePanel(activePanel, \"backward\");\r\n }\r\n public goBack(): void {\r\n if (this.navStack.length === 0) return;\r\n const activePanel = this.subPanels[this.navStack.length - 1];\r\n this.navStack.pop();\r\n this.showPanel(this.navStack.length === 0 ? this.mainPanel : this.subPanels[this.navStack.length - 1], \"backward\");\r\n this.hidePanel(activePanel, \"forward\");\r\n }\r\n\r\n private showPanel(panel: BaseMenuPanel, dir: PanelDir = \"forward\"): void {\r\n panel.enter(dir), this.syncHeight(panel), syncArrowNavigation(this.element);\r\n }\r\n private hidePanel(panel: BaseMenuPanel, dir: PanelDir = \"backward\"): void {\r\n panel.exit(dir);\r\n }\r\n\r\n private syncMain(): void {\r\n this.mainPanel.sync(this.registry.getAll().filter((item) => ((isFunc(item.hidden) ? item.hidden() : item.hidden) ? false : !item.feature || Boolean(this.media.features[item.feature]))));\r\n }\r\n private syncHeight(panel: BaseMenuPanel, height = panel.contentHeight): void {\r\n requestAnimationFrame(() => this.menuOpen && height && (this.el.style.height = `${height}px`), this.signal);\r\n }\r\n\r\n private reposition(anchorEl?: HTMLElement): void {\r\n const container = this.media.container,\r\n cRect = container.getBoundingClientRect(),\r\n aRect = anchorEl ? anchorEl.getBoundingClientRect() : this.el.getBoundingClientRect();\r\n if (!anchorEl && !this.menuOpen) return;\r\n\r\n const y = aRect.top - cRect.top;\r\n const menuWidth = this.el.offsetWidth || 320;\r\n\r\n // Shift logic: align right by default, but clamp rigidly to container bounds\r\n let xPos = aRect.right - cRect.left - menuWidth + 10;\r\n const margin = 12;\r\n if (xPos < margin) xPos = margin;\r\n if (xPos + menuWidth > cRect.width - margin) xPos = cRect.width - menuWidth - margin;\r\n\r\n this.el.style.setProperty(\"--tmg-smenu-anchor-x\", `${xPos}px`);\r\n this.el.style.setProperty(\"--tmg-smenu-anchor-y\", `${y}px`);\r\n this.el.classList.toggle(\"tmg-media-smenu-drop-down\", y < cRect.height / 2);\r\n }\r\n}\r\n\r\nexport type * from \"../types\";\r\n","import { silence } from \"sia-reactor/modules\";\r\nimport { BasePlug } from \"../../base\";\r\nimport { SETTINGS_BUILD } from \"./build\";\r\nimport type { SettingsViewConfig } from \"./types\";\r\nimport { SettingsMenu } from \"./menu\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { mockAsync } from \"@utils/fn\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\n\r\nimport type { Controller } from \"@core/controller\";\r\n\r\nexport class SettingsViewPlug extends BasePlug<SettingsViewConfig> {\r\n public static readonly plugName = \"settingsView\";\r\n public static readonly BUILD = SETTINGS_BUILD;\r\n public closeBtn!: HTMLButtonElement | null;\r\n public menu!: SettingsMenu;\r\n protected wasPaused = false;\r\n private viewReady = false;\r\n\r\n constructor(ctlr: Controller, config?: SettingsViewConfig, state?: any) {\r\n super(ctlr, config, state);\r\n this.menu = new SettingsMenu(this.ctlr, this.config.menu);\r\n }\r\n\r\n public override mount(): void {\r\n this.closeBtn = this.ctlr.queryDOM(\".tmg-media-settings-close-btn\")!;\r\n !this.config.menu.disabled && this.menu.mount(this.enterView);\r\n }\r\n public override unmount(): void {\r\n this.media.container.classList.remove(\"tmg-media-settings-view\");\r\n this.ctlr.queryDOM(\".tmg-media-settings-tips-btn\")?.remove(), this.ctlr.queryDOM(\".tmg-media-settings-brand-wrapper\")?.remove(), this.ctlr.queryDOM(\".tmg-media-settings-theme-wrapper\")?.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.closeBtn?.addEventListener(\"click\", this.leaveView, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => !value && this.leaveView(), { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"settings\", { fn: this.toggleView, keyboard: { phase: \"keyup\" }, zen: true });\r\n !this.config.menu.disabled && this.menu.wire(), super.wire();\r\n }\r\n\r\n public async enterView(): Promise<void> {\r\n if (this.ctlr.isUIActive(\"settings\")) return;\r\n if (!this.viewReady) this.initView(), (this.viewReady = true);\r\n this.menu.close();\r\n this.wasPaused = this.media.state.paused;\r\n if (this.config.autoPause) silence(() => (this.media.intent.paused = true));\r\n this.media.container.classList.add(\"tmg-media-settings-view\");\r\n await mockAsync(parseCSSTime(this.settings.css.settingsViewTransitionTime));\r\n this.ctlr.plug(\"settings.overlay\")?.show();\r\n this.ctlr.DOM.settings?.removeAttribute(\"inert\"), this.ctlr.DOM.containerContent?.setAttribute(\"inert\", \"\");\r\n this.closeBtn?.focus();\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n public async leaveView(): Promise<void> {\r\n if (!this.ctlr.isUIActive(\"settings\")) return;\r\n this.media.container.classList.remove(\"tmg-media-settings-view\");\r\n await mockAsync(parseCSSTime(this.settings.css.settingsViewTransitionTime));\r\n if (this.config.autoPause) silence(() => (this.media.intent.paused = this.wasPaused));\r\n this.ctlr.DOM.settings?.setAttribute(\"inert\", \"\"), this.ctlr.DOM.containerContent?.removeAttribute(\"inert\");\r\n } // #STANDALONE: needs scoped behavior\r\n\r\n public async toggleView(): Promise<void> {\r\n this.ctlr.isUIActive(\"settings\") ? await this.leaveView() : await this.enterView();\r\n }\r\n\r\n private initView() {\r\n // Theming\r\n // prettier-ignore\r\n const options = [{ option: \"Light Blue\", value: \"#3198f5\" }, { option: \"Hot Pink\", value: \"#ff69b4\" }, { option: \"Fiery Red\", value: \"#ff0033\" }, { option: \"Dark Turquoise\", value: \"#00ced1\" }, { option: \"Custom Hue\", value: \"custom\" }, { option: \"Video Derived\", value: \"auto\" }],\r\n gcolors = options.slice(0, -2).map((opt) => opt.value),\r\n defs = { brand: this.settings.css.brandColor as string ?? \"#e26e02\", theme: this.settings.css.themeColor as string ?? \"#ffffff\", bcolors: [\"#e26e02\", ...gcolors], tcolors: [\"#ffffff\", ...gcolors] },\r\n bField = t007.field({ type: \"select\", label: \"Brand Color\", helperText: { info: \"Just try changing your brand color for now\" }, options: [{ option: \"Tastey Orange\", value: \"#e26e02\" }, ...options], value: !defs.bcolors.includes(defs.brand as string) ? (!this.settings.css.syncWithMedia.brandColor ? \"custom\" : \"auto\") : defs.brand }),\r\n cBField = t007.field({ type: \"color\" }),\r\n tField = t007.field({ type: \"select\", label: \"Theme Color\", helperText: { info: \"Also try changing your theme color for now\" }, options: [{ option: \"Pure White\", value: \"#ffffff\" }, ...options], value: !defs.tcolors.includes(defs.theme as string) ? (!this.settings.css.syncWithMedia.themeColor ? \"custom\" : \"auto\") : defs.theme }),\r\n cTField = t007.field({ type: \"color\" }),\r\n bWrapper = createEl(\"div\", { className: \"tmg-media-settings-brand-wrapper\" }),\r\n tWrapper = createEl(\"div\", { className: \"tmg-media-settings-theme-wrapper\" });\r\n this.ctlr.config.watch(\"settings.css.brandColor\", (v = defs.brand) => ((v = (v as string).toLowerCase()), (cBField.inputEl.value = v), cBField.style.setProperty(\"--input-color\", v), (bField.inputEl.value = !defs.bcolors.includes(v) ? (!this.settings.css.syncWithMedia.brandColor ? \"custom\" : \"auto\") : v)), { init: true, signal: this.signal });\r\n this.ctlr.config.watch(\"settings.css.themeColor\", (v = defs.theme) => ((v = (v as string).toLowerCase()), (cTField.inputEl.value = v), cTField.style.setProperty(\"--input-color\", v), (tField.inputEl.value = !defs.tcolors.includes(v) ? (!this.settings.css.syncWithMedia.themeColor ? \"custom\" : \"auto\") : v)), { init: true, signal: this.signal });\r\n this.ctlr.DOM.settingsBottomPanel?.append((bWrapper.append(bField, cBField), bWrapper), (tWrapper.append(tField, cTField), tWrapper));\r\n const id = { theme: \"\", brand: \"\" },\r\n sync = (cb: any, req = true, type = \"brand\") => ((this.settings.css.syncWithMedia[`${type}Color`] = req), cb(req)),\r\n assert = (opts: any, type: \"brand\" | \"theme\" = \"brand\") => this.ctlr.plug(\"settings.toasts\")?.toast?.update(id[type], { render: `Still here in case you change your choice about the ${type}`, ...opts }),\r\n onBColorChange = ({ target: { value: val } }: any) =>\r\n this.ctlr.throttle(\r\n \"brandColorPicking\",\r\n async () => {\r\n id.brand && t007.toast?.dismiss(id.brand);\r\n let col;\r\n if (val === \"custom\") return cBField.inputEl.click();\r\n if (val !== \"auto\") col = this.settings.css.brandColor = val;\r\n else col = this.settings.css.brandColor = (this.media.status.loadedData ? await this.ctlr.plug(\"settings.frame\")?.getMainColor(this.media.state.currentTime) : null) ?? this.ctlr.plug(\"settings.css\")?._cache.brandColor!;\r\n const cb = (s: any) => (bField.inputEl.value = defs.bcolors.includes(col as string) ? (col as string) : s ? \"auto\" : \"custom\"),\r\n No = () => (sync(cb, false), assert({ actions: { Yes } })),\r\n Yes = () => (sync(cb, true), assert({ actions: { No } }));\r\n sync(cb, val === \"auto\");\r\n val === \"auto\" && (id.brand = this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Should the brand color change anytime a video loads?\", { icon: \"🎨\", autoClose: 15000, hideProgressBar: false, actions: { Yes, No }, onClose: () => (id.brand = \"\"), signal: this.signal }) || \"\");\r\n },\r\n 150\r\n ),\r\n onTColorChange = ({ target: { value: val } }: any) =>\r\n this.ctlr.throttle(\r\n \"themeColorPicking\",\r\n async () => {\r\n id.theme && t007.toast?.dismiss(id.theme);\r\n let col;\r\n if (val === \"custom\") return cTField.inputEl.click();\r\n if (val !== \"auto\") col = this.settings.css.themeColor = val;\r\n else col = this.settings.css.themeColor = (this.media.status.loadedData ? await this.ctlr.plug(\"settings.frame\")?.getMainColor(this.media.state.currentTime) : null) ?? this.ctlr.plug(\"settings.css\")?._cache.themeColor!;\r\n const cb = (s: any) => (tField.inputEl.value = defs.tcolors.includes(col as string) ? (col as string) : s ? \"auto\" : \"custom\"),\r\n No = () => (sync(cb, false, \"theme\"), assert({ actions: { Yes } }, \"theme\")),\r\n Yes = () => (sync(cb, true, \"theme\"), assert({ actions: { No } }, \"theme\"));\r\n sync(cb, val === \"auto\", \"theme\");\r\n val === \"auto\" && (id.theme = this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Should the theme color change anytime a video loads?\", { icon: \"🎨\", autoClose: 15000, hideProgressBar: false, actions: { Yes, No }, onClose: () => (id.theme = \"\"), signal: this.signal }) || \"\");\r\n },\r\n 150\r\n );\r\n bField.inputEl.addEventListener(\"input\", onBColorChange), cBField.inputEl.addEventListener(\"input\", onBColorChange);\r\n tField.inputEl.addEventListener(\"input\", onTColorChange), cTField.inputEl.addEventListener(\"input\", onTColorChange);\r\n // Helpful Tips\r\n const tipsBtn = createEl(\"button\", { className: \"tmg-media-settings-tips-btn\", innerHTML: `<span>💡 Did You Know?</span>` });\r\n this.closeBtn?.insertAdjacentElement(\"afterend\", tipsBtn);\r\n tipsBtn.addEventListener(\"click\", this.showTipsDialog, { signal: this.signal });\r\n }\r\n\r\n private getTipsHTML() {\r\n return `\r\n <div style=\"text-align: left; font-family: inherit; color: inherit;\">\r\n <div style=\"text-align: center; margin-bottom: 25px;\">\r\n <h2 style=\"margin: 0 0 10px 0; letter-spacing: -0.5px;\">🎬 Welcome to TVP</h2>\r\n <p style=\"margin: 0; opacity: 0.9; line-height: 1.5;\">\r\n You aren't just watching a video; you're sitting in the cockpit of the most advanced, performance-first media engine on the web. We are thrilled to have you here. \r\n <br><strong>Here is your official flight manual to unlock its full power:</strong>\r\n </p>\r\n </div>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🎛️ The Smart Canvas (Touch & Mouse)</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>Hyper-Speed on Demand:</strong> Click and hold the right side of the video screen or the play key (<strong>Spacebar</strong>) to fast-forward, left side or <strong>Shift</strong> + play key rewinds.</li>\r\n <li><strong>Smart Scrubbing:</strong> Don't hunt for the tiny progress bar. Just scroll horizontally across the middle of the screen to scrub smoothly through time.</li>\r\n <li><strong>Invisible Sliders:</strong> Scroll vertically on the <em>right edge</em> for Volume, and the <em>left edge</em> for Brightness.</li>\r\n <li><strong>Precision Taps:</strong> Double-tap the edges to skip forward or backward. Double tap the center to toggle Fullscreen (or Play/Pause on mobile).</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🏗️ Total UI Control</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>Build Your Own Player:</strong> Don't like our layout? <strong>Click and drag</strong> almost any button on the bottom control bar to physically rearrange the interface exactly how you want it.</li>\r\n <li><strong>Draggable Subtitles:</strong> Subtitles blocking a crucial part of the scene? Just grab the text box and drag it anywhere else on the screen.</li>\r\n <li><strong>The Chameleon Engine:</strong> Head to settings and set your Brand/Theme colors to \"Video Derived\". TVP will actively analyze the video frames and extract dominant colors to paint the UI dynamically.</li>\r\n <li><strong>Descriptive Hints:</strong> Hover over the controls to expose their tooltips and get more information about how to trigger each function.</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">⌨️ Keyboard Ninja Status</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 25px;\">\r\n <li><strong>The Playback Trinity (J, K, L):</strong> Skip backward, Play/Pause, and Skip forward like a pro editor. Do the same with arrow keys, hold <strong>Ctrl</strong>, <strong>Shift</strong> or <strong>Alt</strong> to spice things up.</li>\r\n <li><strong>Time Travel (0 - 9):</strong> Hit any number key to instantly jump to that percentage of the video (e.g., hitting '5' jumps to the exact middle).</li>\r\n <li><strong>Frame-by-Frame:</strong> Paused the video? Use <strong>,</strong> (comma) and <strong>.</strong> (period) to step backward or forward one single frame at a time.</li>\r\n <li><strong>Warp Speed:</strong> Use <strong>&gt;</strong> and <strong>&lt;</strong> to crank the playback speed up or down.</li>\r\n </ul>\r\n <h3 style=\"margin-top: 0; margin-bottom: 10px; border-bottom: 1px solid currentColor; padding-bottom: 5px; opacity: 0.85;\">🔬 Advanced Window Tech</h3>\r\n <ul style=\"padding-left: 20px; line-height: 1.6; margin-bottom: 20px;\">\r\n <li><strong>The Snapshot Engine:</strong> Click the Camera icon or press <strong>s</strong> to screenshot a high-res image of the exact frame. <em>(Easter Egg: Double-Click or press <strong>Alt + s</strong> to capture in pure Black &amp; White!)</em></li>\r\n <li><strong>Ultra-readable Time:</strong> Click the time display or press <strong>q</strong> to toggle between elapsed time and remaining time. <em>(Easter Egg: Double-Click or press <strong>z</strong> to display the time in different formats!)</em></li>\r\n <li><strong>Floating Miniplayer:</strong> Start playing a video and just scroll down the page. TVP will automatically detach into a draggable miniplayer so you never miss a second.</li>\r\n <li><strong>Custom Picture-in-Picture:</strong> We bypassed standard browser limits to give you a floating player that actually keeps all your custom UI controls intact.</li>\r\n </ul>\r\n <div style=\"text-align: center; margin-top: 30px; padding: 15px; border-radius: 8px; background: rgba(128, 128, 128, 0.1);\">\r\n <p style=\"margin: 0 0 10px 0;\"><strong>Enjoy the engine.</strong> We're still in active development, but we're already miles ahead. Welcome to the bleeding edge.</p>\r\n <p style=\"margin: 0; opacity: 0.8;\">🧪 <strong>Beta Tester?</strong> Check the bottom of the page to find the hidden button to travel through linear time, or <a href=\"mailto:tobioketade007@gmail.com\" style=\"color: inherit; text-decoration: underline;\">drop me an email</a> to collaborate!</p>\r\n </div>\r\n </div>\r\n `;\r\n }\r\n\r\n private async showTipsDialog() {\r\n await this.leaveView();\r\n t007.alert(this.getTipsHTML(), { id: `${this.ctlr.config.id}-tips-dialog`, rootElement: this.ctlr.DOM.containerContent, confirmText: \"Got it!\" });\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.menu.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.settingsView\": typeof SettingsViewPlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n settingsView: SettingsViewConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import type { SleepTimerConfig } from \"./types\";\n\nexport const SLEEP_TIMER_BUILD: SleepTimerConfig = {\n disabled: false,\n};\n","import { BasePlug } from \"@plugs/base\";\nimport type { Controller } from \"@core/controller\";\nimport type { SleepTimerConfig, SleepTimerState } from \"./types\";\nimport { SLEEP_TIMER_BUILD } from \"./build\";\nimport { formatMediaTime } from \"@utils/time\";\nimport { IconRegistry } from \"@core/registries\";\nimport { setTimeout } from \"sia-reactor/utils\";\n\nexport class SleepTimerPlug extends BasePlug<SleepTimerConfig, SleepTimerState> {\n public static readonly plugName = \"sleepTimer\";\n public static readonly BUILD = SLEEP_TIMER_BUILD;\n private targetTime = 0;\n private timeoutId?: number;\n\n constructor(ctlr: Controller, config = ctlr.settings.sleepTimer) {\n super(ctlr, config, { ms: 0 });\n }\n\n public override wire(): void {\n this.media.on(\"state.currentTime\", this.checkTimer, { signal: this.signal });\n // Post Wiring\n super.wire();\n }\n\n public setTimer(ms: number): void {\n this.state.ms = ms;\n clearTimeout(this.timeoutId);\n this.targetTime = 0;\n if (ms === 0) {\n this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Sleep timer turned off\", { icon: IconRegistry.get(\"timer\", true), tag: \"tmg-stmr\", signal: this.signal });\n } else if (ms === -1) {\n this.targetTime = -1;\n this.ctlr.plug(\"settings.toasts\")?.toast?.(\"Sleep timer set to end of video\", { icon: IconRegistry.get(\"timer\", true), tag: \"tmg-stmr\", signal: this.signal });\n } else {\n this.timeoutId = setTimeout(this.triggerSleep, ms, this.signal);\n this.ctlr.plug(\"settings.toasts\")?.toast?.(`Sleep timer set for ${formatMediaTime({ time: ms / 1000, format: \"human-long\" })}`, { icon: IconRegistry.get(\"timer\", true), tag: \"tmg-stmr\", signal: this.signal });\n }\n }\n\n private checkTimer(): void {\n if (this.targetTime === -1 && this.media.status.duration > 0 && this.media.state.currentTime >= this.media.status.duration - 0.5) this.triggerSleep();\n }\n\n private triggerSleep(): void {\n this.media.intent.paused = true;\n this.setTimer(0), this.ctlr.plug(\"settings.notifiers\")?.notify(\"timer\");\n }\n}\n\nexport * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.sleepTimer\": typeof SleepTimerPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n sleepTimer: SleepTimerConfig;\n }\n}\n","import { TimeConfig } from \"./types\";\r\n\r\nexport const TIME_BUILD: Partial<TimeConfig> = {\r\n min: 0,\r\n skip: 10,\r\n mode: \"elapsed\",\r\n format: \"digital\",\r\n};\r\n","import { BasePlug } from \"../../base\";\r\nimport type { TimeConfig, TimeState } from \"./types\";\r\nimport { TIME_BUILD } from \"./build\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { parseIfPercent, clamp, safeNum } from \"@utils/num\";\r\nimport { parseCSSTime } from \"@utils/str\";\r\nimport { formatMediaTime } from \"@utils/time\";\r\nimport { type REvent } from \"sia-reactor\";\r\nimport { CtlrMedia } from \"@defs/contract\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { silence } from \"sia-reactor/modules\";\r\nimport { getMediaMax, getMediaMin } from \"@utils/media\";\r\n\r\nexport class TimePlug extends BasePlug<TimeConfig, TimeState> {\r\n public static readonly plugName = \"time\";\r\n public static readonly BUILD = TIME_BUILD;\r\n public realStart = 0;\r\n public pseudoStart = 0;\r\n public skipDuration = 0;\r\n public skipNotifier?: HTMLElement | null = null;\r\n private skipDurationId = -1;\r\n\r\n constructor(ctlr: Controller, config = ctlr.settings.time) {\r\n super(ctlr, config, {\r\n whitelist: [\"lightState.preview.time\", \"settings.time.min\", \"settings.time.max\", \"settings.time.start\", \"settings.time.end\", \"settings.auto.next.preview.time\"], // #DEFAULT: build privilege\r\n });\r\n }\r\n\r\n public override wire(): void {\r\n // Variables Assignment\r\n this.realStart = this.pseudoStart = this.config.start ?? 0;\r\n // Ctlr Media Setters\r\n this.media.set(\"intent.currentTime\", (v) => clamp(this.config.min, v, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\r\n // ---- Config Watchers\r\n this.ctlr.config.watch(\"settings.time.start\", (v) => v !== this.pseudoStart && (this.realStart = +v!), { signal: this.signal });\r\n // State Listeners\r\n this.state.on(\"whitelist\", this.handleWhitelistState, { init: true, signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"status.loadedData\", this.handleLoadedDataStatus, { signal: this.signal });\r\n this.media.on(\"state.currentTime\", this.handleCurrentTimeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.waiting\", this.handleWaitingStatus, { signal: this.signal });\r\n // Post Wiring\r\n this.ctlr.registerAction(\"skipFwd\", { fn: this.handleKeySkipFwd, keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"skipBwd\", { fn: this.handleKeySkipBwd, keyboard: { phase: \"keydown\" } });\r\n this.ctlr.registerAction(\"timeMode\", { fn: this.toggleMode, keyboard: { phase: \"keyup\" } });\r\n this.ctlr.registerAction(\"timeFormat\", { fn: this.rotateFormat, keyboard: { phase: \"keyup\" } });\r\n super.wire();\r\n }\r\n\r\n protected handleWhitelistState({ value: paths = [] }: REvent<TimeState, \"whitelist\">): void {\r\n for (const path of paths) this.ctlr.config.get(path, this.toTimeVal, { signal: this.signal });\r\n }\r\n\r\n protected handleLoadedDataStatus({ value }: REvent<CtlrMedia, \"status.loadedData\">): void {\r\n if (value && this.config.start != null && this.media.state.currentTime !== this.realStart) this.media.intent.currentTime = this.realStart;\r\n }\r\n\r\n protected handleCurrentTimeState({ value: curr }: REvent<CtlrMedia, \"state.currentTime\">): void {\r\n curr = safeNum(curr);\r\n (curr < this.config.min || curr > this.config.max) && silence(() => ((this.media.intent.currentTime = this.config.loop ? this.config.min : curr), !this.config.loop && (this.media.intent.paused = true))); // \"Time Clamp Guard\" if transaction\r\n if (this.media.status.readyState && curr && this.ctlr.payload.wired) this.config.start = this.pseudoStart = curr > 3 && curr < (this.config.end ?? this.media.status.duration) - 3 ? curr : this.realStart;\r\n }\r\n\r\n protected handleWaitingStatus({ value }: REvent<CtlrMedia, \"status.waiting\">): void {\r\n value && IS_MOBILE && this.media.once(\"status.waiting\", () => this.ctlr.plug(\"settings.overlay\")?.[this.skipNotifier ? \"hide\" : \"delay\"](), { signal: this.signal });\r\n }\r\n\r\n public toTimeVal(value?: any): number {\r\n return parseIfPercent(value, this.media.status.duration);\r\n }\r\n public toTimeText(time = this.media.state.currentTime, useMode = false, showMs = false): string {\r\n if (!useMode || this.config.mode !== \"remaining\") return formatMediaTime({ time, format: this.config.format, elapsed: true, showMs });\r\n return formatMediaTime({ time: this.media.status.duration - time, format: this.config.format, elapsed: false, showMs });\r\n }\r\n\r\n public get nextMode(): TimeConfig[\"mode\"] {\r\n return this.config.mode === \"elapsed\" ? \"remaining\" : \"elapsed\";\r\n }\r\n public toggleMode(): void {\r\n this.config.mode = this.nextMode;\r\n }\r\n\r\n public get nextFormat(): TimeConfig[\"format\"] {\r\n return this.config.format === \"digital\" ? \"human\" : this.config.format === \"human\" ? \"human-long\" : \"digital\";\r\n }\r\n public rotateFormat(): void {\r\n this.config.format = this.nextFormat;\r\n }\r\n\r\n public skip(duration: number): void {\r\n const overlay = this.ctlr.plug(\"settings.overlay\"),\r\n notifier = this.ctlr.plug(\"settings.notifiers\")?.comp(\"fwdbwdnotifier\")?.[duration > 0 ? \"fwdDiv\" : \"bwdDiv\"],\r\n [min, max, time] = [getMediaMin(this.media), getMediaMax(this.media), this.media.state.currentTime];\r\n duration = min >= max ? 0 : safeNum(duration > 0 ? (max - time > duration ? duration : max - time) : duration < 0 ? (time - min > Math.abs(duration) ? duration : -(time - min)) : 0);\r\n if (min < max) this.media.intent.currentTime = time + duration; // Apprentice Slider syncs, no CSS hack\r\n // this.settings.css.currentPlayedPosition = this.settings.css.currentThumbPosition = safeNum(this.media.intent.currentTime / this.media.status.duration);\r\n const plug = this.ctlr.plug(\"settings.gesture\");\r\n if (plug?.state.skipPersist) {\r\n if (this.skipNotifier && notifier !== this.skipNotifier) {\r\n this.skipDuration = 0;\r\n this.skipNotifier.classList.remove(\"tmg-media-control-persist\");\r\n }\r\n overlay?.show();\r\n this.skipNotifier = notifier;\r\n notifier?.classList.add(\"tmg-media-control-persist\");\r\n this.skipDuration += duration;\r\n clearTimeout(this.skipDurationId);\r\n this.skipDurationId = setTimeout(\r\n () => {\r\n plug.stopSkipPersist();\r\n notifier?.classList.remove(\"tmg-media-control-persist\");\r\n this.skipDuration = 0;\r\n this.skipNotifier = null;\r\n !this.media.state.paused ? overlay?.hide() : overlay?.show();\r\n },\r\n parseCSSTime(this.settings.css.notifiersAnimationTime),\r\n this.signal\r\n );\r\n return void notifier?.setAttribute(\"data-skip\", String(Math.trunc(this.skipDuration)));\r\n } else this.skipNotifier?.classList.remove(\"tmg-media-control-persist\");\r\n notifier?.setAttribute(\"data-skip\", String(Math.trunc(Math.abs(duration))));\r\n }\r\n\r\n protected handleKeySkipFwd(): void {\r\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\r\n this.skip(this.ctlr.plug(\"settings.keys\")?.getModded(\"skip\", \"\", this.config.skip) ?? this.config.skip);\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"fwd\");\r\n }\r\n\r\n protected handleKeySkipBwd(): void {\r\n this.ctlr.plug(\"settings.gesture\")?.stopSkipPersist();\r\n this.skip(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"skip\", \"\", this.config.skip) ?? this.config.skip));\r\n this.ctlr.plug(\"settings.notifiers\")?.notify(\"bwd\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface PlugRegistryMap {\r\n \"settings.time\": typeof TimePlug;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/config\" {\r\n interface Settings {\r\n time: TimeConfig;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\nexport * from \"./build\";\r\n","import { DeepPartial } from \"sia-reactor\";\r\nimport { TimeTravelConfig } from \"./types\";\r\n\r\nexport const TIME_TRAVEL_BUILD: DeepPartial<TimeTravelConfig> = {\r\n module: {\r\n whitelist: [\"intent\"], // for undoing actions while \"state\" for reliving time itself\r\n mirrorReads: true,\r\n mirrorWrites: true,\r\n },\r\n console: {},\r\n persist: false,\r\n};\r\n","import {\n wpArr\n} from \"./chunk-SPVWCBIV.js\";\nimport {\n reactive\n} from \"./chunk-PTNZ442E.js\";\nimport {\n KEYS_BLOCKS,\n createEl,\n formatKeyForDisplay,\n keyEventAllowed,\n parseForARIAKS\n} from \"./chunk-ORK3EGB6.js\";\nimport {\n CTX,\n NIL,\n RAW,\n canHandle,\n nuke\n} from \"./chunk-SHWIAQD2.js\";\n\n// src/ts/adapters/autotracker.ts\nvar Autotracker = class {\n proxy;\n deps = /* @__PURE__ */ new Map();\n isTracking = true;\n rtr;\n /** only allows one reactor to autotrack when available */\n autortr;\n clups = [];\n lastPath;\n proxyCache = /* @__PURE__ */ new WeakMap();\n /** @param rtr Reactor instance used for path subscriptions. */\n constructor(rtr) {\n this.autortr = this.rtr = rtr;\n }\n /**\n * Starts a new tracking pass and returns a readonly tracking proxy for `target` if `this` was instantiated with a `Reactor`.\n * @param target Snapshot (or state branch) to track reads from.\n * @returns Read-tracking readonly proxy.\n * @example\n * const atrkr = new Autotracker(rtr);\n * const state = atrkr.tracked(rtr.snapshot());\n * const name = state.user.profile.name;\n */\n tracked(target) {\n return this.unblock(), this.proxy = this.proxied(target, \"\");\n }\n proxied(obj, path) {\n if (!this.rtr || !obj || \"object\" !== typeof obj) return obj;\n const cached = this.proxyCache.get(obj);\n if (cached) return cached;\n if (!canHandle(obj, this.rtr.config, false)) return obj;\n const proxy = new Proxy(obj, {\n // Minimal Proxy Handler\n get: (object, key, receiver) => {\n if (key === RAW) return this.rtr.log(`\\u{1F440} [AutoTracker \\`get\\` Trap] Peeked at ${object}`), object;\n const keyStr = String(key), fullPath = path ? `${path}.${keyStr}` : keyStr;\n return this.rtr.log(`\\u{1F50D} [AutoTracker \\`get\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), this.proxied(!this.rtr.config.preserveContext ? object[key] : Reflect.get(object, key, receiver), fullPath);\n },\n has: (object, key) => {\n const keyStr = String(key), fullPath = path ? `${path}.${keyStr}` : keyStr;\n return this.rtr.log(`\\u2753 [AutoTracker \\`has\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), !this.rtr.config.preserveContext ? key in object : Reflect.has(object, key);\n },\n getOwnPropertyDescriptor: (object, key) => {\n const keyStr = String(key), fullPath = path ? `${path}.${keyStr}` : keyStr;\n return this.rtr.log(`\\u{1F4CB} [AutoTracker \\`getOwnPropertyDescriptor\\` Trap] Initiated for \"${keyStr}\" on '${path}'`), this.track(fullPath), !this.rtr.config.preserveContext ? Object.getOwnPropertyDescriptor(object, key) : Reflect.getOwnPropertyDescriptor(object, key);\n },\n ownKeys: (object) => {\n const safePath = path || \"*\";\n return this.rtr.log(`\\u{1F511} [AutoTracker \\`ownKeys\\` Trap] Initiated on \"${safePath}\"`), this.track(safePath), Reflect.ownKeys(object);\n },\n set: (_, key) => {\n throw new Error(`\\u{1F6E1}\\uFE0F [AutoTracker \\`set\\` Trap] Blocked for \"${String(key)}\" on '${path}'`);\n },\n deleteProperty: (_, key) => {\n throw new Error(`\\u{1F6E1}\\uFE0F [AutoTracker \\`deleteProperty\\` Trap] Blocked for \"${String(key)}\" on '${path}'`);\n },\n defineProperty: (_, key) => {\n throw new Error(`\\u{1F6E1}\\uFE0F [AutoTracker \\`defineProperty\\` Trap] Blocked for \"${String(key)}\" on '${path}'`);\n },\n setPrototypeOf: (_, key) => {\n throw new Error(`\\u{1F6E1}\\uFE0F [AutoTracker \\`setPrototypeOf\\` Trap] Blocked for \"${String(key)}\" on '${path}'`);\n }\n });\n return this.proxyCache.set(obj, proxy), proxy;\n }\n /** Adds a path to the tracking set. */\n track(path, rtr = this.rtr, prune = false, strict = false) {\n if (!this.isTracking || !path || this.autortr && this.autortr !== rtr) return path;\n let paths = this.deps.get(rtr);\n if (!prune && !paths) paths = (this.deps.set(rtr, paths = /* @__PURE__ */ new Set()), paths);\n if (path.startsWith(this.lastPath + \".\")) {\n const child = path.slice(this.lastPath.length + 1);\n (strict || !child.includes(\"Symbol(\") && child !== \"length\" && !/^\\d+$/.test(child)) && paths.delete(this.lastPath);\n }\n return !prune && paths.add(this.lastPath = path), path;\n }\n /** Removes a path from the tracking set. */\n untrack(path, rtr = this.rtr) {\n this.deps.get(rtr)?.delete(path);\n }\n /** Enables path tracking. */\n unblock(rtr = this.rtr) {\n this.deps.clear();\n this.autortr = rtr;\n this.isTracking = true;\n this.lastPath = void 0;\n }\n /** Temporarily disables path tracking. */\n block() {\n this.autortr = void 0;\n this.isTracking = false;\n }\n /**\n * Subscribes an effect to tracked paths.\n * Uses `watch` when `options.sync === true` (synchronous updates), otherwise\n * uses `on` (batched/asynchronous listener wave).\n * @param cb Effect callback.\n * @param options Effect options.\n * @returns Cleanup function for active subscriptions.\n * @example\n * const atrkr = new Autotracker(rtr);\n * const view = atrkr.tracked(rtr.snapshot()); // tracked works if `rtr` was passed at instantiation\n * view.user.name;\n * const stop = atrkr.callback(() => console.log(\"changed\")); // re-run after when \".user.name\" changes\n * @example Packaged Customization\n * const atrkr = new Autotracker(); // no reactor passed\n * withTracker(atrkr, () => state.user.name); // import `withTracker` too\n * const stop = atrkr.callback(() => console.log(\"sync\"), { sync: true }); // re-run immediately when \".user.name\" changes, works on any path used from any reactor state\n * @example Extensive Customization\n * atrkr.unblock();\n * const prev = CTX.autotracker;\n * CTX.autotracker = atrkr; // import CTX first\n * state.user.name;\n * CTX.autotracker = prev;\n */\n callback(cb, options = NIL) {\n this.cleanup();\n const method = options.sync ? \"watch\" : \"on\";\n for (const [rtr, paths] of this.deps) {\n if (!paths.size || paths.has(\"*\")) rtr && this.clups.push(rtr[method](\"*\", cb, options));\n else for (const path of paths) this.clups.push(rtr[method](path, cb, options));\n }\n return () => this.cleanup();\n }\n /** Clears active subscriptions and blocks tracking. */\n cleanup() {\n this.block();\n for (let i = 0, len = this.clups.length; i < len; i++) this.clups[i]();\n this.clups.length = 0;\n }\n destroy() {\n this.deps.clear(), this.cleanup(), nuke(this);\n }\n};\nfunction withTracker(tracker, callback, rtr) {\n const prev = CTX.autotracker;\n CTX.autotracker = tracker;\n try {\n return tracker.unblock(rtr), callback();\n } finally {\n CTX.autotracker = prev;\n }\n}\n\n// src/ts/adapters/vanilla/effect.ts\nfunction effect(callback, options = NIL) {\n const atrkr = new Autotracker();\n let destroyed = false;\n const cleanup = () => (destroyed = true, atrkr.destroy());\n (function execute() {\n if (destroyed) return;\n withTracker(atrkr, callback);\n options.once ? cleanup() : atrkr.callback(execute, options);\n })();\n return cleanup;\n}\n\n// src/ts/adapters/vanilla/TimeTravelConsole.ts\nvar keys = {\n blocks: KEYS_BLOCKS,\n overrides: [\"Ctrl+z\", \"Cmd+z\", \"Ctrl+y\", \"Cmd+y\", \"Ctrl+Shift+z\", \"Cmd+Shift+z\", \"Home\", \"End\", \"ArrowLeft\", \"ArrowRight\", \"Space\", \"Alt+Space\", \"Escape\", \"Delete\"],\n shortcuts: { undo: [\"Ctrl+z\", \"Cmd+z\"], redo: [\"Ctrl+y\", \"Cmd+y\", \"Ctrl+Shift+z\", \"Cmd+Shift+z\"], genesis: \"Home\", trackUntrack: \"t\", ending: \"End\", prevFrame: \",\", nextFrame: \".\", skipBwd: \"ArrowLeft\", skipFwd: \"ArrowRight\", playPause: \"Space\", rewind: \"Alt+Space\", closeOverlay: \"Escape\", clrHistory: \"Delete\", export: \"e\", import: \"i\", clear: \"c\" }\n};\nvar TimeTravelConsole = class _TimeTravelConsole {\n static count = 0;\n index = _TimeTravelConsole.count;\n config;\n state = reactive({ open: false, import: \"\", stride: 1 });\n time;\n host;\n clups = [];\n keydown;\n keyup;\n /** Creates a docked TimeTravel overlay bound to a module instance.\n * @param time TimeTravel module instance that owns timeline operations.\n * @param build Optional initial overlay config overrides.\n */\n constructor(time, build = { devOnly: true }) {\n this.time = time;\n this.config = reactive({ title: `Time Travel Console ${this.index = ++_TimeTravelConsole.count}`, ...build });\n this.state.open = !!this.config.startOpen;\n let wlLive = false, blLive = false;\n const s = this.time.state, host = this.host = createEl(\"div\", { className: \"tt-console-host\" }), toggle = createEl(\"button\", { className: \"tt-console-toggle\", type: \"button\", onclick: () => this.state.open = !this.state.open }), panel = createEl(\"aside\", { className: \"tt-console\", ariaLabel: \"time travel overlay\" }), title = createEl(\"div\", { className: \"title\" }), frame = createEl(\"span\", { className: \"muted\" }), clrHistory = createEl(\"button\", { textContent: `Clear History${formatKeyForDisplay(keys.shortcuts.clrHistory)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.clrHistory, false), onclick: () => (this.time.clear(), this.state.import = \"\") }), undo = createEl(\"button\", { textContent: `Undo${formatKeyForDisplay(keys.shortcuts.undo[0])}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.undo, false), onclick: () => this.time.undo(this.state.stride) }), redo = createEl(\"button\", { textContent: `Redo${formatKeyForDisplay(keys.shortcuts.redo[0])}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.redo, false), onclick: () => this.time.redo(this.state.stride) }), genesis = createEl(\"button\", { textContent: `Genesis${formatKeyForDisplay(keys.shortcuts.genesis)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.genesis, false), onclick: () => this.time.jumpTo(0) }), playPause = createEl(\"button\", { onclick: () => this.time[s.paused ? \"play\" : \"pause\"](), ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.playPause, false) }), rewind = createEl(\"button\", { textContent: `Rewind${formatKeyForDisplay(keys.shortcuts.rewind)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.rewind, false), onclick: this.time.rewind }), trackUntrack = createEl(\"button\", { onclick: () => this.time[s.tracking ? \"untrack\" : \"track\"](), ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.trackUntrack, false) }), range = createEl(\"input\", { type: \"range\", min: \"0\", title: \"time travel frame\", ariaLabel: \"time travel frame\", oninput: () => this.time.jumpTo(Number(range.value)) }), exp = createEl(\"button\", { textContent: `Export${formatKeyForDisplay(keys.shortcuts.export)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.export, false), onclick: () => this.state.import = this.time.export(null, 2) }), imp = createEl(\"button\", { textContent: `Import${formatKeyForDisplay(keys.shortcuts.import)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.import, false), onclick: () => this.state.import.trim().length && this.time.import(this.state.import) }), clr = createEl(\"button\", { textContent: `Clear${formatKeyForDisplay(keys.shortcuts.clear)}`, ariaKeyShortcuts: parseForARIAKS(keys.shortcuts.clear, false), onclick: () => this.state.import = \"\" }), payload = createEl(\"textarea\", { className: \"tt-io\", readOnly: true, placeholder: \"current payload json\", title: \"Current History Entry\" }), io = createEl(\"textarea\", { className: \"tt-io\", placeholder: \"timeline payload json\", title: \"Time History\", oninput: () => this.state.import = io.value }), foot = createEl(\"p\", { className: \"tt-footnote\", innerHTML: \"<span>Want this in your app? </span>\" }), link = createEl(\"a\", { target: \"_blank\", rel: \"noreferrer noopener\", textContent: \"sia-reactor\", href: \"https://www.npmjs.com/package/sia-reactor\" }), box = createEl(\"div\", { className: \"tt-status-box\" }), status = createEl(\"div\", { className: \"tt-status-row\" }), filters = createEl(\"div\", { className: \"tt-status-row\" }), filterBox = createEl(\"div\", { className: \"tt-status-box\" }), whitelistLabel = createEl(\"span\", { className: \"muted\", textContent: \"Whitelist:\" }), blacklistLabel = createEl(\"span\", { className: \"muted\", textContent: \"Blacklist:\" }), whitelist = createEl(\"input\", { className: \"tt-filter-input tt-io\", placeholder: 'a.b, c.d or {\"0\":[\"a.b\"]}', title: \"Whitelist paths\", onfocus: () => wlLive = true, onblur: () => (wlLive = false, whitelist.value = formatPaths(this.time.config.whitelist, \"*\")), oninput: (_, parsed = parsePaths(whitelist.value)) => parsed !== null && (this.time.config.whitelist = parsed) }), blacklist = createEl(\"input\", { className: \"tt-filter-input tt-io\", placeholder: 'a.b, c.d or {\"0\":[\"a.b\"]}', title: \"Blacklist paths\", onfocus: () => blLive = true, onblur: () => (blLive = false, blacklist.value = formatPaths(this.time.config.blacklist, \"\")), oninput: (_, parsed = parsePaths(blacklist.value, true)) => parsed !== null && (this.time.config.blacklist = parsed) }), speed = createEl(\"select\", { className: \"tt-speed\", title: \"Playback Speed\", onchange: () => this.time.config.playbackRate = Number(speed.value) }), stride = createEl(\"input\", { className: \"tt-stride tt-button tt-mini-input\", type: \"number\", min: \"1\", title: \"Skip Stride i.e. how many steps count as one unit\", oninput: () => this.state.stride = Math.max(1, Number(stride.value) || 1) }), stats = createEl(\"span\", { className: \"tt-stats\" }), limit = createEl(\"input\", { className: \"tt-limit tt-mini-input tt-button\", type: \"number\", min: \"1\", title: \"Maximum number of history entries kept in memory before older entries are discarded.\", oninput: () => this.time.config.limit = Math.max(1, Number(limit.value) || 1) }), delay = createEl(\"input\", { className: \"tt-delay tt-mini-input tt-button\", type: \"number\", min: \"0\", step: \"50\", title: \"Maximum playback delay between timeline frames in milliseconds.\", oninput: () => this.time.config.maxPlaybackDelay = Math.max(0, Number(delay.value) || 0) }), read = createEl(\"label\", { className: \"tt-check\", title: \"When recording intent mutations, read previous values from the matching state path instead of the intent path. Useful for accurate undo reconstruction of intent-driven flows.\" }), readBox = createEl(\"input\", { type: \"checkbox\", checked: !!this.time.config.mirrorReads, onchange: () => this.time.config.mirrorReads = readBox.checked }), write = createEl(\"label\", { className: \"tt-check\", title: \"During playback and teleportation, mirror state writes into matching intent paths to re-enact the recorded history. Useful for accurate reconstruction of the whole session.\" }), writeBox = createEl(\"input\", { type: \"checkbox\", checked: !!this.time.config.mirrorWrites, onchange: () => this.time.config.mirrorWrites = writeBox.checked }), filterRow1 = createEl(\"div\", { className: \"tt-filter-row\" }), filterRow2 = createEl(\"div\", { className: \"tt-filter-row\" }), row1 = createEl(\"div\", { className: \"tt-row\" }), row2 = createEl(\"div\", { className: \"tt-row\" }), row3 = createEl(\"div\", { className: \"tt-row\" }), row4 = createEl(\"div\", { className: \"tt-row\" }), row5 = createEl(\"div\", { className: \"tt-row tt-config-row\" });\n speed.append(...[0.25, 0.5, 0.75, 1, 1.25, 1.5, 2, 4, 8, 16, 32].map((v) => createEl(\"option\", { value: String(v), textContent: `${v}x` })));\n status.append((box.append(frame), box), clrHistory);\n filters.append((filterBox.append((filterRow1.append(whitelistLabel, whitelist), filterRow1), (filterRow2.append(blacklistLabel, blacklist), filterRow2)), filterBox));\n panel.append(title, status, (row1.append(playPause, rewind, genesis), row1), (row2.append(undo, redo, trackUntrack, stride), row2), payload, (row3.append(speed, range), row3), filters, (row4.append(exp, imp, clr), row4), io, (row5.append(delay, limit, (read.append(readBox, \" Read Mirror\"), read), (write.append(writeBox, \" Write Mirror\"), write)), row5), (foot.prepend(stats), foot.append(link), foot));\n this.host.append(toggle, panel);\n this.keydown = (e, can = this.state.open && (this.config.devOnly ? CTX.isDevEnv : true), a = can && keyEventAllowed(e, keys)) => (a && e.stopImmediatePropagation(), a === \"undo\" ? this.time.undo(this.state.stride) : a === \"redo\" ? this.time.redo(this.state.stride) : a === \"genesis\" ? this.time.jumpTo(0) : a === \"trackUntrack\" ? this.time[s.tracking ? \"untrack\" : \"track\"]() : a === \"ending\" ? this.time.jumpTo(s.history.length) : a === \"prevFrame\" ? this.time.step(this.state.stride, false) : a === \"nextFrame\" ? this.time.step(this.state.stride, true) : a === \"skipBwd\" ? this.time.step(5 * this.state.stride, false) : a === \"skipFwd\" ? this.time.step(5 * this.state.stride, true) : a === \"rewind\" ? this.time.rewind() : a === \"playPause\" ? this.time[s.paused ? \"play\" : \"pause\"]() : a === \"clrHistory\" ? this.time.clear() : a === \"closeOverlay\" ? this.state.open = false : a === \"export\" ? this.state.import = this.time.export() : a === \"import\" ? this.state.import.trim().length && this.time.import(this.state.import) : a === \"clear\" && (this.state.import = \"\"));\n this.keyup = (e, can = this.state.open && (this.config.devOnly ? CTX.isDevEnv : true), a = can && keyEventAllowed(e, keys)) => a && e.stopImmediatePropagation();\n window.addEventListener(\"keydown\", this.keydown), window.addEventListener(\"keyup\", this.keyup);\n const sync = [\n effect(() => this.config.color ? host.style.setProperty(\"--sia-tt-color\", this.config.color) : host.style.removeProperty(\"--sia-tt-color\")),\n effect(() => {\n if (this.config.devOnly && !CTX.isDevEnv) return void host.remove();\n const dock = getDock(this.config.container);\n if (host.parentNode !== dock) dock.appendChild(host);\n }),\n effect(() => toggle.textContent = `${(panel.hidden = !this.state.open) ? \"Show\" : \"Hide\"} ${title.textContent = this.config.title ?? \"\"}`),\n effect(() => playPause.textContent = `${s.paused ? \"Play\" : \"Pause\"}${formatKeyForDisplay(keys.shortcuts.playPause)}`),\n effect(() => trackUntrack.textContent = `${s.tracking ? \"Untrack\" : \"Track\"}${formatKeyForDisplay(keys.shortcuts.trackUntrack)}`),\n effect((sets = 0, txs = 0) => {\n range.max = String(s.history.length);\n range.disabled = clrHistory.disabled = !s.history.length;\n for (let i = 0, len = s.history.length; i < len; i++) {\n const frame2 = s.history[i];\n \"nodes\" in frame2 ? txs++ : frame2.type === \"set\" && sets++;\n }\n stats.textContent = `Sets: ${sets} | Deletes: ${s.history.length - sets - txs} | Txs: ${txs}`;\n }),\n effect(() => {\n frame.textContent = `Frame: ${s.currentFrame} / ${s.history.length}`;\n genesis.disabled = undo.disabled = !this.time.canUndo;\n rewind.disabled = !s.paused || !s.currentFrame;\n playPause.disabled = redo.disabled = !this.time.canRedo;\n range.value = String(Math.min(s.currentFrame, s.history.length));\n payload.value = JSON.stringify(s.currentFrame ? s.history[s.currentFrame - 1] : { genesis: true, value: s.initialState }, null, 2);\n }),\n effect(() => {\n clr.disabled = imp.disabled = !this.state.import.trim().length;\n io.value !== this.state.import && (io.value = this.state.import);\n }),\n effect((v = String(this.time.config.playbackRate)) => v !== speed.value && (speed.value = v)),\n effect((v = String(this.state.stride)) => v !== stride.value && (stride.value = v)),\n effect((v = String(this.time.config.limit)) => v !== limit.value && (limit.value = v)),\n effect((v = String(this.time.config.maxPlaybackDelay)) => v !== delay.value && (delay.value = v)),\n effect((v = !!this.time.config.mirrorReads) => v !== readBox.checked && (readBox.checked = v)),\n effect((v = !!this.time.config.mirrorWrites) => v !== writeBox.checked && (writeBox.checked = v)),\n effect(() => (!wlLive && (whitelist.value = formatPaths(this.time.config.whitelist, \"*\")), !blLive && (blacklist.value = formatPaths(this.time.config.blacklist, \"\"))))\n ];\n this.clups.push(...sync);\n }\n destroy() {\n for (const clup of this.clups) clup();\n window.removeEventListener(\"keydown\", this.keydown), window.removeEventListener(\"keyup\", this.keyup);\n this.host.remove(), nuke(this), --_TimeTravelConsole.count;\n }\n};\nfunction getDock(container) {\n const host = container && container !== document.documentElement ? container : document.body;\n if (host !== document.body && getComputedStyle(host).position === \"static\") host.style.position = \"relative\";\n const layer = host.querySelector(\":scope > .tt-console-layer\") || createEl(\"div\", { className: \"tt-console-layer\" }, void 0, { position: host === document.body ? \"fixed\" : \"absolute\" });\n if (layer.parentElement !== host) host.appendChild(layer);\n const dock = layer.querySelector(\":scope > .tt-console-dock\") || createEl(\"div\", { className: \"tt-console-dock\" });\n return dock.parentElement !== layer && layer.appendChild(dock), dock;\n}\nfunction formatPaths(paths, emptyText) {\n return !paths ? emptyText : Array.isArray(paths) ? paths.length ? paths.join(\", \") : emptyText : \"object\" === typeof paths ? JSON.stringify(paths) : String(paths);\n}\nfunction parsePaths(raw, allowEmpty = false) {\n const text = raw.trim();\n if (!text) return allowEmpty ? void 0 : wpArr;\n if (text[0] === \"{\")\n try {\n const parsed = JSON.parse(text);\n if (parsed && \"object\" === typeof parsed) return parsed;\n } catch {\n return null;\n }\n const list = text.split(\",\").map((p) => p.trim()).filter(Boolean);\n return list.length ? list : allowEmpty ? void 0 : wpArr;\n}\n\nexport {\n Autotracker,\n withTracker,\n effect,\n TimeTravelConsole\n};\n","import { BasePlug } from \"../../base\";\nimport { TIME_TRAVEL_BUILD } from \"./build\";\nimport type { TimeTravelConfig } from \"./types\";\nimport { fanout } from \"sia-reactor/utils\";\nimport { createTxPathMerger, TimeTravelModule } from \"sia-reactor/modules\";\nimport { TimeTravelConsole } from \"sia-reactor/adapters/vanilla\";\nimport { getCtlrIdx } from \"@tools/player\";\n\nexport class TimeTravelPlug extends BasePlug<TimeTravelConfig> {\n public static readonly plugName = \"timeTravel\";\n public static readonly BUILD = TIME_TRAVEL_BUILD;\n public module!: TimeTravelModule<any>;\n public console!: TimeTravelConsole;\n\n public override mount(): void {\n // Variables Assignment\n this.module = new TimeTravelModule({ beforeEntry: createTxPathMerger(), ...this.config.module });\n const pmdle = this.ctlr.plug(\"settings.persist\")?.module;\n // Utility Injection\n pmdle?.attach(this.module.state, \"timeTravel.state\");\n this.media.use(this.module), pmdle && !pmdle.state.hydrated && (this.module.untrack(), pmdle.state.once(\"hydrated\", this.module.track, { signal: this.signal }));\n }\n\n public override wire(): void {\n // Variables Assignment\n this.console = new TimeTravelConsole(this.module, { title: `TMG Controller ${getCtlrIdx(this.ctlr) + 1} Tape`, ...(this.config.console as Partial<TimeTravelConfig[\"console\"]>) });\n // Ctlr Config Watchers\n this.ctlr.config.watch(\"settings.css.brandColor\", (v) => (this.console.config.color = v as string), { init: true, signal: this.signal });\n // ----------- Listeners\n this.ctlr.config.on(\n \"settings.timeTravel.persist\",\n (e) => {\n const pmdle = this.ctlr.plug(\"settings.persist\")?.module;\n if (!pmdle) return;\n Array.isArray(pmdle.config.whitelist) ? (pmdle.config.whitelist = { \"0\": pmdle.config.whitelist } as any) : !pmdle.config.whitelist && (pmdle.config.whitelist = {} as any);\n (pmdle.config.whitelist as Record<string, string[]>)[\"timeTravel.state\"] = e.value ? [\"*\"] : [];\n },\n { signal: this.signal, init: true }\n );\n this.ctlr.config.on(\"settings.timeTravel.module\", (e) => fanout(this.module.config, e.currentTarget.value), { signal: this.signal, init: false }); // #STABLE: snubs unchanged writes\n this.ctlr.config.on(\"settings.timeTravel.console\", (e) => fanout(this.console.config, e.currentTarget.value), { signal: this.signal, init: false }); // #STABLE: snubs unchanged writes\n // Post Wiring\n this.ctlr.registerAction(\"timeTravelUndo\", { fn: this.module.undo, zen: true });\n this.ctlr.registerAction(\"timeTravelRedo\", { fn: this.module.redo, zen: true });\n super.wire();\n }\n\n protected override onDestroy(): void {\n this.console.destroy(), this.module.destroy(), super.onDestroy();\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.timeTravel\": typeof TimeTravelPlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n timeTravel: TimeTravelConfig;\n }\n}\n","// src/js/index.js\nimport { isStr, isNum, isObj, isFunc, clamp, uid, bindAllMethods, isInteractive, createEl, loadResource, isDef, setTimeout, bindCleanupToSignal } from \"@t007/utils\";\nvar T007_Toast = class {\n #constructed = false;\n // to minimize updates\n #autoCloseInterval;\n #progressInterval;\n #timeVisible = 0;\n #isPaused = false;\n #shouldUnPause;\n queue = [];\n inactive = true;\n #visiblityChange = () => this.#shouldUnPause = document.visibilityState === \"visible\";\n constructor(options) {\n bindAllMethods(this), bindCleanupToSignal(this.abort, options.signal);\n this.opts = options;\n t007.toasts.set(this.opts.id ??= uid(this.opts.groupId ??= \"t007_toast_\"), this);\n !isNum(this.opts.delay) ? this.activate() : this.queue.push(setTimeout(this.activate, this.opts.delay, this.opts.signal));\n this.update(this.opts);\n }\n activate() {\n this.toastElement = createEl(\"div\", { className: `t007-toast${this.scoped ? \" t007-toast-scoped\" : \"\"}`, id: this.opts.id, ariaAtomic: \"true\" }, { groupId: this.opts.groupId });\n requestAnimationFrame(() => this.toastElement.classList.add(\"t007-toast-show\"));\n this.inactive = false;\n }\n update(options, constructed = this.#constructed) {\n if (!options || !isObj(options) || constructed && this.inactive) return this.opts.id;\n try {\n if (constructed) options.signal !== this.opts.signal && (this.opts.signal.removeEventListener(\"abort\", this.abort), bindCleanupToSignal(this.abort, this.opts.signal));\n this.opts = { ...this.opts, ...options };\n const run = () => (Object.keys(options).forEach((key) => this[key] = options[key]), this.#constructed = true, !constructed && (this.position = this.opts.position));\n !isNum(this.opts.delay) ? run() : this.queue.push(setTimeout(run, this.opts.delay, this.opts.signal));\n this.opts.delay = null;\n } catch (err) {\n console.error(\"t007 toast update failed:\", err);\n }\n return this.opts.id;\n }\n play = () => setTimeout(() => this.#isPaused = false, 0, this.opts.signal);\n pause = () => this.#isPaused = true;\n get rootElement() {\n return this.opts.rootElement ?? document.body;\n }\n set rootElement(value) {\n if (this.#constructed) this.position = this.opts.position;\n }\n get scoped() {\n return this.rootElement !== document.body;\n }\n set type(value) {\n this.toastElement.classList.remove(\"info\", \"success\", \"error\", \"warning\");\n value && this.toastElement.classList.add(value);\n this.toastElement.role = value === \"error\" || value === \"warning\" ? \"alert\" : \"status\";\n this.toastElement.ariaLive = value === \"error\" || value === \"warning\" ? \"assertive\" : \"polite\";\n if (value && this.#constructed) this.icon = this.opts.icon;\n }\n set bodyHTML(value) {\n for (const el of this.toastElement.querySelectorAll(\":scope > *:not(.t007-toast-cancel-button)\")) el.remove();\n this.toastElement.insertAdjacentHTML(\"afterbegin\", `${value ? isFunc(value) ? value() : value : \"\"}`);\n }\n set render(value) {\n const bodyText = () => this.toastElement.querySelector(\".t007-toast-body-text\");\n if (value) {\n this._setUpBodyHTML();\n this.toastElement.querySelector(\".t007-toast-body\").prepend(bodyText() || createEl(\"p\", { className: \"t007-toast-body-text\" }));\n const text = bodyText();\n text.innerHTML = text.dataset.render = isFunc(value) ? value() : value;\n } else bodyText()?.remove();\n }\n set actions(value) {\n const actionsWrapper = () => this.toastElement.querySelector(\".t007-toast-actions-wrapper\"), values = value ? Object.entries(value) : [];\n if (values.length) {\n this._setUpBodyHTML();\n this.toastElement.querySelector(\".t007-toast-body\").insertAdjacentElement(\"afterend\", actionsWrapper() || createEl(\"div\", { className: \"t007-toast-actions-wrapper\" }));\n const wrapper = actionsWrapper();\n wrapper.innerHTML = values.map(([label]) => label ? `<button class=\"t007-toast-action-button\" data-action=\"${label}\">${label}</button>` : \"\").join(\"\");\n wrapper.querySelectorAll(\".t007-toast-action-button\").forEach((btn, i) => btn.onclick = (e) => values[i][1]?.(e, this));\n } else actionsWrapper()?.remove();\n }\n set image(value) {\n const image = () => this.toastElement.querySelector(\".t007-toast-image\");\n if (value) {\n this._setUpBodyHTML();\n this.toastElement.querySelector(\".t007-toast-image-wrapper\").prepend(image() || createEl(\"img\", { className: \"t007-toast-image\", alt: \"toast-image\" }));\n const img = image();\n img.src = value;\n img.onload = img.onerror = () => img.dataset.loaded = img.complete && img.naturalWidth > 0;\n } else image()?.remove();\n }\n get icon() {\n return this.opts.icon === true ? t007.TOAST_ICONS[this.opts.type] || \"\" : this.opts.icon || \"\";\n }\n set icon(value) {\n if (this.opts.isLoading) return;\n const icon = () => this.toastElement.querySelector(\".t007-toast-icon:not(.t007-toast-loader)\");\n if (value) {\n this._setUpBodyHTML();\n this.toastElement.querySelector(\".t007-toast-image-wrapper\").append(icon() || createEl(\"span\", { className: \"t007-toast-icon\" }));\n const icn = icon();\n icn.innerHTML = icn.dataset.icon = this.icon;\n } else icon()?.remove();\n }\n set isLoading(value) {\n const loader = () => this.toastElement.querySelector(\".t007-toast-loader\");\n if (value) {\n this._setUpBodyHTML();\n for (const i of this.toastElement.querySelectorAll(\".t007-toast-icon:not(.t007-toast-loader)\")) i.remove();\n this.toastElement.querySelector(\".t007-toast-image-wrapper\").append(loader() || createEl(\"span\", { className: \"t007-toast-icon t007-toast-loader\" }));\n loader().innerHTML = isStr(value) ? value : t007.TOAST_ICONS.loading;\n } else {\n loader()?.remove();\n if (this.#constructed) this.icon = this.opts.icon;\n }\n }\n set closeButton(value) {\n const btn = this.toastElement.querySelector(\".t007-toast-cancel-button\");\n if (value) this.toastElement.append(btn || createEl(\"button\", { title: \"Close\", ariaLabel: \"Close notification\", className: \"t007-toast-cancel-button\", innerHTML: \"&times;\", onclick: this.remove }));\n else btn?.remove();\n }\n get animation() {\n const p = this.opts.position;\n if (this.opts.animation === true || this.opts.animation === \"slide\")\n if (p === \"top-right\" || p === \"center-right\" || p === \"bottom-right\") return \"slide-left\";\n else if (p === \"top-center\" || p === \"center-center\" || p === \"bottom-center\") return p === \"top-center\" ? \"slide-down\" : \"slide-up\";\n else return \"slide-right\";\n return this.opts.animation;\n }\n set animation(value) {\n this.toastElement.dataset.animation = this.animation;\n }\n get autoClose() {\n return this.opts.autoClose === true ? t007.TOAST_DURATIONS[this.opts.type] || t007.TOAST_DURATIONS.info : this.opts.autoClose;\n }\n set autoClose(value) {\n cancelAnimationFrame(this.#autoCloseInterval);\n this.#timeVisible = 0;\n this.nprogress = void 0;\n let lastTime;\n const loop = (time) => {\n if (this.#shouldUnPause) {\n lastTime = null;\n this.#shouldUnPause = false;\n }\n if (lastTime == null) {\n lastTime = time;\n return this.#autoCloseInterval = requestAnimationFrame(loop);\n }\n if (!this.#isPaused) {\n this.#timeVisible += time - lastTime;\n this.onTimeUpdate?.(this.#timeVisible);\n if (isNum(this.autoClose) && this.#timeVisible >= this.autoClose) return this.remove(\"smooth\", true);\n }\n lastTime = time;\n this.#autoCloseInterval = requestAnimationFrame(loop);\n };\n if (value) this.#autoCloseInterval = requestAnimationFrame(loop);\n }\n set position(value) {\n if (!this.#constructed) return;\n const currContainer = this.toastElement.parentElement, container = this.rootElement.querySelector(`:scope > .t007-toast-container[data-position=\"${value}\"]`) || this._createContainer(value);\n !container.contains(this.toastElement) && container[this.opts.newestOnTop ? \"prepend\" : \"append\"](this.toastElement);\n this.toastElement.classList.toggle(\"t007-toast-scoped\", this.scoped);\n if (!(currContainer == null || currContainer.hasChildNodes())) currContainer.remove();\n }\n set closeOnClick(value) {\n this.toastElement.onclick = value ? () => this.remove() : null;\n }\n set hideProgressBar(value) {\n this.toastElement.classList.toggle(\"progress\", !value);\n this.nprogress = void 0;\n cancelAnimationFrame(this.#progressInterval);\n const loop = () => {\n if (isNum(this.autoClose) && !this.#isPaused) this.nprogress = void 0;\n this.#progressInterval = requestAnimationFrame(loop);\n };\n if (!value) this.#progressInterval = requestAnimationFrame(loop);\n }\n get nprogress() {\n return Number(this.toastElement.style.getProperty(\"--progress\"));\n }\n set nprogress(value = 1 - this.#timeVisible / this.autoClose) {\n this.toastElement.style.setProperty(\"--progress\", value);\n }\n set pauseOnHover(value) {\n this.toastElement.onmouseover = value ? this.pause : null;\n this.toastElement.onmouseleave = value ? this.play : null;\n this.toastElement[value ? \"addEventListener\" : \"removeEventListener\"](\"touchend\", this.play);\n }\n set pauseOnFocusLoss(value) {\n value ? document.addEventListener(\"visibilitychange\", this.#visiblityChange) : document.removeEventListener(\"visibilitychange\", this.#visiblityChange);\n }\n set tag(value) {\n this.toastElement.dataset.tag = value;\n }\n set renotify(value) {\n if (value && this.opts.tag) {\n for (const toast2 of t007.toasts.values()) if (toast2.opts.tag === this.opts.tag && toast2.opts.id !== this.opts.id) toast2.abort();\n }\n }\n get vibrate() {\n return this.opts.vibrate === true ? t007.TOAST_VIBRATIONS[this.opts.type] || t007.TOAST_VIBRATIONS.info : this.opts.vibrate;\n }\n set vibrate(value) {\n value && navigator?.vibrate?.(this.vibrate);\n }\n set limit(value) {\n const toastsInContainer = [...this.toastElement?.parentElement?.children || []];\n if (!toastsInContainer.length) return;\n for (let i = 0; i < toastsInContainer.length - value; i++) [...t007.toasts.values()].find((t) => t.toastElement === (this.opts.newestOnTop ? toastsInContainer[toastsInContainer.length - 1 - i] : toastsInContainer[i]))?.abort();\n }\n set newestOnTop(value) {\n this.toastElement?.parentElement?.[value ? \"prepend\" : \"append\"](this.toastElement);\n }\n set dragToClose(value) {\n this.toastElement.dataset.dragToClose = this._ptrType = value;\n this.toastElement.onpointerdown = value ? this._handleToastPointerStart : null;\n this.toastElement.onpointerup = value ? this._handleToastPointerUp : null;\n }\n _handleToastPointerStart(e) {\n if (isStr(this._ptrType) && e.pointerType !== this._ptrType) return;\n if (e.touches?.length > 1) return;\n !isInteractive(e.target) && this.toastElement.setPointerCapture(e.pointerId);\n this.#isPaused = true;\n this._ptrTicker = this._ptrDirSet = this._ptrDir = false;\n this._ptrStartX = e.clientX ?? e.targetTouches[0]?.clientX;\n this._ptrStartY = e.clientY ?? e.targetTouches[0]?.clientY;\n this.toastElement.addEventListener(\"pointermove\", this._handleToastPointerMove, { passive: false });\n this.toastElement.style.setProperty(\"transition\", \"none\", \"important\");\n }\n _handleToastPointerMove(e) {\n e.preventDefault();\n if (this._ptrTicker) return;\n this._ptrRAF = requestAnimationFrame(() => {\n const selection = window.getSelection();\n if (selection?.toString().length && this.toastElement.contains(selection.anchorNode)) return this._handleToastPointerUp(e);\n const has = (str) => this.opts.dragToCloseDir.includes(str), x = e.clientX ?? e.targetTouches[0]?.clientX, y = e.clientY ?? e.targetTouches[0]?.clientY;\n this._ptrDir ||= Math.abs(x - this._ptrStartX) >= Math.abs(y - this._ptrStartY) ? \"x\" : \"y\";\n this._ptrDeltaX = (has(\"|\") ? this._ptrDir == \"x\" : has(\"x\")) && !has(x - this._ptrStartX > 0 ? \"-\" : \"+\") ? x - this._ptrStartX : 0;\n this._ptrDeltaY = (has(\"|\") ? this._ptrDir == \"y\" : has(\"y\")) && !has(y - this._ptrStartY > 0 ? \"+\" : \"-\") ? y - this._ptrStartY : 0;\n this.toastElement.style.setProperty(\"transform\", `translate(${this._ptrDeltaX}px, ${this._ptrDeltaY}px)`, \"important\");\n const xR = Math.abs(this._ptrDeltaX) / this.toastElement.offsetWidth, yR = Math.abs(this._ptrDeltaY) / this.toastElement.offsetHeight;\n this.toastElement.style.setProperty(\"opacity\", clamp(0, 1 - (yR > 0.5 ? yR : xR), 1), \"important\");\n if (!this._ptrDirSet && !xR && !yR) this._ptrDir = false;\n if (this._ptrDir) this._ptrDirSet = has(\"||\");\n this._ptrTicker = false;\n });\n this._ptrTicker = true;\n }\n _handleToastPointerUp(e) {\n if (isStr(this._ptrType) && e.pointerType !== this._ptrType) return;\n cancelAnimationFrame(this._ptrRAF);\n if (Math.abs(this._ptrDeltaX) > this.toastElement.offsetWidth * ((this.opts.dragToClosePercent.x ?? this.opts.dragToClosePercent) / 100) || Math.abs(this._ptrDeltaY) > this.toastElement.offsetHeight * ((this.opts.dragToClosePercent.y ?? this.opts.dragToClosePercent) / 100)) return this.abort();\n this.#isPaused = this._ptrTicker = this._ptrDirSet = this._ptrDir = false;\n this.toastElement.removeEventListener(\"pointermove\", this._handleToastPointerMove, { passive: false });\n for (const prop of [\"transition\", \"transform\", \"opacity\"]) this.toastElement.style.removeProperty(prop);\n }\n remove(manner = \"smooth\", timeElapsed = false) {\n if (!this.opts.isLoading) t007.toasts.delete(this.opts.id);\n for (const tid of this.queue) clearTimeout(tid);\n document.removeEventListener(\"visibilitychange\", this.#visiblityChange);\n cancelAnimationFrame(this.#autoCloseInterval), cancelAnimationFrame(this.#progressInterval);\n if (this.inactive || manner === \"instant\" || !this.animation) this._cleanUpToast();\n else this.toastElement.onanimationend = this._cleanUpToast;\n this.toastElement.classList.remove(\"t007-toast-show\");\n this.onClose?.(timeElapsed);\n }\n abort = () => this.remove(\"instant\", false);\n _createContainer(position) {\n const container = createEl(\"div\", { className: \"t007-toast-container\" }, { position });\n container.style.setProperty(\"--t007-toast-container-position\", !this.scoped ? \"fixed\" : \"absolute\");\n return this.rootElement.appendChild(container);\n }\n _setUpBodyHTML() {\n this.#constructed && this.toastElement.querySelectorAll(\":scope > *:not(.t007-toast-image-wrapper, .t007-toast-body, .t007-toast-actions-wrapper, .t007-toast-cancel-button)\").forEach((el) => el.remove());\n const imageWrapper = () => this.toastElement.querySelector(\".t007-toast-image-wrapper\");\n if (!imageWrapper()) this.toastElement.prepend(createEl(\"div\", { className: \"t007-toast-image-wrapper\" }));\n if (!this.toastElement.querySelector(\".t007-toast-body\")) imageWrapper().insertAdjacentElement(\"afterend\", createEl(\"div\", { className: \"t007-toast-body\" }));\n }\n _cleanUpToast() {\n const container = this.toastElement?.parentElement;\n this.toastElement?.remove();\n if (!container?.hasChildNodes()) container?.remove();\n this.inactive = true;\n }\n};\nvar toasting = {\n isActive(_, id, _toast = t007.toasts.get(id)) {\n return isDef(id) ? !!_toast && !_toast.inactive : t007.toasts.size > 0 && [...t007.toasts.values()].some((toast2) => !toast2.inactive);\n },\n update(base, id, options, _toast) {\n const toast2 = _toast ?? t007.toasts.get(id);\n if (toast2?.queue) for (const tid of toast2.queue) clearTimeout(tid);\n if (toast2 && toast2.inactive) return t007.toasts.delete(id), base(options.render, { ...toast2.opts, id, ...options });\n return toast2 && toast2.update(options);\n },\n message: (base, getDefaults, action, renderOrId, options = {}) => {\n options = { ...options, type: action === \"warn\" ? \"warning\" : action };\n const id = options.id ?? renderOrId, toast2 = t007.toasts.get(id);\n if (!toast2) return base(renderOrId, options);\n const { autoClose, closeButton, closeOnClick, dragToClose } = getDefaults();\n return base.update(id, { ...toast2.opts.isLoading ? { closeButton, closeOnClick, dragToClose } : null, ...options.id ? { render: renderOrId } : null, autoClose, ...options, isLoading: false }, toast2);\n },\n loading: (base, renderOrId, options = {}) => {\n const id = options.id ?? renderOrId, toast2 = t007.toasts.get(id);\n return (toast2 ? base.update : base)(id, { closeButton: false, closeOnClick: false, dragToClose: false, ...options.id ? { render: renderOrId } : null, autoClose: false, ...options, isLoading: options.isLoading || true, type: \"\" }, toast2 || void 0);\n },\n promise(base, promise = new Promise((res, rej) => setTimeout(Math.round(Math.random()) ? res : rej, 3e3)), { pending, success, error } = {}) {\n if (!promise || !isFunc(promise.then)) return console.error(\"toast.promise() requires a valid promise\");\n const NFC = (input, type) => isStr(input) ? { render: input, type } : isObj(input) ? { ...input, type } : { type };\n const pendingCfg = NFC(pending);\n const pendingId = base.loading(pendingCfg.render || \"Promise pending...\", { ...pendingCfg });\n promise.then(\n (response) => {\n const successConfig = NFC(success || \"Promise resolved\", \"success\");\n const { render, bodyHTML } = successConfig;\n if (isFunc(render)) successConfig.render = (txt = response) => render(txt);\n if (isFunc(bodyHTML)) successConfig.bodyHTML = (txt = response) => bodyHTML(txt);\n base.success(pendingId, successConfig);\n return response;\n },\n (err) => {\n const errorConfig = NFC(error || \"Promise rejected\", \"error\");\n const { render, bodyHTML } = errorConfig;\n if (isFunc(render)) errorConfig.render = (txt = err) => render(txt);\n if (isFunc(bodyHTML)) errorConfig.bodyHTML = (txt = err) => bodyHTML(txt);\n base.error(pendingId, errorConfig);\n return Promise.reject(err);\n }\n );\n return promise;\n },\n dismiss(base, id, manner, timeElapsed) {\n return !isDef(id) ? base.dismissAll() : t007.toasts.get(id)?.remove(manner, timeElapsed);\n },\n dismissAll(base, groupId) {\n for (const toast2 of t007.toasts.values()) (!isDef(groupId) ? true : toast2.opts.groupId === groupId) && toast2.remove();\n },\n doForAll(base, action, options, groupId) {\n for (const toast2 of t007.toasts.values()) (!isDef(groupId) ? true : toast2.opts.groupId === groupId) && base[action]?.(toast2.opts.id, options);\n },\n getAll(base, groupId) {\n return t007.toasts.values().filter((toast2) => !isDef(groupId) ? true : toast2.opts.groupId === groupId);\n }\n};\nvar toaster = (defOptions = {}, groupId = \"t007_toast_\") => {\n const getDefaults = () => ({ ...t007.TOAST_DEFAULT_OPTIONS, ...defOptions }), base = (renderOrId, options = {}, mayBeId = renderOrId?.startsWith?.(groupId), render = mayBeId ? options.render : renderOrId, id = mayBeId ? renderOrId : options.id, toast2 = t007.toasts.get(id)) => toast2 ? toasting.update(base, id, { ...options, render }, toast2) : new T007_Toast({ ...getDefaults(), ...options, id, render, groupId }).opts.id;\n base.isActive = (id) => toasting.isActive(base, id);\n base.update = (id, options, _toast) => toasting.update(base, id, options, _toast);\n for (const action of [\"info\", \"success\", \"warn\", \"error\"]) base[action] = (renderOrId, options) => toasting.message(base, getDefaults, action, renderOrId, options);\n base.loading = (renderOrId, options) => toasting.loading(base, renderOrId, options);\n base.promise = (promise, config) => toasting.promise(base, promise, config);\n base.dismiss = (id, manner, timeElapsed) => toasting.dismiss(base, id, manner, timeElapsed);\n base.dismissAll = (groupId2) => toasting.dismissAll(base, groupId2);\n base.doForAll = (action, options, groupId2) => toasting.doForAll(base, action, options, groupId2);\n base.getAll = (groupId2) => toasting.getAll(base, groupId2);\n return base;\n};\nvar toast = toaster();\nvar index_default = toast;\nvar TOAST_UI_POSITIONS = [{ value: \"top-left\", display: \"Top Left\" }, { value: \"top-center\", display: \"Top Center\" }, { value: \"top-right\", display: \"Top Right\" }, { value: \"center-left\", display: \"Center Left\" }, { value: \"center-center\", display: \"Center Center\" }, { value: \"center-right\", display: \"Center Right\" }, { value: \"bottom-left\", display: \"Bottom Left\" }, { value: \"bottom-center\", display: \"Bottom Center\" }, { value: \"bottom-right\", display: \"Bottom Right\" }];\nvar TOAST_UI_ANIMATIONS = [{ value: \"fade\", display: \"Fade\" }, { value: \"zoom\", display: \"Zoom\" }, { value: \"slide\", display: \"Slide\" }, { value: \"slide-left\", display: \"Slide Left\" }, { value: \"slide-right\", display: \"Slide Right\" }, { value: \"slide-up\", display: \"Slide Up\" }, { value: \"slide-down\", display: \"Slide Down\" }];\nvar TOAST_UI_TYPES = [{ value: void 0, display: \"None\" }, { value: \"info\", display: \"Info\" }, { value: \"success\", display: \"Success\" }, { value: \"warning\", display: \"Warning\" }, { value: \"error\", display: \"Error\" }];\nvar TOAST_UI_DRAG_OPTIONS = [{ value: true, display: \"On\" }, { value: \"mouse\", display: \"Mouse\" }, { value: \"touch\", display: \"Touch\" }, { value: \"pen\", display: \"Pen\" }, { value: false, display: \"Off\" }];\nvar TOAST_UI_DRAG_DIRECTIONS = [{ value: \"x\", display: \"Horizontal\" }, { value: \"y\", display: \"Vertical\" }, { value: \"xy\", display: \"Horizontal and Vertical\" }, { value: \"x|y\", display: \"Horizontal or Vertical\" }, { value: \"x||y\", display: \"Horizontal or Vertical (Locked)\" }, { value: \"x+\", display: \"Right\" }, { value: \"x-\", display: \"Left\" }, { value: \"y+\", display: \"Down\" }, { value: \"y-\", display: \"Up\" }, { value: \"xy+\", display: \"Right and Down\" }, { value: \"xy-\", display: \"Left and Up\" }, { value: \"x|y+\", display: \"Right or Down\" }, { value: \"x|y-\", display: \"Left or Up\" }, { value: \"x||y+\", display: \"Right or Down (Locked)\" }, { value: \"x||y-\", display: \"Left or Up (Locked)\" }];\nif (\"undefined\" !== typeof window) {\n t007.toast = toast, t007.toasting = toasting, t007.toaster = toaster;\n t007.toasts = /* @__PURE__ */ new Map();\n t007.TOAST_DEFAULT_OPTIONS ??= {}, t007.TOAST_DURATIONS ??= {}, t007.TOAST_VIBRATIONS ??= {}, t007.TOAST_ICONS ??= {}, t007.T0AST_UI_POSITIONS = TOAST_UI_POSITIONS, t007.TOAST_UI_ANIMATIONS = TOAST_UI_ANIMATIONS, t007.TOAST_UI_TYPES = TOAST_UI_TYPES, t007.TOAST_UI_DRAG_OPTIONS = TOAST_UI_DRAG_OPTIONS, t007.TOAST_UI_DRAG_DIRECTIONS = TOAST_UI_DRAG_DIRECTIONS;\n t007.TOAST_DEFAULT_OPTIONS.render ??= \"\";\n t007.TOAST_DEFAULT_OPTIONS.type ??= \"\";\n t007.TOAST_DEFAULT_OPTIONS.icon ??= true;\n t007.TOAST_DEFAULT_OPTIONS.image ??= false;\n t007.TOAST_DEFAULT_OPTIONS.autoClose ??= true;\n t007.TOAST_DEFAULT_OPTIONS.position ??= \"top-right\";\n t007.TOAST_DEFAULT_OPTIONS.isLoading ??= false;\n t007.TOAST_DEFAULT_OPTIONS.closeButton ??= !/Mobi|Android|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);\n t007.TOAST_DEFAULT_OPTIONS.closeOnClick ??= false;\n t007.TOAST_DEFAULT_OPTIONS.hideProgressBar ??= false;\n t007.TOAST_DEFAULT_OPTIONS.pauseOnHover ??= true;\n t007.TOAST_DEFAULT_OPTIONS.pauseOnFocusLoss ??= true;\n t007.TOAST_DEFAULT_OPTIONS.dragToClose ??= true;\n t007.TOAST_DEFAULT_OPTIONS.dragToClosePercent ??= 40;\n t007.TOAST_DEFAULT_OPTIONS.dragToCloseDir ??= \"x\";\n t007.TOAST_DEFAULT_OPTIONS.renotify ??= true;\n t007.TOAST_DEFAULT_OPTIONS.vibrate ??= false;\n t007.TOAST_DEFAULT_OPTIONS.animation ??= true;\n t007.TOAST_DEFAULT_OPTIONS.newestOnTop ??= false;\n t007.TOAST_DEFAULT_OPTIONS.limit ??= 100;\n t007.TOAST_DURATIONS.success ??= 2500, t007.TOAST_DURATIONS.error ??= 4500, t007.TOAST_DURATIONS.warning ??= 3500, t007.TOAST_DURATIONS.info ??= 4e3;\n t007.TOAST_VIBRATIONS.success ??= [100, 50, 100], t007.TOAST_VIBRATIONS.warning ??= [300, 100, 300], t007.TOAST_VIBRATIONS.error ??= [500, 200, 500], t007.TOAST_VIBRATIONS.info ??= [200];\n t007.TOAST_ICONS.success ??= `<svg class=\"no-css-fill\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#27ae60\"/><path fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M7 12l3 3l6-6\"/></svg>`;\n t007.TOAST_ICONS.error ??= `<svg class=\"no-css-fill\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#e74c3c\"/><path fill=\"#fff\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M8 8l8 8M16 8l-8 8\"/></svg>`;\n t007.TOAST_ICONS.warning ??= `<svg class=\"no-css-fill\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><path fill=\"#f1c40f\" stroke=\"#f39c12\" stroke-width=\"2\" stroke-linejoin=\"round\" d=\"M12 3L2.5 20.5A2 2 0 0 0 4.5 23h15a2 2 0 0 0 2-2.5L12 3z\"/><circle cx=\"12\" cy=\"17\" r=\"1.5\" fill=\"#fff\"/><path fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 8v6\"/></svg>`;\n t007.TOAST_ICONS.info ??= `<svg class=\"no-css-fill\" width=\"24\" height=\"24\" viewBox=\"0 0 24 24\"><circle cx=\"12\" cy=\"12\" r=\"10\" fill=\"#3498db\"/><path fill=\"none\" stroke=\"#fff\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" d=\"M12 10v6\"/><circle cx=\"12\" cy=\"7\" r=\"1.5\" fill=\"#fff\"/></svg>`;\n t007.TOAST_ICONS.loading ??= `<svg class=\"no-css-fill\" width=\"24\" height=\"24\" viewBox=\"0 0 16 16\" fill=\"none\" style=\"scale:0.75;\"><g fill-rule=\"evenodd\" clip-rule=\"evenodd\"><path fill=\"whitesmoke\" d=\"M8 1.5a6.5 6.5 0 1 0 0 13 6.5 6.5 0 0 0 0-13M0 8a8 8 0 1 1 16 0A8 8 0 0 1 0 8\"/><path fill=\"gray\" d=\"M7.25.75A.75.75 0 0 1 8 0a8 8 0 0 1 8 8 .75.75 0 0 1-1.5 0A6.5 6.5 0 0 0 8 1.5a.75.75 0 0 1-.75-.75\"/></g><animateTransform attributeName=\"transform\" attributeType=\"XML\" type=\"rotate\" from=\"0\" to=\"360\" dur=\"600ms\" repeatCount=\"indefinite\"/></svg>`;\n loadResource(T007_TOAST_CSS_SRC);\n window.toast ??= t007.toast;\n console.log(\"%cT007 Toasts attached to window!\", \"color: darkturquoise\");\n}\nexport {\n TOAST_UI_ANIMATIONS,\n TOAST_UI_DRAG_DIRECTIONS,\n TOAST_UI_DRAG_OPTIONS,\n TOAST_UI_POSITIONS,\n TOAST_UI_TYPES,\n index_default as default,\n toaster,\n toasting\n};\n","import { VoiceConfig } from \"./types\";\nimport { TOAST_UI_POSITIONS } from \"@t007/toast\";\n\nexport const VOICE_BUILD: VoiceConfig = {\n active: {\n value: \"passive\",\n options: [\n { value: true, display: \"On\" },\n { value: false, display: \"Off\" },\n { value: \"passive\", display: \"Passive\" },\n ],\n },\n wakeWord: \"player\",\n behavior: {\n value: \"persistent\",\n options: [\n { value: \"persistent\", display: \"Persistent\" },\n { value: \"auto\", display: \"Auto (Show on speech)\" },\n { value: \"strict\", display: \"Strict (Show after wake)\" },\n ],\n },\n timeout: 15000,\n inputs: {\n direct: true,\n strict: {\n value: \"auto\",\n options: [\n { value: true, display: \"On\" },\n { value: false, display: \"Off\" },\n { value: \"auto\", display: \"Auto (On for text)\" },\n ],\n },\n accuracy: 0.75,\n },\n autoToggles: false,\n commandsDisabled: false,\n commands: {\n voiceQuit: [\"byebye\", \"exit\", \"quit\"],\n voiceSleep: [\"sleep\"],\n voiceSubmit: [\"submit\", \"enter\", \"confirm\"],\n voiceHistoryFirst: [\"start\", \"first\", \"root\"],\n voiceHistoryPrev: [\"goback\", \"back\", \"previous\"],\n voiceHistoryNext: [\"gofront\", \"front\", \"goforward\", \"forward\", \"next\"],\n voiceHistoryLast: [\"end\", \"last\", \"leaf\"],\n voiceHistoryClear: [\"reset\", \"clear\"],\n voiceToggleOn: [\"on\", \"yes\", \"true\", \"enable\", \"start\"],\n voiceToggleOff: [\"off\", \"no\", \"false\", \"disable\", \"stop\"],\n },\n listenerPos: {\n value: \"top-center\",\n options: TOAST_UI_POSITIONS,\n },\n predictorPos: {\n value: \"bottom-left\",\n options: TOAST_UI_POSITIONS,\n },\n};\n","import { BasePlug } from \"@plugs/base\";\nimport type { Controller } from \"@core/controller\";\nimport { force, getPath, getPaths, isLeafPath, setPath } from \"sia-reactor/utils\";\nimport { limited } from \"@utils/fn\";\nimport type { VoiceStage, VoiceConfig, VoiceState } from \"./types\";\nimport { VOICE_BUILD } from \"./build\";\nimport { capitalize, fuzzyMatch as match, getSimilarity, uncamelize } from \"@utils/str\";\nimport { type ToastOptions } from \"@t007/toast\";\nimport { REvent } from \"sia-reactor\";\nimport { CtlrConfig } from \"@defs/config\";\nimport { tutorialOpts } from \"../toasts\";\n\nexport class VoicePlug extends BasePlug<VoiceConfig, VoiceState> {\n public static readonly plugName = \"voice\";\n public static readonly BUILD = VOICE_BUILD;\n protected recognition?: any;\n protected teachBasics = limited((_id?: string) => ((_id = this.ctlr.plug(\"settings.toasts\")?.toast?.(`Follow the predictor guides at the ${uncamelize(this.config.predictorPos.value, \"-\")}. Click ⚙ for settings`, { ...tutorialOpts(() => (this.teachBasics.block(), t007.toast?.dismiss(_id))), signal: this.signal })), { key: \"tmg_voice_tut_1\", maxTimes: 5 }));\n protected readonly IDS = { LISTENER: \"tmg-media-voice-listener\" + this.ctlr.config.id, PREDICTOR: \"tmg-media-voice-predictor\" + this.ctlr.config.id };\n protected get root() {\n return { media: this.ctlr.media, settings: this.ctlr.settings };\n }\n\n constructor(ctlr: Controller, config = ctlr.settings.voice) {\n super(ctlr, config, { context: \"*\", listening: false, muted: false });\n }\n\n public override mount(): void {\n // Variables Assignment\n const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognitn;\n if (!SpeechRecognition) return;\n this.recognition = new SpeechRecognition();\n Object.assign(this.recognition, { continuous: true, interimResults: true, onresult: this.handleResult, onend: this.handleEnd, onerror: this.handleError });\n }\n\n public override wire(): void {\n // Variables Assignment\n const container = this.ctlr.plug(\"settings.toasts\")?.container;\n // Event Listeners\n container?.addEventListener(\"click\", this.handleLinkClick, { signal: this.signal });\n container?.addEventListener(\"click\", this.handleInputEvent, { signal: this.signal });\n container?.addEventListener(\"keydown\", this.handleInputEvent, { signal: this.signal });\n container?.addEventListener(\"wheel\", this.stayWoke, { signal: this.signal, passive: true });\n container?.addEventListener(\"touchmove\", this.stayWoke, { signal: this.signal, passive: true });\n // State Watchers\n this.state.watch(\"context\", this.onContext, { signal: this.signal });\n // ----- Listeners\n this.state.on(\"listening\", ({ value }) => this.media.container.classList.toggle(\"tmg-media-voice-listening\", value), { signal: this.signal });\n this.state.on(\"muted\", () => this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { actions: this.getListenerOptions().actions }), { signal: this.signal });\n // Ctlr Media Watchers\n this.media.watch(\"tech\", () => (this.media.features.voice ||= !this.recognition), { init: true, signal: this.signal });\n // ---- State Listeners\n this.ctlr.state.on(\"mediaIntersecting\", () => this.ctlr.debounce(\"syncingIntersectingVoiceListeners\", this.syncListeners, 300, false), { signal: this.signal });\n // ---- Config -------\n this.ctlr.config.on(\"settings.voice.active\", this.handleActive, { signal: this.signal });\n this.ctlr.config.on(\"settings.voice.wakeWord\", ({ value }) => (value ? this.config.active.value && !this.state.listening && this.start() : !this.state.listening && this.stop()), { signal: this.signal });\n this.ctlr.config.on(\"settings.voice.listenerPos.value\", ({ value }) => this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { position: value }), { signal: this.signal });\n this.ctlr.config.on(\"settings.voice.predictorPos.value\", ({ value }) => this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.PREDICTOR, { position: value }), { signal: this.signal });\n this.ctlr.config.on(\"disabled\", this.syncListeners, { signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"voiceQuit\", { fn: () => (this.config.active.value = false) });\n this.ctlr.registerAction(\"voiceSleep\", { fn: this.sleep });\n this.ctlr.registerAction(\"voiceSubmit\", { fn: this.submit });\n this.ctlr.registerAction(\"voiceHistoryFirst\", { fn: () => this.goTo(\"*\") });\n this.ctlr.registerAction(\"voiceHistoryPrev\", { fn: this.goBack });\n this.ctlr.registerAction(\"voiceHistoryNext\", { fn: this.goForward });\n this.ctlr.registerAction(\"voiceHistoryLast\", { fn: () => this.goTo(this.state.context) });\n this.ctlr.registerAction(\"voiceHistoryClear\", { fn: () => this.resetContext(false) });\n this.ctlr.payload.wired ? this.syncListeners() : this.ctlr.state.wonce(\"readyState\", this.syncListeners, { signal: this.signal }); // #HEAVY: waits for !lightState. If wake word is enabled, start the engine immediately in \"sleep\" mode\n super.wire();\n }\n\n protected handleResult(e: any): void {\n let transcript = \"\";\n if (!this.state.muted) for (let i = e.resultIndex; i < e.results.length; ++i) transcript += e.results[i][0].transcript;\n transcript = transcript.trim().toLowerCase();\n // 1. Wake Word Detection\n if (transcript && !this.state.listening) {\n const token = match([this.config.wakeWord.toLowerCase()], transcript, this.config.inputs.accuracy);\n if (token) {\n this.wakeUp();\n const idx = transcript.indexOf(token);\n transcript = idx !== -1 ? transcript.substring(idx + token.length).trim() : \"\"; // Remove the wake word from the transcript\n }\n if ((!token || !transcript) && this.config.behavior.value === \"strict\") return;\n }\n // 2. Update the listener UI.\n if (!this.state.muted) this.ctlr.plug(\"settings.toasts\")?.toast?.(transcript ? `${transcript}${!this.state.listening ? `... Say \"${this.linked(this.config.wakeWord)}\"!` : \"\"}` : this.getListenerSpeech(true, this.state.listening ? \"Didn't catch that...\" : undefined), this.getListenerOptions(true));\n this.ctlr.debounce(\"voiceSleeping\", this.sleep, this.config.timeout, false);\n // 3. Anytime-stage actions (run regardless of listening state)\n transcript && this.process(transcript);\n }\n\n protected handleEnd(): void {\n if (this.config) this.config.active.value !== false && this.start();\n }\n protected handleError(e: any): void {\n if (e.error === \"not-allowed\" || e.error === \"service-not-allowed\") (this.config.active.value = false), this.ctlr.plug(\"settings.toasts\")?.toast?.error(\"Microphone access revoked. Please check your settings.\");\n }\n protected handleActive({ value }: REvent<CtlrConfig, \"settings.voice.active\">): void {\n if (value === false) {\n this.state.listening = false;\n this.recognition?.abort(), t007.toast?.dismiss(this.IDS.PREDICTOR), t007.toast?.dismiss(this.IDS.LISTENER);\n } else if (this.shouldListen()) value === \"passive\" ? (this.sleep(), this.start()) : (this.wakeUp(), this.start());\n }\n\n public syncListeners(): void {\n if (!this.shouldListen()) (this.state.listening = false), this.recognition?.abort(), t007.toast?.dismiss(this.IDS.PREDICTOR), t007.toast?.dismiss(this.IDS.LISTENER);\n else this.config.active.value === true ? (this.wakeUp(), this.start()) : this.config.active.value === \"passive\" && this.start();\n }\n protected shouldListen(): boolean {\n return this.ctlr.payload.wired && this.ctlr.state.mediaIntersecting && !this.ctlr.config.disabled;\n }\n\n protected async askPermission(): Promise<boolean> {\n const state = (await navigator.permissions?.query({ name: \"microphone\" as any }).catch(() => null))?.state ?? \"prompt\";\n if (state === \"granted\" || state === \"denied\") return state === \"granted\";\n // prettier-ignore\n return new Promise((res, _, req?: () => void, i = 0) => ((req = () => this.ctlr.plug(\"settings.toasts\")?.toast?.info(\"We need permission to use Voice Control\", { id: this.IDS.LISTENER, autoClose: false, actions: { OK: () => navigator.mediaDevices.getUserMedia({ audio: true }).then((s) => (s.getTracks().forEach((t) => t.stop()), res(true))).catch(() => (this.ctlr.plug(\"settings.toasts\")?.toast?.warn(\"Grant permissions to use Voice Control\", { id: this.IDS.LISTENER, autoClose: false, actions: { Retry: req!, Cancel: () => res(false) } }), ++i > 3 && res(false))), Cancel: () => res(false), }, }))())); // going the extra mile mustn't take a mile of logic even when 3rd time's the charm\n }\n public async start(): Promise<void> {\n const granted = await this.askPermission();\n granted && !this.state.listening && this.config.behavior.value === \"persistent\" && this.ctlr.plug(\"settings.toasts\")?.toast?.(this.getListenerSpeech(), this.getListenerOptions());\n try {\n this.recognition?.start();\n } catch (e) {} // Silently swallows the InvalidStateError since we might call when already on due to wake word\n }\n public stop(): void {\n this.sleep(), this.recognition?.abort();\n }\n public wakeUp(): void {\n if (this.config.active.value !== true) return void (this.config.active.value = true);\n if (this.state.listening) return;\n this.state.listening = true;\n this.resetContext();\n this.teachBasics(), this.ctlr.plug(\"settings.toasts\")?.toast?.(this.getListenerSpeech(false), this.getListenerOptions());\n this.ctlr.debounce(\"voiceSleeping\", this.sleep, this.config.timeout, false);\n }\n public sleep(): void {\n if (this.config.active.value === false) return;\n if (this.config.active.value !== \"passive\") return void (this.config.active.value = this.config.wakeWord ? \"passive\" : false);\n this.state.listening = false;\n this.resetContext();\n t007.toast?.dismiss(this.IDS.PREDICTOR), !this.config.active.value || this.config.behavior.value !== \"persistent\" ? t007.toast?.dismiss(this.IDS.LISTENER) : this.ctlr.plug(\"settings.toasts\")?.toast?.(this.getListenerSpeech(), this.getListenerOptions(true));\n }\n\n protected dispatchActions(stage: VoiceStage, cleaned: string): boolean {\n const acc = this.config.inputs.accuracy;\n for (const action of Object.values(this.ctlr.actions)) {\n const triggers = this.config.commands[action.id];\n if (action.id !== \"voiceToggleOn\" && action.id !== \"voiceToggleOff\" && (action.voice?.stage ?? \"post-route\") === stage && triggers?.length && match(triggers, cleaned, acc)) return this.ctlr.runAction(action.id), this.ctlr.plug(\"settings.toasts\")?.toast?.success(`Executed <i>${action.label || action.id}</i>`, { id: this.IDS.LISTENER, autoClose: this.config.behavior.value !== \"persistent\" }), true;\n }\n return false;\n }\n protected process(transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), isSubmit = false, dormant = !this.state.listening): void {\n if ((!this.config.commandsDisabled && this.dispatchActions(\"anytime\", cleaned)) || dormant) return;\n // --- 1. PRE-ROUTE STAGE ---\n if (!this.config.commandsDisabled && this.dispatchActions(\"pre-route\", cleaned)) return;\n // --- 2. LEAF EXECUTION ---\n if (this.isLeaf(this.state.context)) return this.execute(this.state.context, transcript, cleaned, false);\n // --- 3. PATH EXTRACTION (PRIORITY) ---\n const paths = this.getValidPaths();\n let matched: string | null = null,\n highest = 0;\n if (paths.length)\n for (let i = 0; i < paths.length; i++) {\n const leaf = paths[i].split(\".\").pop()!.toLowerCase();\n if (cleaned === leaf) {\n matched = paths[i];\n break;\n }\n const score = getSimilarity(leaf, cleaned);\n if (score > this.config.inputs.accuracy && score > highest) (highest = score), (matched = paths[i]);\n } // Fuzzy Match: Check if the user said the last word of any valid path\n if (matched) return void ((this.state.context = matched), this.isLeaf(matched) && this.execute(matched, transcript, cleaned, true)); // If a S.I.A path strongly matches what they said, TAKE IT. Bypasses commands completely.\n else if (isSubmit) {\n const path = this.state.context === \"*\" ? transcript : `${this.state.context}.${transcript}`,\n val = this.ctlr.isLogicPath(path) ? getPath(this.root as any, path) : undefined;\n if (val !== undefined) return void ((this.state.context = path), this.isLeaf(path, val) && this.execute(path, transcript, cleaned, true)); // Hey dev or explorer, here u go!\n }\n if (paths.length) {\n const pathInput = this.ctlr.plug(\"settings.toasts\")?.container?.querySelector<HTMLInputElement>(\".tmg-media-voice-path-input\");\n if (pathInput) pathInput.value = transcript.trim();\n }\n // --- 4. POST-ROUTE STAGE ---\n if (!this.config.commandsDisabled) this.dispatchActions(\"post-route\", cleaned);\n }\n protected predict(): void {\n const crumbHtml = this.history.length < 2 ? \"\" : `<div class=\"tmg-media-voice-sticky-crumb\">` + this.history.map((p, idx, _, active = idx === this.historyIdx) => `<small><i style=\"${active ? \"font-weight: bold;\" : \"opacity: 0.8;\"}\">${this.linked(p === \"*\" ? \"Root\" : capitalize(p.split(\".\").pop()!), p, true)}</i></small>`).join(\" <span style='opacity: 0.4;'><small>></small></span> \") + `</div>`,\n actions: Record<string, () => void> = {};\n if (this.history.length > 1) actions[\"↻\"] = () => this.resetContext(false);\n if (this.historyIdx > 0) actions[\"‹\"] = this.goBack;\n if (this.historyIdx < this.history.length - 1) actions[\"›\"] = this.goForward;\n if (this.isLeaf(this.state.context)) {\n const value = getPath(this.root as any, this.state.context as any),\n isArray = Array.isArray(value),\n type = isArray ? \"array\" : typeof value,\n showInput = this.config.inputs.strict.value === true || (this.config.inputs.strict.value === \"auto\" && type !== \"boolean\"),\n showSubmit = this.config.inputs.strict.value === true || (this.config.inputs.strict.value === \"auto\" && type === \"string\"),\n display = isArray ? value.join(\", \") : value ?? \"\",\n inputHtml = showInput ? `<div class=\"tmg-media-voice-input-wrap\")><input type=\"${type === \"number\" ? \"number\" : \"text\"}\" class=\"tmg-media-voice-exact-input\") placeholder=\"${display || \"Type value...\"}\" value=\"${display}\"/>${showSubmit ? `<button type=\"button\" class=\"tmg-media-voice-exact-submit\")>↳</button>` : \"\"}</div>` : \"\",\n // prettier-ignore\n hints = type === \"boolean\" ? `${this.config.commands.voiceToggleOn?.slice(0, 2).map((v) => this.linked(v)).join(\", \")} or ${this.config.commands.voiceToggleOff?.slice(0, 2).map((v) => this.linked(v)).join(\", \")} ${inputHtml}` : type === \"number\" ? `a number (like ${this.linked(\"0\")}, ${this.linked(\"50\")}) ${inputHtml}` : isArray ? `comma-separated values ${inputHtml}` : `the exact text ${inputHtml}`;\n return void this.ctlr.plug(\"settings.toasts\")?.toast?.(`${crumbHtml}Try saying ${hints}`, this.getPredictorOptions(actions));\n }\n const paths = this.getValidPaths();\n if (!paths.length) return;\n const inputHtml = `<input type=\"text\" class=\"tmg-media-voice-path-input\") placeholder=\"...text\"/>`;\n this.ctlr.plug(\"settings.toasts\")?.toast?.(`${crumbHtml}Try these:<br>${inputHtml} • ${paths.map((p) => this.linked(p.split(\".\").pop()!)).join(\" • \")}`, this.getPredictorOptions(actions));\n }\n protected execute(path: string, transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), isNav = false, isSubmit = false): void {\n const value = this.parse(transcript, cleaned, path, isNav);\n if (value === null) return;\n const strict = this.config.inputs.strict.value === true || (this.config.inputs.strict.value === \"auto\" && typeof value === \"string\");\n if (strict && !isSubmit) {\n const input = this.ctlr.plug(\"settings.toasts\")?.container?.querySelector<HTMLInputElement>(clame(\"exact-input\"));\n if (input) input.value = Array.isArray(value) ? value.join(\", \") : String(value);\n return void this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { render: transcript || String(value) });\n } // Auto-Strict: Blocks execution for strings only (or everything if true)\n setPath(this.root as any, path as any, value), this.ctlr.plug(\"settings.toasts\")?.toast?.success(`Set <i>${path.split(\".\").join(\" > \")}</i> to ${Array.isArray(value) ? `[${value.join(\", \")}]` : value}`, { id: this.IDS.LISTENER, autoClose: this.config.behavior.value !== \"persistent\" }), this.goBack();\n }\n protected parse(transcript: string, cleaned = transcript.replace(/[-\\s]/g, \"\"), path: string, isNav = false): any {\n const val = getPath(this.root as any, path as any),\n type = typeof val;\n if (type === \"boolean\") {\n if (isNav && this.config.autoToggles) return !val;\n return match(this.config.commands.voiceToggleOn, transcript, this.config.inputs.accuracy) ? true : match(this.config.commands.voiceToggleOff, transcript, this.config.inputs.accuracy) ? false : null;\n }\n if (type === \"number\") {\n const match = transcript.match(/-?\\d+(\\.\\d+)?/);\n return match ? Number(match[0]) : null;\n }\n if (Array.isArray(val) || type === \"string\") {\n const leaf = path.split(\".\").pop()!.toLowerCase(),\n rgx = new RegExp(`^(set|change)\\\\s+${leaf}\\\\s+to\\\\s+`, \"i\"),\n val = transcript.replace(rgx, \"\").trim();\n if (isNav && !rgx.test(transcript)) if (cleaned === leaf || getSimilarity(leaf, cleaned) > this.config.inputs.accuracy) return null;\n return val ? (type === \"string\" ? val : val.split(/\\s*(?:,|and)\\s*/i).filter(Boolean)) : null;\n }\n return null;\n }\n\n protected history: string[] = [\"*\"];\n protected historyIdx: number = 0;\n protected resetContext(direct = this.config.inputs.direct): void {\n if (direct) (this.history = [\"*\", \"media\", \"media.intent\"]), (this.historyIdx = 2), force(() => (this.state.context = \"media.intent\"));\n else (this.history = [\"*\"]), (this.historyIdx = 0), force(() => (this.state.context = \"*\"));\n }\n protected onContext(value: string): void {\n if (this.history[this.historyIdx] !== this.state.context) {\n const idx = this.history.indexOf(this.state.context);\n if (idx !== -1) this.historyIdx = idx;\n else (this.history = this.history.slice(0, this.historyIdx + 1)), this.history.push(value), (this.historyIdx = this.history.length - 1);\n }\n this.state.listening && this.predict(); // The single source of truth for rendering the UI\n }\n protected goBack(): void {\n if (this.historyIdx > 0) this.state.context = this.history[--this.historyIdx];\n }\n protected goForward(): void {\n if (this.historyIdx < this.history.length - 1) this.state.context = this.history[++this.historyIdx];\n }\n protected goTo(path: string): void {\n this.state.context = path;\n }\n\n protected linked(text: string, value = text.toLowerCase(), isGoto = false): string {\n return `<u class=\"tmg-media-voice-link\" ${isGoto ? \"data-goto\" : \"data-cmd\"}=\"${value}\" tabindex=\"0\" style=\"cursor:pointer; text-decoration-color: currentColor;\">${text}</u>`;\n }\n protected handleLinkClick(e: MouseEvent, target = e.target as HTMLElement): void {\n if (!target.matches(clame(\"link\"))) return;\n e.preventDefault(), e.stopPropagation();\n if (target.dataset.goto) return this.goTo(target.dataset.goto);\n const cmd = target.dataset.cmd!;\n this.ctlr.plug(\"settings.toasts\")?.toast?.(cmd, { id: this.IDS.LISTENER }); // Instantly update the listener toast to show they \"clicked/said\" it\n cmd === this.config.wakeWord.toLowerCase() ? this.wakeUp() : this.process(cmd); // Pipe it straight into the process engine as if they spoke it!\n }\n protected handleInputEvent(e: Event, target = e.target as HTMLElement, isEnter = e.type === \"keydown\" && (e as KeyboardEvent).key === \"Enter\", isClick = e.type === \"click\"): void {\n this.stayWoke(e);\n if ((isEnter && target.matches(clame(\"exact-input\"))) || (isClick && target.matches(clame(\"exact-submit\")))) e.preventDefault(), e.stopPropagation(), this.submit(target.closest(clame(\"input-wrap\"))?.querySelector<HTMLInputElement>(clame(\"exact-input\")));\n else if (isEnter && target.matches(clame(\"path-input\"))) e.preventDefault(), e.stopPropagation(), this.submit(target as HTMLInputElement, undefined, true);\n }\n protected submit(input = this.ctlr.plug(\"settings.toasts\")?.container?.querySelector<HTMLInputElement>(clame(\"exact-input\")), render = input?.value.trim(), process = false): void {\n if (input && render) this.ctlr.plug(\"settings.toasts\")?.toast?.update(this.IDS.LISTENER, { render: render, type: undefined }), !process ? this.execute(this.state.context, render, undefined, false, true) : this.process(render, undefined, true); // Execute with isSubmit = true\n }\n protected stayWoke(e: Event): void {\n this.state.listening && (e.target as HTMLElement).closest(`:is([id=\"${this.IDS.PREDICTOR}\"],[id=\"${this.IDS.LISTENER}\"])`) && this.ctlr.debounce(\"voiceSleeping\", this.sleep, this.config.timeout, false);\n }\n\n protected isLeaf(path: string, val = path !== \"*\" && getPath(this.root as any, path as any)): boolean {\n return (val && Array.isArray(val)) || isLeafPath(this.root as any, path as any, undefined, val);\n }\n protected getValidPaths(): string[] {\n return getPaths(this.root as any, this.state.context as any, { depth: 1 })\n .filter(this.ctlr.isLogicPath)\n .sort((a, b) => a.localeCompare(b));\n }\n protected getListenerOptions(transient = false): ToastOptions {\n const actions: Record<string, () => void> = { [this.state.muted ? \"⏵\" : \"⏸\"]: () => (this.state.muted = !this.state.muted) };\n return { id: this.IDS.LISTENER, icon: \"🎙️\", position: this.state.listening ? this.config.listenerPos.value : this.config.predictorPos.value, autoClose: transient ? this.config.behavior.value !== \"persistent\" : false, closeButton: true, dragToClose: false, actions, onClose: (elapsed?: boolean) => !elapsed && (this.config.active.value = false), type: undefined, signal: this.signal };\n }\n protected getPredictorOptions(actions: ToastOptions[\"actions\"]): ToastOptions {\n return { id: this.IDS.PREDICTOR, icon: \"✨\", position: this.config.predictorPos.value, autoClose: false, closeButton: true, dragToClose: false, animation: \"fade\", actions, onClose: (elapsed) => !elapsed && this.sleep(), signal: this.signal };\n }\n protected getListenerSpeech(full = true, firstHalf = \"Listening...\", secondHalf = `Say \"${this.linked(this.config.wakeWord)}\" to wake me up!`, first = true): string {\n return full ? `${firstHalf} ${secondHalf}` : first ? firstHalf : secondHalf;\n }\n\n public override onDestroy(): void {\n this.stop(), super.onDestroy();\n }\n}\nconst clame = (suffix: string) => `.tmg-media-voice-${suffix}`;\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.voice\": typeof VoicePlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n voice: VoiceConfig;\n }\n}\n\ndeclare module \"@defs/contract\" {\n interface MediaExtraFeatures {\n voice: boolean;\n }\n}\n","import { VolumeConfig } from \"./types\";\r\n\r\nexport const VOLUME_BUILD: Partial<VolumeConfig> = {\r\n min: 0,\r\n max: 300,\r\n skip: 5,\r\n};\r\n","import { BaseSliderPlug } from \"@plugs/base/slider\";\nimport type { VolumeConfig, VolumeState } from \"./types\";\nimport { VOLUME_BUILD } from \"./build\";\nimport type { Controller } from \"@core/controller\";\nimport { REvent, TERMINATOR } from \"sia-reactor\";\nimport type { CtlrMedia } from \"@defs/contract\";\nimport { clamp } from \"@utils/num\";\nimport { AUDIO_CONTEXT, connectMediaToAudioManager } from \"@tools/runtime\";\n\nexport class VolumePlug extends BaseSliderPlug<VolumeConfig, VolumeState> {\n public static readonly plugName = \"volume\";\n public static readonly BUILD = VOLUME_BUILD;\n protected shadowVolume?: number;\n protected audioSetup = false;\n protected gainNode?: GainNode | null;\n protected get ctime(): number {\n return AUDIO_CONTEXT?.currentTime ?? 0;\n }\n protected get toggleKey() {\n return \"muted\" as const;\n }\n\n constructor(ctlr: Controller, config = ctlr.settings.volume) {\n super(ctlr, config, { aptValue: 0 });\n this.sliderAptValue = 5;\n }\n\n public override mount(): void {\n this.ctlr.state.audioContextReady ? this.connectAudio() : this.ctlr.state.once(\"audioContextReady\", this.connectAudio, { signal: this.signal });\n }\n\n public override wire(): void {\n // Variables Assignment\n const volume = this.media.intent.volume ?? this.media.state.volume;\n this.state.aptValue = clamp(this.config.min, volume, this.config.max);\n this.shouldToggle = this.shouldSetAptValue = this.media.state.muted ?? false;\n this.media.intent.volume = this.shouldToggle ? 0 : this.state.aptValue;\n // Event Listeners\n this.media.element.addEventListener(\"volumechange\", this.handleNativeVolumeChange, { capture: true, signal: this.signal }), this.handleNativeVolumeChange();\n // Ctlr Media Setters\n this.media.set(\"intent.volume\", (v) => clamp(this.shouldToggle ? 0 : this.config.min, v, this.config.max), { signal: this.signal }); // #VALIDATOR: rules enforcement\n this.media.set(\"state.volume\", (v) => (this.ctlr.isNativeEl && v !== this.shadowVolume ? TERMINATOR : v), { signal: this.signal }); // #DICTATOR: reliable authority\n // ----------- Watchers\n this.media.watch(\"tech\", () => ((this.media.features.volume ||= this.ctlr.isNativeEl), (this.media.features.muted ||= this.ctlr.isNativeEl), (this.media.features.volumeBoost ||= this.ctlr.isNativeEl)), { init: true, signal: this.signal });\n // ----------- Listeners\n this.media.on(\"intent.volume\", this.handleVolumeIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"intent.muted\", this.handleMutedIntent, { capture: true, init: this.ctlr.payload.wired, initType: \"set\", signal: this.signal }); // #HIGHER-POWER: power arbitration\n this.media.on(\"state.volume\", (e) => this.handleSliderState(e.value), { init: this.ctlr.payload.wired, signal: this.signal });\n // ---- Config ---------\n this.ctlr.config.on(\"settings.volume.min\", (e) => this.handleMin(e.value), { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.volume.max\", (e) => this.handleMax(e.value), { init: true, signal: this.signal });\n // Post Wiring\n this.ctlr.registerAction(\"mute\", { fn: this.handleKeyMute, keyboard: { phase: \"keyup\" } });\n this.ctlr.registerAction(\"volumeUp\", { fn: this.handleKeyVolumeUp, keyboard: { phase: \"keydown\" } });\n this.ctlr.registerAction(\"volumeDown\", { fn: this.handleKeyVolumeDown, keyboard: { phase: \"keydown\" } });\n super.wire();\n }\n\n protected handleVolumeIntent(e: REvent<CtlrMedia, \"intent.volume\">, isNext = this.nextLevel === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextLevel = null;\n this.setValueState(e.value, isNext);\n this.ctlr.isNativeEl && this.gainNode?.gain.setTargetAtTime((e.value / 100) * 2, this.ctime, 0.05);\n if (!isNext && e.value > 0) this.media.settings.defaultMuted = false; // youtube courtesy\n if (this.ctlr.isNativeEl) this.media.state.volume = this.shadowVolume = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleMutedIntent(e: REvent<CtlrMedia, \"intent.muted\">, isNext = this.nextToggle === e.value): void {\n if (e.resolved) return;\n if (isNext) this.nextToggle = null;\n else if (this.media.state.muted === e.value && !!this.media.state.volume) return e.resolve(this.name);\n this.setToggleState(e.value, isNext);\n this.media.state.muted = e.value;\n // e.resolve(this.name); // #UMBRELLA: must envelope logic\n }\n\n protected handleKeyMute = (): void => {\n this.toggle(\"auto\");\n this.media.features.volume && this.media.wonce(\"state.volume\", (v) => this.ctlr.plug(\"settings.notifiers\")?.notify(!v ? \"volumemuted\" : \"volumeup\"), { signal: this.signal });\n };\n protected handleKeyVolumeUp = (): void => {\n this.changeAptValue(this.ctlr.plug(\"settings.keys\")?.getModded(\"volume\", \"\", this.config.skip) ?? this.config.skip);\n };\n protected handleKeyVolumeDown = (): void => {\n this.changeAptValue(-(this.ctlr.plug(\"settings.keys\")?.getModded(\"volume\", \"\", this.config.skip) ?? this.config.skip));\n };\n\n protected handleNativeVolumeChange = (): void => {\n (this.media.element.volume = 1), this.ctlr.isNativeEl && this.media.state.muted !== this.media.element.muted && this.toggle(); // even advanced systems have edge cases\n };\n\n protected connectAudio(): void {\n if (this.audioSetup || connectMediaToAudioManager(this.media.element) === \"unavailable\") return;\n this.gainNode = this.media.element._tmgGainNode;\n const DCN = this.media.element._tmgDynamicsCompressorNode;\n if (DCN) (DCN.threshold.value = -30), (DCN.knee.value = 20), (DCN.ratio.value = 12), (DCN.attack.value = 0.003), (DCN.release.value = 0.25);\n this.audioSetup = true;\n if (this.ctlr.isNativeEl) this.gainNode?.gain.setTargetAtTime((this.media.state.volume / 100) * 2, this.ctime, 0.05);\n }\n protected disconnectAudio(): void {\n this.media.element.volume = clamp(0, ((this.gainNode?.gain?.value ?? 2) / 2) * 100, 1);\n this.media.element.mediaElementSourceNode?.disconnect(), this.gainNode?.disconnect();\n this.audioSetup = false;\n }\n\n protected override onDestroy(): void {\n this.disconnectAudio(), super.onDestroy();\n }\n}\n\nexport type * from \"./types\";\nexport * from \"./build\";\n\ndeclare module \"@defs/registries\" {\n interface PlugRegistryMap {\n \"settings.volume\": typeof VolumePlug;\n }\n}\n\ndeclare module \"@defs/config\" {\n interface Settings {\n volume: VolumeConfig;\n }\n}\n\ndeclare module \"@defs/contract\" {\n interface MediaExtraFeatures {\n volumeBoost?: boolean;\n }\n}\n","export * from \"@components/base\";\nexport * from \"@components/rangeinput\";\nexport * from \"@components/buffer\";\nexport * from \"@components/captionsview\";\nexport * from \"@components/screenlock\";\nexport * from \"@components/controls/brightness\";\nexport * from \"@components/controls/timeline\";\nexport * from \"@components/controls/volume\";\nexport * from \"@components/controls/airplay\";\nexport * from \"@components/controls/backward10\";\nexport * from \"@components/controls/bignext\";\nexport * from \"@components/controls/bigplaypause\";\nexport * from \"@components/controls/bigprev\";\nexport * from \"@components/controls/captions\";\nexport * from \"@components/controls/capture\";\nexport * from \"@components/controls/cast\";\nexport * from \"@components/controls/chapter\";\nexport * from \"@components/controls/duration\";\nexport * from \"@components/controls/expandminiplayer\";\nexport * from \"@components/controls/forward10\";\nexport * from \"@components/controls/fullscreen\";\nexport * from \"@components/controls/fullscreenlock\";\nexport * from \"@components/controls/fullscreenorientation\";\nexport * from \"@components/controls/meta\";\nexport * from \"@components/controls/next\";\nexport * from \"@components/controls/objectfit\";\nexport * from \"@components/controls/pictureinpicture\";\nexport * from \"@components/controls/playpause\";\nexport * from \"@components/controls/prev\";\nexport * from \"@components/controls/removeminiplayer\";\nexport * from \"@components/controls/settings\";\nexport * from \"@components/controls/theater\";\nexport * from \"@components/controls/time\";\nexport * from \"@components/controls/timeandduration\";\nexport * from \"@components/holders/airplayplaceholder\";\nexport * from \"@components/holders/castplaceholder\";\nexport * from \"@components/holders/pipplaceholder\";\nimport \"../../components/z-register\";\n\nexport * from \"./notifiers\";\nexport * from \"./icons\";\n","import type { RangeInputConfig } from \"./types\";\r\n\r\nexport const RANGE_INPUT_BUILD: RangeInputConfig = {\r\n label: \"Range Slider\",\r\n min: 0,\r\n max: 100,\r\n value: 0,\r\n previewValue: 50,\r\n step: 1,\r\n scrub: {\r\n sync: true,\r\n relative: true,\r\n cancel: {\r\n delta: 5,\r\n timeout: 1500,\r\n },\r\n },\r\n wheel: {\r\n disabled: false,\r\n axisRatio: 6,\r\n },\r\n preview: true,\r\n tooltip: true,\r\n readonly: false,\r\n disabled: false,\r\n divs: [],\r\n marks: [],\r\n};\r\n","import { BaseComponent } from \"../base\";\r\nimport { RangeInputChunk, RangeInputConfig, RangeState } from \"./types\";\r\nimport { RANGE_INPUT_BUILD } from \"./build\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport { reactive, type Reactive } from \"sia-reactor\";\r\nimport { mergeObjs } from \"sia-reactor/utils\";\r\nimport { createEl, getWindow, observeResize } from \"@utils/dom\";\r\nimport { clamp, stepNum } from \"@utils/num\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { startTx, endTx, Transaction } from \"sia-reactor/modules\";\r\n\r\nexport class RangeInput<Config extends RangeInputConfig = RangeInputConfig, State extends RangeState = RangeState> extends BaseComponent<Reactive<Config>, State, HTMLDivElement> {\r\n public declare config: Reactive<Config> & Reactive<RangeInputConfig>;\r\n public static readonly componentName: string = \"rangeinput\";\r\n public barsWrapper!: HTMLElement;\r\n public marksWrapper!: HTMLElement;\r\n public chunks: RangeInputChunk[] = [];\r\n public thumbEl!: HTMLElement;\r\n public tooltipEl!: HTMLElement;\r\n public isVertical = false;\r\n public isRTL = false;\r\n protected rect!: DOMRect;\r\n protected lastPtrPos = 0;\r\n protected lastThumbPos = 0;\r\n protected currentThumbPos = 0;\r\n protected stallCancelScrub = false;\r\n protected cancelScrubTimeoutId: number | null = null;\r\n protected tx: Transaction | null = null;\r\n\r\n constructor(ctlr: Controller, config?: Partial<Config>, state?: Partial<State>) {\r\n super(ctlr, reactive(mergeObjs(structuredClone(RANGE_INPUT_BUILD), config) as unknown as Reactive<Config>, { scrubbing: false, previewing: false, cancelScrub: false, ...state } as any));\r\n }\r\n\r\n public override create() {\r\n // Variables Assignments\r\n this.element = createEl(\"div\", { className: \"tmg-media-range-container\", tabIndex: 0, role: \"slider\" });\r\n this.barsWrapper = createEl(\"div\", { className: \"tmg-media-range-bars-wrapper\" });\r\n this.marksWrapper = createEl(\"div\", { className: \"tmg-media-range-marks-wrapper\" });\r\n this.thumbEl = createEl(\"div\", { className: \"tmg-media-range-thumb\" });\r\n this.tooltipEl = createEl(\"div\", { className: \"tmg-media-range-tooltip\" });\r\n // DOM Injection\r\n return this.el.append(this.barsWrapper, this.marksWrapper, this.thumbEl, this.tooltipEl), this.el;\r\n }\r\n\r\n public override wire(): void {\r\n // Variables Asignments\r\n this.rect = this.el.getBoundingClientRect();\r\n // Event Listeners\r\n this.el.addEventListener(\"pointerdown\", this.handlePointerDown, { signal: this.signal });\r\n this.el.addEventListener(\"keydown\", this.handleKeyDown, { signal: this.signal });\r\n this.el.addEventListener(\"wheel\", this.handleWheel, { passive: false, signal: this.signal });\r\n this.el.addEventListener(\"mouseover\", () => (this.rect = this.el.getBoundingClientRect()), { signal: this.signal });\r\n this.el.addEventListener(\"mousemove\", this.handleInput, { signal: this.signal });\r\n for (const e of [\"mouseleave\", \"touchend\", \"touchcancel\"]) this.el.addEventListener(e, this.stopPreviewing, { signal: this.signal });\r\n // State Watchers\r\n this.state.watch(\"scrubbing\", (value) => (value ? (this.tx = startTx(`${this.config.label} Scrub`)) : this.tx && this.config.stall(() => (endTx(this.tx!), (this.tx = null)))), { signal: this.signal });\r\n // ----- Listeners\r\n this.state.on(\"previewing\", ({ value }) => this.el.classList.toggle(\"tmg-media-control-previewing\", !!value), { signal: this.signal });\r\n this.state.on(\"scrubbing\", ({ value }) => this.el.classList.toggle(\"tmg-media-control-scrubbing\", !!value), { signal: this.signal });\r\n this.state.on(\"cancelScrub\", ({ value }) => this.el.classList.toggle(\"tmg-media-control-cancel-scrub\", !!value), { signal: this.signal });\r\n // Config Setters\r\n this.config.set(\"value\", (value) => stepNum(value, this.config), { signal: this.signal });\r\n // ------ Listeners\r\n this.config.on(\"label\", ({ value }) => (this.el.ariaLabel = value!), { init: true, signal: this.signal });\r\n this.config.on(\"min\", ({ value }) => (this.el.ariaValueMin = String(value!)), { init: true, signal: this.signal });\r\n this.config.on(\"max\", ({ value }) => (this.el.ariaValueMax = String(value!)), { init: true, signal: this.signal });\r\n this.config.watch(\"value\", this.onValue, { init: true, signal: this.signal }); // #SYNC: near native speed\r\n this.config.watch(\"previewValue\", this.onPreviewValue, { init: true, signal: this.signal }); // #SYNC: near native speed\r\n this.config.on(\"tooltip\", ({ value }) => this.el.toggleAttribute(\"data-tooltip\", !!value), { init: true, signal: this.signal });\r\n this.config.on(\"readonly\", ({ value }) => this.el.toggleAttribute(\"readonly\", !!value), { init: true, signal: this.signal });\r\n this.config.on(\"disabled\", ({ value }) => this.el.toggleAttribute(\"disabled\", !!value), { init: true, signal: this.signal });\r\n this.config.on(\"divs\", ({ currentTarget: { value } }) => this.syncDivs(value), { init: true, signal: this.signal });\r\n this.config.on(\"marks\", ({ currentTarget: { value } }) => this.syncMarks(value), { init: true, signal: this.signal });\r\n // Post Wiring\r\n observeResize(this.el, () => this.ctlr.throttle(`${this.config.label}Resizing`, this.handleResize, 30, false), this.signal);\r\n }\r\n protected scrub(value: number, bypass = false): boolean {\r\n return this.canScrub ? (!bypass ? (this.config.value = value) : this.onValue(value), true) : false;\r\n }\r\n public get canScrub(): boolean {\r\n return !this.config.readonly && !this.config.disabled;\r\n }\r\n\r\n protected onValue(value: number): void {\r\n this.syncElPos(this.thumbEl, this.getValuePos(value), false, \"auto\"), this.syncChunks(\"value\", value);\r\n if (!this.state.scrubbing) this.el.ariaValueNow = String(value);\r\n }\r\n protected onPreviewValue(value: number): void {\r\n this.syncChunks(\"preview\", value), this.config.tooltip && (this.syncElPos(this.tooltipEl, this.getValuePos(value), false, !(this.state.previewing && !this.state.scrubbing) ? \"auto\" : false, this.thumbEl), (this.tooltipEl.innerHTML = (this.config.formatTooltip ? String(this.config.formatTooltip(value)) : `${Math.round(value)}`) + ` ${this.getValueChunk(value)?.label || \"\"}`.trim()));\r\n }\r\n\r\n protected handlePointerDown(e: PointerEvent): void {\r\n if (this.state.scrubbing || this.config.readonly || this.config.disabled) return;\r\n this.state.scrubbing = true;\r\n this.el.setPointerCapture(e.pointerId);\r\n const s = getWindow(this.el).getComputedStyle(this.el);\r\n (this.isVertical = s.writingMode.includes(\"vertical\")), (this.isRTL = s.direction === \"rtl\");\r\n (this.rect = this.el.getBoundingClientRect()), (this.lastPtrPos = this.getPos(e)), (this.lastThumbPos = this.currentThumbPos = this.getValuePos());\r\n getWindow(this.el).addEventListener(\"pointermove\", this.handleInput, { signal: this.signal }), this.handleInput(e);\r\n getWindow(this.el).addEventListener(\"pointerup\", this.stopScrubbing, { signal: this.signal }), getWindow(this.el).addEventListener(\"pointercancel\", this.stopScrubbing, { signal: this.signal });\r\n }\r\n\r\n protected stopScrubbing(): void {\r\n if (!this.state.scrubbing) return;\r\n this.state.scrubbing = this.state.previewing = false;\r\n this.ctlr.cancelRAFLoop(`${this.config.label}Inputing`);\r\n this.scrub(this.getPosValue(this.state.cancelScrub ? this.lastThumbPos : this.currentThumbPos), this.state.cancelScrub);\r\n this.allowScrubbing(), this.stopPreviewing();\r\n this.stallCancelScrub = true;\r\n getWindow(this.el).removeEventListener(\"pointermove\", this.handleInput);\r\n getWindow(this.el).removeEventListener(\"pointerup\", this.stopScrubbing), getWindow(this.el).removeEventListener(\"pointercancel\", this.stopScrubbing);\r\n }\r\n protected stopPreviewing(): void {\r\n if (!this.state.previewing) return;\r\n this.state.previewing = false;\r\n !this.state.scrubbing && this.ctlr.cancelRAFLoop(`${this.config.label}Inputing`);\r\n }\r\n\r\n protected cancelScrubbing(): void {\r\n if (this.stallCancelScrub || this.state.cancelScrub || this.cancelScrubTimeoutId) return;\r\n this.state.cancelScrub = true;\r\n this.cancelScrubTimeoutId = setTimeout(() => this.allowScrubbing(false), this.config.scrub.cancel.timeout, this.signal);\r\n }\r\n protected allowScrubbing(reset = true): void {\r\n this.stallCancelScrub = this.state.cancelScrub = false;\r\n clearTimeout(this.cancelScrubTimeoutId!);\r\n if (reset) this.cancelScrubTimeoutId = null;\r\n }\r\n\r\n protected handleInput(e: MouseEvent | PointerEvent): void {\r\n if (this.config.readonly || this.config.disabled) return;\r\n this.ctlr.RAFLoop(`${this.config.label}Inputing`, () => {\r\n if (this.prevEX === e.clientX && this.prevEY === e.clientY) return; // #CONSERVATION: peak stays peak\r\n (this.prevEX = e.clientX), (this.prevEY = e.clientY);\r\n this.state.previewing ||= true;\r\n const dimension = this.isVertical ? this.rect.height : this.rect.width,\r\n progress = this.getPos(e),\r\n pos = (this.currentThumbPos = clamp(0, !this.state.scrubbing || this.config.scrub.relative ? progress : this.lastThumbPos + progress - this.lastPtrPos, 1)),\r\n value = this.getPosValue(pos);\r\n this.config.previewValue = value;\r\n if (this.state.scrubbing) {\r\n !this.config.scrub.sync ? this.syncElPos(this.thumbEl, pos, false, \"auto\") : this.scrub(value);\r\n Math.abs(pos - this.lastThumbPos) < this.config.scrub.cancel.delta / dimension ? this.cancelScrubbing() : this.allowScrubbing();\r\n }\r\n this.onInput(e, pos);\r\n });\r\n }\r\n private prevEX?: number;\r\n private prevEY?: number;\r\n protected onInput(_e: MouseEvent | PointerEvent, _pos: number): void {} // override to safely add preview logic (timeline preview image, etc.)\r\n\r\n protected handleWheel(e: WheelEvent): void {\r\n if (this.config.wheel.disabled) return;\r\n e.preventDefault(), e.stopImmediatePropagation();\r\n const dimension = this.isVertical ? getWindow(this.el).innerHeight : getWindow(this.el).innerWidth,\r\n pos = clamp(0, Math.abs(-e.deltaY), dimension * this.config.wheel.axisRatio) / (dimension * this.config.wheel.axisRatio),\r\n value = this.config.value + (-e.deltaY >= 0 ? pos : -pos) * (this.config.max - this.config.min);\r\n this.scrub(value);\r\n }\r\n protected handleKeyDown(e: KeyboardEvent): void {\r\n const key = e.key?.toLowerCase();\r\n if ([\"arrowleft\", \"arrowdown\", \"arrowright\", \"arrowup\"].includes(key)) {\r\n e.preventDefault(), e.stopImmediatePropagation();\r\n const delta = e.shiftKey ? 2 : 1,\r\n direction = [\"arrowleft\", \"arrowdown\"].includes(key) ? -1 : 1;\r\n this.scrub(this.config.value + direction * delta * this.config.step);\r\n }\r\n }\r\n\r\n protected handleResize(): void {\r\n this.rect = this.el.getBoundingClientRect();\r\n const pos = this.getValuePos();\r\n this.syncElPos(this.thumbEl, pos, false, \"auto\"), this.syncChunks(\"value\", this.config.value), this.config.tooltip && this.syncElPos(this.tooltipEl, pos, false, \"auto\", this.thumbEl);\r\n }\r\n\r\n protected getValuePos(value = this.config.value, range = this.config.max - this.config.min): number {\r\n return range ? (value - this.config.min) / range : 0;\r\n }\r\n protected getPosValue(pos: number): number {\r\n return pos * (this.config.max - this.config.min) + this.config.min;\r\n }\r\n protected getValueChunk(value = this.config.value): RangeInputChunk | undefined {\r\n for (let i = 0, len = this.chunks.length; i < len; i++) {\r\n const c = this.chunks[i];\r\n if (value >= c.start && value <= c.end) return c;\r\n }\r\n }\r\n protected getPos(e: MouseEvent | PointerEvent): number {\r\n const p = this.isVertical ? (e.clientY - this.rect.top) / this.rect.height : (e.clientX - this.rect.left) / this.rect.width;\r\n return clamp(0, this.isRTL ? 1 - p : p, 1);\r\n }\r\n\r\n public syncElPos(el: HTMLElement, pos: number, isSize = false, inBounds: boolean | \"auto\" = false, bounds = el): void {\r\n const dim = this.isVertical ? this.rect?.height : this.rect?.width,\r\n min = inBounds && dim ? (this.isVertical ? bounds.offsetHeight : bounds.offsetWidth) / 2 / dim : 0;\r\n pos = inBounds === \"auto\" ? min + pos * (1 - min * 2) : pos;\r\n const value = pos || (!isSize && pos === 0) ? `${clamp(min, pos, 1 - min) * 100}%` : \"\"; // onresize still for pixel accuracy, debounce won't stutter due to '%'\r\n if (isSize) this.isVertical ? ((el.style.blockSize = value), (el.style.inlineSize = \"\")) : ((el.style.inlineSize = value), (el.style.blockSize = \"\"));\r\n else this.isVertical ? ((el.style.insetBlockEnd = value), (el.style.insetInlineStart = \"\")) : ((el.style.insetInlineStart = value), (el.style.insetBlockEnd = \"\"));\r\n // el.style.transform = this.isVertical ? (isSize ? `scaleY(${pos})` : `translateY(-${pos * 100}%)`) : (isSize ? `scaleX(${pos})` : `translateX(${pos * 100}%)`);\r\n }\r\n protected syncChunks(key: keyof Omit<RangeInputChunk, \"start\" | \"end\" | \"size\" | \"el\" | \"label\">, value: number): void {\r\n for (let i = 0, len = this.chunks.length; i < len; i++) {\r\n const c = this.chunks[i];\r\n this.syncElPos(c[key]!, clamp(0, (value - c.start) / c.size, 1) || 0, true), c[key]!.style.setProperty(\"--tmg-media-current-range-pos\", String(this.getValuePos(value)));\r\n c.el.classList.toggle(`tmg-media-chunk-${key}-active`, value >= c.start && value <= c.end);\r\n }\r\n }\r\n protected syncDivs(divs = this.config.divs): void {\r\n this.barsWrapper.innerHTML = \"\";\r\n this.chunks = [];\r\n const range = this.config.max - this.config.min,\r\n stops = divs.toSorted((a, b) => a.value - b.value); // Sort divs chronologically\r\n if (stops.length && stops[0].value > this.config.min && stops[0].value <= this.config.min + Math.min(0.02 * range, range * 0.25)) stops[0].value = this.config.min;\r\n else if (!stops.length || stops[0].value > this.config.min) stops.unshift({ value: this.config.min, label: \"\" });\r\n if (stops[stops.length - 1].value < this.config.max) stops.push({ value: this.config.max, label: \"\" });\r\n const fragment = document.createDocumentFragment();\r\n for (let i = 0, len = stops.length; i < len - 1; i++) {\r\n // prettier-ignore\r\n const start = stops[i], end = stops[i + 1], size = end.value - start.value;\r\n if (size <= 0) continue;\r\n const el = createEl(\"div\", { className: \"tmg-media-range-chunk\" }, undefined, { cssText: `--tmg-media-current-chunk-st: ${(start.value - this.config.min) / range};` }),\r\n chunk = { base: createEl(\"div\", { className: \"tmg-media-range-bar tmg-media-range-base-bar\" }), preview: createEl(\"div\", { className: \"tmg-media-range-bar tmg-media-range-preview-bar\" }), value: createEl(\"div\", { className: \"tmg-media-range-bar tmg-media-range-value-bar\" }) };\r\n this.syncElPos(el, size / range, true), fragment.append((el.append(chunk.base, chunk.preview, chunk.value), el)), this.chunks.push({ start: start.value, end: end.value, label: start.label, size, el, ...chunk });\r\n }\r\n this.barsWrapper.append(fragment), this.onValue(this.config.value), this.onPreviewValue(this.config.previewValue);\r\n }\r\n protected syncMarks(marks = this.config.marks): void {\r\n this.marksWrapper.innerHTML = \"\";\r\n const els: HTMLElement[] = [],\r\n range = this.config.max - this.config.min;\r\n if (range <= 0) return;\r\n for (let i = 0, len = marks.length; i < len; i++) {\r\n const m = marks[i],\r\n el = createEl(\"div\", { className: `tmg-media-range-mark tmg-media-range-${marks[i].type || \"base\"}-mark`, title: marks[i].label || `${m.start}${m.end && m.end > m.start + 1 ? ` - ${m.end}` : \"\"} Mark` }, undefined);\r\n this.syncElPos(el, (m.start - this.config.min) / range, false), this.syncElPos(el, m.end ? (m.end - m.start) / range : 0, true), els.push(el);\r\n }\r\n this.marksWrapper.append(...els);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n rangeinput: typeof RangeInput;\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\n","import { BaseComponent, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport type BufferConfig = undefined;\r\n\r\nexport class Buffer extends BaseComponent<BufferConfig, ComponentState, HTMLDivElement> {\r\n static readonly componentName = \"buffer\";\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-buffer\", innerHTML: `<div class=\"tmg-media-buffer-accent\"></div><div class=\"tmg-media-buffer-eclipse\"><div class=\"tmg-media-buffer-left\"><div class=\"tmg-media-buffer-circle\"></div></div><div class=\"tmg-media-buffer-right\"><div class=\"tmg-media-buffer-circle\"></div></div></div>` }));\r\n }\r\n\r\n public override mount(): void {\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.element);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n buffer: typeof Buffer;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"./base\";\r\nimport type { CueLike } from \"@plugs/settings/captions\";\r\nimport { capitalize } from \"@utils/str\";\r\nimport { clamp, parseIfPercent, safeNum } from \"@utils/num\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatVttLine, parseVttText } from \"@utils/media\";\r\nimport { isDef, isObj, isStr } from \"@utils/obj\";\r\nimport { setTimeout } from \"@utils/fn\";\r\n\r\nexport type CaptionsViewConfig = { secondaryOrder?: number };\r\ntype KaraokeNode = { el: HTMLElement; time: number };\r\n\r\nexport class CaptionsView extends BaseComponent<CaptionsViewConfig, ComponentState, HTMLDivElement> {\r\n public static readonly componentName: string = \"captionsview\";\r\n public isMain = false;\r\n protected prevCue: CueLike | null = null;\r\n protected karaokeNodes: KaraokeNode[] | null = null;\r\n protected lastPreview = \"\";\r\n protected timeoutId = -1;\r\n protected charW = 0;\r\n protected lineHPx = 0;\r\n protected lastPosX = 0;\r\n protected lastPosY = 0;\r\n protected lastPtrX = 0;\r\n protected lastPtrY = 0;\r\n protected dragX?: string;\r\n protected dragY?: string;\r\n\r\n public override create(): HTMLDivElement {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-captions-container\" }, { part: \"region\" }));\r\n }\r\n\r\n public override mount(): void {\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.element);\r\n }\r\n\r\n public override wire(): void {\r\n //Variables Assignment\r\n if (!(this.isMain = this.element === this.ctlr.DOM.captionsContainer)) this.dragY = `calc((var(--tmg-media-current-captions-container-height) * ${this.config.secondaryOrder ?? 1}) + (var(--tmg-media-current-captions-container-height) / 2) + (var(--tmg-media-current-unit) / 2))`; // Offset secondary captions to avoid overlap, CSS clamps\r\n // Event Listeners\r\n this.el.addEventListener(\"pointerdown\", this.handleDragStart, { signal: this.signal });\r\n // Ctlr State Watchers\r\n this.ctlr.state.watch(\"dimensions.container.width\", () => (this.syncSize(), this.preview(\"\")), { init: true, signal: this.signal });\r\n }\r\n\r\n public syncSize(): void {\r\n this.el.style.setProperty(\"display\", \"block\", \"important\");\r\n const measurer = createEl(\"span\", { className: \"tmg-media-captions-text\", innerHTML: \"abcdefghijklmnopqrstuvwxyz\".repeat(2) }, {}, { visibility: \"hidden\" });\r\n this.el.append(measurer);\r\n this.charW = measurer.offsetWidth / 52;\r\n const { lineHeight, fontSize } = getComputedStyle(measurer);\r\n this.lineHPx = !safeNum(parseFloat(lineHeight), 0) ? safeNum(parseFloat(fontSize), 16) * 1.2 : parseFloat(lineHeight);\r\n measurer.remove(), this.el.style.removeProperty(\"display\");\r\n }\r\n\r\n public preview(cue: CueLike | string = `${capitalize(this.media.container.dataset.trackKind || \"captions\")} look like this`, flush = this.isPreviewing()): void {\r\n const text = isStr(cue) ? cue : cue.text || \"\",\r\n should = flush || !this.ctlr.isUIActive(\"captions\") || !this.el.textContent;\r\n should && this.media.container.classList.add(\"tmg-media-captions-preview\");\r\n this.render(should ? (isObj(cue) ? cue : { text: cue }) : this.prevCue);\r\n clearTimeout(this.timeoutId);\r\n this.timeoutId = setTimeout((flush = this.isPreviewing(text)) => (this.media.container.classList.remove(\"tmg-media-captions-preview\"), flush && (this.el.innerHTML = \"\")), this.settings.captions.previewTimeout, this.signal);\r\n this.lastPreview = text;\r\n }\r\n public isPreviewing(text = this.lastPreview): boolean {\r\n return !!this.el.innerHTML && this.el.textContent.replace(/\\s/g, \"\") === text?.replace(/\\s/g, \"\");\r\n }\r\n\r\n public render(cue: CueLike | null): void {\r\n const existing = this.el.querySelector<HTMLElement>(\".tmg-media-captions-wrapper\");\r\n if (!cue) return existing?.remove();\r\n const wrapper = existing ?? createEl(\"div\", { className: \"tmg-media-captions-wrapper\", ariaLive: \"Off\", ariaAtomic: \"true\" }, { part: \"cue-display\" }),\r\n { offsetWidth: vCWidth, offsetHeight: vCHeight } = this.media.container,\r\n allowOverride = this.settings.captions.allowOverride || !this.isMain;\r\n for (const attr of [\"style\", \"data-active\", \"data-scroll\"]) this.el.removeAttribute(attr);\r\n if (!this.isMain) this.dragX && this.el.style.setProperty(\"--tmg-media-current-captions-x\", this.dragX), this.dragY && this.el.style.setProperty(\"--tmg-media-current-captions-y\", this.dragY);\r\n (wrapper.innerHTML = \"\"), (cue.text ||= \"\"), (this.prevCue = cue);\r\n const lines = cue.text.replace(/(<br\\s*\\/>)|\\\\N/gi, \"\\n\").split(/\\n/);\r\n for (const p of lines) for (const l of formatVttLine(p, Math.floor(vCWidth / this.charW))) wrapper.append(createEl(\"div\", { className: \"tmg-media-captions-line\" }, cue.id ? { part: \"cue\", id: cue.id } : { part: \"cue\" }, allowOverride && cue.align ? { textAlign: cue.align } : undefined)!.appendChild(createEl(\"span\", { className: \"tmg-media-captions-text\", innerHTML: parseVttText(l) })!).parentElement!);\r\n !existing && this.el.append(wrapper);\r\n const { offsetWidth: cWidth, offsetHeight: cHeight } = this.element;\r\n this.isMain ? (this.settings.css.currentCaptionsContainerHeight = `${cHeight}px`) : this.el.style.setProperty(\"--tmg-media-current-captions-container-height\", `${cHeight}px`);\r\n this.isMain ? (this.settings.css.currentCaptionsContainerWidth = `${cWidth}px`) : this.el.style.setProperty(\"--tmg-media-current-captions-container-width\", `${cWidth}px`);\r\n if (allowOverride) {\r\n if (cue.region) {\r\n this.el.setAttribute(\"data-active\", \"\");\r\n const { width, lines: regionLines, viewportAnchorX: vpAnX, viewportAnchorY: vpAnY, scroll } = cue.region;\r\n if (isDef(vpAnX)) this.el.style.setProperty(\"--tmg-media-current-captions-x\", `${vpAnX}%`);\r\n if (isDef(vpAnY)) this.el.style.setProperty(\"--tmg-media-current-captions-y\", `${100 - Number(vpAnY)}%`);\r\n if (isDef(width)) this.el.style.maxWidth = `${width}%`;\r\n if (isDef(regionLines)) this.el.style.maxHeight = `${Number(regionLines) * ((this.lineHPx / vCHeight) * 100)}%`;\r\n if (scroll === \"up\") {\r\n this.el.style.maxHeight = `${regionLines! * ((this.lineHPx / vCHeight) * 100)}%`;\r\n this.el.dataset.scroll = scroll;\r\n this.ctlr.config.stall(() => (this.el.scrollTop = wrapper.scrollHeight));\r\n }\r\n } else {\r\n if (isDef(cue.position) && cue.position !== \"auto\") {\r\n const elHalfWPct = ((cWidth / vCWidth) * 100) / 2,\r\n posOffset = cue.positionAlign === \"line-left\" ? 0 : cue.positionAlign === \"line-right\" ? -2 * elHalfWPct : -elHalfWPct;\r\n this.el.style.setProperty(\"--tmg-media-current-captions-x\", `calc(${cue.position}% + ${posOffset}% + ${elHalfWPct}%)`);\r\n }\r\n if (isDef(cue.line) && cue.line !== \"auto\") {\r\n const line = parseIfPercent(cue.line, 100),\r\n lhPct = (this.lineHPx / vCHeight) * 100,\r\n elHalfHPct = ((cHeight / vCHeight) * 100) / 2,\r\n lAlign = cue.lineAlign && cue.lineAlign !== \"auto\" ? cue.lineAlign : line < 0 ? \"end\" : \"start\",\r\n lineOffset = lAlign === \"start\" ? -2 * elHalfHPct : lAlign === \"end\" ? 0 : -elHalfHPct,\r\n bottomVal = cue.snapToLines ? (line < 0 ? (Math.abs(line) - 1) * lhPct : 100 - line * lhPct) : 100 - line;\r\n this.el.style.setProperty(\"--tmg-media-current-captions-y\", `calc(${bottomVal}% + ${lineOffset}% + ${elHalfHPct}%)`);\r\n }\r\n if (isDef(cue.size) && cue.size !== 100) this.el.style.maxWidth = `${cue.size}%`;\r\n }\r\n if (cue.vertical) this.el.style.writingMode = cue.vertical === \"lr\" ? \"vertical-lr\" : \"vertical-rl\";\r\n }\r\n this.karaokeNodes = Array.from(wrapper.querySelectorAll<HTMLElement>(\"[data-part='timed']\")).map((el) => {\r\n const [, m, s, ms] = (el.dataset.time || \"\").match(/(\\d+):(\\d+)\\.(\\d+)/) || [];\r\n return { el, time: m ? +m * 60 + +s + +ms / 1000 : 0 };\r\n });\r\n this.syncKaraoke();\r\n }\r\n\r\n public syncKaraoke(): void {\r\n if (!this.karaokeNodes) return;\r\n for (const { el, time } of this.karaokeNodes) {\r\n const isPast = safeNum(this.media.state.currentTime) > time;\r\n el.toggleAttribute(\"data-past\", isPast), el.toggleAttribute(\"data-future\", !isPast);\r\n }\r\n }\r\n\r\n protected handleDragStart(e: PointerEvent): void {\r\n this.el.setPointerCapture(e.pointerId);\r\n const { left, bottom } = getComputedStyle(this.element);\r\n (this.lastPosX = parseFloat(left)), (this.lastPosY = parseFloat(bottom));\r\n (this.lastPtrX = e.clientX), (this.lastPtrY = e.clientY);\r\n this.el.addEventListener(\"pointermove\", this.handleDragging, { signal: this.signal });\r\n this.el.addEventListener(\"pointerup\", this.handleDragEnd, { signal: this.signal });\r\n }\r\n\r\n protected handleDragging(e: PointerEvent): void {\r\n this.media.container.classList.add(\"tmg-media-captions-dragging\");\r\n this.ctlr.RAFLoop(\"captionsDragging\", () => {\r\n if (e.clientX === this.prevEX && e.clientY === this.prevEY) return; // #CONSERVATION: peak stays peak\r\n (this.prevEX = e.clientX), (this.prevEY = e.clientY);\r\n const { offsetWidth: ww, offsetHeight: hh } = this.media.container,\r\n { offsetWidth: w, offsetHeight: h } = this.element,\r\n posX = clamp(w / 2, this.lastPosX + (e.clientX - this.lastPtrX), ww - w / 2),\r\n posY = clamp(h / 2, this.lastPosY - (e.clientY - this.lastPtrY), hh - h / 2);\r\n if (this.isMain) (this.settings.css.currentCaptionsX = `${(posX / ww) * 100}%`), (this.settings.css.currentCaptionsY = `${(posY / hh) * 100}%`);\r\n else this.el.style.setProperty(\"--tmg-media-current-captions-x\", (this.dragX = `${(posX / ww) * 100}%`)), this.el.style.setProperty(\"--tmg-media-current-captions-y\", (this.dragY = `${(posY / hh) * 100}%`));\r\n });\r\n }\r\n private prevEX?: number;\r\n private prevEY?: number;\r\n\r\n protected handleDragEnd(): void {\r\n this.ctlr.cancelRAFLoop(\"captionsDragging\");\r\n this.media.container.classList.remove(\"tmg-media-captions-dragging\");\r\n this.el.removeEventListener(\"pointermove\", this.handleDragging);\r\n this.el.removeEventListener(\"pointerup\", this.handleDragEnd);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n captionsview: typeof CaptionsView;\r\n }\r\n}\r\n","import { IconRegistry } from \"@core/registries\";\r\nimport { BaseComponent, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport type ScreenLockConfig = undefined;\r\n\r\nexport class ScreenLockButton extends BaseComponent<ScreenLockConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"screenlock\";\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.locked\");\r\n }\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { type: \"button\", className: \"tmg-media-screen-locked-btn\", tabIndex: -1, innerHTML: `${IconRegistry.get(\"lock\")}${IconRegistry.get(\"unlock\")}<p>Unlock controls?</p>` }));\r\n }\r\n\r\n public override mount(): void {\r\n // DOM Injection\r\n this.plug?.wrapper.prepend(this.el);\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Plug Listeners\r\n this.plug?.state.on(\"visible\", this.syncUI, { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.syncARIA();\r\n }\r\n\r\n protected handleClick(e: MouseEvent): void {\r\n e.stopPropagation();\r\n this.plug?.delayOverlay();\r\n if (this.el.classList.contains(\"tmg-media-control-unlock\")) this.media.intent.locked = false;\r\n else this.el.classList.add(\"tmg-media-control-unlock\");\r\n }\r\n\r\n public syncUI(): void {\r\n !this.plug?.state.visible && this.el.classList.remove(\"tmg-media-control-unlock\");\r\n }\r\n public syncARIA(): void {\r\n this.el.title = this.state.label = \"Unlock Screen\";\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n screenlock: typeof ScreenLockButton;\r\n }\r\n}\r\n","import { CtlrConfig } from \"@defs/config\";\r\nimport { RangeInput, type RangeInputConfig, type RangeState } from \"../../rangeinput\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\n\r\nexport type BrightnessSliderConfig = Partial<RangeInputConfig>;\r\n\r\nexport class BrightnessSlider extends RangeInput<RangeInputConfig, RangeState> {\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.brightness\");\r\n }\r\n\r\n constructor(ctlr: Controller, config?: BrightnessSliderConfig) {\r\n super(ctlr, { label: \"Brightness Slider\", ...config });\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Config Listeners\r\n this.config.set(\"value\", (v) => Math.max(this.plug?.shouldToggle ? 0 : this.settings.brightness.min, v), { signal: this.signal }); // #VALIDATOR: rules enforcement\r\n this.config.set(\"previewValue\", (v) => Math.max(this.plug?.shouldToggle ? 0 : this.settings.brightness.min, v), { signal: this.signal }); // #VALIDATOR: rules enforcement\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.brightness\", this.handleBrightnessState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.brightness.max\", this.handleBrightnessMax, { init: true, signal: this.signal });\r\n }\r\n protected override scrub(value: number, bypass?: boolean): boolean {\r\n return super.scrub(value, bypass) ? (this.plug?.handleSliderInput(value), true) : false;\r\n }\r\n\r\n protected handleBrightnessState({ value }: REvent<CtlrMedia, \"state.brightness\">): void {\r\n if (!this.state.scrubbing) this.config.previewValue = this.config.value = value;\r\n }\r\n\r\n protected handleBrightnessMax({ value }: REvent<CtlrConfig, \"settings.brightness.max\">): void {\r\n this.config.max = value;\r\n // prettier-ignore\r\n this.config.divs = value > 100 ? [{ value: 0, label: \"\" }, { value: 100, label: `<strong style=\"color: var(--tmg-media-range-track-boost-color, red); vertical-align: 4%;\">↑</strong>` },] : [];\r\n }\r\n}\r\n","import { BaseComponent, type ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\nimport { BrightnessSlider, type BrightnessSliderConfig } from \"./slider\";\r\n\r\nexport type BrightnessConfig = BrightnessSliderConfig;\r\n\r\nexport class BrightnessControl extends BaseComponent<BrightnessConfig, ComponentState> {\r\n public static readonly componentName: string = \"brightness\";\r\n public static readonly isControl: boolean = true;\r\n public slider!: BrightnessSlider;\r\n protected button!: HTMLButtonElement;\r\n protected sliderWrapper!: HTMLSpanElement;\r\n protected delayActiveId?: number;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.brightness\");\r\n }\r\n\r\n public override create(): HTMLElement {\r\n // Variables Assignments\r\n this.slider = new BrightnessSlider(this.ctlr, this.config);\r\n this.element = createEl(\"div\", { className: \"tmg-media-brightness-container tmg-media-vb-container\" }, { draggableControl: \"\", controlId: this.name });\r\n this.button = createEl(\"button\", { className: \"tmg-media-dark-btn tmg-media-vb-btn\", type: \"button\", innerHTML: IconRegistry.get(\"brightnesshigh\") + IconRegistry.get(\"brightnesslow\") + IconRegistry.get(\"brightnessdark\") });\r\n this.sliderWrapper = createEl(\"span\", { className: \"tmg-media-brightness-slider-wrapper tmg-media-vb-slider-wrapper\" });\r\n const sliderEl = this.slider.create();\r\n // DOM Injection\r\n sliderEl.classList.add(\"tmg-media-vb-slider\", \"tmg-media-brightness-slider\");\r\n this.sliderWrapper.append(sliderEl);\r\n return this.el.append(this.button, this.sliderWrapper), this.el;\r\n }\r\n\r\n public override mount(): void {\r\n this.slider.setup();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.button.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n this.el.addEventListener(\"mousemove\", this.startActive, { signal: this.signal });\r\n this.el.addEventListener(\"mouseleave\", this.stopActive, { signal: this.signal });\r\n // State Listeners\r\n this.slider.config.on(\"value\", this.delayActive, { signal: this.signal });\r\n // ---- Media Listeners\r\n this.media.on(\"state.brightness\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.dark\", this.syncARIA, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.dark\", this.syncARIA, { signal: this.signal });\r\n // Features Gating\r\n this.media.on(\"features.brightness\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.toggle(\"auto\");\r\n }\r\n\r\n protected startActive(): void {\r\n this.slider.active(), this.delayActive();\r\n }\r\n protected delayActive(): void {\r\n this.ctlr.plug(\"settings.overlay\")?.delay();\r\n clearTimeout(this.delayActiveId);\r\n this.delayActiveId = setTimeout(() => this.stopActive(), this.settings.overlay.delay, this.signal);\r\n }\r\n protected stopActive = (): void => {\r\n if (this.slider.el.matches(\":active\")) return this.delayActive();\r\n clearTimeout(this.delayActiveId), this.slider.inactive();\r\n this.slider.config.previewValue = this.slider.config.value;\r\n };\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.dark || this.media.state.brightness === 0 ? \"Brighten\" : \"Darken\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.dark, this.settings.voice.commands.dark);\r\n this.button.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA(undefined, this.button);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.slider.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n brightness: typeof BrightnessControl;\r\n }\r\n}\r\n","import { RangeInput, RangeInputDiv, type RangeState } from \"@components/rangeinput\";\r\nimport type { TimelineConfig } from \"./types\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport { formatMediaTime } from \"@utils/time\";\r\nimport { IS_MOBILE } from \"@utils/env\";\r\nimport { getMediaMax, getMediaProgress, getMediaTime } from \"@utils/media\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { setTimeout, requestAnimationFrame } from \"@utils/fn\";\r\nimport { safeNum } from \"@utils/num\";\r\nimport { isBool } from \"@t007/utils\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport class Timeline extends RangeInput<TimelineConfig> {\r\n public static readonly componentName = \"timeline\"; // enforced name\r\n public static readonly isControl: boolean = true;\r\n public chaptersWrapper!: HTMLDivElement;\r\n public previewContainer!: HTMLDivElement;\r\n public previewImg!: HTMLDivElement;\r\n public previewCanvas!: HTMLCanvasElement;\r\n public thumbnailImg!: HTMLDivElement;\r\n public thumbnailCanvas!: HTMLCanvasElement;\r\n public previewContext: CanvasRenderingContext2D | null = null;\r\n public thumbnailContext: CanvasRenderingContext2D | null = null;\r\n protected wasPaused = false;\r\n protected scrubbingId = -1;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.time\");\r\n }\r\n protected getProgress(time: number) {\r\n return getMediaProgress(this.media, time);\r\n }\r\n protected getTime(percent: number) {\r\n return getMediaTime(this.media, percent);\r\n }\r\n\r\n constructor(ctlr: Controller, config?: Partial<TimelineConfig>) {\r\n super(ctlr, config);\r\n }\r\n\r\n public override create() {\r\n // Variables Assignments\r\n this.element = super.create();\r\n this.el.dataset.controlId = this.name;\r\n this.previewContainer = createEl(\"div\", { className: \"tmg-media-preview-container\" });\r\n this.previewImg = createEl(\"div\", { className: \"tmg-media-preview\" });\r\n this.previewCanvas = createEl(\"canvas\", { className: \"tmg-media-preview\" });\r\n this.previewContext = this.previewCanvas.getContext(\"2d\", { alpha: false });\r\n this.thumbnailImg = createEl(\"div\", { className: \"tmg-media-thumbnail tmg-media-filtered tmg-media-object\" });\r\n this.thumbnailCanvas = createEl(\"canvas\", { className: \"tmg-media-thumbnail tmg-media-filtered tmg-media-object\" });\r\n this.thumbnailContext = this.thumbnailCanvas.getContext(\"2d\", { alpha: false });\r\n // DOM Injection\r\n this.el.classList.add(\"tmg-media-timeline-container\"), this.barsWrapper.classList.add(\"tmg-media-timeline-bars-wrapper\", \"tmg-media-timeline\"), this.thumbEl.classList.add(\"tmg-media-timeline-thumb\");\r\n this.previewContainer.append(this.previewImg, this.previewCanvas);\r\n return this.el.append(this.previewContainer), this.el; // parent handled element assignment\r\n }\r\n\r\n public override mount(): void {\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.thumbnailImg, this.thumbnailCanvas);\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Event Listeners\r\n this.media.pseudoElement.addEventListener(\"timeupdate\", this.syncCanvasPreviews, { signal: this.signal });\r\n // State Listeners\r\n this.state.on(\"scrubbing\", this.handleScrubbing, { signal: this.signal });\r\n this.state.on(\"previewing\", ({ value }) => (value ? (this.media.container.classList.add(\"tmg-media-previewing\"), this.clearCanvasPreviews()) : setTimeout(() => this.media.container.classList.remove(\"tmg-media-previewing\"), 0, this.signal)), { signal: this.signal });\r\n this.state.on(\"cancelScrub\", ({ value }) => this.ctlr.plug(\"settings.notifiers\")?.comp(\"cancelscrubnotifier\")?.el.classList.toggle(\"tmg-media-control-active\", value), { signal: this.signal });\r\n // Config --------\r\n this.config.on(\"previewValue\", this.syncPreviewText, { init: true, signal: this.signal });\r\n this.config.on(\"previews\", this.handlePreviews, { init: true, signal: this.signal });\r\n this.config.on(\"autopause\", ({ value }) => [this.thumbnailCanvas, this.thumbnailImg].forEach((el) => el.classList.toggle(\"tmg-media-control-hidden\", !value)), { init: true, signal: this.signal });\r\n this.config.on(\"compact\", ({ value }) => this.el.classList.toggle(\"tmg-media-control-compact\", value), { init: true, signal: this.signal });\r\n this.config.on(\"bufferMarks\", () => this.syncMarks(this.config.marks, true), { init: true, signal: this.signal });\r\n this.config.on(\"playedMarks\", () => this.syncMarks(this.config.marks, true), { init: true, signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", ({ value }) => (!value ? this.ctlr.RAFLoop(`${this.config.label}Updating`, this.syncValue, this.signal) : this.ctlr.cancelRAFLoop(`${this.config.label}Updating`)), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.currentTime\", this.handleCurrentTime, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"intent.currentTime\", this.handleCurrentTime, { signal: this.signal }); // #APPRENTICE: folklore embodiment\r\n this.media.on(\"status.buffered\", this.handleBufferedStatus, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.played\", () => this.config.playedMarks && this.syncMarks(this.config.marks, true), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.duration\", ({ value }) => (this.el.ariaValueMax = String(Math.floor(value))), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.error\", ({ value }) => value && this.syncChunks(\"buffer\", 0), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.isLive\", ({ value }) => (this.config.readonly = value && !this.media.status.canSeekLive), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.canSeekLive\", ({ value }) => (this.config.readonly = !value && !!this.media.status.isLive), { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.chapterInfo\", this.handleMetadataChapterInfoSetting, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.time.format\", this.syncPreviewText, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.time.mode\", this.syncPreviewText, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.css.currentObjectWidth\", ({ value }) => (this.thumbnailCanvas.width = parseInt(value as string)), { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.css.currentObjectHeight\", ({ value }) => (this.thumbnailCanvas.height = parseInt(value as string)), { init: true, signal: this.signal });\r\n }\r\n protected override scrub(value: number, bypass?: boolean): boolean {\r\n return super.scrub(value, bypass) ? (!bypass && (this.media.intent.currentTime = safeNum(this.getTime(value / 100))), true) : false;\r\n }\r\n\r\n protected handleCurrentTime({ target, rejectable, resolved }: REvent<CtlrMedia, \"state.currentTime\" | \"intent.currentTime\">): void {\r\n if (this.state.scrubbing || (rejectable && !resolved)) return; // shouldn't mind `.scrubbing`; it's binded to `intent.currentTime` but base class `.value` just renders faster\r\n if (this.media.state.paused) this.syncValue(false, target.value);\r\n this.el.ariaValueText = `${formatMediaTime({ time: target.value, format: \"human-long\" })} of ${formatMediaTime({ time: this.media.status.duration, format: \"human-long\" })}`;\r\n } // !a full embodiment for near native range perf but close enough\r\n\r\n protected handleBufferedStatus({ value }: REvent<CtlrMedia, \"status.buffered\">): void {\r\n this.config.bufferMarks && this.syncMarks(this.config.marks, true);\r\n for (let i = 0; i < value.length; i++) if (value.start(value.length - 1 - i) < this.media.state.currentTime) return void this.syncChunks(\"buffer\", this.getPosValue(safeNum(value.end(value.length - 1 - i) / getMediaMax(this.media))));\r\n }\r\n\r\n public syncValue(auto = true, value = this.media.state.currentTime): void {\r\n if (auto && !this.ctlr.state.mediaIntersecting) return;\r\n if (!this.state.scrubbing) this.config.value = safeNum(this.getProgress(value)) * 100; // (value / safeNum(this.media.status.duration, 60))\r\n }\r\n\r\n protected handleScrubbing({ value }: REvent<RangeState, \"scrubbing\">): void {\r\n this.media.container.classList.toggle(\"tmg-media-scrubbing\", value);\r\n if (!value) {\r\n this.config.autopause && silence(() => (this.media.intent.paused = this.wasPaused));\r\n cancelAnimationFrame(this.scrubbingId);\r\n this.ctlr.plug(\"settings.notifiers\")?.comp(\"scrubnotifier\")?.inactive();\r\n } else {\r\n this.wasPaused = this.media.state.paused;\r\n this.scrubbingId = requestAnimationFrame(() => {\r\n this.config.autopause && silence(() => (this.media.intent.paused = true));\r\n IS_MOBILE && this.ctlr.plug(\"settings.notifiers\")?.comp(\"scrubnotifier\")?.active();\r\n }, this.signal);\r\n this.clearCanvasPreviews();\r\n }\r\n }\r\n protected handlePreviews({ target }: REvent<TimelineConfig, \"previews\">): void {\r\n const value = target.value === true ? {} : target.value;\r\n this.media.container.classList.toggle(\"tmg-media-no-previews\", !value || this.media.type !== \"video\");\r\n if (!value || this.media.type !== \"video\") return void (this.media.container.dataset.previewType = \"none\");\r\n const manual = value.address && (value.spf || (value.cols && value.rows)),\r\n type = manual ? (value.cols && value.rows ? \"sprite\" : \"image\") : \"canvas\";\r\n this.media.container.dataset.previewType = type;\r\n if (type === \"sprite\" && value.address) this.settings.css.currentPreviewUrl = this.settings.css.currentThumbnailUrl = `url(${value.address})`;\r\n else this.settings.css.currentPreviewPosition = this.settings.css.currentThumbnailPosition = \"center\";\r\n }\r\n\r\n protected handleMetadataChapterInfoSetting({ value }: REvent<CtlrMedia, \"settings.metadata.chapterInfo\">): void {\r\n if (!value || value.length < 2) return void (this.config.divs = []);\r\n const divs: RangeInputDiv[] = [];\r\n for (let i = 0, len = value.length; i < len; i++) divs.push({ value: (value[i].startTime / getMediaMax(this.media)) * 100, label: value[i].title });\r\n this.config.divs = divs;\r\n }\r\n\r\n public override stopScrubbing(): void {\r\n if (!this.state.scrubbing) return;\r\n if (!this.state.cancelScrub) this.media.intent.currentTime = this.getTime(this.config.value / 100);\r\n super.stopScrubbing();\r\n }\r\n\r\n protected onInput(_e: MouseEvent | PointerEvent, pos: number): void {\r\n this.ctlr.throttle(\r\n `${this.config.label}Previewing`,\r\n () => {\r\n this.syncElPos(this.previewContainer, !this.config.compact ? pos : 0.5, false, true);\r\n const previews = this.config.previews,\r\n type = this.media.container.dataset.previewType;\r\n if (type === \"sprite\" && previews && !isBool(previews) && previews.cols && previews.rows) {\r\n const frameIndex = Math.floor((pos * getMediaMax(this.media)) / (previews.spf || 1)) || 1,\r\n { cols, rows } = previews,\r\n clampedI = Math.min(frameIndex, cols * rows - 1),\r\n xPercent = ((clampedI % cols) * 100) / (cols - 1 || 1),\r\n yPercent = (Math.floor(clampedI / cols) * 100) / (rows - 1 || 1);\r\n if (!this.config.compact) this.settings.css.currentPreviewPosition = `${xPercent}% ${yPercent}%`;\r\n if (this.state.scrubbing && this.config.autopause) this.settings.css.currentThumbnailPosition = `${xPercent}% ${yPercent}%`;\r\n } else if (type === \"image\" && previews && !isBool(previews) && previews.address) {\r\n const frameIndex = Math.floor((pos * getMediaMax(this.media)) / (previews.spf || 1)) || 1,\r\n url = `url(${previews.address.replace(\"$\", String(frameIndex))})`;\r\n if (!this.config.compact) this.settings.css.currentPreviewUrl = url;\r\n if (this.state.scrubbing && this.config.autopause) this.settings.css.currentThumbnailUrl = url;\r\n } else if (previews && !this.ctlr.state.frameReadyPromise) this.media.pseudoElement.currentTime = safeNum(this.getTime(pos));\r\n },\r\n 30\r\n );\r\n }\r\n\r\n public syncPreviewText(): void {\r\n if (this.plug) this.previewContainer.dataset.previewText = `${this.plug.toTimeText(this.getTime(this.config.previewValue / 100), true)} ${this.getValueChunk(this.config.previewValue)?.label || \"\"}`.trim();\r\n }\r\n public syncCanvasPreviews(): void {\r\n if (!this.previewContext || !this.thumbnailContext || !this.media.status.loadedData || this.ctlr.state.frameReadyPromise || this.media.pseudoElement.readyState < 2) return;\r\n this.ctlr.throttle(\r\n \"canvasPreviewSync\",\r\n () => {\r\n this.previewCanvas.width = this.previewCanvas.clientWidth || this.previewCanvas.width;\r\n this.previewCanvas.height = this.previewCanvas.clientHeight || this.previewCanvas.height;\r\n if (!this.config.compact) this.previewContext!.drawImage(this.media.pseudoElement as HTMLVideoElement, 0, 0, this.previewCanvas.width, this.previewCanvas.height);\r\n if (this.state.scrubbing && this.config.autopause) this.thumbnailContext!.drawImage(this.media.pseudoElement as HTMLVideoElement, 0, 0, this.thumbnailCanvas.width, this.thumbnailCanvas.height);\r\n },\r\n 33\r\n );\r\n }\r\n public clearCanvasPreviews(bool = this.media.container.dataset.previewType === \"canvas\" && this.media.pseudoElement.readyState < 2): void {\r\n bool && (this.ctlr.setCanvasFallback(this.previewCanvas, this.previewContext), this.ctlr.setCanvasFallback(this.thumbnailCanvas, this.thumbnailContext));\r\n }\r\n\r\n protected override syncDivs(divs = this.config.divs): void {\r\n super.syncDivs(divs);\r\n for (let i = 0, len = this.chunks.length; i < len; i++) {\r\n const c = this.chunks[i];\r\n c.el.classList.add(\"tmg-media-timeline-chapter\"), c.base.classList.add(\"tmg-media-timeline-base-bar\", \"tmg-media-timeline-bar\"), c.preview.classList.add(\"tmg-media-timeline-preview-bar\", \"tmg-media-timeline-bar\"), c.value.classList.add(\"tmg-media-timeline-played-bar\", \"tmg-media-timeline-bar\");\r\n c.el.insertBefore((c.buffer = createEl(\"div\", { className: \"tmg-media-range-bar tmg-media-buffered-bar tmg-media-timeline-buffered-bar tmg-media-timeline-bar\" })), c.value);\r\n }\r\n this.handleBufferedStatus({ value: this.media.status.buffered } as REvent<CtlrMedia, \"status.buffered\">);\r\n }\r\n protected override syncMarks(marks = this.config.marks, extras = false): void {\r\n if (extras && !this.ctlr.payload.wired) return;\r\n const agg = [...marks],\r\n buf = this.media.status.buffered,\r\n ply = this.media.status.played,\r\n max = getMediaMax(this.media) || 1;\r\n if (this.config.bufferMarks)\r\n for (let i = 0, len = buf.length; i < len; i++) {\r\n const start = buf.start(i),\r\n end = buf.end(i);\r\n agg.push({ start: (start / max) * 100, end: (end / max) * 100, label: `${formatMediaTime({ time: start })}${end > start + 1 ? ` - ${formatMediaTime({ time: end })}` : \"\"} Loaded`, type: \"buffered\" });\r\n }\r\n if (this.config.playedMarks)\r\n for (let i = 0, len = ply.length; i < len; i++) {\r\n const start = ply.start(i),\r\n end = ply.end(i);\r\n agg.push({ start: (start / max) * 100, end: (end / max) * 100, label: `${formatMediaTime({ time: start })}${end > start + 1 ? ` - ${formatMediaTime({ time: end })}` : \"\"} Played`, type: \"played\" });\r\n }\r\n super.syncMarks(agg); // all weightless logic\r\n }\r\n}\r\n\r\nexport type * from \"./types\";\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n timeline: typeof Timeline;\r\n }\r\n}\r\n","import { CtlrConfig } from \"@defs/config\";\r\nimport { RangeInput, type RangeInputConfig, type RangeState } from \"../../rangeinput\";\r\nimport type { Controller } from \"@core/controller\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { REvent } from \"sia-reactor\";\r\n\r\nexport type VolumeSliderConfig = Partial<RangeInputConfig>;\r\n\r\nexport class VolumeSlider extends RangeInput<RangeInputConfig, RangeState> {\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.volume\");\r\n }\r\n\r\n constructor(ctlr: Controller, config?: VolumeSliderConfig) {\r\n super(ctlr, { label: \"Volume Slider\", ...config });\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Config Listeners\r\n this.config.set(\"value\", (v) => Math.max(this.plug?.shouldToggle ? 0 : this.settings.volume.min, v), { signal: this.signal }); // #VALIDATOR: rules enforcement\r\n this.config.set(\"previewValue\", (v) => Math.max(this.plug?.shouldToggle ? 0 : this.settings.volume.min, v), { signal: this.signal }); // #VALIDATOR: rules enforcement\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.volume\", this.handleVolumeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.volume.max\", this.handleVolumeMax, { init: true, signal: this.signal });\r\n }\r\n protected override scrub(value: number, bypass?: boolean): boolean {\r\n return super.scrub(value, bypass) ? (this.plug?.handleSliderInput(value), true) : false;\r\n }\r\n\r\n protected handleVolumeState({ value }: REvent<CtlrMedia, \"state.volume\">): void {\r\n if (!this.state.scrubbing) this.config.previewValue = this.config.value = value;\r\n }\r\n\r\n protected handleVolumeMax({ value }: REvent<CtlrConfig, \"settings.volume.max\">): void {\r\n this.config.max = value;\r\n // prettier-ignore\r\n this.config.divs = value > 100 ? [{ value: 0, label: \"\" }, { value: 100, label: `<strong style=\"color: var(--tmg-media-range-track-boost-color, red); vertical-align: 4%;\">↑</strong>` },] : [];\r\n }\r\n}\r\n","import { BaseComponent, type ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\nimport { setTimeout } from \"@utils/fn\";\r\nimport { VolumeSlider, type VolumeSliderConfig } from \"./slider\";\r\n\r\nexport type VolumeConfig = VolumeSliderConfig;\r\n\r\nexport class VolumeControl extends BaseComponent<VolumeConfig, ComponentState> {\r\n public static readonly componentName: string = \"volume\";\r\n public static readonly isControl: boolean = true;\r\n public slider!: VolumeSlider;\r\n protected button!: HTMLButtonElement;\r\n protected sliderWrapper!: HTMLSpanElement;\r\n protected delayActiveId?: number;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.volume\");\r\n }\r\n\r\n public override create(): HTMLElement {\r\n // Variables Assignments\r\n this.slider = new VolumeSlider(this.ctlr, this.config);\r\n this.element = createEl(\"div\", { className: \"tmg-media-volume-container tmg-media-vb-container\" }, { draggableControl: \"\", controlId: this.name });\r\n this.button = createEl(\"button\", { className: \"tmg-media-mute-btn tmg-media-vb-btn\", type: \"button\", innerHTML: IconRegistry.get(\"volumehigh\") + IconRegistry.get(\"volumelow\") + IconRegistry.get(\"volumemuted\") });\r\n this.sliderWrapper = createEl(\"span\", { className: \"tmg-media-volume-slider-wrapper tmg-media-vb-slider-wrapper\" });\r\n const sliderEl = this.slider.create();\r\n // DOM Injection\r\n sliderEl.classList.add(\"tmg-media-vb-slider\", \"tmg-media-volume-slider\");\r\n this.sliderWrapper.append(sliderEl);\r\n return this.el.append(this.button, this.sliderWrapper), this.el;\r\n }\r\n\r\n public override mount(): void {\r\n this.slider.setup();\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.volume\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.button.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n this.el.addEventListener(\"mousemove\", this.startActive, { signal: this.signal });\r\n this.el.addEventListener(\"mouseleave\", this.stopActive, { signal: this.signal });\r\n // State Listeners\r\n this.slider.config.on(\"value\", this.delayActive, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.volume\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.muted\", this.syncARIA, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.mute\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.toggle(\"auto\");\r\n }\r\n\r\n protected startActive(): void {\r\n this.slider.active(), this.delayActive();\r\n }\r\n protected delayActive(): void {\r\n this.ctlr.plug(\"settings.overlay\")?.delay();\r\n clearTimeout(this.delayActiveId);\r\n this.delayActiveId = setTimeout(() => this.stopActive(), this.settings.overlay.delay, this.signal);\r\n }\r\n protected stopActive(): void {\r\n if (this.slider.el.matches(\":active\")) return this.delayActive();\r\n clearTimeout(this.delayActiveId), this.slider.inactive();\r\n this.slider.config.previewValue = this.slider.config.value;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.muted || this.media.state.volume === 0 ? \"Unmute\" : \"Mute\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.mute, this.settings.voice.commands.mute);\r\n this.button.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA(undefined, this.button);\r\n }\r\n\r\n protected override onDestroy(): void {\r\n this.slider.destroy(), super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n volume: typeof VolumeControl;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type AirPlayConfig = undefined;\r\n\r\nexport class AirPlayButton extends BaseComponent<AirPlayConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"airplay\";\r\n public static readonly isControl: boolean = true;\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-airplay-btn\", type: \"button\", innerHTML: IconRegistry.get(\"airplay\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.airplay\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.airplay\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.airplay\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.airplay\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n if (!this.media.state.airplay) this.media.intent.airplay = true; // AirPlay handles its own connect/disconnect UI natively, we just trigger it\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.airplay ? \"AirPlay Active\" : \"AirPlay\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.airplay, this.settings.voice.commands.airplay);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n airplay: typeof AirPlayButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\nimport { IconRegistry } from \"@core/registries\";\nimport { createEl } from \"@utils/dom\";\n\nexport type Backward10Config = undefined;\n\nexport class Backward10Button extends BaseComponent<Backward10Config, ComponentState, HTMLButtonElement> {\n public static readonly componentName: string = \"backward10\";\n public static readonly isControl: boolean = true;\n\n public override create() {\n return (this.element = createEl(\"button\", { className: \"tmg-media-backward10-btn\", type: \"button\", innerHTML: IconRegistry.get(\"backward10\") }, { draggableControl: \"\", controlId: this.name }));\n }\n\n public override wire(): void {\n // Event Listeners\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\n // Post Wiring\n this.syncARIA();\n }\n\n protected handleClick(): void {\n this.media.intent.currentTime -= 10;\n }\n\n public syncARIA(): void {\n this.state.label = \"Backward 10s\";\n this.el.title = this.state.label + this.state.cmd;\n this.setBtnARIA();\n }\n}\n\ndeclare module \"@defs/registries\" {\n interface ComponentRegistryMap {\n backward10: typeof Backward10Button;\n }\n}\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type BigNextConfig = undefined;\r\n\r\nexport class BigNextButton extends BaseComponent<BigNextConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"bignext\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"playlist\");\r\n }\r\n\r\n public override create() {\r\n this.element = createEl(\"button\", { className: \"tmg-media-big-next-btn\", type: \"button\", innerHTML: IconRegistry.get(\"next\") }, { draggableControl: \"\", dragId: \"big\", controlId: this.name });\r\n return this.disable(), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Plug Listeners\r\n this.plug?.state.on(\"currentIndex\", () => this[this.plug!.atLast ? \"disable\" : \"enable\"](), { init: true, signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"playlist\", this.syncUI, { signal: this.signal, init: true, depth: 1 });\r\n this.ctlr.config.on(\"settings.keys.shortcuts.next\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.next\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.next();\r\n }\r\n\r\n public syncUI(): void {\r\n this[this.ctlr.config.playlist.content && this.ctlr.config.playlist.content.length > 1 ? \"show\" : \"hide\"]();\r\n }\r\n public syncARIA(): void {\r\n this.state.label = \"Next\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.next, this.settings.voice.commands.next);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n bignext: typeof BigNextButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type BigPlayPauseConfig = undefined;\r\n\r\nexport class BigPlayPauseButton extends BaseComponent<BigPlayPauseConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"bigplaypause\";\r\n public static readonly isControl: boolean = true;\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-big-play-pause-btn\", type: \"button\", innerHTML: IconRegistry.get(\"play\") + IconRegistry.get(\"pause\") + IconRegistry.get(\"replay\") }, { draggableControl: \"\", dragId: \"big\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.ended\", this.syncARIA, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.playPause\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.paused = !this.media.state.paused;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.status.ended ? \"Replay\" : this.media.state.paused ? \"Play\" : \"Pause\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.playPause, this.settings.voice.commands.playPause);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n bigplaypause: typeof BigPlayPauseButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type BigPrevConfig = undefined;\r\n\r\nexport class BigPrevButton extends BaseComponent<BigPrevConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"bigprev\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"playlist\");\r\n }\r\n\r\n public override create() {\r\n this.element = createEl(\"button\", { className: \"tmg-media-big-prev-btn\", type: \"button\", innerHTML: IconRegistry.get(\"prev\") }, { draggableControl: \"\", dragId: \"big\", controlId: this.name });\r\n return this.disable(), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Plug Listeners\r\n this.plug?.state.on(\"currentIndex\", () => this[this.plug!.atFirst ? \"disable\" : \"enable\"](), { init: true, signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"playlist\", this.syncUI, { signal: this.signal, init: true, depth: 1 });\r\n this.ctlr.config.on(\"settings.keys.shortcuts.prev\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.prev\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.previous();\r\n }\r\n\r\n public syncUI(): void {\r\n this[this.ctlr.config.playlist.content && this.ctlr.config.playlist.content.length > 1 ? \"show\" : \"hide\"]();\r\n }\r\n public syncARIA(): void {\r\n this.state.label = \"Previous\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.prev, this.settings.voice.commands.prev);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n bigprev: typeof BigPrevButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\nimport { capitalize } from \"@utils/str\";\r\n\r\nexport type CaptionsConfig = undefined;\r\n\r\nexport class CaptionsButton extends BaseComponent<CaptionsConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"captions\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.captions\");\r\n }\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-captions-btn\", type: \"button\", innerHTML: IconRegistry.get(\"subtitles\") + IconRegistry.get(\"captions\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.textVisible\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.currentTextTrack\", this.syncUI, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.textTracks\", this.syncUI, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.captions\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.captions\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.toggleVisible();\r\n }\r\n\r\n public syncUI(): void {\r\n this[!this.plug?.canVisible ? \"disable\" : \"enable\"]();\r\n this.syncARIA();\r\n }\r\n public syncARIA(): void {\r\n this.state.label = capitalize(this.plug?.getTrackKind()) || \"Captions\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.captions, this.settings.voice.commands.captions);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n captions: typeof CaptionsButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { addSafeClicks, createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type CaptureConfig = undefined;\r\n\r\nexport class CaptureButton extends BaseComponent<CaptureConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"capture\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.frame\");\r\n }\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-capture-btn\", type: \"button\", innerHTML: IconRegistry.get(\"capture\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.frameCapture\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n addSafeClicks(this.el, this.handleClick, this.handleDblClick, { signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.keys.shortcuts.capture\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.capture\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.capture();\r\n }\r\n protected handleDblClick(): void {\r\n this.plug?.capture(\"monochrome\");\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = \"Capture frame\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.capture, this.settings.voice.commands.capture);\r\n this.el.title = `Capture${this.state.cmd} ↔ DblClick→B&W (+alt)`;\r\n this.setBtnARIA(\"Capture monochrome frame\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n capture: typeof CaptureButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type CastConfig = undefined;\r\n\r\nexport class CastButton extends BaseComponent<CastConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"cast\";\r\n public static readonly isControl: boolean = true;\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-cast-btn\", type: \"button\", innerHTML: IconRegistry.get(\"cast\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.cast\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.cast\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.cast\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.cast\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.cast = !this.media.state.cast;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.cast ? \"Stop casting\" : \"Cast to TV\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.cast, this.settings.voice.commands.cast);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n cast: typeof CastButton;\r\n }\r\n}\r\n","import { silence } from \"sia-reactor/modules\";\r\nimport { BaseComponent, ComponentState } from \"../base\";\r\nimport { createEl } from \"@utils/dom\";\r\n// import { IconRegistry } from \"@core/registries\";\r\n\r\nexport type ChapterConfig = undefined;\r\n\r\nexport class ChapterButton extends BaseComponent<ChapterConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName = \"chapter\";\r\n public static readonly isControl: boolean = true;\r\n public textEl!: HTMLSpanElement;\r\n public iconEl!: HTMLSpanElement;\r\n\r\n public override create() {\r\n this.element = createEl(\"button\", { className: \"tmg-media-chapter-btn tmg-media-control-text-btn\", type: \"button\" }, { draggableControl: \"\", controlId: this.name });\r\n this.iconEl = createEl(\"span\", { className: \"tmg-media-chapter-icon\" }); // innerHTML: IconRegistry.get(\"chevronright\") || \">\"\r\n this.textEl = createEl(\"span\", { className: \"tmg-media-chapter-text\" });\r\n return this.element.append(this.textEl, this.iconEl), this.el;\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.currentChapter\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.currentChapter\", this.syncUI, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"settings.metadata.chapterInfo\", this.syncUI, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n this.syncARIA();\r\n }\r\n\r\n protected async handleClick(): Promise<void> {\r\n const view = this.ctlr.plug(\"settings.settingsView\");\r\n if (view) {\r\n view.menu.open(this.el);\r\n view.menu.goTo(\"chapters\");\r\n }\r\n }\r\n\r\n protected syncUI(): void {\r\n const idx = this.media.state.currentChapter,\r\n chapters = this.media.settings.metadata.chapterInfo;\r\n if (idx === -1 || !chapters || !chapters[idx]) return void ((this.textEl.textContent = \"\"), this.hide());\r\n (this.textEl.textContent = chapters[idx].title || `Chapter ${idx + 1}`), this.show();\r\n }\r\n\r\n protected syncARIA(): void {\r\n this.el.title = this.state.label = \"View Chapter\";\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n chapter: typeof ChapterButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport type DurationConfig = undefined;\r\n\r\nexport class DurationButton extends BaseComponent<DurationConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"duration\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.time\");\r\n }\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-duration-btn tmg-media-control-text-btn\", textContent: \"-:--\" }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"status.duration\", this.syncUI, { signal: this.signal });\r\n this.media.on(\"state.live\", (e) => (this.el.classList.toggle(\"tmg-media-control-live\", e.value), this.el.classList.toggle(\"tmg-media-live-badge\", e.value), this.syncARIA()), { signal: this.signal });\r\n this.media.on(\"status.isLive\", (e) => (this.media.container.classList.toggle(\"tmg-media-is-live\", e.value), this.syncARIA()), { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.time.format\", this.syncUI, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.keys.shortcuts.timeFormat\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.timeFormat\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n !this.media.status.isLive || this.media.state.live ? this.plug?.rotateFormat() : silence(() => (this.media.intent.live = true));\r\n }\r\n\r\n public syncUI(): void {\r\n this.el.textContent = !this.media.status.isLive ? this.plug?.toTimeText(this.media.status.duration) || \"-:--\" : \"Live\";\r\n }\r\n public syncARIA(): void {\r\n this.state.label = \"Switch time format\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.timeFormat, this.settings.voice.commands.timeFormat);\r\n this.el.title = !this.media.status.isLive || this.media.state.live ? this.state.label + this.state.cmd : \"Skip ahead to live broadcast\";\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n duration: typeof DurationButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport type ExpandMiniplayerConfig = undefined;\r\n\r\nexport class ExpandMiniplayerButton extends BaseComponent<ExpandMiniplayerConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"expandminiplayer\";\r\n public static readonly isControl: boolean = true;\r\n protected get pin() {\r\n return this.ctlr.plug(\"settings.modes\")?.miniplayer;\r\n }\r\n\r\n public override create(): HTMLButtonElement {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-miniplayer-expand-btn\", type: \"button\", innerHTML: IconRegistry.get(\"expandminiplayer\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.miniplayer\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Post Wiring\r\n this.syncARIA();\r\n }\r\n\r\n protected handleClick(): void {\r\n this.pin?.expand();\r\n }\r\n\r\n public syncARIA(): void {\r\n this.el.title = this.state.label = \"Expand miniplayer\";\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n expandminiplayer: typeof ExpandMiniplayerButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\nimport { IconRegistry } from \"@core/registries\";\nimport { createEl } from \"@utils/dom\";\n\nexport type Forward10Config = undefined;\n\nexport class Forward10Button extends BaseComponent<Forward10Config, ComponentState, HTMLButtonElement> {\n public static readonly componentName: string = \"forward10\";\n public static readonly isControl: boolean = true;\n\n public override create() {\n return (this.element = createEl(\"button\", { className: \"tmg-media-forward10-btn\", type: \"button\", innerHTML: IconRegistry.get(\"forward10\") }, { draggableControl: \"\", controlId: this.name }));\n }\n\n public override wire(): void {\n // Event Listeners\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\n // Post Wiring\n this.syncARIA();\n }\n\n protected handleClick(): void {\n this.media.intent.currentTime += 10;\n }\n\n public syncARIA(): void {\n this.state.label = \"Forward 10s\";\n this.el.title = this.state.label + this.state.cmd;\n this.setBtnARIA();\n }\n}\n\ndeclare module \"@defs/registries\" {\n interface ComponentRegistryMap {\n forward10: typeof Forward10Button;\n }\n}\n","import { BaseComponent, ComponentState } from \"@components/base\";\nimport { IconRegistry } from \"@core/registries\";\nimport { createEl } from \"@utils/dom\";\nimport { formatKeyForDisplay } from \"@utils/keys\";\n\nexport type FullscreenConfig = undefined;\n\nexport class FullscreenButton extends BaseComponent<FullscreenConfig, ComponentState, HTMLButtonElement> {\n public static readonly componentName: string = \"fullscreen\";\n public static readonly isControl: boolean = true;\n\n public override create() {\n return (this.element = createEl(\"button\", { className: \"tmg-media-fullscreen-btn\", type: \"button\", innerHTML: IconRegistry.get(\"enterfullscreen\") + IconRegistry.get(\"leavefullscreen\") }, { draggableControl: \"\", controlId: this.name }));\n }\n\n public override wire(): void {\n // Features Gating\n this.media.on(\"features.fullscreen\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\n // Event Listeners\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\n // Ctlr Media Listeners\n this.media.on(\"state.fullscreen\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\n // ---- Config --------\n this.ctlr.config.on(\"settings.keys.shortcuts.fullscreen\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.fullscreen\", this.syncARIA, { signal: this.signal });\n }\n\n protected handleClick(): void {\n this.media.intent.fullscreen = !this.media.state.fullscreen;\n }\n\n public syncARIA(): void {\n this.state.label = this.media.state.fullscreen ? \"Exit full screen\" : \"Full screen\";\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.fullscreen, this.settings.voice.commands.fullscreen);\n this.el.title = this.state.label + this.state.cmd;\n this.setBtnARIA();\n }\n}\n\ndeclare module \"@defs/registries\" {\n interface ComponentRegistryMap {\n fullscreen: typeof FullscreenButton;\n }\n}\n","import { IconRegistry } from \"@core/registries\";\r\nimport { BaseComponent, ComponentState } from \"../base\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport type FullscreenLockConfig = undefined;\r\n\r\nexport class FullscreenLockButton extends BaseComponent<FullscreenLockConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"fullscreenlock\";\r\n public static readonly isControl: boolean = true;\r\n\r\n public override create() {\r\n this.element = createEl(\"button\", { type: \"button\", className: \"tmg-media-fullscreen-locked-btn\", innerHTML: IconRegistry.get(\"lock\") }, { draggableControl: \"\", controlId: this.name });\r\n return this.hide(), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.fullscreen\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"features.locked\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.fullscreen\", () => this[this.canShow ? \"show\" : \"hide\"](), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n this.syncARIA();\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.locked = true;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.el.title = this.state.label = \"Lock Screen\";\r\n this.setBtnARIA();\r\n }\r\n\r\n protected override get canShow(): boolean {\r\n return this.media.state.fullscreen && !!this.media.features.fullscreen && !!this.media.features.locked;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n fullscreenlock: typeof FullscreenLockButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport type FullscreenOrientationConfig = undefined;\r\n\r\nexport class FullscreenOrientationButton extends BaseComponent<FullscreenOrientationConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"fullscreenorientation\";\r\n public static readonly isControl: boolean = true;\r\n protected get pin() {\r\n return this.ctlr.plug(\"settings.modes\")?.fullscreen;\r\n }\r\n\r\n public override create() {\r\n this.element = createEl(\"button\", { className: \"tmg-media-fullscreen-orientation-btn\", type: \"button\", innerHTML: IconRegistry.get(\"fullscreenorientation\") }, { draggableControl: \"\", controlId: this.name });\r\n return this.hide(), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.fullscreen\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"features.fullscreenOrientation\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.fullscreen\", () => this[this.canShow ? \"show\" : \"hide\"](), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Post Wiring\r\n this.syncARIA();\r\n }\r\n\r\n protected handleClick(): void {\r\n this.pin?.changeScreenOrientation();\r\n }\r\n\r\n public syncARIA(): void {\r\n this.el.title = this.state.label = \"Change orientation\";\r\n this.setBtnARIA();\r\n }\r\n\r\n protected override get canShow(): boolean {\r\n return this.media.state.fullscreen && !!this.media.features.fullscreen && !!this.media.features.fullscreenOrientation;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n fullscreenorientation: typeof FullscreenOrientationButton;\r\n }\r\n}\r\n","import { BaseComponent } from \"../base\";\r\nimport type { ComponentState } from \"../base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { initScrollAssist, removeScrollAssist } from \"@t007/utils/hooks/vanilla\";\r\n\r\nexport type MetaConfig = undefined;\r\n\r\nexport class Meta extends BaseComponent<MetaConfig, ComponentState, HTMLDivElement> {\r\n public static readonly componentName: string = \"meta\";\r\n public static readonly isControl: boolean = true;\r\n public profile!: HTMLImageElement;\r\n public title!: HTMLAnchorElement;\r\n public artist!: HTMLAnchorElement;\r\n protected scrollers: HTMLElement[] = [];\r\n\r\n public override create(): HTMLDivElement {\r\n // Variables Assignment\r\n this.element = createEl(\"div\", { className: \"tmg-media-meta-wrapper\" }, { draggableControl: \"\", dragId: \"wrapper\", controlId: this.name });\r\n const textsCover = createEl(\"div\", { className: \"tmg-media-meta-text-wrapper-cover\" }),\r\n profileLink = createEl(\"a\", { className: \"tmg-media-profile-link\" }),\r\n titleWrapper = createEl(\"div\", { className: \"tmg-media-title-wrapper\" }),\r\n artistWrapper = createEl(\"div\", { className: \"tmg-media-artist-wrapper\" });\r\n this.ctlr.DOM.mediaProfile = this.profile = this.ctlr.syncImgLoadState(createEl(\"img\", { alt: \"Profile\", className: \"tmg-media-profile\" }));\r\n this.ctlr.DOM.mediaTitle = this.title = createEl(\"a\", { className: \"tmg-media-title tmg-media-meta-text\" });\r\n this.ctlr.DOM.mediaArtist = this.artist = createEl(\"a\", { className: \"tmg-media-artist tmg-media-meta-text\" });\r\n // DOM Injection\r\n profileLink.append(this.profile), titleWrapper.append(this.title), artistWrapper.append(this.artist), textsCover.append(titleWrapper, artistWrapper);\r\n return this.el.append(profileLink, textsCover), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.controlPanel.profile\", this.syncProfile, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.title\", this.syncTitle, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.controlPanel.artist\", this.syncArtist, { init: true, signal: this.signal });\r\n // Post Wiring\r\n this.scrollers.push((initScrollAssist(this.title, { pxPerSecond: 60 }), this.title));\r\n this.scrollers.push((initScrollAssist(this.artist, { pxPerSecond: 30 }), this.artist));\r\n }\r\n\r\n public syncUI(): void {\r\n this.syncProfile(), this.syncTitle(), this.syncArtist();\r\n }\r\n public syncProfile(): void {\r\n const profile = this.settings.controlPanel.profile;\r\n if (profile !== true) (this.profile.dataset.loaded = \"false\"), (this.profile.dataset.mediaProfile = this.profile.src = profile || \"\");\r\n }\r\n public syncTitle(): void {\r\n const title = this.settings.controlPanel.title;\r\n if (title !== true) this.title.dataset.mediaTitle = this.title.textContent = title || \"\";\r\n }\r\n public syncArtist(): void {\r\n const artist = this.settings.controlPanel.artist;\r\n if (artist !== true) this.artist.dataset.mediaArtist = this.artist.textContent = artist || \"\";\r\n }\r\n\r\n protected override onDestroy(): void {\r\n for (const el of this.scrollers) removeScrollAssist(el);\r\n super.onDestroy();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n meta: typeof Meta;\r\n }\r\n interface ControllerDOMMap {\r\n mediaProfile?: HTMLImageElement;\r\n mediaTitle?: HTMLAnchorElement;\r\n mediaArtist?: HTMLAnchorElement;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type NextConfig = undefined;\r\n\r\nexport class NextButton extends BaseComponent<NextConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"next\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"playlist\");\r\n }\r\n\r\n public override create() {\r\n this.element = createEl(\"button\", { className: \"tmg-media-next-btn\", type: \"button\", innerHTML: IconRegistry.get(\"next\") }, { draggableControl: \"\", controlId: this.name });\r\n return this.hide(), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Plug Listeners\r\n this.plug?.state.on(\"currentIndex\", () => this[this.plug!.atLast ? \"hide\" : \"show\"](), { init: true, signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.keys.shortcuts.next\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.next\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.next();\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = \"Next\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.next, this.settings.voice.commands.next);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n next: typeof NextButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type ObjectFit = undefined;\r\n\r\nexport class ObjectFitButton extends BaseComponent<ObjectFit, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"objectfit\";\r\n public static readonly isControl: boolean = true;\r\n\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.objectFit\");\r\n }\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-object-fit-btn\", type: \"button\", innerHTML: IconRegistry.get(\"objectfitcontain\") + IconRegistry.get(\"objectfitcover\") + IconRegistry.get(\"objectfitfill\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.objectFit\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.objectFit\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.objectFit\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.objectFit\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.rotateFit();\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.plug?.toLabel(this.plug?.nextFit) || \"\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.objectFit, this.settings.voice.commands.objectFit);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n objectfit: typeof ObjectFitButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type PictureInPictureConfig = undefined;\r\n\r\nexport class PictureInPictureButton extends BaseComponent<PictureInPictureConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"pictureinpicture\";\r\n public static readonly isControl: boolean = true;\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-picture-in-picture-btn\", type: \"button\", innerHTML: IconRegistry.get(\"enterpip\") + IconRegistry.get(\"leavepip\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.pictureInPicture\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.pictureInPicture\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.pictureInPicture\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.pictureInPicture\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.pictureInPicture = !this.media.state.pictureInPicture;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.pictureInPicture ? \"Exit picture in picture\" : \"Picture in picture\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.pictureInPicture, this.settings.voice.commands.pictureInPicture);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n pictureinpicture: typeof PictureInPictureButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type PlayPauseConfig = undefined;\r\n\r\nexport class PlayPauseButton extends BaseComponent<PlayPauseConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"playpause\";\r\n public static readonly isControl: boolean = true;\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-play-pause-btn\", innerHTML: IconRegistry.get(\"play\") + IconRegistry.get(\"pause\") + IconRegistry.get(\"replay\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.paused\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"status.ended\", this.syncARIA, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.playPause\", this.syncARIA, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.voice.commands.playPause\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.paused = !this.media.state.paused;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.status.ended ? \"Replay\" : this.media.state.paused ? \"Play\" : \"Pause\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.playPause, this.settings.voice.commands.playPause);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n playPause: typeof PlayPauseButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type PrevConfig = undefined;\r\n\r\nexport class PrevButton extends BaseComponent<PrevConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"prev\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"playlist\");\r\n }\r\n\r\n public override create() {\r\n this.element = createEl(\"button\", { className: \"tmg-media-prev-btn\", type: \"button\", innerHTML: IconRegistry.get(\"prev\") }, { draggableControl: \"\", controlId: this.name });\r\n return this.hide(), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Plug Listeners\r\n this.plug?.state.on(\"currentIndex\", () => this[this.plug!.atFirst ? \"hide\" : \"show\"](), { init: true, signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.keys.shortcuts.prev\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.prev\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.previous();\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = \"Previous\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.prev, this.settings.voice.commands.prev);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n prev: typeof PrevButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport type RemoveMiniplayerConfig = undefined;\r\n\r\nexport class RemoveMiniplayerButton extends BaseComponent<RemoveMiniplayerConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"removeminiplayer\";\r\n public static readonly isControl: boolean = true;\r\n protected get pin() {\r\n return this.ctlr.plug(\"settings.modes\")?.miniplayer;\r\n }\r\n\r\n public override create(): HTMLButtonElement {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-miniplayer-remove-btn\", type: \"button\", innerHTML: IconRegistry.get(\"removeminiplayer\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.miniplayer\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Post Wiring\r\n this.syncARIA();\r\n }\r\n\r\n protected handleClick(): void {\r\n this.pin?.remove();\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = \"Remove miniplayer\";\r\n this.state.cmd = \" (Escape)\";\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n removeminiplayer: typeof RemoveMiniplayerButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type SettingsConfig = undefined;\r\n\r\nexport class SettingsButton extends BaseComponent<SettingsConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"settings\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.settingsView\");\r\n }\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-settings-btn\", type: \"button\", innerHTML: IconRegistry.get(\"settings\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.keys.shortcuts.settings\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.settings\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n const menu = this.plug?.menu;\r\n menu ? menu.toggle(this.el) : this.plug?.toggleView();\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = \"Settings\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.settings, this.settings.voice.commands.settings);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n settings: typeof SettingsButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type TheaterConfig = undefined;\r\n\r\nexport class TheaterButton extends BaseComponent<TheaterConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"theater\";\r\n public static readonly isControl: boolean = true;\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-theater-btn\", type: \"button\", innerHTML: IconRegistry.get(\"entertheater\") + IconRegistry.get(\"leavetheater\") }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Features Gating\r\n this.media.on(\"features.theater\", this.gate, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n this.el.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.theater\", this.syncARIA, { init: this.ctlr.payload.wired, signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.keys.shortcuts.theater\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.theater\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.theater = !this.media.state.theater;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.theater ? \"Default view\" : \"Cinema mode\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.theater, this.settings.voice.commands.theater);\r\n this.el.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n theater: typeof TheaterButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { addSafeClicks, createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type TimeConfig = undefined;\r\n\r\nexport class TimeButton extends BaseComponent<TimeConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"time\";\r\n public static readonly isControl: boolean = true;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.time\");\r\n }\r\n\r\n public override create() {\r\n return (this.element = createEl(\"button\", { className: \"tmg-media-time-btn tmg-media-control-text-btn\", textContent: \"-:--\" }, { draggableControl: \"\", controlId: this.name }));\r\n }\r\n\r\n public override wire(): void {\r\n // Feature Gating\r\n this.media.on(\"features.live\", (e) => this[e.value ? \"hide\" : \"show\"](), { init: this.ctlr.payload.wired, signal: this.signal });\r\n // Event Listeners\r\n addSafeClicks(this.element, this.handleClick, this.handleDblClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.currentTime\", this.syncUI, { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.time.mode\", this.syncUI, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.time.format\", this.syncUI, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.keys.shortcuts.timeMode\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.timeMode\", this.syncARIA, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.keys.shortcuts.timeFormat\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.plug?.toggleMode();\r\n }\r\n protected handleDblClick(): void {\r\n this.plug?.rotateFormat();\r\n }\r\n\r\n public syncUI(): void {\r\n this.el.textContent = this.plug?.toTimeText(this.media.state.currentTime, true) || \"-:--\";\r\n this.syncARIA();\r\n }\r\n public syncARIA(): void {\r\n this.state.label = `Show ${this.plug?.nextMode} time`;\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.timeMode, this.settings.voice.commands.timeMode);\r\n this.el.title = `Switch (mode${this.state.cmd} / DblClick→format${formatKeyForDisplay(this.settings.keys.shortcuts.timeFormat, this.settings.voice.commands.timeFormat)})`;\r\n this.setBtnARIA(\"Switch time format\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n time: typeof TimeButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"@components/base\";\r\nimport { addSafeClicks, createEl } from \"@utils/dom\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\nimport { silence } from \"sia-reactor/modules\";\r\n\r\nexport type TimeAndDurationConfig = undefined;\r\n\r\nexport class TimeAndDurationButton extends BaseComponent<TimeAndDurationConfig, ComponentState, HTMLButtonElement> {\r\n public static readonly componentName: string = \"timeandduration\";\r\n public static readonly isControl: boolean = true;\r\n protected time!: HTMLElement;\r\n protected bridge!: HTMLElement;\r\n protected duration!: HTMLElement;\r\n protected liveBadge!: HTMLElement;\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.time\");\r\n }\r\n\r\n public override create() {\r\n // Variables Assignments\r\n this.element = createEl(\"button\", { className: \"tmg-media-time-and-duration-btn tmg-media-control-text-btn\" }, { draggableControl: \"\", controlId: this.name });\r\n this.time = createEl(\"span\", { className: \"tmg-media-current-time\", textContent: \"-:--\" });\r\n this.bridge = createEl(\"span\", { className: \"tmg-media-time-bridge\", textContent: \"/\" });\r\n this.duration = createEl(\"span\", { className: \"tmg-media-duration-time\", textContent: \"-:--\" });\r\n this.liveBadge = createEl(\"span\", { className: \"tmg-media-live-badge\", textContent: \"Live\" });\r\n // DOM Injection\r\n return this.el.append(this.time, this.bridge, this.duration, this.liveBadge), this.element;\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n addSafeClicks(this.element, this.handleClick, this.handleDblClick, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.currentTime\", this.syncTime, { signal: this.signal });\r\n this.media.on(\"state.live\", (e) => (this.liveBadge.classList.toggle(\"tmg-media-control-live\", e.value), this.syncARIA()), { signal: this.signal });\r\n this.media.on(\"status.duration\", this.syncDuration, { signal: this.signal });\r\n this.media.on(\"status.isLive\", (e) => (this.media.container.classList.toggle(\"tmg-media-is-live\", e.value), this.syncARIA()), { signal: this.signal });\r\n // ---- Config --------\r\n this.ctlr.config.on(\"settings.time.format\", this.syncUI, { init: true, signal: this.signal });\r\n this.ctlr.config.on(\"settings.time.mode\", this.syncTime, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.keys.shortcuts.timeMode\", this.syncARIA, { init: true, signal: this.signal });\n this.ctlr.config.on(\"settings.voice.commands.timeMode\", this.syncARIA, { signal: this.signal });\r\n this.ctlr.config.on(\"settings.keys.shortcuts.timeFormat\", this.syncARIA, { signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n !this.media.status.isLive || this.media.state.live ? this.plug?.toggleMode() : silence(() => (this.media.intent.live = true));\r\n }\r\n protected handleDblClick(): void {\r\n this.plug?.rotateFormat();\r\n }\r\n\r\n public syncUI(): void {\r\n this.bridge.textContent = { digital: \"/\", human: \"of\", \"human-long\": \"out of\" }[this.settings.time.format] || \"/\";\r\n this.syncTime(), this.syncDuration();\r\n }\r\n public syncTime(): void {\r\n this.time.textContent = this.plug?.toTimeText(this.media.state.currentTime, true) || \"-:--\";\r\n }\r\n public syncDuration(): void {\r\n this.duration.textContent = this.plug?.toTimeText(this.media.status.duration) || \"-:--\";\r\n }\r\n public syncARIA(): void {\r\n this.state.label = `Show ${this.plug?.nextMode} time`;\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.timeMode, this.settings.voice.commands.timeMode);\r\n this.el.title = !this.media.status.isLive || this.media.state.live ? `Switch (mode${this.state.cmd} / DblClick→format${formatKeyForDisplay(this.settings.keys.shortcuts.timeFormat, this.settings.voice.commands.timeFormat)})` : \"Skip ahead to live broadcast\";\r\n this.setBtnARIA(\"Switch time format\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n timeandduration: typeof TimeAndDurationButton;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type AirPlayPlaceholderConfig = undefined;\r\n\r\nexport class AirPlayPlaceholder extends BaseComponent<AirPlayPlaceholderConfig, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"airplayplaceholder\";\r\n protected iconBtn!: HTMLButtonElement;\r\n\r\n public override create() {\r\n this.element = createEl(\"div\", { className: \"tmg-media-placeholder tmg-media-airplay-placeholder\", innerHTML: `<p>Streaming to AirPlay Display</p>` });\r\n this.iconBtn = createEl(\"button\", { className: \"tmg-media-placeholder-icon-btn tmg-media-airplay-icon-btn\", innerHTML: IconRegistry.get(\"airplayplaceholder\") });\r\n return this.el.prepend(this.iconBtn), this.el;\r\n }\r\n\r\n public override mount(): void {\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.el);\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.iconBtn.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.keys.shortcuts.airplay\", this.syncARIA, { init: true, signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.airplay = !this.media.state.airplay;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.airplay ? \"Stop airplaying\" : \"AirPlay to Display\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.airplay);\r\n this.iconBtn.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA(\"\", this.iconBtn);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n airplayplaceholder: typeof AirPlayPlaceholder;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { formatKeyForDisplay } from \"@utils/keys\";\r\n\r\nexport type CastPlaceholderConfig = undefined;\r\n\r\nexport class CastPlaceholder extends BaseComponent<CastPlaceholderConfig, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"castplaceholder\";\r\n protected iconBtn!: HTMLButtonElement;\r\n\r\n public override create() {\r\n this.element = createEl(\"div\", { className: \"tmg-media-placeholder tmg-media-cast-placeholder\", innerHTML: `<p>Casting to External Display</p>` });\r\n this.iconBtn = createEl(\"button\", { className: \"tmg-media-placeholder-icon-btn tmg-media-cast-icon-btn\", innerHTML: IconRegistry.get(\"castplaceholder\") });\r\n return this.el.prepend(this.iconBtn), this.el;\r\n }\r\n\r\n public override mount(): void {\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.el);\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.iconBtn.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.keys.shortcuts.cast\", this.syncARIA, { init: true, signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.cast = !this.media.state.cast;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.cast ? \"Stop casting\" : \"Cast to Display\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.cast);\r\n this.iconBtn.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA(\"\", this.iconBtn);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n castplaceholder: typeof CastPlaceholder;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport { formatKeyForDisplay } from \"../../super/utils\";\r\n\r\nexport type PiPPlaceholderConfig = undefined;\r\n\r\nexport class PiPPlaceholder extends BaseComponent<PiPPlaceholderConfig, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"pipplaceholder\";\r\n protected iconBtn!: HTMLButtonElement;\r\n\r\n public override create() {\r\n this.element = createEl(\"div\", { className: \"tmg-media-placeholder tmg-media-picture-in-picture-placeholder\", innerHTML: `<p>Playing in picture-in-picture</p>` });\r\n this.iconBtn = createEl(\"button\", { className: \"tmg-media-placeholder-icon-btn tmg-media-picture-in-picture-icon-btn\", innerHTML: IconRegistry.get(\"pipplaceholder\") });\r\n return this.el.prepend(this.iconBtn), this.el;\r\n }\r\n\r\n public override mount(): void {\r\n // DOM Injection\r\n this.ctlr.DOM.controlsContainer?.prepend(this.el);\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n this.iconBtn.addEventListener(\"click\", this.handleClick, { signal: this.signal });\r\n // Ctlr Config Listeners\r\n this.ctlr.config.on(\"settings.keys.shortcuts.pictureInPicture\", this.syncARIA, { init: true, signal: this.signal });\r\n }\r\n\r\n protected handleClick(): void {\r\n this.media.intent.pictureInPicture = !this.media.state.pictureInPicture;\r\n }\r\n\r\n public syncARIA(): void {\r\n this.state.label = this.media.state.pictureInPicture ? \"Exit picture in picture\" : \"Picture in picture\";\r\n this.state.cmd = formatKeyForDisplay(this.settings.keys.shortcuts.pictureInPicture);\r\n this.iconBtn.title = this.state.label + this.state.cmd;\r\n this.setBtnARIA(\"\", this.iconBtn);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n pipplaceholder: typeof PiPPlaceholder;\r\n }\r\n}\r\n","import { BaseComponent, ComponentState } from \"../base\";\r\n\r\nexport abstract class BaseNotifier<Config = any, State extends ComponentState = any, El extends HTMLElement = HTMLElement> extends BaseComponent<Config, State, El> {\r\n public static readonly componentName: string = \"base\";\r\n public static readonly isNotifier: boolean = true;\r\n public static readonly triggers: string[] = [];\r\n public nodes: El[] = [];\r\n protected get plug() {\r\n return this.ctlr.plug(\"settings.notifiers\");\r\n }\r\n public get events() {\r\n return (this.constructor as typeof BaseNotifier).triggers;\r\n }\r\n\r\n public override mount() {\r\n const nodes = this.nodes.length ? this.nodes : [this.element];\r\n for (const node of nodes) node.classList.add(\"tmg-media-notifier\");\r\n this.ctlr.DOM.notifiersContainer?.append(...nodes);\r\n }\r\n public override unmount(): void {\r\n for (const node of this.nodes.length ? this.nodes : [this.element]) node.remove();\r\n }\r\n\r\n public override wire(): void {\r\n // Event Listeners\r\n for (const node of this.nodes.length ? this.nodes : [this.element]) node.addEventListener(\"animationend\", this.handleAnimationEnd, { signal: this.signal });\r\n // Post Wiring\r\n this.plug?.state.events.push(...this.events);\r\n }\r\n \r\n protected handleAnimationEnd(): void {\r\n this.plug?.reset(\"\", true);\r\n }\r\n\r\n protected bindNodes(nodes: El[]): El {\r\n return (this.nodes = nodes), (this.element = nodes[0]);\r\n }\r\n}\r\n\r\nexport type { ComponentState };\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class PlayPauseNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"playpausenotifier\";\r\n public static readonly triggers = [\"mediaplay\", \"mediapause\"];\r\n public playDiv!: HTMLDivElement;\r\n public pauseDiv!: HTMLDivElement;\r\n\r\n public override create() {\r\n this.playDiv = createEl(\"div\", { className: \"tmg-media-play-notifier\", innerHTML: IconRegistry.get(\"play\", true) });\r\n this.pauseDiv = createEl(\"div\", { className: \"tmg-media-pause-notifier\", innerHTML: IconRegistry.get(\"pause\", true) });\r\n return this.bindNodes([this.playDiv, this.pauseDiv]);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n playpausenotifier: typeof PlayPauseNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\n\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class PrevNextNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"prevnextnotifier\";\r\n public static readonly triggers = [\"mediaprev\", \"medianext\"];\r\n public prevDiv!: HTMLDivElement;\r\n public nextDiv!: HTMLDivElement;\r\n\r\n public override create() {\r\n this.prevDiv = createEl(\"div\", { className: \"tmg-media-prev-notifier\", innerHTML: IconRegistry.get(\"prev\", true) });\r\n this.nextDiv = createEl(\"div\", { className: \"tmg-media-next-notifier\", innerHTML: IconRegistry.get(\"next\", true) });\r\n return this.bindNodes([this.prevDiv, this.nextDiv]);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n prevnextnotifier: typeof PrevNextNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class CaptionsNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"captionsnotifier\";\r\n public static readonly triggers = [\"captions\"];\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-captions-notifier\", innerHTML: IconRegistry.get(\"subtitles\") + IconRegistry.get(\"captions\") }));\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n captionsnotifier: typeof CaptionsNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\n\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class CaptureNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"capturenotifier\";\r\n public static readonly triggers = [\"capture\"];\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-capture-notifier\", innerHTML: IconRegistry.get(\"capture\") }));\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n capturenotifier: typeof CaptureNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\n\r\nexport class PlaybackRateNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"playbackratenotifier\";\r\n public static readonly triggers = [\"playbackrateup\", \"playbackratedown\"];\r\n public content!: HTMLDivElement;\r\n public upDiv!: HTMLDivElement;\r\n public downDiv!: HTMLDivElement;\r\n\r\n public override create() {\r\n this.content = createEl(\"div\", { className: \"tmg-media-playback-rate-notifier-content tmg-media-notifier-content\" });\r\n this.upDiv = createEl(\"div\", { className: \"tmg-media-playback-rate-up-notifier\", innerHTML: IconRegistry.get(\"doubletriangleright\") });\r\n this.downDiv = createEl(\"div\", { className: \"tmg-media-playback-rate-down-notifier\", innerHTML: IconRegistry.get(\"doubletriangleleft\") });\r\n return this.bindNodes([this.content, this.upDiv, this.downDiv]);\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.playbackRate\", this.handlePlaybackRateState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handlePlaybackRateState({ value }: REvent<CtlrMedia, \"state.playbackRate\">): void {\r\n this.content.textContent = `${value}x`;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n playbackratenotifier: typeof PlaybackRateNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { VolumePlug, VolumeState } from \"@plugs/settings/volume\";\r\n\r\nexport class VolumeNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"volumenotifier\";\r\n public static readonly triggers = [\"volumeup\", \"volumedown\", \"volumemuted\"];\r\n public content!: HTMLDivElement;\r\n public upDiv!: HTMLDivElement;\r\n public downDiv!: HTMLDivElement;\r\n public mutedDiv!: HTMLDivElement;\r\n\r\n public override create() {\r\n this.content = createEl(\"div\", { className: \"tmg-media-volume-notifier-content tmg-media-notifier-content\" });\r\n this.upDiv = createEl(\"div\", { className: \"tmg-media-volume-up-notifier\", innerHTML: IconRegistry.get(\"volumehigh\", true) });\r\n this.downDiv = createEl(\"div\", { className: \"tmg-media-volume-down-notifier\", innerHTML: IconRegistry.get(\"volumelow\", true) });\r\n this.mutedDiv = createEl(\"div\", { className: \"tmg-media-volume-muted-notifier\", innerHTML: IconRegistry.get(\"volumemuted\", true) });\r\n return this.bindNodes([this.content, this.upDiv, this.downDiv, this.mutedDiv]);\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Plug Listeners\r\n this.ctlr.plug(\"settings.volume\")?.state.on(\"aptValue\", this.handleVolumeState, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.volume\", this.handleVolumeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handleVolumeState({ value }: REvent<CtlrMedia, \"state.volume\"> | REvent<VolumeState, \"aptValue\">): void {\r\n this.content.innerHTML = `${value}% ${value > 100 ? `<strong style=\"color: var(--tmg-media-range-track-boost-color, red); vertical-align: 4%;\">↑</strong>` : \"\"}`.trim();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n volumenotifier: typeof VolumeNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { BrightnessPlug, BrightnessState } from \"@plugs/settings/brightness\";\r\n\r\nexport class BrightnessNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"brightnessnotifier\";\r\n public static readonly triggers = [\"brightnessup\", \"brightnessdown\", \"brightnessdark\"];\r\n public content!: HTMLDivElement;\r\n public upDiv!: HTMLDivElement;\r\n public downDiv!: HTMLDivElement;\r\n public darkDiv!: HTMLDivElement;\r\n\r\n public override create() {\r\n this.content = createEl(\"div\", { className: \"tmg-media-brightness-notifier-content tmg-media-notifier-content\" });\r\n this.upDiv = createEl(\"div\", { className: \"tmg-media-brightness-up-notifier\", innerHTML: IconRegistry.get(\"brightnesshigh\", true) });\r\n this.downDiv = createEl(\"div\", { className: \"tmg-media-brightness-down-notifier\", innerHTML: IconRegistry.get(\"brightnesslow\", true) });\r\n this.darkDiv = createEl(\"div\", { className: \"tmg-media-brightness-dark-notifier\", innerHTML: IconRegistry.get(\"brightnessdark\", true) });\r\n return this.bindNodes([this.content, this.upDiv, this.downDiv, this.darkDiv]);\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Plug Listeners\r\n this.ctlr.plug(\"settings.brightness\")?.state.on(\"aptValue\", this.handleBrightnessState, { signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.brightness\", this.handleBrightnessState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handleBrightnessState({ value }: REvent<CtlrMedia, \"state.brightness\"> | REvent<BrightnessState, \"aptValue\">): void {\r\n this.content.innerHTML = `${value}% ${value > 100 ? `<strong style=\"color: var(--tmg-media-range-track-boost-color, red); vertical-align: 4%;\">↑</strong>` : \"\"}`.trim();\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n brightnessnotifier: typeof BrightnessNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\n\r\nexport class ObjectFitNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"objectfitnotifier\";\r\n public static readonly triggers = [\"objectfitcontain\", \"objectfitcover\", \"objectfitfill\"];\r\n public content!: HTMLDivElement;\r\n public containDiv!: HTMLDivElement;\r\n public coverDiv!: HTMLDivElement;\r\n public fillDiv!: HTMLDivElement;\r\n\r\n public override create() {\r\n this.content = createEl(\"div\", { className: \"tmg-media-object-fit-notifier-content tmg-media-notifier-content\" });\r\n this.containDiv = createEl(\"div\", { className: \"tmg-media-object-fit-contain-notifier\", innerHTML: IconRegistry.get(\"objectfitcontain\", true) });\r\n this.coverDiv = createEl(\"div\", { className: \"tmg-media-object-fit-cover-notifier\", innerHTML: IconRegistry.get(\"objectfitcover\", true) });\r\n this.fillDiv = createEl(\"div\", { className: \"tmg-media-object-fit-fill-notifier\", innerHTML: IconRegistry.get(\"objectfitfill\", true) });\r\n return this.bindNodes([this.content, this.containDiv, this.coverDiv, this.fillDiv]);\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.objectFit\", this.handleObjectFitState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handleObjectFitState({ value }: REvent<CtlrMedia, \"state.objectFit\">): void {\r\n this.content.textContent = this.ctlr.plug(\"settings.objectFit\")?.toLabel(value) || \"\";\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n objectfitnotifier: typeof ObjectFitNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\n\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class FwdBwdNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"fwdbwdnotifier\";\r\n public static readonly triggers = [\"fwd\", \"bwd\"];\r\n public fwdDiv!: HTMLDivElement;\r\n public bwdDiv!: HTMLDivElement;\r\n\r\n public override create() {\r\n this.fwdDiv = createEl(\"div\", { className: \"tmg-media-fwd-notifier\", innerHTML: IconRegistry.get(\"fwd\") });\r\n this.bwdDiv = createEl(\"div\", { className: \"tmg-media-bwd-notifier\", innerHTML: IconRegistry.get(\"bwd\") });\r\n return this.bindNodes([this.fwdDiv, this.bwdDiv]);\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n fwdbwdnotifier: typeof FwdBwdNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class ScrubNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"scrubnotifier\";\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-scrub-notifier tmg-media-text-notifier tmg-media-top-text-notifier\", innerHTML: `<span>${IconRegistry.get(\"tripletriangleleft\")}</span><p class=\"tmg-media-scrub-notifier-text\" tabindex=\"-1\">Double tap left or right to skip</p><span>${IconRegistry.get(\"tripletriangleright\")}</span>` }));\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n scrubnotifier: typeof ScrubNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport class CancelScrubNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"cancelscrubnotifier\";\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-cancel-scrub-notifier tmg-media-text-notifier tmg-media-top-text-notifier\", innerHTML: \"Release to cancel\" }));\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n cancelscrubnotifier: typeof CancelScrubNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { VolumePlug, VolumeState } from \"@plugs/settings/volume\";\r\n\r\nexport class TouchVolumeNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"touchvolumenotifier\";\r\n public static readonly triggers = [\"volumeup\", \"volumedown\", \"volumemuted\"];\r\n public content!: HTMLSpanElement;\r\n public slider!: HTMLDivElement;\r\n public upSpan!: HTMLSpanElement;\r\n public lowSpan!: HTMLSpanElement;\r\n public mutedSpan!: HTMLSpanElement;\r\n\r\n public override create() {\r\n this.content = createEl(\"span\", { className: \"tmg-media-touch-volume-content tmg-media-touch-vb-content\", textContent: \"0\" });\r\n this.slider = createEl(\"div\", { className: \"tmg-media-touch-volume-slider tmg-media-touch-vb-slider\" });\r\n this.upSpan = createEl(\"span\", { innerHTML: IconRegistry.get(\"volumehigh\") });\r\n this.lowSpan = createEl(\"span\", { innerHTML: IconRegistry.get(\"volumelow\") });\r\n this.mutedSpan = createEl(\"span\", { innerHTML: IconRegistry.get(\"volumemuted\") });\r\n const spanWrapper = createEl(\"span\");\r\n this.element = createEl(\"div\", { className: \"tmg-media-touch-volume-notifier tmg-media-touch-vb-notifier\" });\r\n this.el.append(this.content, this.slider, (spanWrapper.append(this.upSpan, this.lowSpan, this.mutedSpan), spanWrapper));\r\n return this.element;\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Plug Listeners\r\n this.ctlr.plug(\"settings.volume\")?.state.on(\"aptValue\", this.handleVolumeState, { init: true, signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.volume\", this.handleVolumeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handleVolumeState({ value }: REvent<CtlrMedia, \"state.volume\"> | REvent<VolumeState, \"aptValue\">): void {\r\n this.content.textContent = `${value}%`;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n touchvolumenotifier: typeof TouchVolumeNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\nimport type { BrightnessPlug, BrightnessState } from \"@plugs/settings/brightness\";\r\n\r\nexport class TouchBrightnessNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"touchbrightnessnotifier\";\r\n public static readonly triggers = [\"brightnessup\", \"brightnessdown\", \"brightnessdark\"];\r\n public content!: HTMLSpanElement;\r\n public slider!: HTMLDivElement;\r\n public upSpan!: HTMLSpanElement;\r\n public lowSpan!: HTMLSpanElement;\r\n public darkSpan!: HTMLSpanElement;\r\n\r\n public override create() {\r\n this.content = createEl(\"span\", { className: \"tmg-media-touch-brightness-content tmg-media-touch-vb-content\", textContent: \"0\" });\r\n this.slider = createEl(\"div\", { className: \"tmg-media-touch-brightness-slider tmg-media-touch-vb-slider\" });\r\n this.upSpan = createEl(\"span\", { innerHTML: IconRegistry.get(\"brightnesshigh\") });\r\n this.lowSpan = createEl(\"span\", { innerHTML: IconRegistry.get(\"brightnesslow\") });\r\n this.darkSpan = createEl(\"span\", { innerHTML: IconRegistry.get(\"brightnessdark\") });\r\n const spanWrapper = createEl(\"span\")\r\n this.element = createEl(\"div\", { className: \"tmg-media-touch-brightness-notifier tmg-media-touch-vb-notifier\" });\r\n this.el.append(this.content, this.slider, (spanWrapper.append(this.upSpan, this.lowSpan, this.darkSpan), spanWrapper));\r\n return this.element;\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Plug Listeners\r\n this.ctlr.plug(\"settings.brightness\")?.state.on(\"aptValue\", this.handleBrightnessState, { init: true, signal: this.signal });\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.brightness\", this.handleBrightnessState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handleBrightnessState({ value }: REvent<CtlrMedia, \"state.brightness\"> | REvent<BrightnessState, \"aptValue\">): void {\r\n this.content.textContent = `${value}%`;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n touchbrightnessnotifier: typeof TouchBrightnessNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\n\r\nexport class FastPlayNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"fastplaynotifier\";\r\n public static readonly triggers = [\"fastplay\"];\r\n public text!: HTMLParagraphElement;\r\n\r\n public override create() {\r\n this.element = createEl(\"div\", { className: \"tmg-media-fast-play-notifier tmg-media-text-notifier tmg-media-top-text-notifier\", innerHTML: `${IconRegistry.get(\"doubletriangleleft\")}${IconRegistry.get(\"doubletriangleright\")}` });\r\n this.text = createEl(\"p\", { className: \"tmg-media-fast-play-notifier-text\" });\r\n return this.el.insertBefore(this.text, this.el.lastChild), this.el;\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.playbackRate\", this.handlePlaybackRateState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n this.media.on(\"state.currentTime\", this.handleCurrentTimeState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handlePlaybackRateState({ value }: REvent<CtlrMedia, \"state.playbackRate\">): void {\r\n this.text.textContent = `${value}x`;\r\n }\r\n\r\n protected handleCurrentTimeState({ value }: REvent<CtlrMedia, \"state.currentTime\">): void {\r\n this.el.setAttribute(\"data-current-time\", this.ctlr.plug(\"settings.time\")?.toTimeText(value, true) ?? \"0:00\");\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n fastplaynotifier: typeof FastPlayNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\n\r\nexport class TouchTimelineNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"touchtimelinenotifier\";\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-touch-timeline-notifier tmg-media-text-notifier\", innerHTML: \"Current Time\" }));\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n touchtimelinenotifier: typeof TouchTimelineNotifier;\r\n }\r\n}\r\n\r\nexport default TouchTimelineNotifier;\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport type { REvent } from \"sia-reactor\";\r\nimport type { CtlrMedia } from \"@defs/contract\";\r\n\r\nexport class ChapterNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"chapternotifier\";\r\n public static readonly triggers = [\"chapter\"];\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-chapter-notifier tmg-media-text-notifier tmg-media-top-text-notifier\", innerHTML: \"Current Chapter\" }));\r\n }\r\n\r\n public override wire(): void {\r\n super.wire();\r\n // Ctlr Media Listeners\r\n this.media.on(\"state.currentChapter\", this.handleChapterState, { init: this.ctlr.payload.wired, signal: this.signal });\r\n }\r\n\r\n protected handleChapterState(e: REvent<CtlrMedia, \"state.currentChapter\">): void {\r\n const chapter = this.media.settings.metadata.chapterInfo?.[e.value];\r\n this.el.textContent = chapter?.title || `Chapter ${e.value + 1}`;\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n chapternotifier: typeof ChapterNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class CastNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"castnotifier\";\r\n public static readonly triggers = [\"cast\"];\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-cast-notifier\", innerHTML: IconRegistry.get(\"cast\") }));\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n castnotifier: typeof CastNotifier;\r\n }\r\n}\r\n","import { BaseNotifier, ComponentState } from \"./base\";\r\nimport { createEl } from \"@utils/dom\";\r\nimport { IconRegistry } from \"@core/registries\";\r\n\r\nexport class AirPlayNotifier extends BaseNotifier<undefined, ComponentState, HTMLDivElement> {\r\n public static readonly componentName = \"airplaynotifier\";\r\n public static readonly triggers = [\"airplay\"];\r\n\r\n public override create() {\r\n return (this.element = createEl(\"div\", { className: \"tmg-media-airplay-notifier\", innerHTML: IconRegistry.get(\"airplay\") }));\r\n }\r\n}\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface ComponentRegistryMap {\r\n airplaynotifier: typeof AirPlayNotifier;\r\n }\r\n}\r\n","export const play = `<svg viewBox=\"0 0 25 25\" class=\"tmg-media-play-icon\">\r\n <path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n play: typeof play;\r\n }\r\n}\r\n","export const pause = `<svg viewBox=\"0 0 25 25\" class=\"tmg-media-pause-icon\">\r\n <path d=\"M14,19H18V5H14M6,19H10V5H6V19Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n pause: typeof pause;\r\n }\r\n}\r\n","export const replay = `<svg viewBox=\"0 -960 960 960\" class=\"tmg-media-replay-icon\">\r\n <path d=\"M480-80q-75 0-140.5-28.5t-114-77q-48.5-48.5-77-114T120-440h80q0 117 81.5 198.5T480-160q117 0 198.5-81.5T760-440q0-117-81.5-198.5T480-720h-6l62 62-56 58-160-160 160-160 56 58-62 62h6q75 0 140.5 28.5t114 77q48.5 48.5 77 114T840-440q0 75-28.5 140.5t-77 114q-48.5 48.5-114 77T480-80Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n replay: typeof replay;\r\n }\r\n}\r\n","export const prev = `<svg viewBox=\"0 0 25 25\" class=\"tmg-media-prev-icon\">\r\n <rect x=\"4\" y=\"5.14\" width=\"2.5\" height=\"14\" transform=\"translate(2.1,0)\" />\r\n <path d=\"M17,5.14V19.14L6,12.14L17,5.14Z\" transform=\"translate(2.5,0)\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n prev: typeof prev;\r\n }\r\n}\r\n","export const next = `<svg viewBox=\"0 0 25 25\" class=\"tmg-media-next-icon\">\r\n <path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" transform=\"translate(-2.5,0)\" />\r\n <rect x=\"19\" y=\"5.14\" width=\"2.5\" height=\"14\" transform=\"translate(-2.5,0)\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n next: typeof next;\r\n }\r\n}\r\n","export const settings = `<svg class=\"tmg-media-settings-icon\" viewBox=\"0 -960 960 960\">\r\n <path d=\"m370-80-16-128q-13-5-24.5-12T307-235l-119 50L78-375l103-78q-1-7-1-13.5v-27q0-6.5 1-13.5L78-585l110-190 119 50q11-8 23-15t24-12l16-128h220l16 128q13 5 24.5 12t22.5 15l119-50 110 190-103 78q1 7 1 13.5v27q0 6.5-2 13.5l103 78-110 190-118-50q-11 8-23 15t-24 12L590-80H370Zm70-80h79l14-106q31-8 57.5-23.5T639-327l99 41 39-68-86-65q5-14 7-29.5t2-31.5q0-16-2-31.5t-7-29.5l86-65-39-68-99 42q-22-23-48.5-38.5T533-694l-13-106h-79l-14 106q-31 8-57.5 23.5T321-633l-99-41-39 68 86 64q-5 15-7 30t-2 32q0 16 2 31t7 30l-86 65 39 68 99-42q22 23 48.5 38.5T427-266l13 106Zm42-180q58 0 99-41t41-99q0-58-41-99t-99-41q-59 0-99.5 41T342-480q0 58 40.5 99t99.5 41Zm-2-140Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n settings: typeof settings;\r\n }\r\n}\r\n","export const lock = `<svg class=\"tmg-media-screen-locked-icon\" viewBox=\"0 0 512 512\" style=\"scale: 0.825;\">\r\n <path d=\"M390.234 171.594v-37.375c.016-36.969-15.078-70.719-39.328-94.906A133.88 133.88 0 0 0 256 0a133.88 133.88 0 0 0-94.906 39.313c-24.25 24.188-39.344 57.938-39.313 94.906v37.375H24.906V512h462.188V171.594zm-210.343-37.375c.016-21.094 8.469-39.938 22.297-53.813C216.047 66.594 234.891 58.125 256 58.125s39.953 8.469 53.813 22.281c13.828 13.875 22.281 32.719 22.297 53.813v37.375H179.891zm-96.86 95.5h345.938v224.156H83.031z\"/>\r\n <path d=\"M297.859 321.844c0-23.125-18.75-41.875-41.859-41.875-23.125 0-41.859 18.75-41.859 41.875 0 17.031 10.219 31.625 24.828 38.156l-9.25 60.094h52.562L273.016 360c14.609-6.531 24.843-21.125 24.843-38.156\"/>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n lock: typeof lock;\r\n }\r\n}\r\n","export const unlock = `<svg class=\"tmg-media-screen-unlock-icon\" viewBox=\"0 0 512 512\" style=\"scale: 0.875; translate: 0 -1px;\">\r\n <path d=\"M186.984 203.297v-81.578c.016-19.141 7.688-36.219 20.219-48.813C219.766 60.391 236.859 52.719 256 52.703c19.141.016 36.234 7.688 48.813 20.203 12.531 12.594 20.203 29.672 20.219 48.813v43.406h52.703v-43.406c.016-33.531-13.672-64.125-35.656-86.063C320.125 13.656 289.531-.016 256 0c-33.531-.016-64.125 13.656-86.063 35.656-22 21.938-35.672 52.531-35.656 86.063v81.578H46.438V512h419.125V203.297zM99.141 256H412.86v203.297H99.141z\"/>\r\n <path d=\"M293.969 339.547c0-20.969-17-37.953-37.969-37.953s-37.953 16.984-37.953 37.953c0 15.453 9.266 28.703 22.516 34.609l-8.391 54.5h47.672l-8.406-54.5c13.25-5.906 22.531-19.156 22.531-34.609\"/>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n unlock: typeof unlock;\r\n }\r\n}\r\n","export const enterfullscreen = `<svg class=\"tmg-media-enter-fullscreen-icon\" viewBox=\"0 0 25 25\" style=\"scale: 0.8;\">\r\n <path d=\"M4 1.5C2.61929 1.5 1.5 2.61929 1.5 4V8.5C1.5 9.05228 1.94772 9.5 2.5 9.5H3.5C4.05228 9.5 4.5 9.05228 4.5 8.5V4.5H8.5C9.05228 4.5 9.5 4.05228 9.5 3.5V2.5C9.5 1.94772 9.05228 1.5 8.5 1.5H4Z\" />\r\n <path d=\"M20 1.5C21.3807 1.5 22.5 2.61929 22.5 4V8.5C22.5 9.05228 22.0523 9.5 21.5 9.5H20.5C19.9477 9.5 19.5 9.05228 19.5 8.5V4.5H15.5C14.9477 4.5 14.5 4.05228 14.5 3.5V2.5C14.5 1.94772 14.9477 1.5 15.5 1.5H20Z\" />\r\n <path d=\"M20 22.5C21.3807 22.5 22.5 21.3807 22.5 20V15.5C22.5 14.9477 22.0523 14.5 21.5 14.5H20.5C19.9477 14.5 19.5 14.9477 19.5 15.5V19.5H15.5C14.9477 19.5 14.5 19.9477 14.5 20.5V21.5C14.5 22.0523 14.9477 22.5 15.5 22.5H20Z\" />\r\n <path d=\"M1.5 20C1.5 21.3807 2.61929 22.5 4 22.5H8.5C9.05228 22.5 9.5 22.0523 9.5 21.5V20.5C9.5 19.9477 9.05228 19.5 8.5 19.5H4.5V15.5C4.5 14.9477 4.05228 14.5 3.5 14.5H2.5C1.94772 14.5 1.5 14.9477 1.5 15.5V20Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n enterfullscreen: typeof enterfullscreen;\r\n }\r\n}\r\n","export const leavefullscreen = `<svg class=\"tmg-media-leave-fullscreen-icon\" viewBox=\"0 0 25 25\" style=\"scale: 0.8;\">\r\n <path d=\"M7 9.5C8.38071 9.5 9.5 8.38071 9.5 7V2.5C9.5 1.94772 9.05228 1.5 8.5 1.5H7.5C6.94772 1.5 6.5 1.94772 6.5 2.5V6.5H2.5C1.94772 6.5 1.5 6.94772 1.5 7.5V8.5C1.5 9.05228 1.94772 9.5 2.5 9.5H7Z\" />\r\n <path d=\"M17 9.5C15.6193 9.5 14.5 8.38071 14.5 7V2.5C14.5 1.94772 14.9477 1.5 15.5 1.5H16.5C17.0523 1.5 17.5 1.94772 17.5 2.5V6.5H21.5C22.0523 6.5 22.5 6.94772 22.5 7.5V8.5C22.5 9.05228 22.0523 9.5 21.5 9.5H17Z\" />\r\n <path d=\"M17 14.5C15.6193 14.5 14.5 15.6193 14.5 17V21.5C14.5 22.0523 14.9477 22.5 15.5 22.5H16.5C17.0523 22.5 17.5 22.0523 17.5 21.5V17.5H21.5C22.0523 17.5 22.5 17.0523 22.5 16.5V15.5C22.5 14.9477 22.0523 14.5 21.5 14.5H17Z\" />\r\n <path d=\"M9.5 17C9.5 15.6193 8.38071 14.5 7 14.5H2.5C1.94772 14.5 1.5 14.9477 1.5 15.5V16.5C1.5 17.0523 1.94772 17.5 2.5 17.5H6.5V21.5C6.5 22.0523 6.94772 22.5 7.5 22.5H8.5C9.05228 22.5 9.5 22.0523 9.5 21.5V17Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n leavefullscreen: typeof leavefullscreen;\r\n }\r\n}\r\n","export const enterpip = `<svg class=\"tmg-media-enter-picture-in-picture-icon\" viewBox=\"0 0 25 25\">\r\n <path fill-rule=\"nonzero\" d=\"M21 3a1 1 0 0 1 1 1v7h-2V5H4v14h6v2H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h18zm0 10a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-6a1 1 0 0 1 1-1h8zM6.707 6.293l2.25 2.25L11 6.5V12H5.5l2.043-2.043-2.25-2.25 1.414-1.414z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n enterpip: typeof enterpip;\r\n }\r\n}\r\n","export const leavepip = `<svg class=\"tmg-media-leave-picture-in-picture-icon\" viewBox=\"0 0 25 25\">\r\n <path fill-rule=\"nonzero\" d=\"M21 3a1 1 0 0 1 1 1v7h-2V5H4v14h6v2H3a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h18zm0 10a1 1 0 0 1 1 1v6a1 1 0 0 1-1 1h-8a1 1 0 0 1-1-1v-6a1 1 0 0 1 1-1h8zm-9.5-6L9.457 9.043l2.25 2.25-1.414 1.414-2.25-2.25L6 12.5V7h5.5z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n leavepip: typeof leavepip;\r\n }\r\n}\r\n","export const expandminiplayer = `<svg class=\"tmg-media-miniplayer-expand-icon\" viewBox=\"0 -960 960 960\" style=\"scale: 0.9; rotate: 90deg;\">\r\n <path d=\"M120-120v-320h80v184l504-504H520v-80h320v320h-80v-184L256-200h184v80H120Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n expandminiplayer: typeof expandminiplayer;\r\n }\r\n}\r\n","export const removeminiplayer = `<svg class=\"tmg-media-miniplayer-remove-icon\" viewBox=\"0 -960 960 960\">\r\n <path d=\"m256-200-56-56 224-224-224-224 56-56 224 224 224-224 56 56-224 224 224 224-56 56-224-224-224 224Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n removeminiplayer: typeof removeminiplayer;\r\n }\r\n}\r\n","export const capture = `<svg class=\"tmg-media-capture-icon\" viewBox=\"0 0 24 24\">\r\n <path fill-rule=\"evenodd\" d=\"M6.937 5.845c.07-.098.15-.219.25-.381l.295-.486C8.31 3.622 8.913 3 10 3h4c1.087 0 1.69.622 2.518 1.978l.295.486c.1.162.18.283.25.381q.071.098.12.155H20a3 3 0 0 1 3 3v9a3 3 0 0 1-3 3H4a3 3 0 0 1-3-3V9a3 3 0 0 1 3-3h2.816q.05-.057.121-.155M4 8a1 1 0 0 0-1 1v9a1 1 0 0 0 1 1h16a1 1 0 0 0 1-1V9a1 1 0 0 0-1-1h-3c-.664 0-1.112-.364-1.56-.987a8 8 0 0 1-.329-.499c-.062-.1-.27-.445-.3-.492C14.36 5.282 14.088 5 14 5h-4c-.087 0-.36.282-.812 1.022-.029.047-.237.391-.3.492a8 8 0 0 1-.327.5C8.112 7.635 7.664 8 7 8zm15 3a1 1 0 1 0 0-2 1 1 0 0 0 0 2m-7 7a5 5 0 1 1 0-10 5 5 0 0 1 0 10m0-2a3 3 0 1 0 0-6 3 3 0 0 0 0 6\"/>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n capture: typeof capture;\r\n }\r\n}\r\n","export const cast = `<svg class=\"tmg-media-cast-icon\" viewBox=\"0 0 24 24\" fill=\"none\" stroke=\"currentColor\" stroke-width=\"2\" stroke-linecap=\"round\" stroke-linejoin=\"round\" style=\"scale: 0.9;\">\r\n <path fill=\"none\" d=\"M2 16.1A5 5 0 0 1 5.9 20M2 12.05A9 9 0 0 1 9.95 20M2 8V6a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v12a2 2 0 0 1-2 2h-6M2 20h.01\"/>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n cast: typeof cast;\r\n }\r\n}\r\n","export const airplay = `<svg class=\"tmg-media-airplay-icon\" viewBox=\"0 0 24 24\">\r\n <path d=\"M12.8 13.4c-.1-.1-.1-.2-.2-.2-.5-.3-1.1-.2-1.5.2l-4 6c0 .2-.1.4-.1.6 0 .6.4 1 1 1h8c.2 0 .4-.1.6-.2.5-.3.6-.9.3-1.4zM19 3H5C3.3 3 2 4.3 2 6v9c0 1.7 1.3 3 3 3h.8c.6 0 1-.4 1-1s-.4-1-1-1H5c-.6 0-1-.4-1-1V6c0-.6.4-1 1-1h14c.6 0 1 .4 1 1v9c0 .6-.4 1-1 1h-.8c-.6 0-1 .4-1 1s.4 1 1 1h.8c1.7 0 3-1.3 3-3V6c0-1.7-1.3-3-3-3\"/>\r\n</svg>\r\n`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n airplay: typeof airplay;\r\n }\r\n}\r\n","export const objectfitcontain = `<svg class=\"tmg-media-object-fit-contain-icon\" viewBox=\"0 0 16 16\" style=\"scale: 0.75;\">\r\n <rect width=\"16\" height=\"16\" rx=\"4\" ry=\"4\" fill=\"none\" stroke-width=\"2.25\" stroke=\"currentColor\"/>\r\n <g stroke-width=\"1\" stroke=\"currentColor\" transform=\"translate(3,3)\">\r\n <path style=\"scale: 0.6;\" d=\"M521.667563,212.999001 L523.509521,212.999001 C523.784943,212.999001 524,213.222859 524,213.499001 C524,213.767068 523.780405,213.999001 523.509521,213.999001 L520.490479,213.999001 C520.354351,213.999001 520.232969,213.944316 520.145011,213.855661 C520.056625,213.763694 520,213.642369 520,213.508523 L520,210.48948 C520,210.214059 520.223858,209.999001 520.5,209.999001 C520.768066,209.999001 521,210.218596 521,210.48948 L521,212.252351 L525.779724,207.472627 C525.975228,207.277123 526.284966,207.283968 526.480228,207.47923 C526.66978,207.668781 526.678447,207.988118 526.486831,208.179734 L521.667563,212.999001 Z\" transform=\"translate(-520 -198)\"/><path style=\"scale: 0.6;\" d=\"M534.251065,199 L532.488194,199 C532.212773,199 531.997715,198.776142 531.997715,198.5 C531.997715,198.231934 532.21731,198 532.488194,198 L535.507237,198 C535.643364,198 535.764746,198.054685 535.852704,198.14334 C535.94109,198.235308 535.997715,198.356632 535.997715,198.490479 L535.997715,201.509521 C535.997715,201.784943 535.773858,202 535.497715,202 C535.229649,202 534.997715,201.780405 534.997715,201.509521 L534.997715,199.667563 L530.178448,204.486831 C529.982944,204.682335 529.673206,204.67549 529.477943,204.480228 C529.288392,204.290677 529.279725,203.97134 529.471341,203.779724 L534.251065,199 Z\" transform=\"translate(-520 -198)\"/>\r\n </g>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n objectfitcontain: typeof objectfitcontain;\r\n }\r\n}\r\n","export const objectfitcover = `<svg class=\"tmg-media-object-fit-cover-icon\" viewBox=\"0 0 16 16\" style=\"scale: 0.75;\">\r\n <rect width=\"16\" height=\"16\" rx=\"4\" ry=\"4\" fill=\"none\" stroke-width=\"2.25\" stroke=\"currentColor\"/>\r\n <g stroke-width=\"1\" stroke=\"currentColor\" transform=\"translate(3,3)\">\r\n <path style=\"scale: 0.6;\" d=\"M521.667563,212.999001 L523.509521,212.999001 C523.784943,212.999001 524,213.222859 524,213.499001 C524,213.767068 523.780405,213.999001 523.509521,213.999001 L520.490479,213.999001 C520.354351,213.999001 520.232969,213.944316 520.145011,213.855661 C520.056625,213.763694 520,213.642369 520,213.508523 L520,210.48948 C520,210.214059 520.223858,209.999001 520.5,209.999001 C520.768066,209.999001 521,210.218596 521,210.48948 L521,212.252351 L525.779724,207.472627 C525.975228,207.277123 526.284966,207.283968 526.480228,207.47923 C526.66978,207.668781 526.678447,207.988118 526.486831,208.179734 L521.667563,212.999001 Z\" transform=\"translate(-520 -198)\"/><path style=\"scale: 0.6;\" d=\"M534.330152,212.999001 L532.488194,212.999001 C532.212773,212.999001 531.997715,213.222859 531.997715,213.499001 C531.997715,213.767068 532.21731,213.999001 532.488194,213.999001 L535.507237,213.999001 C535.643364,213.999001 535.764746,213.944316 535.852704,213.855661 C535.94109,213.763694 535.997715,213.642369 535.997715,213.508523 L535.997715,210.48948 C535.997715,210.214059 535.773858,209.999001 535.497715,209.999001 C535.229649,209.999001 534.997715,210.218596 534.997715,210.48948 L534.997715,212.252351 L530.217991,207.472627 C530.022487,207.277123 529.712749,207.283968 529.517487,207.47923 C529.327935,207.668781 529.319269,207.988118 529.510884,208.179734 L534.330152,212.999001 Z\" transform=\"translate(-520 -198)\"/><path style=\"scale: 0.6;\" d=\"M521.667563,199 L523.509521,199 C523.784943,199 524,198.776142 524,198.5 C524,198.231934 523.780405,198 523.509521,198 L520.490479,198 C520.354351,198 520.232969,198.054685 520.145011,198.14334 C520.056625,198.235308 520,198.356632 520,198.490479 L520,201.509521 C520,201.784943 520.223858,202 520.5,202 C520.768066,202 521,201.780405 521,201.509521 L521,199.74665 L525.779724,204.526374 C525.975228,204.721878 526.284966,204.715034 526.480228,204.519772 C526.66978,204.33022 526.678447,204.010883 526.486831,203.819268 L521.667563,199 Z\" transform=\"translate(-520 -198)\"/><path style=\"scale: 0.6;\" d=\"M534.251065,199 L532.488194,199 C532.212773,199 531.997715,198.776142 531.997715,198.5 C531.997715,198.231934 532.21731,198 532.488194,198 L535.507237,198 C535.643364,198 535.764746,198.054685 535.852704,198.14334 C535.94109,198.235308 535.997715,198.356632 535.997715,198.490479 L535.997715,201.509521 C535.997715,201.784943 535.773858,202 535.497715,202 C535.229649,202 534.997715,201.780405 534.997715,201.509521 L534.997715,199.667563 L530.178448,204.486831 C529.982944,204.682335 529.673206,204.67549 529.477943,204.480228 C529.288392,204.290677 529.279725,203.97134 529.471341,203.779724 L534.251065,199 Z\" transform=\"translate(-520 -198)\"/>\r\n </g>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n objectfitcover: typeof objectfitcover;\r\n }\r\n}\r\n","export const objectfitfill = `<svg class=\"tmg-media-object-fit-fill-icon\" viewBox=\"0 0 16 16\" style=\"scale: 0.75;\">\r\n <rect x=\"4\" y=\"4\" width=\"8\" height=\"8\" rx=\"1\" ry=\"1\" fill=\"none\" stroke-width=\"1.5\" stroke=\"currentColor\"/>\r\n <g stroke-width=\"1\" stroke=\"currentColor\" transform=\"translate(3, 3)\">\r\n <path style=\"scale: 0.65;\" d=\"M521.667563,212.999001 L523.509521,212.999001 C523.784943,212.999001 524,213.222859 524,213.499001 C524,213.767068 523.780405,213.999001 523.509521,213.999001 L520.490479,213.999001 C520.354351,213.999001 520.232969,213.944316 520.145011,213.855661 C520.056625,213.763694 520,213.642369 520,213.508523 L520,210.48948 C520,210.214059 520.223858,209.999001 520.5,209.999001 C520.768066,209.999001 521,210.218596 521,210.48948 L521,212.252351 L525.779724,207.472627 C525.975228,207.277123 526.284966,207.283968 526.480228,207.47923 C526.66978,207.668781 526.678447,207.988118 526.486831,208.179734 L521.667563,212.999001 Z\" transform=\"translate(-520, -198) translate(-3.25, 2.75)\" /><path style=\"scale: 0.65;\" d=\"M534.251065,199 L532.488194,199 C532.212773,199 531.997715,198.776142 531.997715,198.5 C531.997715,198.231934 532.21731,198 532.488194,198 L535.507237,198 C535.643364,198 535.764746,198.054685 535.852704,198.14334 C535.94109,198.235308 535.997715,198.356632 535.997715,198.490479 L535.997715,201.509521 C535.997715,201.784943 535.773858,202 535.497715,202 C535.229649,202 534.997715,201.780405 534.997715,201.509521 L534.997715,199.667563 L530.178448,204.486831 C529.982944,204.682335 529.673206,204.67549 529.477943,204.480228 C529.288392,204.290677 529.279725,203.97134 529.471341,203.779724 L534.251065,199 Z\" transform=\"translate(-520, -198) translate(2.5, -3.25)\" />\r\n </g>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n objectfitfill: typeof objectfitfill;\r\n }\r\n}\r\n","export const volumehigh = `<svg class=\"tmg-media-volume-high-icon\" viewBox=\"0 0 25 25\">\r\n <path d=\"M14,3.23V5.29C16.89,6.15 19,8.83 19,12C19,15.17 16.89,17.84 14,18.7V20.77C18,19.86 21,16.28 21,12C21,7.72 18,4.14 14,3.23M16.5,12C16.5,10.23 15.5,8.71 14,7.97V16C15.5,15.29 16.5,13.76 16.5,12M3,9V15H7L12,20V4L7,9H3Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n volumehigh: typeof volumehigh;\r\n }\r\n}\r\n","export const volumelow = `<svg class=\"tmg-media-volume-low-icon\" viewBox=\"0 0 25 25\">\r\n <path d=\"M5,9V15H9L14,20V4L9,9M18.5,12C18.5,10.23 17.5,8.71 16,7.97V16C17.5,15.29 18.5,13.76 18.5,12Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n volumelow: typeof volumelow;\r\n }\r\n}\r\n","export const volumemuted = `<svg class=\"tmg-media-volume-muted-icon\" viewBox=\"0 0 25 25\">\r\n <path d=\"M12,4L9.91,6.09L12,8.18M4.27,3L3,4.27L7.73,9H3V15H7L12,20V13.27L16.25,17.53C15.58,18.04 14.83,18.46 14,18.7V20.77C15.38,20.45 16.63,19.82 17.68,18.96L19.73,21L21,19.73L12,10.73M19,12C19,12.94 18.8,13.82 18.46,14.64L19.97,16.15C20.62,14.91 21,13.5 21,12C21,7.72 18,4.14 14,3.23V5.29C16.89,6.15 19,8.83 19,12M16.5,12C16.5,10.23 15.5,8.71 14,7.97V10.18L16.45,12.63C16.5,12.43 16.5,12.21 16.5,12Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n volumemuted: typeof volumemuted;\r\n }\r\n}\r\n","export const brightnesshigh = `<svg class=\"tmg-media-brightness-high-icon\" viewBox=\"0 0 25 25\">\r\n <path transform=\"translate(1.5, 1.5)\" style=\"scale: 1.05;\" d=\"M10 14.858a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6-5h3a1 1 0 0 1 0 2h-3a1 1 0 0 1 0-2zm-6 6a1 1 0 0 1 1 1v3a1 1 0 0 1-2 0v-3a1 1 0 0 1 1-1zm0-15a1 1 0 0 1 1 1v3a1 1 0 0 1-2 0v-3a1 1 0 0 1 1-1zm-9 9h3a1 1 0 1 1 0 2H1a1 1 0 0 1 0-2zm13.95 4.535l2.121 2.122a1 1 0 0 1-1.414 1.414l-2.121-2.121a1 1 0 0 1 1.414-1.415zm-8.486 0a1 1 0 0 1 0 1.415l-2.12 2.12a1 1 0 1 1-1.415-1.413l2.121-2.122a1 1 0 0 1 1.414 0zM17.071 3.787a1 1 0 0 1 0 1.414L14.95 7.322a1 1 0 0 1-1.414-1.414l2.12-2.121a1 1 0 0 1 1.415 0zm-12.728 0l2.121 2.121A1 1 0 1 1 5.05 7.322L2.93 5.201a1 1 0 0 1 1.414-1.414z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n brightnesshigh: typeof brightnesshigh;\r\n }\r\n}\r\n","export const brightnesslow = `<svg class=\"tmg-media-brightness-low-icon\" viewBox=\"0 0 25 25\">\r\n <path transform=\"translate(3.25, 3.25)\" style=\"scale: 1.05;\" d=\"M8 12.858a4 4 0 1 1 0-8 4 4 0 0 1 0 8zm6-5h1a1 1 0 0 1 0 2h-1a1 1 0 0 1 0-2zm-6 6a1 1 0 0 1 1 1v1a1 1 0 0 1-2 0v-1a1 1 0 0 1 1-1zm0-13a1 1 0 0 1 1 1v1a1 1 0 1 1-2 0v-1a1 1 0 0 1 1-1zm-7 7h1a1 1 0 1 1 0 2H1a1 1 0 1 1 0-2zm11.95 4.535l.707.708a1 1 0 1 1-1.414 1.414l-.707-.707a1 1 0 0 1 1.414-1.415zm-8.486 0a1 1 0 0 1 0 1.415l-.707.707A1 1 0 0 1 2.343 13.1l.707-.708a1 1 0 0 1 1.414 0zm9.193-9.192a1 1 0 0 1 0 1.414l-.707.707a1 1 0 0 1-1.414-1.414l.707-.707a1 1 0 0 1 1.414 0zm-9.9 0l.707.707A1 1 0 1 1 3.05 5.322l-.707-.707a1 1 0 0 1 1.414-1.414z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n brightnesslow: typeof brightnesslow;\r\n }\r\n}\r\n","export const brightnessdark = `<svg class=\"tmg-media-brightness-dark-icon\" viewBox=\"0 0 25 25\">\r\n <path transform=\"translate(2, 2.5)\" style=\"scale: 1.2;\" d=\"M12 8a4 4 0 1 1-8 0 4 4 0 0 1 8 0zM8.5 2.5a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm0 11a.5.5 0 1 1-1 0 .5.5 0 0 1 1 0zm5-5a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zm-11 0a.5.5 0 1 1 0-1 .5.5 0 0 1 0 1zm9.743-4.036a.5.5 0 1 1-.707-.707.5.5 0 0 1 .707.707zm-7.779 7.779a.5.5 0 1 1-.707-.707.5.5 0 0 1 .707.707zm7.072 0a.5.5 0 1 1 .707-.707.5.5 0 0 1-.707.707zM3.757 4.464a.5.5 0 1 1 .707-.707.5.5 0 0 1-.707.707z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n brightnessdark: typeof brightnessdark;\r\n }\r\n}\r\n","export const entertheater = `<svg class=\"tmg-media-enter-theater-icon\" viewBox=\"0 0 25 25\">\r\n <path fill-rule=\"evenodd\" clip-rule=\"evenodd\" d=\"M23 7C23 5.34315 21.6569 4 20 4H4C2.34315 4 1 5.34315 1 7V17C1 18.6569 2.34315 20 4 20H20C21.6569 20 23 18.6569 23 17V7ZM21 7C21 6.44772 20.5523 6 20 6H4C3.44772 6 3 6.44771 3 7V17C3 17.5523 3.44772 18 4 18H20C20.5523 18 21 17.5523 21 17V7Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n entertheater: typeof entertheater;\r\n }\r\n}\r\n","export const leavetheater = `<svg class=\"tmg-media-leave-theater-icon\" viewBox=\"0 0 25 25\">\r\n <path d=\"M19 6H5c-1.1 0-2 .9-2 2v8c0 1.1.9 2 2 2h14c1.1 0 2-.9 2-2V8c0-1.1-.9-2-2-2zm0 10H5V8h14v8z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n leavetheater: typeof leavetheater;\r\n }\r\n}\r\n","export const fullscreenorientation = `<svg class=\"tmg-media-fullscreen-orientation-icon\" viewBox=\"0 0 512 512\" style=\"scale: 0.925;\">\r\n <path d=\"M446.81,275.82H236.18V65.19c0-20.78-16.91-37.69-37.69-37.69H65.19c-20.78,0-37.69,16.91-37.69,37.69v255.32c0,20.78,16.91,37.68,37.69,37.68h88.62v88.62c0,20.78,16.9,37.69,37.68,37.69h255.32c20.78,0,37.69-16.91,37.69-37.69v-133.3C484.5,292.73,467.59,275.82,446.81,275.82zM65.19,326.19c-3.14,0-5.69-2.55-5.69-5.68V65.19c0-3.14,2.55-5.69,5.69-5.69h133.3c3.14,0,5.69,2.55,5.69,5.69v210.63h-12.69c-20.78,0-37.68,16.91-37.68,37.69v12.68H65.19zM452.5,446.81c0,3.14-2.55,5.69-5.69,5.69H191.49c-3.13,0-5.68-2.55-5.68-5.69V342.19v-28.68c0-2.94,2.24-5.37,5.1-5.66c0.19-0.02,0.38-0.03,0.58-0.03h28.69h226.63c3.14,0,5.69,2.55,5.69,5.69V446.81z\" />\r\n <path d=\"M369.92,181.53c-6.25-6.25-16.38-6.25-22.63,0c-6.25,6.25-6.25,16.38,0,22.63l44.39,44.39c3.12,3.13,7.22,4.69,11.31,4.69c0.21,0,0.42-0.02,0.63-0.03c0.2,0.01,0.4,0.03,0.6,0.03c6.31,0,11.74-3.66,14.35-8.96l37.86-37.86c6.25-6.25,6.25-16.38,0-22.63c-6.25-6.25-16.38-6.25-22.63,0l-13.59,13.59v-86.58c0-8.84-7.16-16-16-16h-86.29l15.95-15.95c6.25-6.25,6.25-16.38,0-22.63c-6.25-6.25-16.38-6.25-22.63,0l-40.33,40.33c-5.19,2.65-8.75,8.03-8.75,14.25c0,0.19,0.02,0.37,0.03,0.56c-0.01,0.19-0.03,0.38-0.03,0.57c0,4.24,1.69,8.31,4.69,11.31l42.14,42.14c3.12,3.12,7.22,4.69,11.31,4.69s8.19-1.56,11.31-4.69c6.25-6.25,6.25-16.38,0-22.63l-15.95-15.95h72.54v73.05L369.92,181.53z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n fullscreenorientation: typeof fullscreenorientation;\r\n }\r\n}\r\n","export const returnback = `<svg class=\"tmg-media-return-back-icon\" viewBox=\"0 0 25 25\">\r\n <path transform=\"translate(5.5, 5.5)\" d=\"M1.307,5.988 L6.616,1.343 C7.027,0.933 7.507,0.864 7.918,1.275 L7.918,4.407 C8.014,4.406 8.098,4.406 8.147,4.406 C13.163,4.406 16.885,7.969 16.885,12.816 C16.885,14.504 16.111,13.889 15.788,13.3 C14.266,10.52 11.591,8.623 8.107,8.623 C8.066,8.623 7.996,8.624 7.917,8.624 L7.917,11.689 C7.506,12.099 6.976,12.05 6.615,11.757 L1.306,7.474 C0.897,7.064 0.897,6.399 1.307,5.988 L1.307,5.988 Z\" />\r\n</svg>\r\n`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n returnback: typeof returnback;\r\n }\r\n}\r\n","export const subtitles = `<svg viewBox=\"0 0 25 25\" class=\"tmg-media-subtitles-icon\">\r\n <path style=\"scale: 0.5;\" d=\"M44,6H4A2,2,0,0,0,2,8V40a2,2,0,0,0,2,2H44a2,2,0,0,0,2-2V8A2,2,0,0,0,44,6ZM12,26h4a2,2,0,0,1,0,4H12a2,2,0,0,1,0-4ZM26,36H12a2,2,0,0,1,0-4H26a2,2,0,0,1,0,4Zm10,0H32a2,2,0,0,1,0-4h4a2,2,0,0,1,0,4Zm0-6H22a2,2,0,0,1,0-4H36a2,2,0,0,1,0,4Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n subtitles: typeof subtitles;\r\n }\r\n}\r\n","export const captions = `<svg viewBox=\"0 0 25 25\" class=\"tmg-media-captions-icon\" style=\"scale: 1.15;\">\r\n <path d=\"M18,11H16.5V10.5H14.5V13.5H16.5V13H18V14A1,1 0 0,1 17,15H14A1,1 0 0,1 13,14V10A1,1 0 0,1 14,9H17A1,1 0 0,1 18,10M11,11H9.5V10.5H7.5V13.5H9.5V13H11V14A1,1 0 0,1 10,15H7A1,1 0 0,1 6,14V10A1,1 0 0,1 7,9H10A1,1 0 0,1 11,10M19,4H5C3.89,4 3,4.89 3,6V18A2,2 0 0,0 5,20H19A2,2 0 0,0 21,18V6C21,4.89 20.1,4 19,4Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n captions: typeof captions;\r\n }\r\n}\r\n","export const triangleleft = `<svg viewBox=\"0 0 25 25\" class=\"tmg-media-triangle-left-icon\">\r\n <path d=\"M17,5.14V19.14L6,12.14L17,5.14Z\" />\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n triangleleft: typeof triangleleft;\r\n }\r\n}\r\n","export const doubletriangleleft = `<svg viewBox=\"0 0 30 24\"><path d=\"M22,5.14V19.14L11,12.14L22,5.14Z\" /><path d=\"M11,5.14V19.14L0,12.14L11,5.14Z\" /></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n doubletriangleleft: typeof doubletriangleleft;\r\n }\r\n}\r\n","export const doubletriangleright = `<svg viewBox=\"0 0 30 24\"><path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" /><path d=\"M19,5.14V19.14L30,12.14L19,5.14Z\" /></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n doubletriangleright: typeof doubletriangleright;\r\n }\r\n}\r\n","export const fwd = `\r\n<svg viewBox=\"0 0 25 25\" class=\"tmg-media-fwd-icon\"><path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" /></svg>\r\n<svg viewBox=\"0 0 25 25\" class=\"tmg-media-fwd-icon\"><path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" /></svg>\r\n<svg viewBox=\"0 0 25 25\" class=\"tmg-media-fwd-icon\"><path d=\"M8,5.14V19.14L19,12.14L8,5.14Z\" /></svg>\r\n`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n fwd: typeof fwd;\r\n }\r\n}\r\n","export const bwd = `\r\n<svg viewBox=\"0 0 25 25\" class=\"tmg-media-bwd-icon\"><path d=\"M17,5.14V19.14L6,12.14L17,5.14Z\" /></svg>\r\n<svg viewBox=\"0 0 25 25\" class=\"tmg-media-bwd-icon\"><path d=\"M17,5.14V19.14L6,12.14L17,5.14Z\" /></svg>\r\n<svg viewBox=\"0 0 25 25\" class=\"tmg-media-bwd-icon\"><path d=\"M17,5.14V19.14L6,12.14L17,5.14Z\" /></svg>\r\n`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n bwd: typeof bwd;\r\n }\r\n}\r\n","export const pipplaceholder = `<svg class=\"tmg-media-pip-placeholder-icon\" viewBox=\"0 0 73 73\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(2, 2)\" fill-rule=\"nonzero\" stroke-width=\"2\" class=\"tmg-media-pip-icon-background\">\r\n <rect x=\"-1\" y=\"-1\" width=\"71\" height=\"71\" rx=\"14\" />\r\n </g>\r\n <g transform=\"translate(15, 15)\" fill-rule=\"nonzero\">\r\n <g>\r\n <polygon class=\"tmg-media-pip-icon-content-background\" points=\"0 0 0 36 36 36 36 0\" />\r\n <rect class=\"tmg-media-pip-icon-content-backdrop\" x=\"4.2890625\" y=\"4.2890625\" width=\"27.421875\" height=\"13.2679687\" />\r\n <g transform=\"translate(4.289063, 27.492187)\">\r\n <rect x=\"0\" y=\"0\" width=\"3.1640625\" height=\"2.109375\" class=\"tmg-media-pip-icon-timeline-progress\" />\r\n <rect x=\"7.3828125\" y=\"0\" width=\"20.0390625\" height=\"2.109375\" class=\"tmg-media-pip-icon-timeline-base\" />\r\n </g>\r\n <circle class=\"tmg-media-pip-icon-timeline-thumb\" cx=\"9.5625\" cy=\"28.546875\" r=\"3.1640625\" />\r\n <polygon class=\"tmg-media-pip-icon-content\" points=\"31.7109375 17.5569609 31.7109375 23.2734375 4.2890625 23.2734375 4.2890625 17.5569609 13.78125 8.06477344 20.109375 14.3928984 24.328125 10.1741484\" />\r\n </g>\r\n <g transform=\"translate(21, 26)\">\r\n <polygon class=\"tmg-media-pip-icon-content-background\" points=\"0 0 0 17.7727273 23 17.7727273 23 0\" />\r\n <rect class=\"tmg-media-pip-icon-content-backdrop\" x=\"2.74023438\" y=\"2.74023438\" width=\"17.5195312\" height=\"8.47675781\" />\r\n <polygon class=\"tmg-media-pip-icon-content\" points=\"20.2597656 11.2169473 20.2597656 14.8691406 2.74023438 14.8691406 2.74023438 11.2169473 8.8046875 5.15249414 12.8476562 9.19546289 15.5429687 6.50015039\" />\r\n </g>\r\n </g>\r\n </g>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n pipplaceholder: typeof pipplaceholder;\r\n }\r\n}\r\n","export const castplaceholder = `<svg class=\"tmg-media-cast-placeholder-icon\" viewBox=\"0 0 73 73\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(2, 2)\" fill-rule=\"nonzero\" stroke-width=\"2\" class=\"tmg-media-cast-icon-background\">\r\n <rect x=\"-1\" y=\"-1\" width=\"71\" height=\"71\" rx=\"14\" />\r\n </g>\r\n <g transform=\"translate(11, 14)\">\r\n <rect class=\"tmg-media-cast-icon-content-background\" fill=\"currentColor\" x=\"0\" y=\"0\" width=\"51\" height=\"36\" rx=\"4\" />\r\n <rect class=\"tmg-media-cast-icon-content-backdrop\" fill=\"currentColor\" x=\"3\" y=\"3\" width=\"45\" height=\"30\" />\r\n <polygon class=\"tmg-media-cast-icon-content\" fill=\"currentColor\" points=\"48 22 48 33 22 33 28 20 34 26 42 16\" />\r\n <polygon class=\"tmg-media-cast-icon-tv-base\" fill=\"currentColor\" points=\"19 36 32 36 36 42 15 42\" />\r\n <circle class=\"tmg-media-cast-icon-waves-fill\" fill=\"currentColor\" cx=\"6\" cy=\"30\" r=\"2.5\" />\r\n <path class=\"tmg-media-cast-icon-waves-stroke\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" fill=\"none\" d=\"M 3,21 A 12,12 0 0,1 15,33\" />\r\n <path class=\"tmg-media-cast-icon-waves-stroke\" stroke=\"currentColor\" stroke-width=\"2.5\" stroke-linecap=\"round\" fill=\"none\" d=\"M 3,12 A 21,21 0 0,1 24,33\" />\r\n </g>\r\n </g>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n castplaceholder: typeof castplaceholder;\r\n }\r\n}\r\n","export const airplayplaceholder = `<svg class=\"tmg-media-airplay-placeholder-icon\" viewBox=\"0 0 73 73\">\r\n <g stroke=\"none\" stroke-width=\"1\" fill=\"none\" fill-rule=\"evenodd\">\r\n <g transform=\"translate(2, 2)\" fill-rule=\"nonzero\" stroke-width=\"2\" class=\"tmg-media-airplay-icon-background\">\r\n <rect x=\"-1\" y=\"-1\" width=\"71\" height=\"71\" rx=\"14\" />\r\n </g>\r\n <g transform=\"translate(11, 14)\">\r\n <rect class=\"tmg-media-airplay-icon-content-background\" fill=\"currentColor\" x=\"0\" y=\"0\" width=\"51\" height=\"36\" rx=\"4\" />\r\n <rect class=\"tmg-media-airplay-icon-content-backdrop\" fill=\"currentColor\" x=\"3\" y=\"3\" width=\"45\" height=\"30\" />\r\n <polygon class=\"tmg-media-airplay-icon-content\" fill=\"currentColor\" points=\"48 22 48 33 22 33 28 20 34 26 42 16\" />\r\n </g>\r\n <polygon class=\"tmg-media-airplay-icon-arrow\" fill=\"currentColor\" points=\"36.5 40 48 56 25 56\" />\r\n </g>\r\n</svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n airplayplaceholder: typeof airplayplaceholder;\r\n }\r\n}\r\n","export const dragindicator = `<svg fill=\"currentColor\" height=\"20px\" width=\"20px\" viewBox=\"0 0 24 24\" style=\"scale: 0.6\"><path d=\"M10,6H6V2h4V6z M18,2h-4v4h4V2z M10,10H6v4h4V10z M18,10h-4v4h4V10z M10,18H6v4h4V18z M18,18h-4v4h4V18z\"/></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n dragindicator: typeof dragindicator;\r\n }\r\n}\r\n","export const deleteicon = `<svg viewBox=\"0 0 24 24\" fill=\"none\"><path d=\"M7 4a2 2 0 0 1 2-2h6a2 2 0 0 1 2 2v2h4a1 1 0 1 1 0 2h-1.069l-.867 12.142A2 2 0 0 1 17.069 22H6.93a2 2 0 0 1-1.995-1.858L4.07 8H3a1 1 0 0 1 0-2h4V4zm2 2h6V4H9v2zM6.074 8l.857 12H17.07l.857-12H6.074zM10 10a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0v-6a1 1 0 0 1 1-1zm4 0a1 1 0 0 1 1 1v6a1 1 0 1 1-2 0v-6a1 1 0 0 1 1-1z\" fill=\"currentColor\"/></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n delete: typeof deleteicon;\r\n }\r\n}\r\n","export const playlist = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M3 10h11v2H3v-2zm0-4h11v2H3V6zm0 8h7v2H3v-2zm13-1v8h2v-6h4v-2h-6z\"/></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n playlist: typeof playlist;\r\n }\r\n}\r\n","export const autoplay = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M8 6.82v10.36c0 .79.87 1.27 1.54.84l8.14-5.18c.62-.39.62-1.29 0-1.69L9.54 5.98C8.87 5.55 8 6.03 8 6.82z\"/><path d=\"M12 22C6.48 22 2 17.52 2 12S6.48 2 12 2s10 4.48 10 10-4.48 10-10 10zm0-18c-4.41 0-8 3.59-8 8s3.59 8 8 8 8-3.59 8-8-3.59-8-8-8z\"/></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n autoplay: typeof autoplay;\r\n }\r\n}\r\n","export const loop = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M12 4V1L8 5l4 4V6c3.31 0 6 2.69 6 6 0 1.01-.25 1.97-.7 2.8l1.46 1.46C19.54 15.03 20 13.57 20 12c0-4.42-3.58-8-8-8zm0 14c-3.31 0-6-2.69-6-6 0-1.01.25-1.97.7-2.8L5.24 7.74C4.46 8.97 4 10.43 4 12c0 4.42 3.58 8 8 8v3l4-4-4-4v3z\"/></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n loop: typeof loop;\r\n }\r\n}\r\n","export const quality = `<svg viewBox=\"0 0 24 24\" class=\"tmg-media-quality-icon\" stroke-width=\"1\" stroke=\"currentColor\"><path d=\"M15 17h6v1h-6v-1zm-2 0H3v1h10v-1zm1-2h1v3h-1v-3zm3-4h4v1h-4v-1zm-5 0H3v1h9v-1zm1-2h1v3h-1V9zm-5-4h11v1H8V5zM3 5h3v1H3V5zm2-2h1v3H5V3z\"/></svg>`;\n\ndeclare module \"@defs/registries\" {\n interface IconRegistryMap {\n quality: typeof quality;\n }\n}\n","export const audiotrack = `<svg viewBox=\"0 0 24 24\" class=\"tmg-media-audiotrack-icon\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path fill=\"none\" d=\"M9 18V5l12-2v13\"></path><circle fill=\"none\" cx=\"6\" cy=\"18\" r=\"3\"></circle><circle fill=\"none\" cx=\"18\" cy=\"16\" r=\"3\"></circle></svg>`;\n\ndeclare module \"@defs/registries\" {\n interface IconRegistryMap {\n audiotrack: typeof audiotrack;\n }\n}\n","export const videotrack = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M17 10.5V7c0-.55-.45-1-1-1H4c-.55 0-1 .45-1 1v10c0 .55.45 1 1 1h12c.55 0 1-.45 1-1v-3.5l4 4v-11l-4 4z\"/></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n videotrack: typeof videotrack;\r\n }\r\n}\r\n","export const chapters = `<svg viewBox=\"0 0 24 24\" fill=\"currentColor\"><path d=\"M3 13h2v-2H3v2zm0 4h2v-2H3v2zm0-8h2V7H3v2zm4 4h14v-2H7v2zm0 4h14v-2H7v2zM7 7v2h14V7H7z\"/></svg>`;\r\n\r\ndeclare module \"@defs/registries\" {\r\n interface IconRegistryMap {\r\n chapters: typeof chapters;\r\n }\r\n}\r\n","export const ambience = `<svg viewBox=\"0 0 24 24\" class=\"tmg-media-ambience-icon\" stroke-width=\"1\" stroke=\"currentColor\"><path d=\"M19 9l1.25-2.75L23 5l-2.75-1.25L19 1l-1.25 2.75L15 5l2.75 1.25L19 9zm-7.5.5L9 4 6.5 9.5 1 12l5.5 2.5L9 20l2.5-5.5L17 12l-5.5-2.5zM9 14.47L8.03 12.3l-2.17-.97 2.17-.97L9 8.2l.97 2.17 2.17.97-2.17.97L9 14.47zM19 15l-1.25 2.75L15 19l2.75 1.25L19 23l1.25-2.75L23 19l-2.75-1.25L19 15z\"/></svg>`;\n\ndeclare module \"@defs/registries\" {\n interface IconRegistryMap {\n ambience: typeof ambience;\n }\n}\n","export const playbackrate = `<svg viewBox=\"0 0 24 24\" class=\"tmg-media-playback-rate-icon\" stroke-width=\"2\" stroke=\"currentColor\" fill=\"none\" stroke-linecap=\"round\" stroke-linejoin=\"round\"><path fill=\"none\" d=\"m12 14 4-4\"></path><path fill=\"none\" d=\"M3.34 16A10 10 0 1 1 20.66 16\"></path></svg>`;\n\ndeclare module \"@defs/registries\" {\n interface IconRegistryMap {\n playbackrate: typeof playbackrate;\n }\n}\n","export const timer = `<svg viewBox=\"0 0 24 24\" class=\"tmg-media-timer-icon\" stroke-width=\"0.2\" stroke=\"currentColor\"><path d=\"M11.99 2C6.47 2 2 6.48 2 12s4.47 10 9.99 10C17.52 22 22 17.52 22 12S17.52 2 11.99 2zM12 20c-4.42 0-8-3.58-8-8s3.58-8 8-8 8 3.58 8 8-3.58 8-8 8zm.5-13H11v6l5.25 3.15.75-1.23-4.5-2.67z\"/></svg>`;\n\ndeclare module \"@defs/registries\" {\n interface IconRegistryMap {\n timer: typeof timer;\n }\n}\n","export const add = `<svg viewBox=\"0 0 24 24\" class=\"tmg-media-add-icon\" stroke-width=\"1\" stroke=\"currentColor\"><path d=\"M20 12h-8v8h-1v-8H3v-1h8V3h1v8h8v1z\"/></svg>`;\n\ndeclare module \"@defs/registries\" {\n interface IconRegistryMap {\n add: typeof add;\n }\n}\n","export const shuffle = `<svg viewBox=\"0 0 24 24\" class=\"tmg-media-shuffle-icon\"><path d=\"M10.59 9.17L5.41 4 4 5.41l5.17 5.17 1.42-1.41zM14.5 4l2.04 2.04L4 18.59 5.41 20 17.96 7.46 20 9.5V4h-5.5zm.33 9.41-1.41 1.41 3.13 3.13L14.5 20H20v-5.5l-2.04 2.04-3.13-3.13z\"/></svg>`;\n\ndeclare module \"@defs/registries\" {\n interface IconRegistryMap {\n shuffle: typeof shuffle;\n }\n}\n","export * from \"@consts/config\";\nexport * from \"@consts/generics\";\nexport * from \"@consts/media\";\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,MAAI,MAAsB,uBAAO,IAAI,WAAW;AAChD,MAAI,UAA0B,uBAAO,IAAI,eAAe;AACxD,MAAI,aAA6B,uBAAO,IAAI,kBAAkB;AAC9D,MAAI,aAA6B,uBAAO,IAAI,kBAAkB;AAC9D,MAAI,aAA6B,uBAAO,IAAI,kBAAkB;AAC9D,MAAI,UAA0B,uBAAO,IAAI,eAAe;AACxD,MAAI,YAA4B,uBAAO,IAAI,wBAAwB;AACnE,MAAI,YAAY,gBAAgB,OAAO,UAAU,gBAAgB,OAAO,iBAAiB,iBAAiB,YAAY,KAAK,MAAM,IAAI,gBAAgB,OAAO,WAAW,QAAQ,WAAW,QAAQ,WAAW;AAC7M,MAAI,UAAU,QAAQ,IAAI,KAAK,SAAS,iBAAiB;AACzD,MAAI,WAAW,EAAE,UAAU,CAAC,WAAW,SAAS,QAAQ,UAAU,MAAM,GAAG,UAAU,CAAC,QAAQ,UAAU,MAAM,EAAE;AAChH,MAAI,MAAM,OAAO,OAAO,CAAC,CAAC;AAC1B,MAAI,OAAO,MAAM;AAAA,EACjB;AACA,MAAI,WAAW;AACf,MAAI;AACF,eAAW;AAAA,EACb,SAAS,GAAG;AAAA,EACZ;AACA,MAAI,MAAM;AAAA;AAAA,IAER;AAAA;AAAA,IAEA,YAAY;AAAA;AAAA,IAEZ,aAAa;AAAA;AAAA,IAEb,MAAM;AAAA;AAAA,IAEN,UAAU;AAAA,MACR,aAAa;AAAA,MACb,cAAc;AAAA,MACd,eAAe;AAAA,MACf,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,iBAAiB;AAAA,MACjB,kBAAkB,OAAO;AAAA,MACzB,kBAAkB;AAAA,IACpB;AAAA,EACF;AAGA,MAAI,WAAW;AACf,WAAS,MAAM,KAAK,aAAa,MAAM;AACrC,WAAO,aAAa,OAAO,OAAO,QAAQ,SAAS,aAAa,CAAC,MAAM,QAAQ,GAAG,IAAI;AAAA,EACxF;AACA,WAAS,OAAO,KAAK,SAAS,IAAI,UAAU,YAAY,MAAM;AAC5D,YAAQ,YAAY,MAAM,KAAK,KAAK,IAAI,UAAU,OAAO,cAAc,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,oBAAoB,IAAI,gBAAgB;AAAA,EACzJ;AACA,WAAS,UAAU,KAAK,SAAS,IAAI,UAAU,YAAY,MAAM;AAC/D,QAAI,aAAa,CAAC,MAAM,KAAK,KAAK,KAAK,IAAI,OAAO,EAAG,QAAO;AAC5D,QAAI,MAAM,QAAQ,GAAG,KAAK,CAAC,OAAO,mBAAmB,OAAO,KAAK,QAAQ,KAAK,EAAG,QAAO;AACxF,QAAI,OAAO,gBAAiB,QAAO,EAAE,eAAe,WAAW,EAAE,eAAe,WAAW,EAAE,eAAe,aAAa,EAAE,eAAe,SAAS,EAAE,eAAe,UAAU,EAAE,eAAe,WAAW,EAAE,eAAe,YAAY,EAAE,eAAe,QAAQ,EAAE,eAAe,YAAY,EAAE,eAAe,QAAQ,EAAE,eAAe,YAAY,EAAE,eAAe;AACpW,WAAO;AAAA,EACT;AACA,WAAS,QAAQ,QAAQ,KAAK,YAAY,KAAK,SAAS;AACtD,QAAI,QAAQ,IAAK,QAAO;AACxB,UAAMA,QAAO,IAAI,MAAM,SAAS;AAChC,QAAI,UAAU;AACd,aAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,YAAM,OAAO,UAAU,QAAQA,MAAK,CAAC,CAAC,IAAIA,MAAK,CAAC,GAAG,QAAQ,KAAK,SAAS,GAAG,KAAK,KAAK,MAAM,QAAQ;AACpG,UAAI,OAAO;AACT,cAAM,CAAC,EAAE,MAAM,IAAI,IAAI;AACvB,YAAI,CAAC,MAAM,QAAQ,QAAQ,IAAI,CAAC,KAAK,EAAE,QAAQ,SAAU,QAAO,QAAQ,IAAI;AAC5E,kBAAU,QAAQ,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MACtC,OAAO;AACL,YAAI,CAAC,MAAM,OAAO,KAAK,EAAE,QAAQ,SAAU,QAAO,QAAQ,IAAI;AAC9D,kBAAU,QAAQ,IAAI;AAAA,MACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,WAAS,QAAQ,QAAQ,KAAK,OAAO,YAAY,KAAK,SAAS;AAxE/D,QAAAC,KAAAC;AAyEE,QAAI,QAAQ,IAAK,QAAO,OAAO,OAAO,QAAQ,KAAK;AACnD,UAAMF,QAAO,IAAI,MAAM,SAAS;AAChC,aAAS,UAAU,QAAQ,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AACjE,YAAM,OAAO,UAAU,QAAQA,MAAK,CAAC,CAAC,IAAIA,MAAK,CAAC,GAAG,QAAQ,KAAK,SAAS,GAAG,KAAK,KAAK,MAAM,QAAQ;AACpG,UAAI,OAAO;AACT,cAAM,CAAC,EAAE,MAAM,IAAI,IAAI;AACvB,YAAI,CAAC,MAAM,QAAQ,QAAQ,IAAI,CAAC,EAAG,SAAQ,IAAI,IAAI,CAAC;AACpD,YAAI,MAAM,MAAM,EAAG,SAAQ,IAAI,EAAE,OAAO,IAAI,CAAC,IAAI;AAAA,YAC5C,EAAAC,MAAA,QAAQ,IAAI,GAAZC,MAAc,OAAO,IAAI,OAAzBD,IAAAC,OAAgC,CAAC,IAAG,UAAU,QAAQ,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MAC/E,OAAO;AACL,YAAI,MAAM,MAAM,EAAG,SAAQ,IAAI,IAAI;AAAA,YAC9B,mCAAkB,CAAC,IAAG,UAAU,QAAQ,IAAI;AAAA,MACnD;AAAA,IACF;AAAA,EACF;AACA,WAAS,WAAW,QAAQ,KAAK,YAAY,KAAK,SAAS;AACzD,QAAI,QAAQ,KAAK;AACf,YAAMC,SAAQ,OAAO,KAAK,MAAM;AAChC,eAAS,IAAI,GAAG,MAAMA,OAAM,QAAQ,IAAI,KAAK,IAAK,QAAO,OAAOA,OAAM,CAAC,CAAC;AACxE;AAAA,IACF;AACA,UAAMH,QAAO,IAAI,MAAM,SAAS;AAChC,aAAS,UAAU,QAAQ,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AACjE,YAAM,OAAO,UAAU,QAAQA,MAAK,CAAC,CAAC,IAAIA,MAAK,CAAC,GAAG,QAAQ,KAAK,SAAS,GAAG,KAAK,KAAK,MAAM,QAAQ;AACpG,UAAI,OAAO;AACT,cAAM,CAAC,EAAE,MAAM,IAAI,IAAI;AACvB,YAAI,CAAC,MAAM,QAAQ,QAAQ,IAAI,CAAC,KAAK,EAAE,QAAQ,SAAU;AACzD,YAAI,MAAM,MAAM,EAAG,QAAO,QAAQ,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,YAC/C,WAAU,QAAQ,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MAC3C,OAAO;AACL,YAAI,CAAC,MAAM,OAAO,KAAK,EAAE,QAAQ,SAAU;AAC3C,YAAI,MAAM,MAAM,EAAG,QAAO,QAAQ,IAAI;AAAA,YACjC,WAAU,QAAQ,IAAI;AAAA,MAC7B;AAAA,IACF;AAAA,EACF;AACA,WAAS,QAAQ,QAAQ,KAAK,YAAY,KAAK,SAAS;AACtD,QAAI,QAAQ,IAAK,QAAO;AACxB,UAAMA,QAAO,IAAI,MAAM,SAAS;AAChC,aAAS,UAAU,QAAQ,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AACjE,YAAM,OAAO,UAAU,QAAQA,MAAK,CAAC,CAAC,IAAIA,MAAK,CAAC,GAAG,QAAQ,KAAK,SAAS,GAAG,KAAK,KAAK,MAAM,QAAQ;AACpG,UAAI,OAAO;AACT,cAAM,CAAC,EAAE,MAAM,IAAI,IAAI;AACvB,YAAI,CAAC,MAAM,QAAQ,QAAQ,IAAI,CAAC,KAAK,EAAE,QAAQ,SAAU,QAAO;AAChE,YAAI,MAAM,MAAM,EAAG,QAAO;AAC1B,kBAAU,QAAQ,IAAI,EAAE,OAAO,IAAI,CAAC;AAAA,MACtC,OAAO;AACL,YAAI,CAAC,MAAM,OAAO,KAAK,EAAE,QAAQ,SAAU,QAAO;AAClD,YAAI,MAAM,MAAM,EAAG,QAAO;AAC1B,kBAAU,QAAQ,IAAI;AAAA,MACxB;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,WAAS,aAAa,KAAK,YAAY,KAAK,UAAU,CAAC,MAAM,GAAG,OAAuB,oBAAI,QAAQ,GAAG;AACpG,QAAI,CAAC,OAAO,GAAG,KAAK,KAAK,IAAI,GAAG,EAAG,QAAO;AAC1C,SAAK,IAAI,GAAG;AACZ,UAAM,SAAS,CAAC,GAAGA,QAAO,OAAO,KAAK,GAAG;AACzC,aAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,YAAM,MAAMA,MAAK,CAAC,GAAG,MAAM,IAAI,GAAG;AAClC,cAAQ,OAAO,IAAI,SAAS,SAAS,IAAI,QAAQ,QAAQ,KAAK,aAAa,KAAK,WAAW,SAAS,IAAI,GAAG,WAAW,OAAO,IAAI,OAAO,GAAG,IAAI,OAAO,GAAG,IAAI,aAAa,KAAK,WAAW,SAAS,IAAI,IAAI;AAAA,IAC7M;AACA,WAAO;AAAA,EACT;AACA,WAAS,WAAW,OAAO,QAAQ;AACjC,aAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,YAAM,IAAI,MAAM,CAAC;AACjB,UAAI,WAAW,KAAK,OAAO,WAAW,IAAI,GAAG,EAAG,QAAO;AAAA,IACzD;AACA,WAAO;AAAA,EACT;AACA,WAAS,SAAS,MAAM,QAAQ,CAAC,OAAO,IAAI,GAAG;AAC7C,aAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,IAAK,KAAI,KAAK,WAAW,CAAC,MAAM,GAAI;AAChF,WAAO;AAAA,EACT;AACA,WAAS,aAAa,SAAS,MAAM,UAAU,KAAK,CAAC,GAAG,SAAS,CAAC,GAAG;AACnE,WAAO,OAAO,OAAO,QAAQ,cAAc,OAAO,UAAU,EAAE,CAAC,OAAO,GAAG,QAAQ,IAAI,OAAO,GAAG;AAAA,EACjG;AACA,WAAS,OAAO,GAAG,GAAG,GAAG,GAAG;AAC1B,UAAM,SAAS,CAAC,CAAC,GAAG,QAAQ,SAAS,CAAC,UAAU,aAAa,OAAO,GAAG,CAACI,QAAO,MAAM,MAAM,MAAM,MAAM,IAAI,IAAI,SAAS,CAAC,EAAE,MAAM,EAAE,cAAc,MAAM,EAAE,cAAc,UAAU,EAAE,cAAc,OAAO,KAAK,KAAK,EAAE,IAAI,IAAI,SAAS,CAAC,GAAG,GAAG,QAAQ,GAAG,CAAC,GAAG,GAAG,KAAK,KAAK,MAAM,IAAI,CAAC,QAAQ,QAAQ,GAAG,GAAG,KAAK,KAAK,MAAM,GAAG,SAAS,SAAS,QAAQ,EAAE,MAAM,EAAE,cAAc,IAAI,IAAI,SAAS,QAAQA,QAAO,IAAI,IAAI;AACtZ,QAAI,UAAU,SAAS,SAAS,SAAS,YAAY,CAAC,UAAU,CAAC,UAAU,MAAM,IAAI,EAAG;AACxF,UAAM,OAAO,MAAM;AACjB,YAAM,OAAO,CAAC,SAAS,KAAK,QAAQ,SAAS,IAAI,UAAUJ,QAAO,OAAO,KAAK,GAAG,MAAM;AACrF,iBAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,gBAAM,MAAMA,MAAK,CAAC,GAAG,MAAM,IAAI,GAAG;AAClC,cAAI;AACF,iBAAK,KAAK,UAAU,SAAS,MAAM,QAAQ,GAAG,EAAG,SAAQ,GAAG,IAAI,KAAK,QAAQ,GAAG,EAAE,SAAS,QAAQ,GAAG,EAAE;AAAA,gBACnG,SAAQ,KAAK,UAAU,KAAK,IAAI,IAAI,KAAK,gCAAiB,CAAC,IAAG,KAAK,QAAQ,CAAC,KAAK,CAAC,KAAK,iBAAiB,QAAQ,YAAY,QAAQ,GAAG,IAAI;AAAA,UAClJ,SAAS,GAAG;AACV,gBAAI,aAAa,WAAY,OAAM;AAAA,UACrC;AAAA,QACF;AAAA,MACF;AACA,WAAK,KAAK,UAAU,SAAS,MAAM,QAAQ,IAAI,KAAK,OAAQ,SAAQI,QAAO,MAAM,IAAI,GAAG,QAAQA,QAAO,IAAI,EAAE,SAAS,KAAK;AAAA,UACtH,MAAK,QAAQ,KAAK,QAAQ,UAAU,MAAM,MAAM,IAAI,IAAI,MAAM,KAAK,UAAU,OAAO,WAAW,KAAK,KAAK;AAAA,IAChH;AACA,UAAM,MAAM,YAAY,MAAM,KAAK,WAAW,GAAG,OAAO,cAAc,IAAI,MAAM,QAAQ,QAAQ,OAAO,CAAC,GAAG,GAAG,MAAM;AAAA,EACtH;AACA,MAAI,gBAAgB,CAAC,SAAS,SAAS,UAAU,eAAe;AAChE,WAAS,MAAM,MAAM,OAAO,MAAM;AAChC,UAAMC,QAAO,IAAI;AACjB,QAAI,aAAa;AACjB,QAAI;AACF,aAAO,KAAK;AAAA,IACd,UAAE;AACA,UAAI,aAAaA;AAAA,IACnB;AAAA,EACF;AACA,WAAS,UAAU,IAAI,IAAI,SAAS,KAAK,YAAY,MAAM;AACzD,QAAI,cAAc,CAAC,OAAO,MAAM,KAAK,MAAM,KAAK,CAAC,OAAO,MAAM,KAAK,MAAM,GAAI,QAAO;AACpF,gBAAO,CAAC,IAAG,YAAO,CAAC;AACnB,UAAM,SAAS,OAAO,gBAAgB,EAAE,GAAG,GAAG,IAAI,EAAE,GAAG,IAAI,GAAG,GAAG;AACjE,QAAI,OAAO,eAAe;AACxB,YAAMF,SAAQ,OAAO,KAAK,EAAE;AAC5B,eAAS,IAAI,GAAG,MAAMA,OAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,cAAM,MAAMA,OAAM,CAAC,GAAG,MAAM,GAAG,GAAG;AAClC,YAAI,QAAQ,OAAQ,QAAO,GAAG,IAAI;AAAA,MACpC;AAAA,IACF;AACA,UAAMH,QAAO,OAAO,KAAK,MAAM;AAC/B,aAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,YAAM,MAAMA,MAAK,CAAC,GAAG,MAAM,GAAG,GAAG,GAAG,MAAM,GAAG,GAAG;AAChD,UAAI,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,MAAM,EAAG,QAAO,GAAG,IAAI,UAAU,KAAK,KAAK,QAAQ,KAAK;AAAA,IACjG;AACA,WAAO;AAAA,EACT;AACA,WAAS,gBAAgB,KAAK,MAAM,UAAU,OAAO;AACnD,UAAM,QAAQ,KAAK,MAAM,GAAG,GAAG,QAAQ,CAAC,CAAC,KAAK,KAAK,GAAG,CAAC;AACvD,aAAS,MAAM,IAAI,UAAU,KAAK,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AACzE,YAAM,OAAO,MAAM,CAAC;AACpB,YAAM,KAAK,CAAC,QAAQ,IAAI,MAAM,MAAM,MAAM,SAAS,UAAU,UAAU,IAAI,CAAC,CAAC;AAAA,IAC/E;AACA,WAAO,UAAU,MAAM,QAAQ,IAAI;AAAA,EACrC;AACA,WAAS,UAAU,KAAK,SAAS,IAAI,UAAU,OAAuB,oBAAI,QAAQ,GAAG;AACnF,QAAI,CAAC,OAAO,aAAa,OAAO,IAAK,QAAO;AAC5C,UAAM,SAAS,KAAK,IAAI,GAAG;AAC3B,QAAI,OAAQ,QAAO;AACnB,QAAI,CAAC,UAAU,KAAK,QAAQ,KAAK,EAAG,QAAO;AAC3C,UAAM,QAAQ,OAAO,kBAAkB,OAAO,OAAO,OAAO,eAAe,GAAG,CAAC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC;AAC9G,SAAK,IAAI,KAAK,KAAK;AACnB,UAAMA,QAAO,OAAO,kBAAkB,QAAQ,QAAQ,GAAG,IAAI,OAAO,KAAK,GAAG;AAC5E,aAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,YAAM,MAAMA,MAAK,CAAC;AAClB,UAAI;AACF,cAAM,GAAG,IAAI,UAAU,IAAI,GAAG,GAAG,QAAQ,IAAI;AAAA,MAC/C,SAAS,GAAG;AACV,YAAI,aAAa,WAAY,OAAM;AAAA,MACrC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,WAAS,KAAK,QAAQ;AACpB,UAAMA,QAAO,OAAO,KAAK,MAAM;AAC/B,aAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,YAAM,MAAMA,MAAK,CAAC;AAClB,UAAI,eAAe,OAAO,OAAO,GAAG,EAAG,QAAO,GAAG,IAAI;AAAA,IACvD;AAAA,EACF;AACA,WAAS,SAAS,OAAO,IAAI;AAC3B,QAAI,SAAJ,IAAI,OAAS,CAAC;AACd,UAAM,QAAQ,CAAC;AACf,eAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,YAAM,GAAG,IAAI,IAAI,KAAK,GAAG;AACzB,UAAI,KAAK,GAAG,IAAI,MAAM,GAAG;AAAA,IAC3B;AACA,QAAI;AACF,aAAO,GAAG;AAAA,IACZ,UAAE;AACA,iBAAW,OAAO,OAAO,KAAK,KAAK,GAAG;AACpC,YAAI,MAAM,GAAG,MAAM,OAAQ,WAAU,GAAG;AAAA,YACnC,KAAI,KAAK,GAAG,IAAI,MAAM,GAAG;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,WAAS,UAAU,KAAK;AACtB,QAAI,CAAC,IAAI,KAAM;AACf,WAAO,IAAI,KAAK,GAAG;AACnB,eAAW,KAAK,IAAI,KAAM;AAC1B,QAAI,OAAO;AAAA,EACb;AACA,WAAS,SAAS,KAAK,OAAO,KAAK,SAAS,IAAI,UAAU;AACxD,UAAM,SAAS,SAAS,MAAM,MAAM,QAAQ,KAAK,MAAM,OAAO,SAAS,GAAG,SAAS,CAAC,GAAG,OAAuB,oBAAI,IAAI;AACtH,QAAI,CAAC,UAAU,QAAQ,MAAM,EAAG,QAAO;AACvC,UAAM,OAAO,CAAC,MAAM,UAAU,UAAU;AACtC,UAAI,KAAK,IAAI,IAAI,KAAK,UAAU,OAAO,SAAS,IAAK;AACrD,WAAK,IAAI,IAAI;AACb,YAAMA,QAAO,OAAO,kBAAkB,QAAQ,QAAQ,IAAI,IAAI,OAAO,KAAK,IAAI;AAC9E,eAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,cAAM,MAAM,OAAOA,MAAK,CAAC,CAAC,GAAG,MAAM,KAAK,GAAG,GAAG,UAAU,WAAW,GAAG,QAAQ,GAAG,OAAO,aAAa,GAAG,GAAG,GAAG,KAAK;AACnH,eAAO,KAAK,OAAO;AACnB,YAAI;AACF,oBAAU,KAAK,MAAM,KAAK,KAAK,KAAK,SAAS,QAAQ,CAAC;AAAA,QACxD,SAAS,GAAG;AACV,cAAI,aAAa,WAAY,OAAM;AAAA,QACrC;AAAA,MACF;AACA,WAAK,OAAO,IAAI;AAAA,IAClB;AACA,WAAO,KAAK,QAAQ,SAAS,MAAM,KAAK,MAAM,CAAC,GAAG;AAAA,EACpD;AACA,WAAS,WAAW,KAAK,MAAM,SAAS,IAAI,UAAU,QAAQ,QAAQ,KAAK,MAAM,OAAO,SAAS,GAAG;AAClG,WAAO,SAAS,OAAO,CAAC,UAAU,OAAO,MAAM;AAAA,EACjD;AAGA,MAAI,OAAO;AACX,WAAS,QAAQ,QAAQ,MAAM,OAAO,CAAC,IAAI;AACzC,UAAM,SAAS,IAAI,MAAM,MAAM,MAAM,KAAK,EAAE,IAAI,EAAE,MAAM,OAAO,OAAO;AACtE,QAAI,SAAJ,IAAI,OAAS,CAAC;AACd,WAAO,IAAI,KAAK,KAAK;AAAA,EACvB;AACA,WAAS,MAAM,IAAI;AACjB,QAAI,IAAI,MAAM,OAAO,IAAI;AACvB,UAAI,GAAG,OAAQ,KAAI,KAAK,KAAK,GAAG;AAAA,UAC3B,WAAU,IAAI;AAAA,IACrB;AACA;AAAA,EACF;AACA,WAAS,YAAY,IAAI,OAAO;AAC9B,UAAM,KAAK,QAAQ,KAAK;AACxB,QAAI;AACF,aAAO,GAAG;AAAA,IACZ,UAAE;AACA,YAAM,EAAE;AAAA,IACV;AAAA,EACF;;;AC3SA;AA0BA,MAAI,gBAAe,WAAoB;AAAA;AAAA;AAAA;AAAA;AAAA,IA6CrC,YAAY,SAAS;AAnCrB;AAAA,wCAAa,GAAc;AAE3B;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA,qCAAU;AAEV;AAAA,sCAAW;AAEX;AAAA;AACA,uCAAY;AACZ,uCAAY;AACZ,iDAAsB;AACtB,0DAA+B;AAM7B,aAAO,OAAO,MAAM,OAAO;AAC3B,WAAK,aAAa,QAAQ;AAC1B,WAAK,OAAO,QAAQ,OAAO;AAC3B,WAAK,QAAQ,QAAQ,OAAO;AAC5B,WAAK,WAAW,QAAQ,OAAO;AAC/B,UAAI,KAAK,QAAQ,OAAO,cAAe,MAAK,UAAU;AACtD,UAAI,KAAK,QAAQ,OAAO,mBAAmB,SAAS,KAAK,aAAa,KAAK,QAAQ,OAAO,eAAgB,MAAK,WAAW;AAC1H,UAAI,KAAK,QAAQ,OAAO,gBAAiB,MAAK,YAAY,YAAY,IAAI;AAAA,IAC5E;AAAA;AAAA,IAEA,IAAI,qBAAqB;AACvB,aAAO,KAAK;AAAA,IACd;AAAA;AAAA,IAEA,kBAAkB;AAChB,WAAK,sBAAsB;AAAA,IAC7B;AAAA;AAAA,IAEA,IAAI,8BAA8B;AAChC,aAAO,KAAK;AAAA,IACd;AAAA;AAAA,IAEA,2BAA2B;AACzB,WAAK,sBAAsB;AAC3B,WAAK,+BAA+B;AAAA,IACtC;AAAA;AAAA,IAEA,IAAI,WAAW;AACb,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,QAAQ,SAAS;AACf,UAAI,CAAC,KAAK,WAAY,QAAO,KAAK,QAAQ,IAAI,iEAAiE,KAAK,UAAU,QAAQ,KAAK,IAAI,GAAG;AAClJ,UAAI,KAAK,eAAe,GAAc,gBAAiB,MAAK,QAAQ,IAAI,yCAAyC,KAAK,UAAU,QAAQ,KAAK,IAAI,8CAA8C;AAC/L,UAAI,KAAK,WAAY,MAAK,QAAQ,IAAI,kBAAkB,KAAK,YAAY,WAAW,GAAG,KAAK,UAAU,wBAAwB,KAAK,IAAI,GAAG,EAAE;AAAA,IAC9I;AAAA;AAAA,IAEA,IAAI,WAAW;AACb,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,OAAO,QAAQ;AACb,UAAI,CAAC,KAAK,WAAY,QAAO,KAAK,QAAQ,IAAI,gEAAgE,KAAK,UAAU,QAAQ,KAAK,IAAI,GAAG;AACjJ,UAAI,KAAK,eAAe,GAAc,gBAAiB,MAAK,QAAQ,IAAI,yCAAyC,KAAK,UAAU,QAAQ,KAAK,IAAI,8CAA8C;AAC/L,UAAI,KAAK,WAAY,MAAK,QAAQ,IAAI,kBAAkB,KAAK,YAAY,UAAU,GAAG,KAAK,UAAU,wBAAwB,KAAK,IAAI,GAAG,EAAE;AAAA,IAC7I;AAAA;AAAA,IAEA,eAAe;AACb,aAAO,gBAAgB,KAAK,MAAM,KAAK,MAAM,IAAI,EAAE,IAAI,CAAC,MAAM,EAAE,CAAC,CAAC;AAAA,IACpE;AAAA,EACF;AAAA,EAxGE,cAFiB,IAEV,QAAO;AAAA,EAEd,cAJiB,IAIV,mBAAkB;AAAA,EAEzB,cANiB,IAMV,aAAY;AAAA,EAEnB,cARiB,IAQV,kBAAiB,IARP;AA6GnB,MAAI,UAAU,MAAM;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAiClB,YAAY,SAAS,CAAC,GAAG,OAAO;AA/BhC;AAAA,iCAAM;AAEN;AAAA;AAGA;AAAA;AAAA;AAEA;AAAA;AAEA;AAAA,wCAAa;AAEb;AAAA;AAEA;AAAA;AAEA;AAAA;AAEA;AAAA;AACA,wCAA6B,oBAAI,QAAQ;AACzC;AACA;AACA;AACA;AACA;AASE,WAAK,OAAO,IAAI;AAChB,WAAK,SAAS,EAAE,GAAG,IAAI,UAAU,GAAG,MAAM;AAC1C,WAAK,OAAO,KAAK,QAAQ,MAAM;AAC/B,UAAI,MAAO,MAAK,SAAS,CAAC,CAAC,MAAM;AAAA,IACnC;AAAA,IACA,QAAQ,QAAQ,aAAa,OAAO,aAAa,OAAO,QAAQ,KAAK,MAAM;AACzE,UAAI,CAAC,UAAU,aAAa,OAAO,OAAQ,QAAO;AAClD,eAAS,OAAO,GAAG,KAAK;AACxB,UAAI,KAAK,OAAO,qBAAqB,UAAU,OAAO,CAAC,KAAK,KAAK,QAAQ,QAAQ,KAAK,KAAK,EAAG,QAAO;AACrG,YAAM,SAAS,KAAK,WAAW,IAAI,MAAM;AACzC,UAAI,OAAQ,QAAO;AACnB,UAAI,CAAC,UAAU,QAAQ,KAAK,QAAQ,KAAK,EAAG,QAAO;AACnD,kCAAe,OAAO,UAAU;AAChC,kCAAe,OAAO,UAAU;AAChC,YAAM,QAAQ,IAAI,MAAM,QAAQ;AAAA;AAAA,QAE9B,KAAK,CAAC,QAAQ,MAAM,aAAa;AAC/B,cAAI,SAAS,IAAK,QAAO,KAAK,IAAI,sCAAsC,MAAM,EAAE,GAAG;AACnF,cAAI,QAAQ,CAAC,KAAK,OAAO,kBAAkB,OAAO,IAAI,IAAI,QAAQ,IAAI,QAAQ,MAAM,QAAQ;AAC5F,gBAAM,SAAS,OAAO,IAAI,GAAG,WAAW,OAAO,OAAO,MAAM,SAAS,QAAQ,QAAQ,KAAK,OAAO,iBAAiB,KAAK,MAAM,QAAQ,MAAM,IAAI;AAC/I,eAAK,IAAI,2CAA2C,MAAM,SAAS,KAAK,GAAG,GAAG,IAAI,aAAa,MAAM,UAAU,IAAI;AACnH,cAAI,KAAK,OAAO,IAAK,SAAQ,KAAK,OAAO,IAAI,QAAQ,MAAM,OAAO,UAAU,KAAK;AACjF,cAAI,KAAK,SAAS;AAChB,kBAAM,YAAY,KAAK,QAAQ,IAAI,GAAG;AACtC,qBAAS,IAAI,GAAG,MAAM,KAAK,OAAO,iBAAiB,MAAM,SAAS,GAAG,IAAI,KAAK,KAAK;AACjF,oBAAM,WAAW,KAAK,OAAO,iBAAiB,MAAM,CAAC,IAAI,UAAU,QAAQ,KAAK,QAAQ,IAAI,QAAQ;AACpG,kBAAI,CAAC,SAAS,CAAC,UAAW;AAC1B,oBAAM,UAAU,EAAE,MAAM,UAAU,OAAO,KAAK,QAAQ,QAAQ,MAAM,QAAQ,SAAS,GAAG,UAAU,EAAE,MAAM,OAAO,QAAQ,SAAS,eAAe,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,YAAY,GAAG,IAAI,KAAK;AAClN,kBAAI,MAAO,SAAQ,KAAK,QAAQ,UAAU,SAAS,OAAO,KAAK;AAC/D,kBAAI,CAAC,UAAW;AAChB,sBAAQ,QAAQ;AAChB,sBAAQ,KAAK,QAAQ,KAAK,SAAS,OAAO,SAAS;AAAA,YACrD;AAAA,UACF;AACA,iBAAO,KAAK,QAAQ,OAAO,YAAY,YAAY,QAAQ,QAAQ,QAAQ;AAAA,QAC7E;AAAA,QACA,KAAK,CAAC,QAAQ,MAAM,OAAO,aAAa;AACtC,cAAI,WAAW,WAAW,cAAc,aAAa;AACrD,gBAAM,SAAS,OAAO,IAAI,GAAG,WAAW,OAAO,OAAO,MAAM,SAAS,QAAQ,QAAQ,KAAK,OAAO,iBAAiB,KAAK,MAAM,QAAQ,MAAM,IAAI,UAAU,UAAU,KAAK,OAAO,iBAAiB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,OAAO,kBAAkB,OAAO,IAAI,IAAI,QAAQ,IAAI,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,OAAO,kBAAkB,QAAQ,SAAS,QAAQ,IAAI,QAAQ,IAAI;AACjY,eAAK,IAAI,8CAA8C,MAAM,SAAS,KAAK,GAAG,GAAG,IAAI,aAAa,MAAM,UAAU,MAAM,IAAI;AAC5H,cAAI,KAAK,OAAO,qBAAqB,CAAC,YAAY;AAChD,2BAAe,WAAW,GAAG,KAAK;AAClC,wBAAY,QAAQ,GAAG,KAAK;AAC5B,wBAAY,KAAK,OAAO,iBAAiB,WAAW,YAAY;AAAA,UAClE;AACA,cAAI,CAAC,cAAc,aAAa,CAAC,IAAI,cAAc,WAAW,SAAU,QAAO,KAAK,IAAI,2CAA2C,MAAM,SAAS,KAAK,GAAG,GAAG;AAC7J,cAAI,KAAK,OAAO,IAAK,eAAc,QAAQ,KAAK,OAAO,IAAI,QAAQ,MAAM,OAAO,UAAU,UAAU,KAAK,OAAO;AAChH,cAAI,KAAK,SAAS;AAChB,kBAAM,YAAY,KAAK,QAAQ,IAAI,GAAG;AACtC,qBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,oBAAM,WAAW,KAAK,OAAO,iBAAiB,MAAM,CAAC,IAAI,UAAU,QAAQ,KAAK,QAAQ,IAAI,QAAQ;AACpG,kBAAI,CAAC,SAAS,CAAC,UAAW;AAC1B,oBAAM,UAAU,EAAE,MAAM,UAAU,OAAO,UAAU,KAAK,QAAQ,QAAQ,QAAQ,SAAS,GAAG,UAAU,EAAE,MAAM,OAAO,QAAQ,SAAS,eAAe,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,YAAY,YAAY,GAAG,IAAI,KAAK;AAClO,kBAAI,OAAO;AACT,sBAAM,UAAU,KAAK,QAAQ,UAAU,SAAS,OAAO,KAAK;AAC5D,oBAAI,EAAE,4BAAe,QAAQ,aAAa,SAAQ;AAAA,cACpD;AACA,kBAAI,CAAC,UAAW;AAChB,sBAAQ,QAAQ;AAChB,oBAAM,SAAS,KAAK,QAAQ,KAAK,SAAS,OAAO,SAAS;AAC1D,kBAAI,EAAE,4BAAe,QAAQ,aAAa,SAAQ;AAAA,YACpD;AAAA,UACF;AACA,cAAI,WAAY,QAAO,KAAK,IAAI,kDAAkD,MAAM,SAAS,KAAK,GAAG,GAAG;AAC5G,gBAAM,UAAU,CAAC,KAAK,OAAO,mBAAmB,OAAO,IAAI,IAAI,OAAO,QAAQ,QAAQ,IAAI,QAAQ,MAAM,OAAO,QAAQ;AACvH,cAAI,CAAC,QAAS,QAAO,KAAK,IAAI,qCAAqC,MAAM,SAAS,KAAK,GAAG,GAAG;AAC7F,cAAI,KAAK,OAAO,qBAAqB,CAAC,UAAW,MAAK,OAAO,gBAAgB,KAAK,MAAM,MAAM,GAAG,KAAK,OAAO,cAAc,QAAQ,MAAM,GAAG,KAAK,KAAK,WAAW,QAAQ,MAAM;AAC/K,cAAI,KAAK,YAAY,KAAK;AACxB,qBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,oBAAM,WAAW,KAAK,OAAO,iBAAiB,MAAM,CAAC,IAAI,UAAU,UAAU,EAAE,MAAM,UAAU,OAAO,UAAU,KAAK,QAAQ,QAAQ,QAAQ,SAAS;AACtJ,mBAAK,OAAO,UAAU,EAAE,MAAM,OAAO,QAAQ,SAAS,eAAe,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,YAAY,YAAY,GAAG,IAAI,KAAK,CAAC;AAAA,YACrJ;AACF,iBAAO;AAAA,QACT;AAAA,QACA,gBAAgB,CAAC,QAAQ,SAAS;AAChC,cAAI,OAAO,WAAW,KAAK,WAAW,IAAI,MAAM,GAAG,aAAa;AAChE,gBAAM,SAAS,OAAO,IAAI,GAAG,WAAW,OAAO,OAAO,MAAM,SAAS,QAAQ,QAAQ,KAAK,OAAO,iBAAiB,KAAK,MAAM,QAAQ,MAAM,IAAI,UAAU,UAAU,KAAK,OAAO,iBAAiB,MAAM,SAAS,GAAG,WAAW,CAAC,KAAK,OAAO,kBAAkB,OAAO,IAAI,IAAI,QAAQ,IAAI,QAAQ,MAAM,QAAQ,GAAG,SAAS,CAAC,KAAK,OAAO,kBAAkB,QAAQ,SAAS,QAAQ,IAAI,QAAQ,IAAI;AACjY,eAAK,IAAI,4DAA4D,MAAM,SAAS,KAAK,GAAG,GAAG,IAAI,aAAa,MAAM,UAAU,MAAM,IAAI;AAC1I,cAAI,KAAK,OAAO,eAAgB,eAAc,QAAQ,KAAK,OAAO,eAAe,QAAQ,MAAM,UAAU,UAAU,KAAK,OAAO;AAC/H,cAAI,KAAK,UAAU;AACjB,kBAAM,YAAY,KAAK,SAAS,IAAI,GAAG;AACvC,qBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,oBAAM,WAAW,KAAK,OAAO,iBAAiB,MAAM,CAAC,IAAI,UAAU,QAAQ,KAAK,SAAS,IAAI,QAAQ;AACrG,kBAAI,CAAC,SAAS,CAAC,UAAW;AAC1B,oBAAM,UAAU,EAAE,MAAM,UAAU,OAAO,UAAU,KAAK,QAAQ,QAAQ,QAAQ,SAAS,GAAG,UAAU,EAAE,MAAM,UAAU,QAAQ,SAAS,eAAe,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,YAAY,GAAG,IAAI,KAAK;AACzN,kBAAI,OAAO;AACT,sBAAM,UAAU,KAAK,QAAQ,UAAU,SAAS,UAAU,KAAK;AAC/D,oBAAI,EAAE,4BAAe,QAAQ,aAAa,SAAQ;AAAA,cACpD;AACA,kBAAI,CAAC,UAAW;AAChB,oBAAM,SAAS,KAAK,QAAQ,KAAK,SAAS,UAAU,SAAS;AAC7D,kBAAI,EAAE,4BAAe,QAAQ,aAAa,SAAQ;AAAA,YACpD;AAAA,UACF;AACA,cAAI,WAAY,QAAO,KAAK,IAAI,6DAA6D,MAAM,SAAS,KAAK,GAAG,GAAG;AACvH,gBAAM,UAAU,CAAC,KAAK,OAAO,kBAAkB,OAAO,OAAO,IAAI,IAAI,QAAQ,eAAe,QAAQ,IAAI;AACxG,cAAI,CAAC,QAAS,QAAO,KAAK,IAAI,gDAAgD,MAAM,SAAS,KAAK,GAAG,GAAG;AACxG,cAAI,KAAK,OAAO,kBAAmB,MAAK,OAAO,gBAAgB,KAAK,MAAM,MAAM,GAAG,KAAK,OAAO,WAAW,GAAG,KAAK,UAAU,QAAQ,MAAM;AAC1I,cAAI,KAAK,YAAY,KAAK;AACxB,qBAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,oBAAM,WAAW,KAAK,OAAO,iBAAiB,MAAM,CAAC,IAAI,UAAU,UAAU,EAAE,MAAM,UAAU,OAAO,UAAU,KAAK,QAAQ,QAAQ,QAAQ,SAAS;AACtJ,mBAAK,OAAO,UAAU,EAAE,MAAM,UAAU,QAAQ,SAAS,eAAe,SAAS,MAAM,KAAK,MAAM,SAAS,MAAM,YAAY,GAAG,IAAI,KAAK,CAAC;AAAA,YAC5I;AACF,iBAAO;AAAA,QACT;AAAA,QACA,KAAK,CAAC,QAAQ,SAAS;AACrB,cAAI,MAAM,CAAC,KAAK,OAAO,kBAAkB,QAAQ,SAAS,QAAQ,IAAI,QAAQ,IAAI;AAClF,gBAAM,SAAS,OAAO,IAAI,GAAG,WAAW,OAAO,OAAO,MAAM,SAAS;AACrE,eAAK,IAAI,wCAAwC,MAAM,SAAS,QAAQ,GAAG,GAAG,IAAI,aAAa,MAAM,UAAU,IAAI;AACnH,cAAI,KAAK,OAAO,IAAK,OAAM,KAAK,OAAO,IAAI,QAAQ,MAAM,KAAK,KAAK,WAAW,IAAI,MAAM,GAAG,QAAQ;AACnG,iBAAO;AAAA,QACT;AAAA,QACA,0BAA0B,CAAC,QAAQ,SAAS;AAC1C,cAAI,aAAa,CAAC,KAAK,OAAO,kBAAkB,OAAO,yBAAyB,QAAQ,IAAI,IAAI,QAAQ,yBAAyB,QAAQ,IAAI;AAC7I,gBAAM,SAAS,OAAO,IAAI,GAAG,WAAW,OAAO,OAAO,MAAM,SAAS;AACrE,eAAK,IAAI,gEAAgE,MAAM,SAAS,QAAQ,GAAG,GAAG,IAAI,aAAa,MAAM,UAAU,IAAI;AAC3I,cAAI,KAAK,OAAO,yBAA0B,cAAa,KAAK,OAAO,yBAAyB,QAAQ,MAAM,YAAY,KAAK,WAAW,IAAI,MAAM,GAAG,KAAK,OAAO,iBAAiB,KAAK,MAAM,QAAQ,MAAM,IAAI,QAAQ;AACrN,iBAAO;AAAA,QACT;AAAA,QACA,SAAS,CAAC,WAAW;AACnB,cAAI,UAAU,QAAQ,QAAQ,MAAM;AACpC,gBAAM,WAAW,QAAQ;AACzB,eAAK,IAAI,8CAA8C,QAAQ,GAAG,GAAG,IAAI,aAAa,MAAM,UAAU,IAAI;AAC1G,cAAI,KAAK,OAAO,QAAS,WAAU,KAAK,OAAO,QAAQ,QAAQ,SAAS,KAAK,WAAW,IAAI,MAAM,GAAG,QAAQ;AAC7G,iBAAO;AAAA,QACT;AAAA,MACF,CAAC;AACD,aAAO,KAAK,WAAW,IAAI,QAAQ,KAAK,GAAG;AAAA,IAC7C;AAAA,IACA,MAAM,QAAQ,MAAM,QAAQ,CAAC,GAAG,OAAuB,oBAAI,QAAQ,GAAG;AACpE,UAAI,OAAO,GAAG,QAAQ,KAAK,KAAK,GAAG,KAAK,KAAK,IAAI,EAAG,QAAO,MAAM,KAAK,IAAI,GAAG;AAC7E,UAAI,KAAK,IAAI,MAAM,EAAG,QAAO;AAC7B,WAAK,IAAI,MAAM;AACf,YAAM,MAAM,KAAK,YAAL,KAAK,UAA4B,oBAAI,QAAQ,IAAG,IAAI,MAAM;AACtE,UAAI,CAAC,GAAI,QAAO;AAChB,eAAS,IAAI,GAAG,MAAM,GAAG,QAAQ,IAAI,KAAK,KAAK,GAAG;AAChD,cAAMM,QAAO,GAAG,IAAI,CAAC;AACrB,aAAK,MAAM,GAAG,CAAC,GAAGA,QAAOA,QAAO,MAAM,OAAO,MAAM,OAAO,IAAI;AAAA,MAChE;AACA,aAAO;AAAA,IACT;AAAA;AAAA,IAEA,KAAK,QAAQ,QAAQ,KAAK,YAAY,MAAM,IAAI;AAC9C,UAAI,CAAC,UAAU,QAAQ,KAAK,QAAQ,SAAS,EAAG,QAAO;AACvD,YAAM,KAAK,YAAL,KAAK,UAA4B,oBAAI,QAAQ,IAAG,IAAI,MAAM,MAAM,KAAK,QAAQ,IAAI,QAAQ,KAAK,CAAC,CAAC,GAAG;AACzG,eAAS,IAAI,GAAG,MAAM,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAG,KAAI,OAAO,GAAG,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAK,QAAO;AAC5G,aAAO,GAAG,KAAK,QAAQ,GAAG,GAAG;AAAA,IAC/B;AAAA,IACA,OAAO,QAAQ,QAAQ,KAAK;AAC1B,UAAI,CAAC,UAAU,QAAQ,KAAK,MAAM,EAAG;AACrC,YAAM,MAAM,KAAK,YAAL,KAAK,UAA4B,oBAAI,QAAQ,IAAG,IAAI,MAAM;AACtE,UAAI,IAAI;AACN,iBAAS,IAAI,GAAG,MAAM,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAG,KAAI,OAAO,GAAG,GAAG,CAAC,GAAG,MAAM,KAAK,GAAG,IAAI,CAAC,MAAM,IAAK,QAAO,KAAK,GAAG,OAAO,GAAG,CAAC;AAAA,MACjI;AAAA,IACF;AAAA,IACA,MAAM,QAAQ,YAAY,MAAM,OAAuB,oBAAI,QAAQ,GAAG;AACpE,UAAI,aAAa,aAAa,OAAO,OAAQ;AAC7C,eAAS,OAAO,GAAG,KAAK;AACxB,UAAI,KAAK,IAAI,MAAM,EAAG;AACtB,WAAK,IAAI,MAAM;AACf,aAAO,OAAO,KAAK,OAAO,OAAO,KAAK,KAAK;AAC3C,YAAM,MAAM,KAAK,YAAL,KAAK,UAA4B,oBAAI,QAAQ,IAAG,IAAI,MAAM;AACtE,UAAI,GAAI,UAAS,IAAI,GAAG,MAAM,GAAG,QAAQ,IAAI,KAAK,KAAK,EAAG,MAAK,MAAM,GAAG,CAAC,GAAG,OAAO,IAAI;AAAA,IACzF;AAAA,IACA,QAAQ,MAAM,SAAS,MAAM,OAAO;AAClC,UAAI,aAAa,OAAO,QAAQ,QAAQ,OAAO,OAAO,SAAS;AAC/D,YAAM,QAAQ,SAAS,OAAO,QAAQ,SAAS,OAAO,YAAY,QAAQ,KAAK,UAAU,QAAQ,KAAK,UAAU,KAAK,UAAU,SAAS,MAAM,MAAM;AACpJ,eAAS,OAAO,OAAO,QAAQ,IAAI,CAAC,QAAQ,IAAI,OAAO,GAAG,MAAM,CAAC,QAAQ,OAAO,IAAI,MAAM,KAAK,KAAK,CAAC,QAAQ,IAAI,IAAI;AACnH,cAAM,OAAO,OAAO,CAAC;AACrB,YAAI,KAAK,MAAO;AAChB,cAAM,WAAW,QAAQ,KAAK,GAAG,OAAO,OAAO,IAAI,QAAQ,KAAK,GAAG,OAAO,YAAY,OAAO,IAAI,KAAK,GAAG,YAAY,OAAO;AAC5H,YAAI,SAAS,EAAE,4BAAe,QAAQ,aAAa,aAAa,aAAa,SAAQ;AACrF,YAAI,KAAK,KAAM,MAAK,QAAQ,MAAM,SAAS;AAAA,MAC7C;AACA,UAAI,QAAQ;AACV,iBAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,MAAM,CAAC,EAAE,MAAO,OAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,UAAU,UAAU,OAAO,IAAI;AAAA,MAC5H;AACA,aAAO;AAAA,IACT;AAAA,IACA,OAAO,MAAM,SAAS;AACpB,UAAI,KAAK,UAAU;AACjB,cAAM,YAAY,KAAK,SAAS,IAAI,GAAG,GAAG,aAAa,WAAW,MAAM,GAAG,QAAQ,KAAK,SAAS,IAAI,IAAI,GAAG,SAAS,OAAO,MAAM;AAClI,YAAI,OAAO;AACT,cAAI,SAAS;AACb,mBAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,kBAAM,OAAO,OAAO,CAAC;AACrB,gBAAI,KAAK,MAAO;AAChB,iBAAK,GAAG,QAAQ,OAAO,OAAO,OAAO;AACrC,gBAAI,KAAK,KAAM,MAAK,QAAQ,MAAM,SAAS;AAAA,UAC7C;AACA,cAAI,QAAQ;AACV,qBAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,MAAM,CAAC,EAAE,MAAO,OAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,SAAS,OAAO,IAAI;AAAA,UAChI;AAAA,QACF;AACA,YAAI,WAAW;AACb,cAAI,SAAS;AACb,mBAAS,IAAI,GAAG,MAAM,WAAW,QAAQ,IAAI,KAAK,KAAK;AACrD,kBAAM,WAAW,WAAW,CAAC;AAC7B,gBAAI,SAAS,MAAO;AACpB,qBAAS,GAAG,QAAQ,OAAO,OAAO,OAAO;AACzC,gBAAI,SAAS,KAAM,UAAS,QAAQ,MAAM,SAAS;AAAA,UACrD;AACA,cAAI,QAAQ;AACV,qBAAS,IAAI,UAAU,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,UAAU,CAAC,EAAE,MAAO,WAAU,OAAO,GAAG,CAAC,GAAG,CAAC,UAAU,UAAU,KAAK,SAAS,OAAO,GAAG;AAAA,UAC/I;AAAA,QACF;AAAA,MACF;AACA,WAAK,aAAa,KAAK,SAAS,MAAM,OAAO;AAAA,IAC/C;AAAA,IACA,SAAS,MAAM,SAAS;AACtB,WAAK,UAAL,KAAK,QAA0B,oBAAI,IAAI;AACvC,WAAK,MAAM,IAAI,MAAM,OAAO,GAAG,CAAC,KAAK,cAAc,KAAK,aAAa;AAAA,IACvE;AAAA,IACA,eAAe;AACb,WAAK,aAAa,MAAM,KAAK,OAAO,iBAAiB,MAAM,KAAK,MAAM,CAAC;AAAA,IACzE;AAAA,IACA,QAAQ;AACN,WAAK,aAAa,OAAO,KAAK,SAAS,KAAK,KAAK,KAAK,MAAM,KAAK,CAAC;AAClE,UAAI,KAAK,OAAO,KAAM,YAAW,QAAQ,KAAK,MAAO,MAAK,GAAG,KAAK,MAAM,OAAO,IAAI;AAAA,IACrF;AAAA,IACA,KAAK,MAAM,SAAS;AAClB,YAAM,IAAI,IAAI,aAAa,OAAO,GAAG,QAAQ,gBAAgB,KAAK,MAAM,IAAI;AAC5E,UAAI,EAAE,UAAU;AACd,UAAE,aAAa,aAAa;AAC5B,iBAAS,IAAI,GAAG,KAAK,MAAM,SAAS,GAAG,KAAK;AAC1C,cAAI,EAAE,mBAAoB;AAC1B,eAAK,KAAK,MAAM,CAAC,GAAG,GAAG,IAAI;AAAA,QAC7B;AACA,YAAI,EAAE,mBAAoB;AAAA,MAC5B;AACA,QAAE,aAAa,aAAa;AAC5B,WAAK,KAAK,MAAM,MAAM,SAAS,CAAC,GAAG,GAAG,IAAI;AAC1C,OAAC,EAAE,+BAA+B,KAAK,KAAK,MAAM,MAAM,SAAS,CAAC,GAAG,GAAG,KAAK;AAC7E,UAAI,EAAE,SAAS;AACb,UAAE,aAAa,aAAa;AAC5B,iBAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,KAAK;AAC1C,cAAI,EAAE,mBAAoB;AAC1B,eAAK,KAAK,MAAM,CAAC,GAAG,GAAG,KAAK;AAAA,QAC9B;AAAA,MACF;AAAA,IACF;AAAA,IACA,KAAK,CAAC,MAAM,QAAQ,KAAK,GAAG,GAAG,WAAW,QAAQ,KAAK,UAAU,IAAI,IAAI,GAAG;AAC1E,UAAI,CAAC,MAAO;AACZ,QAAE,OAAO,SAAS,EAAE,OAAO,OAAO,WAAW,EAAE;AAC/C,QAAE,gBAAgB,EAAE,MAAM,OAAO,UAAU,EAAE,SAAS,WAAW,EAAE,OAAO,WAAW,QAAQ,KAAK,EAAE,SAAS,WAAW,OAAO,KAAK,MAAM,KAAK,YAAY,GAAG,IAAI,CAAC,KAAK,IAAI,QAAQ,EAAE,SAAS,WAAW,EAAE,OAAO,SAAS,MAAM,OAAO;AACzO,UAAI,SAAS;AACb,YAAM,SAAS,MAAM,MAAM;AAC3B,eAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,QAAQ,IAAI,KAAK,KAAK;AACzD,cAAM,OAAO,OAAO,CAAC;AACrB,YAAI,EAAE,4BAA6B;AACnC,YAAI,KAAK,YAAY,aAAa,KAAK,MAAO;AAC9C,YAAI,KAAK,UAAU,QAAQ;AACzB,8BAAW,SAAS,EAAE,OAAO,IAAI;AACjC,cAAI,SAAS,KAAK,SAAS,KAAK,MAAO;AAAA,QACzC;AACA,aAAK,GAAG,CAAC;AACT,YAAI,KAAK,KAAM,MAAK,QAAQ,MAAM,SAAS;AAAA,MAC7C;AACA,UAAI,QAAQ;AACV,iBAAS,IAAI,MAAM,SAAS,GAAG,KAAK,GAAG,IAAK,KAAI,MAAM,CAAC,EAAE,MAAO,OAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,UAAU,OAAO,IAAI;AAAA,MACjI;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,KAAK,OAAO;AACV,UAAI,CAAC,SAAS,UAAU,IAAK,QAAO,KAAK,MAAM;AAC/C,UAAI,aAAa,OAAO,OAAO;AAC7B,cAAM,UAAU,KAAK,OAAO,IAAI,KAAK;AACrC,oBAAY,KAAK,MAAM,OAAO,KAAK,GAAG,KAAK,KAAK,OAAO,OAAO;AAAA,MAChE;AACE,mBAAW,QAAQ,OAAO;AACxB,gBAAM,UAAU,KAAK,MAAM,IAAI,IAAI;AACnC,sBAAY,KAAK,MAAM,OAAO,IAAI,GAAG,KAAK,KAAK,MAAM,OAAO;AAAA,QAC9D;AAAA,IACJ;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAQA,MAAM,MAAM;AACV,OAAC,KAAK,UAAL,KAAK,QAA0B,oBAAI,IAAI,IAAG,IAAI,IAAI,GAAG,CAAC,KAAK,cAAc,KAAK,aAAa;AAAA,IAC9F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,QAAQ,MAAM;AACZ,aAAO,KAAK,OAAO,OAAO,IAAI;AAAA,IAChC;AAAA,IACA,QAAQ,MAAM;AACZ,YAAM,OAAO,KAAK,YAAY,GAAG,GAAG,MAAM,KAAK,MAAM,OAAO,CAAC,KAAK,IAAI,SAAS,SAAS,KAAK,KAAK,OAAO,QAAQ,KAAK,MAAM,KAAK,MAAM,GAAG,IAAI,CAAC;AAC/I,aAAO,EAAE,MAAM,OAAO,QAAQ,KAAK,MAAM,IAAI,GAAG,KAAK,QAAQ,CAAC,UAAU,OAAO,QAAQ,OAAO;AAAA,IAChG;AAAA,IACA,OAAO,MAAM,KAAK;AAChB,UAAI,IAAK,KAAI,UAAU,KAAK,KAAK,IAAI,IAAI,iBAAiB,SAAS,KAAK,MAAM,EAAE,MAAM,KAAK,CAAC;AAC5F,aAAO,KAAK,QAAQ,CAAC,OAAO,IAAI,UAAU,OAAO,MAAM,IAAI,oBAAoB,SAAS,KAAK,IAAI,GAAG,KAAK;AAAA,IAC3G;AAAA,IACA,OAAO,QAAQ,KAAK,OAAuB,oBAAI,QAAQ,GAAG;AACxD,UAAI,CAAC,UAAU,aAAa,OAAO,OAAQ,QAAO;AAClD,YAAM,MAAM,OAAO,GAAG,KAAK,QAAQ,SAAS,KAAK,IAAI,GAAG;AACxD,UAAI,OAAQ,QAAO;AACnB,UAAI,CAAC,UAAU,KAAK,KAAK,QAAQ,KAAK,EAAG,QAAO;AAChD,YAAM,UAAU,IAAI,OAAO,KAAK,GAAG,SAAS,CAAC,OAAO,KAAK,OAAO,iBAAiB,KAAK,cAAL,KAAK,YAA8B,oBAAI,QAAQ,IAAG,IAAI,GAAG;AAC1I,UAAI,UAAU,IAAI,SAAS,MAAM,QAAS,QAAO;AACjD,YAAM,QAAQ,CAAC,MAAM,KAAK,OAAO,kBAAkB,OAAO,OAAO,OAAO,eAAe,GAAG,CAAC,IAAI,MAAM,QAAQ,GAAG,IAAI,CAAC,IAAI,CAAC,IAAI;AAC9H,WAAK,IAAI,KAAK,KAAK;AACnB,YAAMC,QAAO,KAAK,OAAO,kBAAkB,QAAQ,QAAQ,GAAG,IAAI,OAAO,KAAK,GAAG;AACjF,eAAS,IAAI,GAAG,MAAMA,MAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,cAAM,MAAMA,MAAK,CAAC;AAClB,YAAI;AACF,gBAAM,GAAG,IAAI,KAAK,OAAO,IAAI,GAAG,GAAG,KAAK,IAAI;AAAA,QAC9C,SAAS,GAAG;AACV,cAAI,aAAa,WAAY,OAAM;AAAA,QACrC;AAAA,MACF;AACA,UAAI,CAAC,OAAO,KAAK,OAAO,aAAc,MAAK,UAAU,IAAI,KAAK,KAAK,GAAG,IAAI,SAAS,IAAI;AACvF,aAAO;AAAA,IACT;AAAA,IACA,OAAO,KAAK,MAAM,IAAI,MAAM,SAAS,MAAM;AAjf7C,UAAAC;AAkfI,YAAM,EAAE,OAAO,OAAO,QAAQ,OAAO,OAAO,MAAAC,QAAO,OAAO,SAAS,IAAI,aAAa,MAAM,SAAS,QAAQ,GAAG,QAAQ,KAAAD,MAAK,GAAG,GAAG,GAAG,IAAI,SAAS,GAAG,IAAI,MAAM,EAAE,WAA1C,KAAAA,OAAqE,oBAAI,IAAI;AACnM,UAAI,QAAQ,MAAM,IAAI,IAAI,GAAG;AAC7B,UAAI;AACF,iBAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,gBAAM,SAAS,MAAM,CAAC;AACtB,cAAI,OAAO,GAAG,OAAO,IAAI,EAAE,GAAG;AAC5B,mBAAO;AACP;AAAA,UACF;AAAA,QACF;AACF,UAAI,KAAM,QAAO,KAAK;AACtB,UAAI;AACJ,aAAO,EAAE,IAAI,MAAM,MAAM,OAAO,QAAQ,KAAK,QAAQ,IAAI,GAAG,KAAK,KAAK,GAAG,EAAE,EAAE,MAAM,EAAE,GAAG;AACxF,aAAO,OAAO,UAAU,MAAM,IAAI,MAAM,QAAQ,CAAC,CAAC,GAAG,QAAQ,KAAK,IAAI;AACtE,aAAO,KAAK,MAAM,IAAI,IAAI,KAAK,GAAGC,UAASA,UAAS,UAAU,QAAQ,KAAK,MAAM,IAAI,MAAM,OAAO,QAAQ;AAC1G,aAAO,KAAK,OAAO,MAAM,MAAM;AAAA,IACjC;AAAA;AAAA,IAEA,QAAQ,OAAO,MAAM,IAAI;AACvB,YAAM,QAAQ,OAAO,IAAI,IAAI;AAC7B,UAAI,CAAC,MAAO,QAAO;AACnB,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,cAAM,OAAO,MAAM,CAAC;AACpB,YAAI,OAAO,GAAG,KAAK,IAAI,EAAE,EAAG,QAAO,KAAK,MAAM,GAAG,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,UAAU,MAAM,OAAO,IAAI,GAAG,KAAK,QAAQ;AAAA,MACzH;AACA,aAAO;AAAA,IACT;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,IAAI,MAAM,UAAU,SAAS;AAC3B,aAAO,KAAK,OAAO,OAAO,MAAM,UAAU,SAAS,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC;AAAA,IACnF;AAAA;AAAA,IAEA,MAAM,MAAM,UAAU,SAAS;AAC7B,aAAO,KAAK,IAAI,MAAM,UAAU,EAAE,GAAG,aAAa,SAAS,SAAS,QAAQ,GAAG,MAAM,KAAK,CAAC;AAAA,IAC7F;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,MAAM,UAAU;AACpB,aAAO,KAAK,QAAQ,KAAK,SAAS,MAAM,QAAQ;AAAA,IAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,IAAI,MAAM,UAAU,SAAS;AAC3B,aAAO,KAAK,OAAO,OAAO,MAAM,UAAU,SAAS,OAAO,MAAM,MAAM,QAAQ,KAAK,MAAM,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE;AAAA,IAC7I;AAAA;AAAA,IAEA,MAAM,MAAM,UAAU,SAAS;AAC7B,aAAO,KAAK,IAAI,MAAM,UAAU,OAAO,OAAO,aAAa,SAAS,SAAS,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;AAAA,IACzG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,MAAM,MAAM,UAAU;AACpB,aAAO,KAAK,QAAQ,KAAK,SAAS,MAAM,QAAQ;AAAA,IAClD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,MAAM,UAAU,SAAS;AAC9B,aAAO,KAAK,OAAO,UAAU,MAAM,UAAU,SAAS,MAAM,WAAW,KAAK,MAAM,IAAI,CAAC;AAAA,IACzF;AAAA;AAAA,IAEA,MAAM,MAAM,UAAU,SAAS;AAC7B,aAAO,KAAK,OAAO,MAAM,UAAU,OAAO,OAAO,aAAa,SAAS,SAAS,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;AAAA,IAC5G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,SAAS,MAAM,UAAU;AACvB,aAAO,KAAK,QAAQ,KAAK,UAAU,MAAM,QAAQ;AAAA,IACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,MAAM,MAAM,UAAU,SAAS;AAC7B,aAAO,KAAK,OAAO,SAAS,MAAM,UAAU,SAAS,CAAC,SAAS,CAAC,QAAQ,CAAC,WAAW,SAAS,OAAO,OAAO,EAAE,MAAM,QAAQ,QAAQ,eAAe,QAAQ,MAAM,KAAK,MAAM,YAAY,MAAM,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,MAAM,SAAS,QAAQ,QAAQ,KAAK,MAAM,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,IAAI,WAAW,KAAK,MAAM,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI,EAAE;AAAA,IAC1V;AAAA;AAAA,IAEA,MAAM,MAAM,UAAU,SAAS;AAC7B,aAAO,KAAK,MAAM,MAAM,UAAU,OAAO,OAAO,aAAa,SAAS,SAAS,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;AAAA,IAC3G;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,QAAQ,MAAM,UAAU;AACtB,aAAO,KAAK,QAAQ,KAAK,UAAU,MAAM,QAAQ;AAAA,IACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAWA,GAAG,MAAM,UAAU,SAAS;AAC1B,WAAK,cAAL,KAAK,YAA8B,oBAAI,IAAI;AAC3C,YAAM,EAAE,SAAAC,WAAU,OAAO,OAAO,OAAO,QAAQ,MAAAD,QAAO,OAAO,UAAU,MAAM,MAAM,IAAI,aAAa,SAAS,SAAS,QAAQ;AAC9H,UAAI,QAAQ,KAAK,UAAU,IAAI,IAAI,GAAG;AACtC,UAAI;AACF,iBAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,gBAAM,SAAS,MAAM,CAAC;AACtB,cAAI,OAAO,GAAG,OAAO,IAAI,QAAQ,KAAKC,aAAY,OAAO,SAAS;AAChE,mBAAO;AACP;AAAA,UACF;AAAA,QACF;AACF,UAAI,KAAM,QAAO,KAAK;AACtB,aAAO,EAAE,IAAI,UAAU,SAAAA,UAAS,OAAO,MAAM,MAAM,MAAM,KAAK,IAAI,MAAM,UAAU,OAAO,GAAG,QAAQ,UAAU,SAAS,SAAS,IAAI,IAAI,MAAM;AAC9I,OAAC,UAAU,KAAK,UAAU,IAAI,MAAM,QAAQ,CAAC,CAAC,GAAG,QAAQ,KAAK,IAAI;AAClE,MAAAD,UAASA,UAAS,UAAU,QAAQ,KAAK,MAAM,IAAI,OAAO,CAAC,QAAQ,CAAC,WAAW,SAAS,IAAI,aAAa,EAAE,MAAM,QAAQ,QAAQ,eAAe,QAAQ,MAAM,KAAK,MAAM,SAAS,MAAM,YAAY,MAAM,CAAC,CAAC,GAAG,KAAK,QAAQ,IAAI,CAAC,KAAK,MAAM,MAAM,SAAS,QAAQ,QAAQ,KAAK,MAAM,MAAM,QAAQ,KAAK,MAAM,IAAI,CAAC,IAAI,WAAW,KAAK,MAAM,IAAI,CAAC,GAAG,KAAK,KAAK,IAAI;AACpW,aAAO,KAAK,OAAO,MAAM,MAAM;AAAA,IACjC;AAAA;AAAA,IAEA,KAAK,MAAM,UAAU,SAAS;AAC5B,aAAO,KAAK,GAAG,MAAM,UAAU,OAAO,OAAO,aAAa,SAAS,SAAS,QAAQ,GAAG,EAAE,MAAM,KAAK,CAAC,CAAC;AAAA,IACxG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAYA,IAAI,MAAM,UAAU,SAAS;AAC3B,YAAM,QAAQ,KAAK,WAAW,IAAI,IAAI;AACtC,UAAI,CAAC,MAAO,QAAO;AACnB,YAAM,EAAE,SAAAC,WAAU,MAAM,IAAI,aAAa,SAAS,SAAS,QAAQ;AACnE,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,cAAM,OAAO,MAAM,CAAC;AACpB,YAAI,OAAO,GAAG,KAAK,IAAI,QAAQ,KAAK,KAAK,YAAYA,SAAS,QAAO,KAAK,MAAM,GAAG,MAAM,OAAO,GAAG,CAAC,GAAG,CAAC,MAAM,UAAU,KAAK,UAAU,OAAO,IAAI,GAAG,KAAK,QAAQ;AAAA,MACpK;AACA,aAAO;AAAA,IACT;AAAA,IACA,SAAS,MAAM,CAAC,KAAK,OAAO,cAAc,QAAQ;AAChD,aAAO,KAAK,OAAO,UAAU,SAAS,IAAI,KAAK,OAAO,QAAQ,GAAG;AAAA,IACnE;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,IAAI,QAAQ,IAAI;AACd,cAAQ,KAAK,YAAL,KAAK,UAA4B,oBAAI,IAAI,IAAG,IAAI,OAAO,MAAM,MAAM,EAAE,CAAC,GAAG;AAAA,IACnF;AAAA;AAAA,IAEA,QAAQ;AACN,WAAK,SAAS,MAAM,GAAG,KAAK,SAAS,MAAM,GAAG,KAAK,UAAU,MAAM,GAAG,KAAK,UAAU,MAAM,GAAG,KAAK,WAAW,MAAM;AACpH,WAAK,OAAO,MAAM,GAAG,KAAK,OAAO,MAAM,GAAG,KAAK,aAAa;AAAA,IAC9D;AAAA,IACA,UAAU;AACR,UAAI,KAAK,QAAS,YAAW,QAAQ,KAAK,QAAS,MAAK,QAAQ;AAChE,WAAK,MAAM,GAAG,KAAK,IAAI;AAAA,IACzB;AAAA,IACA,IAAI,SAAS;AACX,aAAO,KAAK,QAAQ;AAAA,IACtB;AAAA,IACA,IAAI,OAAO,OAAO;AAChB,WAAK,MAAM,QAAQ,UAAU;AAAA,IAC/B;AAAA,IACA,IAAI,kBAAkB;AACpB,aAAO,KAAK,OAAO,kBAAkB,KAAK,OAAO;AAAA,IACnD;AAAA,IACA,IAAI,gBAAgB;AAClB,aAAO,KAAK,OAAO,gBAAgB,KAAK,OAAO;AAAA,IACjD;AAAA,EACF;AAGA,MAAI,UAAU,CAAC,QAAQ,SAAS,WAAW,OAAO,SAAS,SAAS,OAAO,SAAS,SAAS,UAAU,SAAS,YAAY,SAAS,SAAS,WAAW,MAAM,QAAQ,OAAO,YAAY,OAAO,SAAS,SAAS;AACnN,WAAS,SAAS,QAAQ,OAAO,cAAc,KAAK;AAClD,QAAI,iBAAiB,OAAQ,QAAO;AACpC,UAAM,cAAc,CAAC,GAAG,MAAM,WAAW,QAAQ,MAAM,KAAK,GAAG,QAAQ,EAAE,YAAY,OAAO,cAAc,MAAM,UAAU,MAAM,GAAG,WAAW,CAAC,EAAE,YAAY,UAAU,YAAY;AACnL,aAAS,IAAI,GAAG,MAAM,QAAQ,QAAQ,IAAI,KAAK,KAAK;AAClD,UAAI,MAAM,QAAQ,CAAC;AACnB,UAAI,SAAU,EAAC,YAAY,WAAW,SAAS,GAAG,KAAK,UAAU,MAAM,GAAG,YAAY,UAAU,EAAE,GAAG,GAAG,GAAG,YAAY,UAAU,EAAE;AAAA,eAC1H,YAAY,WAAW,SAAS,GAAG,EAAG;AAC/C,kBAAY,GAAG,IAAI,EAAE,OAAO,IAAI,QAAQ,CAAC,CAAC,EAAE,KAAK,GAAG,GAAG,GAAG,MAAM;AAAA,IAClE;AACA,gBAAY,aAAa,IAAI,EAAE,OAAO,KAAK,GAAG,MAAM;AACpD,WAAO,OAAO,iBAAiB,IAAI,MAAM,WAAW,GAAG,IAAI;AAAA,EAC7D;AACA,WAAS,OAAO,QAAQ;AACtB,WAAO,OAAO,MAAM,EAAE,UAAU,IAAI,MAAM;AAAA,EAC5C;AAOA,WAAS,MAAM,QAAQ;AACrB,WAAO,OAAO,MAAM,EAAE,OAAO,IAAI,MAAM;AAAA,EACzC;AAOA,WAAS,SAAS,QAAQ;AACxB,WAAO,OAAO,MAAM,EAAE,UAAU,IAAI,MAAM;AAAA,EAC5C;AAOA,WAAS,WAAW,QAAQ,SAAS,OAAO,OAAO;AACjD,YAAQ,kBAAkB,UAAU,SAAS,OAAO,iBAAiB,SAAS,IAAI,QAAQ,QAAQ,KAAK,IAAI;AAAA,EAC7G;AACA,WAAS,OAAO,SAAS,KAAK;AAC5B,WAAO,OAAO,GAAG,KAAK;AAAA,EACxB;;;ACxvBA,WAAS,MAAM,MAAM,GAAG,KAAK,MAAM,UAAU;AAC3C,WAAO,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,GAAG,GAAG;AAAA,EACzC;AAGA,WAASC,YAAW,SAAS,YAAY,MAAM;AAC7C,UAAM,MAAM,KAAK,CAAC,aAAa,cAAc,KAAK,MAAM,IAAI;AAC5D,QAAI,KAAK,QAAS,QAAO;AACzB,UAAMC,OAAM,KAAK,CAAC,aAAa,SAAS,KAAK,MAAM,IAAI;AACvD,QAAI,CAAC,IAAK,QAAOA,KAAI,WAAW,SAAS,SAAS,GAAG,IAAI;AACzD,UAAM,KAAKA,KAAI,WAAW,OAAO,IAAI,oBAAoB,SAAS,IAAI,GAAG,aAAa,OAAO,UAAU,IAAI,SAAS,OAAO,IAAI,QAAQ,GAAG,IAAI,IAAI,OAAO,GAAG,OAAO,MAAMA,KAAI,aAAa,EAAE;AAC5L,WAAO,IAAI,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC,GAAG;AAAA,EAC9D;AACA,WAAS,YAAY,SAAS,YAAY,MAAM;AAC9C,UAAM,MAAM,KAAK,CAAC,aAAa,cAAc,KAAK,MAAM,IAAI;AAC5D,QAAI,KAAK,QAAS,QAAO;AACzB,UAAMA,OAAM,KAAK,CAAC,aAAa,SAAS,KAAK,MAAM,IAAI,QAAQ,KAAKA,KAAI,YAAY,SAAS,SAAS,GAAG,IAAI;AAC7G,WAAO,KAAK,iBAAiB,SAAS,MAAMA,KAAI,cAAc,EAAE,GAAG,EAAE,MAAM,KAAK,CAAC,GAAG;AAAA,EACtF;AACA,WAASC,uBAAsB,UAAU,KAAKD,OAAM,QAAQ;AAC1D,QAAI,KAAK,QAAS,QAAO;AACzB,QAAI,CAAC,IAAK,QAAOA,KAAI,sBAAsB,QAAQ;AACnD,UAAM,KAAKA,KAAI,sBAAsB,CAAC,OAAO,IAAI,oBAAoB,SAAS,IAAI,GAAG,SAAS,CAAC,EAAE,GAAG,OAAO,MAAMA,KAAI,qBAAqB,EAAE;AAC5I,WAAO,IAAI,iBAAiB,SAAS,MAAM,EAAE,MAAM,KAAK,CAAC,GAAG;AAAA,EAC9D;;;ACxBA,WAAS,aAAa,OAAO,UAAU,UAAU,MAAM,SAAS,OAAO;AACrE,QAAI,QAAQ;AACZ,WAAO,SAAS,UAAU,OAAO,WAAW;AAC1C,iBAAW,UAAU,OAAO,oBAAoB,KAAK,GAAG;AACtD,YAAI,WAAW,cAAe;AAC9B,YAAI,UAAU,WAAW,OAAO,UAAU,eAAe,KAAK,OAAO,MAAM,EAAG;AAC9E,YAAI,eAAe,OAAO,OAAO,yBAAyB,OAAO,MAAM,GAAG,MAAO,UAAS,QAAQ,KAAK;AAAA,MACzG;AACA,cAAQ,OAAO,eAAe,KAAK,GAAG,SAAS;AAAA,IACjD;AAAA,EACF;AACA,WAAS,eAAe,OAAO;AAC7B,iBAAa,OAAO,CAAC,QAAQ,WAAW;AACtC,aAAO,MAAM,IAAI,OAAO,MAAM,EAAE,KAAK,MAAM;AAAA,IAC7C,CAAC;AAAA,EACH;AACA,WAAS,gBAAgB,OAAO,UAAU,aAAa,QAAQ,MAAM;AACnE,iBAAa,OAAO,CAAC,QAAQ,WAAW;AACtC,aAAO,MAAM,IAAI,QAAQ,QAAQ,OAAO,MAAM,EAAE,KAAK,MAAM,IAAI,OAAO,MAAM,CAAC;AAAA,IAC/E,CAAC;AAAA,EACH;AACA,WAAS,YAAY,IAAI,UAAU,CAAC,MAAM,QAAQ,MAAM,CAAC,GAAG;AAC1D,YAAQ,IAAI,SAAS;AACnB,UAAI;AACF,cAAM,SAAS,GAAG,GAAG,IAAI;AACzB,eAAO,kBAAkB,UAAU,OAAO,MAAM,CAAC,MAAM,QAAQ,CAAC,CAAC,IAAI;AAAA,MACvE,SAAS,GAAG;AACV,gBAAQ,CAAC;AAAA,MACX;AAAA,IACF;AAAA,EACF;AAGA,WAAS,SAAS,KAAK,OAAO,SAAS,QAAQ,KAAK,MAAM,UAAU,cAAc,GAAG,IAAI,MAAM;AAC7F,WAAO,SAAS,IAAI,OAAO,SAAS,MAAM;AAAA,EAC5C;AACA,WAAS,SAAS,IAAI,OAAO,SAAS,QAAQ,SAAS,MAAM;AAC3D,QAAI,CAAC,GAAI,QAAO;AAChB,QAAI,OAAO;AACT,iBAAW,KAAK,OAAO,KAAK,KAAK,EAAG,KAAI,MAAM,CAAC,MAAM,QAAQ;AAC3D,YAAI,UAAU,GAAG,CAAC,MAAM,MAAM,CAAC,EAAG,IAAG,CAAC,IAAI,MAAM,CAAC;AAAA,MACnD;AAAA,IACF;AACA,QAAI,SAAS;AACX,iBAAW,KAAK,OAAO,KAAK,OAAO,EAAG,KAAI,QAAQ,CAAC,MAAM,QAAQ;AAC/D,YAAI,UAAU,GAAG,QAAQ,CAAC,MAAM,QAAQ,CAAC,EAAG,IAAG,QAAQ,CAAC,IAAI,OAAO,QAAQ,CAAC,CAAC;AAAA,MAC/E;AAAA,IACF;AACA,QAAI,QAAQ;AACV,iBAAW,KAAK,OAAO,KAAK,MAAM,EAAG,KAAI,OAAO,CAAC,MAAM,QAAQ;AAC7D,YAAI,UAAU,GAAG,MAAM,CAAC,MAAM,OAAO,CAAC,EAAG,IAAG,MAAM,CAAC,IAAI,OAAO,CAAC;AAAA,MACjE;AAAA,IACF;AACA,WAAO;AAAA,EACT;AACA,WAAS,YAAY,MAAM;AACzB,UAAM,YAAY,QAAQ,UAAU;AACpC,WAAO,CAAC,WAAW,OAAO,SAAS,aAAa,YAAY,SAAS,UAAU,IAAI;AAAA,EACrF;AAGA,MAAI,cAAc,CAAC,YAAY,kBAAkB,eAAe,iBAAiB,yBAAyB,wBAAwB,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,UAAU,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,SAAS,iBAAiB,kBAAkB,iBAAiB,kBAAkB,UAAU,gBAAgB,MAAM,YAAY,SAAS,eAAe,UAAU,UAAU,UAAU,UAAU,SAAS,gBAAgB,SAAS,SAAS,gBAAgB,gBAAgB,gBAAgB,UAAU,OAAO,gBAAgB,gBAAgB,gBAAgB,gBAAgB,UAAU,UAAU,UAAU,SAAS,SAAS,SAAS,UAAU,UAAU,UAAU,SAAS,SAAS,OAAO;AAC3vB,WAAS,cAAc,OAAO;AAC5B,UAAM,QAAQ,cAAc,KAAK,EAAE,YAAY,EAAE,MAAM,GAAG;AAC1D,WAAO,EAAE,SAAS,MAAM,SAAS,MAAM,GAAG,UAAU,MAAM,SAAS,OAAO,GAAG,QAAQ,MAAM,SAAS,KAAK,GAAG,SAAS,MAAM,SAAS,MAAM,KAAK,MAAM,SAAS,KAAK,GAAG,KAAK,MAAM,KAAK,CAAC,MAAM,CAAC,CAAC,QAAQ,SAAS,OAAO,QAAQ,KAAK,EAAE,SAAS,CAAC,CAAC,KAAK,GAAG;AAAA,EAC3P;AACA,WAAS,kBAAkB,GAAG;AAC5B,UAAM,QAAQ,CAAC;AACf,QAAI,EAAE,QAAS,OAAM,KAAK,MAAM;AAChC,QAAI,EAAE,OAAQ,OAAM,KAAK,KAAK;AAC9B,QAAI,EAAE,SAAU,OAAM,KAAK,OAAO;AAClC,QAAI,EAAE,QAAS,OAAM,KAAK,MAAM;AAChC,UAAM,KAAK,EAAE,KAAK,YAAY,KAAK,EAAE;AACrC,WAAO,MAAM,KAAK,GAAG;AAAA,EACvB;AACA,WAAS,cAAc,OAAO;AAC5B,UAAM,QAAQ,CAAC,WAAW;AACxB,YAAM,IAAI,CAAC,QAAQ,OAAO,SAAS,MAAM,GAAG,QAAQ,EAAE,KAAK,QAAQ,OAAO,IAAI;AAC9E,UAAI,WAAW,OAAO,WAAW,IAAK,QAAO;AAC7C,eAAS,OAAO,QAAQ,YAAY,OAAO;AAC3C,YAAM,IAAI,OAAO,YAAY,EAAE,MAAM,GAAG,EAAE,OAAO,CAAC,MAAM,MAAM,EAAE,EAAE,IAAI,CAAC,MAAM,MAAM,CAAC,MAAM,MAAM,SAAS,MAAM,EAAE,KAAK,KAAK,IAAI;AAC/H,aAAO,CAAC,GAAG,EAAE,OAAO,CAAC,MAAM,EAAE,SAAS,CAAC,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC,GAAG,GAAG,EAAE,OAAO,CAAC,MAAM,CAAC,EAAE,SAAS,CAAC,CAAC,KAAK,EAAE,EAAE,KAAK,GAAG;AAAA,IAC3I;AACA,WAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,MAAM,KAAK;AAAA,EAC9D;AACA,WAAS,UAAU,UAAU,QAAQ,SAAS,OAAO;AACnD,aAAS,cAAc,MAAM;AAC7B,UAAM,QAAQ,CAAC,WAAW,YAAY;AACpC,kBAAY,cAAc,SAAS;AACnC,UAAI,OAAQ,QAAO,cAAc;AACjC,YAAM,UAAU,UAAU,MAAM,GAAG,GAAG,UAAU,QAAQ,MAAM,GAAG;AACjE,aAAO,QAAQ,MAAM,CAAC,MAAM,QAAQ,SAAS,CAAC,CAAC;AAAA,IACjD;AACA,WAAO,MAAM,QAAQ,QAAQ,IAAI,SAAS,KAAK,CAAC,QAAQ,MAAM,KAAK,MAAM,CAAC,IAAI,MAAM,UAAU,MAAM;AAAA,EACtG;AACA,WAAS,eAAe,OAAOE,WAAU;AACvC,UAAM,QAAQ,EAAE,UAAU,OAAO,OAAO,OAAO,aAAa,OAAO,QAAQ,KAAK,GAAG,EAAE,YAAY,CAAC,GAAG,YAAY,CAAC,GAAG,SAAS,CAAC,GAAG,eAAe,IAAI,OAAO,YAAY,CAAC,EAAE,IAAIA,aAAY,CAAC;AAC5L,YAAQ,cAAc,KAAK;AAC3B,QAAI,UAAU,WAAW,OAAO,CAAC,EAAG,OAAM,WAAW;AACrD,QAAI,UAAU,QAAQ,OAAO,CAAC,EAAG,OAAM,QAAQ;AAC/C,QAAI,UAAU,WAAW,KAAK,EAAG,OAAM,cAAc;AACrD,UAAM,SAAS,OAAO,KAAK,SAAS,EAAE,KAAK,CAAC,QAAQ,UAAU,UAAU,GAAG,GAAG,OAAO,CAAC,CAAC,KAAK;AAC5F,WAAO;AAAA,EACT;AACA,WAAS,gBAAgB,GAAGA,WAAU;AACpC,QAAIA,UAAS,SAAU,QAAO;AAC9B,UAAM,WAAW,YAAY,EAAE,QAAQ,aAAa;AACpD,SAAK,EAAE,QAAQ,OAAO,EAAE,QAAQ,YAAY,UAAU,QAAQ,kDAAkD,EAAG,QAAO;AAC1H,QAAI,EAAE,kBAAkB,YAAY,UAAU,QAAQ,yCAAyC,KAAK,EAAE,EAAE,QAAQ,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,SAAU,QAAO;AAC1L,UAAM,QAAQ,kBAAkB,CAAC,GAAG,EAAE,UAAU,OAAO,QAAQ,YAAY,IAAI,eAAe,OAAOA,SAAQ;AAC7G,QAAI,MAAO,QAAO;AAClB,QAAI,SAAU,GAAE,eAAe;AAC/B,QAAI,OAAQ,QAAO;AACnB,QAAI,YAAa,QAAO,EAAE,IAAI,YAAY;AAC1C,WAAO;AAAA,EACT;AACA,MAAI,sBAAsB,CAAC,QAAQ,OAAO,KAAK,MAAM,QAAQ,KAAK,IAAI,QAAQ,CAAC,KAAK,GAAG,IAAI,CAAC,MAAM,IAAI,cAAc,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,EAAE,KAAK,MAAM,CAAC;AAC7J,WAAS,6BAA6B,eAAe,CAAC,GAAG,YAAY,qBAAqB;AACxF,UAAM,YAAY,CAAC;AACnB,eAAW,UAAU,OAAO,KAAK,YAAY,EAAG,WAAU,MAAM,IAAI,UAAU,aAAa,MAAM,CAAC;AAClG,WAAO;AAAA,EACT;AACA,WAAS,eAAe,IAAI,IAAI,YAAY,MAAM;AAChD,UAAM,IAAI,EAAE,MAAM,WAAW,KAAK,QAAQ,OAAO,SAAS,MAAM,IAAI;AACpE,YAAQ,aAAa,CAAC,MAAM,QAAQ,CAAC,IAAI,IAAI,oBAAoB,CAAC,GAAG,YAAY,EAAE,QAAQ,SAAS,EAAE,EAAE,QAAQ,WAAW,GAAG,EAAE,QAAQ,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,CAAC,EAAE,QAAQ,QAAQ,GAAG,EAAE,KAAK;AAAA,EAC9L;;;AC1HA,MAAI,uBAAuB;AAC3B,MAAI,gBAAgB,CAAC,WAAW,kBAAkB,eAAe,OAAO,QAAQ,oBAAoB;AACpG,MAAI,mBAAmC,uBAAO,IAAI,uBAAuB;AACzE,WAAS,aAAa,KAAK,OAAO,SAAS,EAAE,QAAQ,OAAO,aAAa,WAAW,gBAAgB,OAAO,eAAe,WAAW,GAAG,WAAW,MAAM,IAAI,CAAC,GAAGC,OAAM,QAAQ;AAP/K,QAAAC;AAQE,IAAAD,KAAI,SAAJA,KAAI,OAAS,CAAC,KAAGC,MAAAD,KAAI,MAAK,mBAATC,IAAS,iBAAmB,CAAC;AAC9C,QAAI,QAAQ,oBAAoB,MAAM,GAAG,EAAG,QAAO,QAAQ,QAAQ;AACnE,UAAM,MAAM;AACZ,QAAID,KAAI,KAAK,eAAe,GAAG,EAAG,QAAOA,KAAI,KAAK,eAAe,GAAG;AACpE,UAAM,WAAW,SAAS,WAAW,MAAM,UAAU,KAAK,KAAKA,KAAI,SAAS,SAAS,CAAC,MAAM,UAAU,EAAE,KAAK,GAAG,CAAC,IAAI,SAAS,UAAU,MAAM,UAAU,KAAK,KAAKA,KAAI,SAAS,aAAa,CAAC,MAAM,UAAU,EAAE,MAAM,GAAG,CAAC,IAAI;AAC7N,QAAI,SAAU,QAAOA,KAAI,KAAK,eAAe,GAAG,IAAI,QAAQ,QAAQ,QAAQ;AAC5E,IAAAA,KAAI,KAAK,eAAe,GAAG,IAAI,IAAI,QAAQ,CAAC,SAAS,WAAW;AAC9D,OAAC,SAAS,QAAQ,WAAW,IAAI;AAC/B,cAAM,UAAU,MAAM;AACpB,cAAI,SAAS;AACb,cAAI,YAAY,GAAG;AACjB,uBAAW,SAAS,KAAK,YAAY,CAAC;AACtC,oBAAQ,KAAK,YAAY,IAAI,cAAc,GAAG,MAAM,WAAW,YAAY,CAAC,MAAM;AAAA,UACpF,OAAO;AACL,mBAAOA,KAAI,KAAK,eAAe,GAAG;AAClC,mBAAO,IAAI,MAAM,GAAG,WAAW,IAAI,CAAC,qBAAqB,GAAG,WAAW,WAAW,CAAC,WAAW,CAAC;AAAA,UACjG;AAAA,QACF;AACA,cAAM,MAAM,YAAY,YAAY,WAAW,GAAG,GAAG,GAAG,IAAI,SAAS,GAAG,IAAI,MAAM,GAAG,IAAI,QAAQ,IAAI,KAAK,IAAI,CAAC,KAAK;AACpH,YAAI,SAAS,SAAU,CAAAA,KAAI,SAAS,KAAK,OAAO,KAAK,SAAS,UAAU,EAAE,KAAK,KAAK,MAAM,SAAS,WAAW,mBAAmB,aAAa,WAAW,gBAAgB,OAAO,eAAe,QAAQ,MAAM,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;AAAA,iBACjO,SAAS,QAAS,CAAAA,KAAI,SAAS,KAAK,OAAO,KAAK,SAAS,QAAQ,EAAE,KAAK,cAAc,MAAM,KAAK,OAAO,aAAa,WAAW,gBAAgB,OAAO,eAAe,QAAQ,MAAM,QAAQ,EAAE,GAAG,QAAQ,CAAC,KAAK,EAAE;AAAA,YACrN,QAAO,IAAI,MAAM,8BAA8B,IAAI,EAAE,CAAC;AAAA,MAC7D,GAAG,QAAQ;AAAA,IACb,CAAC;AACD,WAAOA,KAAI,KAAK,eAAe,GAAG;AAAA,EACpC;AACA,WAAS,UAAU,KAAK,QAAQ;AAC9B,WAAO,IAAI,eAAe,eAAe,IAAI,eAAe;AAAA,EAC9D;AACA,WAAS,mBAAmB,EAAE,WAAW,QAAQ,YAAY,aAAa,MAAM,cAAc,MAAM,SAAS,GAAG;AAC9G,QAAI,eAA+B,oBAAI,IAAI;AAC3C,QAAI,UAAU;AACZ,YAAM,WAAW,MAAM,KAAK,UAAU,QAAQ;AAC9C,eAAS,IAAI,GAAG,MAAM,SAAS,QAAQ,IAAI,KAAK,IAAK,UAAS,SAAS,CAAC,GAAG,CAAC,QAAQ,aAAa,IAAI,KAAK,SAAS,CAAC,CAAC,CAAC;AAAA,IACxH;AACA,WAAO,SAAS,QAAQ,OAAO,SAAS,MAAM;AAC5C,YAAM,cAA8B,oBAAI,IAAI,GAAG,WAA2B,oBAAI,IAAI,GAAG,eAA+B,oBAAI,QAAQ,GAAG,WAAW,MAAM,KAAK,UAAU,QAAQ;AAC3K,eAAS,IAAI,GAAG,MAAM,SAAS,QAAQ,IAAI,KAAK,IAAK,cAAa,IAAI,SAAS,CAAC,GAAG,CAAC;AACpF,YAAM,cAAc,CAAC,GAAG,aAAa,CAAC;AACtC,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,cAAM,OAAO,MAAM,CAAC,GAAG,MAAM,OAAO,IAAI;AACxC,YAAI,SAAS,IAAI,GAAG,EAAG,OAAM,IAAI,MAAM,kCAAkC,GAAG,YAAY;AACxF,YAAI,OAAO,aAAa,IAAI,GAAG;AAC/B,YAAI,CAAC,MAAM;AACT,iBAAO,WAAW,IAAI;AACtB,cAAI,CAAC,MAAM;AACT,gBAAI,OAAQ,OAAM,IAAI,MAAM,2CAA2C,GAAG,GAAG;AAC7E;AAAA,UACF;AACA,qBAAW,KAAK,EAAE;AAAA,QACpB,MAAO,YAAW,MAAM,IAAI,GAAG,WAAW,KAAK,aAAa,IAAI,IAAI,KAAK,EAAE;AAC3E,iBAAS,IAAI,GAAG,GAAG,YAAY,KAAK,IAAI,GAAG,YAAY,IAAI,KAAK,IAAI;AAAA,MACtE;AACA,iBAAW,CAAC,KAAK,IAAI,KAAK,aAAa,QAAQ,EAAG,EAAC,SAAS,IAAI,GAAG,KAAK,KAAK,kBAAkB,cAAc,YAAY,MAAM,GAAG,GAAG,KAAK,OAAO;AACjJ,YAAM,WAAW,6BAA6B,UAAU,GAAGE,UAAS,IAAI,IAAI,QAAQ;AACpF,UAAI,SAAS;AACb,eAAS,IAAI,YAAY,SAAS,GAAG,KAAK,GAAG,KAAK;AAChD,cAAM,OAAO,YAAY,CAAC;AAC1B,YAAI,WAAW,CAAC,MAAM,MAAMA,QAAO,IAAI,CAAC,GAAG;AACzC,mBAAS;AACT;AAAA,QACF;AACA,kBAAU,aAAa,MAAM,MAAM,GAAG,SAAS;AAAA,MACjD;AACA,qBAAe;AAAA,IACjB;AAAA,EACF;AAOA,WAAS,MAAM,KAAK;AAClB,WAAO,gBAAgB,OAAO;AAAA,EAChC;AACA,WAAS,MAAM,KAAK;AAClB,WAAO,aAAa,OAAO;AAAA,EAC7B;AACA,WAAS,OAAO,KAAK;AACnB,WAAO,cAAc,OAAO;AAAA,EAC9B;AACA,WAAS,MAAM,KAAK;AAClB,WAAO,aAAa,OAAO;AAAA,EAC7B;AACA,WAAS,MAAM,KAAK;AAClB,WAAO,aAAa,OAAO;AAAA,EAC7B;AACA,WAAS,MAAM,KAAK;AAClB,WAAO,MAAM,QAAQ,GAAG;AAAA,EAC1B;AACA,WAASC,QAAO,KAAK,cAAc,OAAO,YAAY,MAAM;AAC1D,YAAQ,YAAY,MAAM,KAAK,KAAK,IAAI,UAAU,cAAc,OAAO,UAAU,SAAS,KAAK,GAAG,MAAM,oBAAoB,IAAI,gBAAgB;AAAA,EAClJ;AACA,WAAS,OAAO,KAAK;AACnB,WAAO,OAAO,QAAQ,eAAe,OAAO,IAAI,OAAO,QAAQ;AAAA,EACjE;AACA,WAAS,OAAO,KAAK;AACnB,WAAO,eAAe,OAAO;AAAA,EAC/B;AACA,WAAS,aAAa,KAAK,KAAK;AAC9B,WAAO,KAAK,WAAW,GAAG,KAAK;AAAA,EACjC;AAIA,WAAS,6BAA6B,OAAO;AAC3C,UAAM,IAAI,MAAM,QAAQ,SAAS,IAAI,MAAM,CAAC,GAAG,QAAQ,CAAC;AACxD,aAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,YAAM,QAAQ,MAAM,CAAC;AACrB,UAAI,UAAU,GAAI;AAClB,UAAI,OAAO;AACX,UAAI,QAAQ,MAAM;AAClB,aAAO,OAAO,OAAO;AACnB,cAAM,MAAM,OAAO,SAAS;AAC5B,YAAI,MAAM,MAAM,GAAG,CAAC,IAAI,MAAO,QAAO,MAAM;AAAA,YACvC,SAAQ;AAAA,MACf;AACA,UAAI,OAAO,EAAG,QAAO,CAAC,IAAI,MAAM,OAAO,CAAC;AAAA,UACnC,QAAO,CAAC,IAAI;AACjB,YAAM,IAAI,IAAI;AAAA,IAChB;AACA,QAAI,CAAC,MAAM,OAAQ,QAAO,CAAC;AAC3B,UAAM,SAAS,CAAC;AAChB,QAAI,IAAI,MAAM,MAAM,SAAS,CAAC;AAC9B,WAAO,KAAK,EAAG,QAAO,KAAK,CAAC,GAAG,IAAI,OAAO,CAAC;AAC3C,WAAO,OAAO,QAAQ,GAAG;AAAA,EAC3B;AAGA,WAAS,IAAI,SAAS,IAAI;AACxB,WAAO,SAAS,KAAK,IAAI,EAAE,SAAS,EAAE,IAAI,MAAM,YAAY,IAAI,EAAE,SAAS,EAAE,EAAE,QAAQ,KAAK,EAAE,IAAI,MAAM,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,MAAM,CAAC;AAAA,EAC5I;AACA,WAAS,WAAW,OAAO,IAAI;AAC7B,WAAO,KAAK,QAAQ,kBAAkB,CAAC,GAAG,GAAG,MAAM,IAAI,EAAE,YAAY,CAAC;AAAA,EACxE;AACA,WAAS,SAAS,MAAM,IAAI,EAAE,OAAO,IAAI,WAAW,EAAE,mBAAmB,MAAM,MAAM,YAAY,KAAK,MAAM,IAAI,CAAC,GAAG;AAClH,YAAQ,MAAM,MAAM,IAAI,YAAY,GAAG,QAAQ,IAAI,OAAO,SAAS,SAAS,GAAG,GAAG,CAAC,GAAG,MAAM,EAAE,YAAY,CAAC,EAAE,QAAQ,OAAO,CAAC,MAAM,EAAE,KAAK,gBAAgB,aAAa,EAAE,CAAC;AAAA,EAC5K;AACA,WAAS,WAAW,KAAK,YAAY,KAAK;AACxC,WAAO,IAAI,QAAQ,mBAAmB,KAAK,SAAS,IAAI,EAAE,YAAY;AAAA,EACxE;AACA,WAAS,QAAQ,KAAK,KAAK,SAAS,iBAAiB;AACnD,WAAO,MAAM,WAAW,iBAAiB,EAAE,EAAE,QAAQ;AAAA,EACvD;AACA,WAAS,QAAQ,IAAI,KAAK,SAAS,iBAAiB;AAClD,WAAO,KAAK,WAAW,iBAAiB,EAAE,EAAE,QAAQ;AAAA,EACtD;AACA,WAAS,aAAa,MAAM;AAC1B,WAAO,MAAM,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI;AAAA,EACxE;AACA,WAAS,aAAa,MAAM,IAAI;AAC9B,WAAO,MAAM,WAAW,IAAI,IAAI,WAAW,IAAI,IAAI,QAAQ,WAAW,IAAI,GAAG,EAAE;AAAA,EACjF;AACA,WAAS,SAAS,KAAK;AACrB,QAAI;AACF,YAAM,IAAI,IAAI,IAAI,KAAK,OAAO,SAAS,IAAI;AAC3C,aAAO,mBAAmB,EAAE,SAAS,EAAE,QAAQ;AAAA,IACjD,QAAQ;AACN,aAAO,IAAI,QAAQ,OAAO,GAAG,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,KAAK;AAAA,IACpD;AAAA,EACF;AACA,WAAS,UAAU,MAAM,MAAM;AAC7B,QAAI,SAAS,KAAM,QAAO;AAC1B,QAAI,CAAC,MAAM,IAAI,KAAK,CAAC,MAAM,IAAI,KAAK,CAAC,QAAQ,CAAC,KAAM,QAAO;AAC3D,WAAO,SAAS,IAAI,MAAM,SAAS,IAAI;AAAA,EACzC;AAIA,WAAS,SAAS,KAAK,IAAI,QAAQ,IAAI,SAAS,MAAM,QAAQH,MAAK;AACjE,UAAM,cAAc,KAAK,gBAAL,KAAK,cAAgC,oBAAI,IAAI;AACjE,QAAI,WAAW,MAAM;AACnB,YAAM,MAAM,YAAY,IAAI;AAC5B,aAAO,OAAO,YAAY,IAAI,GAAG,KAAK,KAAK,QAAQ,UAAU,YAAY,IAAI,KAAK,GAAG,GAAG,GAAG;AAAA,IAC7F;AACA,QAAI,YAAY,IAAI,GAAG,EAAG;AAC1B,UAAM,KAAK,WAAW,QAAQI,YAAY,MAAM,YAAY,OAAO,GAAG,GAAG,OAAO,QAAQJ,IAAG,IAAI,OAAO,MAAM,YAAY,OAAO,GAAG,CAAC;AACnI,WAAO,YAAY,IAAI,KAAK,EAAE,GAAG,GAAG;AAAA,EACtC;AACA,WAAS,SAAS,KAAK,IAAI,QAAQ,IAAI,SAAS,MAAM,QAAQA,MAAK;AACjE,UAAM,cAAc,KAAK,gBAAL,KAAK,cAAgC,oBAAI,IAAI;AACjE,QAAI,QAAQ;AACV,YAAM,MAAM,YAAY,IAAI,GAAGK,QAAO,YAAY,IAAI,GAAG,KAAK;AAC9D,aAAO,YAAY,IAAI,KAAK,GAAG,GAAG,MAAMA,QAAO,QAAQ,SAAS,GAAG;AAAA,IACrE;AACA,UAAM,SAAS,YAAY,IAAI,GAAG;AAClC,eAAW,WAAWL,QAAO,QAAQ,aAAa,MAAM;AACxD,UAAM,KAAKI,YAAY,OAAO,YAAY,OAAO,GAAG,GAAG,GAAG,IAAI,OAAO,QAAQJ,IAAG;AAChF,WAAO,KAAK,YAAY,IAAI,KAAK,EAAE;AAAA,EACrC;AACA,WAAS,QAAQ,KAAK,IAAI,QAAQA,MAAK;AACrC,UAAM,aAAa,KAAK,gBAAL,KAAK,cAAgC,oBAAI,IAAI;AAChE,QAAI,WAAW,IAAI,GAAG,EAAG,QAAO,KAAK,WAAW,IAAI,KAAK,EAAE;AAC3D,eAAW,IAAI,KAAK,EAAE;AACtB,UAAMM,QAAO,CAAC,IAAI,GAAG,MAAM,WAAW,IAAI,GAAG,MAAM,QAAQ,IAAI,GAAGC,uBAAsBD,OAAM,QAAQN,IAAG;AACzG,IAAAM,MAAK;AAAA,EACP;AACA,MAAI,gBAAgB,CAAC,QAAQ,KAAK,cAAc,KAAK,YAAY,OAAO,GAAG,IAAI;AAC/E,WAAS,QAAQE,SAAQ,IAAI,OAAO,CAAC,GAAG;AACtC,QAAI,QAAQ,GAAG,EAAE,KAAK,UAAU,MAAM,GAAG,gBAAAC,kBAAiB,KAAK,IAAI,MAAM,IAAI,IAAI,EAAE,KAAK,KAAK,IAAI;AACjG,UAAM,SAAS,MAAM,KAAK,MAAM,aAAa,QAAQD,OAAM,KAAK,IAAI,GAAG,SAAS,CAAC,MAAM,aAAa,QAAQA,SAAQ,KAAK,UAAU,CAAC,CAAC;AACrI,UAAM,SAAS,IAAI,SAAS;AAC1B,UAAIC,mBAAkB,QAAQ,EAAG,QAAO;AACxC,UAAI,CAAC,IAAK,QAAO,UAAU,MAAM,GAAG,GAAG,IAAI,IAAI;AAC/C,YAAM,IAAI,OAAO,GAAG,IAAI,EAAE,GAAG,KAAK;AAClC,aAAO,IAAI,OAAO,SAAS,EAAE,GAAG,IAAI,IAAI,GAAG,OAAO,CAAC,GAAG,GAAG,GAAG,IAAI,KAAK;AAAA,IACvE;AACA,WAAO,OAAO,OAAO,OAAO,QAAQ;AACpC,WAAO,QAAQ,OAAO,QAAQ,GAAG,QAAQ,CAAC,OAAO,OAAO,EAAE,GAAG,GAAG,OAAO,CAAC,IAAI,OAAO,CAAC;AACpF,WAAO,QAAQ,OAAO,QAAQ,KAAK,QAAQ,CAAC,OAAO,EAAE,GAAG,IAAI,KAAK,OAAO,CAAC,IAAI,OAAO,CAAC;AACrF,WAAO;AAAA,EACT;AACA,MAAI,YAAY,CAAC,UAAU,QAAQ,IAAI,QAAQ,CAAC,YAAYL,YAAY,SAAS,OAAO,CAAC;AACzF,MAAI,SAAS,CAAC,IAAI,WAAW,IAAI,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,GAAG,CAAC;AAC9E,MAAI,aAAa,CAAC,IAAI,WAAW,IAAI,QAAQ,CAAC,QAAQ,EAAE,sBAAsB,MAAM,EAAE,sBAAsB,GAAG,CAAC,CAAC;AACjH,WAAS,oBAAoB,SAAS,QAAQ;AAC5C,YAAQ,UAAU,QAAQ,IAAI,QAAQ,iBAAiB,SAAS,SAAS,EAAE,MAAM,KAAK,CAAC;AACvF,QAAI,UAAU,CAAC,OAAO,QAAS,YAAW,OAAO,OAAO,oBAAoB,SAAS,OAAO,GAAG,QAAQ;AACvG,WAAO;AAAA,EACT;AAMA,WAAS,WAAW,OAAO,WAAW,GAAG,OAAO,KAAK;AACnD,QAAI,QAAQ,KAAM,QAAO,GAAG,KAAK,QAAQ,SAAS,IAAI,KAAK,GAAG;AAC9D,UAAM,QAAQ,CAAC,KAAK,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,MAAM,IAAI,GAAG,WAAW,KAAK,IAAI,KAAK,MAAM,KAAK,IAAI,KAAK,IAAI,KAAK,IAAI,IAAI,CAAC,GAAG,MAAM,SAAS,CAAC;AACvJ,WAAO,IAAI,QAAQ,KAAK,IAAI,MAAM,QAAQ,GAAG,QAAQ,QAAQ,EAAE,QAAQ,SAAS,EAAE,CAAC,IAAI,MAAM,QAAQ,CAAC;AAAA,EACxG;AAMA,MAAI,gBAAgB,OAAO,QAAQ;AACjC,KAAC,OAAO,SAAP,OAAO,OAAS,CAAC,IAAG,mBAAmB;AACxC,WAAO,sBAAP,OAAO,oBAAsB;AAC7B,WAAO,sBAAP,OAAO,oBAAsB;AAC7B,WAAO,uBAAP,OAAO,qBAAuB;AAC9B,WAAO,uBAAP,OAAO,qBAAuB;AAC9B,WAAO,uBAAP,OAAO,qBAAuB;AAC9B,WAAO,wBAAP,OAAO,sBAAwB;AAAA,EACjC;;;AC1PO,MAAM,SAAS;AAEf,MAAM,WAAW;;;ACGjB,MAAMM,OAAM,CAAC,SAAS,WAAW,IAAK,MAAM;AAE5C,WAAS,KAAK,MAAM,UAAU,SAAS,cAAsB;AAClE,QAAI,KAAK,aAAa,QAAQ,GAAG;AACjC,WAAO,CAAC,MAAM,aAAa,QAAQ,KAAM,KAAKA,KAAI,MAAM,CAAE,GAAG,MAAM;AAAA,EACrE;AASO,WAAS,cAAc,QAAgB,QAAwB;AACpE,QAAI,WAAW,OAAQ,QAAO;AAC9B,QAAI,OAAO,SAAS,KAAK,OAAO,SAAS,EAAG,QAAO;AACnD,QAAI,UAAU;AACd,aAAS,IAAI,GAAG,IAAI,OAAO,SAAS,GAAG,KAAK;AAC1C,YAAM,SAAS,OAAO,UAAU,GAAG,IAAI,CAAC;AACxC,UAAI,OAAO,SAAS,MAAM,EAAG;AAAA,IAC/B;AAEA,WAAO,WAAW,OAAO,SAAS;AAAA,EACpC;AAEO,WAAS,WAAW,SAAmB,YAAoB,WAAkC;AAClG,UAAM,SAAS,WAAW,MAAM,KAAK;AACrC,eAAW,UAAU,SAAS;AAC5B,YAAM,aAAa,OAAO,QAAQ,UAAU,EAAE;AAC9C,eAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,YAAI,WAAW,IACb,YAAY;AAEd,iBAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,KAAK;AACtC,uBAAa,MAAM,IAAI,KAAK,OAAO,OAAO,CAAC;AAC3C,uBAAa,OAAO,CAAC;AACrB,cAAI,cAAc,cAAc,cAAc,YAAY,SAAS,KAAK,UAAW,QAAO;AAAA,QAC5F;AAAA,MACF;AAAA,IACF;AACA,WAAO;AAAA,EACT;;;ACtCO,WAAS,YAAyB,KAAoC;AAC3E,WAAO,MAAM,GAAG,KAAK,aAAa,OAAO,MAAO,IAAsB,OAAO;AAAA,EAC/E;AACO,WAAS,WAAc,KAAqC;AACjE,WAAO,MAAM,GAAG,KAAK,WAAY;AAAA,EACnC;AAGO,WAAS,cAAgC,QAAW,MAAgC,OAAqB;AAC9G,YAAQ,MAAM,KAAK;AACnB,UAAM,OAAO,KAAK,QAAQ,SAAS,EAAE;AACrC,UAAM,eAAe,MAAM;AACzB,UAAI,MAAM,SAAS,GAAG,EAAG,QAAO,MAAM,MAAM,GAAG,GAAG,IAAI,CAAC,MAAc,EAAE,KAAK,CAAC;AAC7E,UAAI,UAAU,OAAQ,QAAO;AAC7B,UAAI,UAAU,QAAS,QAAO;AAC9B,UAAI,UAAU,OAAQ,QAAO;AAC7B,UAAI,QAAQ,KAAK,KAAK,EAAG,QAAO,OAAO,KAAK;AAC5C,aAAO;AAAA,IACT,GAAG;AACH,YAAiB,QAAQ,MAAM,aAAa,MAAM,CAAC,MAAM,SAAS,CAAC,CAAC;AAAA,EACtE;AAEO,WAAS,aAAa,OAA2C;AACtE,WAAO,UAAU,SAAS,OAAO,UAAU,UAAU,QAAQ;AAAA,EAC/D;AAEO,WAAS,SAAsB,MAAiC,OAAU,MAA2B,WAAmB;AAC7H,QAAI;AACF,iBAAW,OAAO,MAAM;AACtB,cAAM,IAAI,WAAc,GAAG;AAC3B,YAAI,EAAE,SAAS,MAAO,QAAO,EAAE,GAAG;AAAA,MACpC;AACF,WAAO,OAAO,KAAK;AAAA,EACrB;AAEO,WAAS,cAAiB,SAAuB;AACtD,UAAM,SAAiC,CAAC;AACxC,YAAQ,QAAQ,CAAC,QAAS,OAAO,IAAI,OAAO,KAAK,OAAO,IAAI,OAAO,KAAK,KAAK,CAAE;AAC/E,UAAM,OAA+B,CAAC;AACtC,aAAS,IAAI,QAAQ,SAAS,GAAG,KAAK,GAAG,KAAK;AAC5C,YAAM,MAAM,QAAQ,CAAC;AACrB,UAAI,OAAO,IAAI,OAAO,IAAI,GAAG;AAC3B,aAAK,IAAI,OAAO,KAAK,KAAK,IAAI,OAAO,KAAK,KAAK;AAC/C,cAAM,MAAM,OAAO,IAAI,OAAO,IAAI,KAAK,IAAI,OAAO,IAAI;AACtD,YAAI,UAAU,GAAG,IAAI,OAAO,KAAK,GAAG;AAAA,MACtC;AAAA,IACF;AACA,WAAO;AAAA,EACT;AAEO,WAAS,WAAwB,KAA8B;AACpE,WAAO,WAAc,GAAG,IAAI,EAAE,OAAO,IAAI,OAAO,SAAS,OAAO,IAAI,WAAW,IAAI,KAAK,GAAG,UAAU,IAAI,SAAS,IAAI,EAAE,OAAO,KAAU,SAAS,OAAO,GAAG,EAAE;AAAA,EAChK;AACO,WAAS,YAAyB,MAA0B;AACjE,WAAO,KAAK,IAAI,CAAC,QAAQ,WAAW,GAAG,EAAE,KAAK;AAAA,EAChD;AAEO,WAAS,WAA0C,KAAqB;AAC7E,UAAM,SAAc,CAAC,GACnBC,QAAO,OAAO,KAAK,GAAG;AACxB,aAAS,IAAI,GAAG,IAAIA,MAAK,QAAQ,KAAK;AACpC,YAAM,QAAQ,IAAIA,MAAK,CAAC,CAAC;AACzB,UAAI,CAAC,MAAM,KAAK,EAAG;AACnB,UAAI,YAAY,KAAK;AACnB,eAAOA,MAAK,CAAC,CAAC,IAAI;AAAA,UAChB,QAAQ,MAAM,QAAQ,IAAI,CAAC,QAA2B,WAAW,GAAG,EAAE,KAAK;AAAA,UAC3E,UAAU,MAAM,QAAQ,IAAI,CAAC,QAA2B,WAAW,GAAG,EAAE,OAAO;AAAA,QACjF;AAAA,UACG,QAAOA,MAAK,CAAC,CAAC,IAAI,WAAW,KAAK;AAAA,IACzC;AACA,WAAO;AAAA,EACT;AAKO,WAAS,oBAAoB,MAA4E,CAAC,GAAG,MAAM,OAAoD;AAC5K,QAAI,CAAC,MAAM,GAAG,KAAK,CAAC,MAAM,GAAG,EAAG,QAAO;AACvC,UAAM,CAAC,QAAQ,CAAC,GAAG,SAAS,CAAC,GAAG,QAAQ,CAAC,CAAC,IAAI,MAAwC,GAAG,IAAK,OAAO,OAAO,GAAG,EAAE,QAAQ,IAAoB,MAAO,IAAoB,CAAC,CAAC,IAAI,CAAC,GAAI,GAAmB,EAAE,QAAQ,IAAI,CAAC,GAAgB;AACrO,WAAO,MAAO,CAAC,GAAG,OAAO,GAAG,QAAQ,GAAG,KAAK,IAAmB,EAAE,GAAG,OAAO,GAAG,QAAQ,GAAG,MAAM;AAAA,EACjG;AAEO,WAAS,mBAA4B,KAAkD;AAC5F,QAAI,CAAC,KAAK,OAAQ,QAAO,EAAE,MAAM,CAAC,GAAG,QAAQ,CAAC,GAAG,OAAO,CAAC,EAAE;AAC3D,UAAM,KAAK,IAAI,QAAQ,QAAe,GACpC,KAAK,IAAI,QAAQ,UAAiB,KAAK,CAAC;AAC1C,WAAO,OAAO,KAAK,EAAE,MAAM,KAAK,QAAQ,CAAC,GAAG,OAAO,CAAC,EAAE,IAAI,OAAO,KAAK,EAAE,MAAM,IAAI,MAAM,GAAG,EAAE,GAAG,QAAQ,CAAC,GAAG,OAAO,IAAI,MAAM,KAAK,CAAC,EAAE,IAAI,EAAE,MAAM,IAAI,MAAM,GAAG,EAAE,GAAG,QAAQ,IAAI,MAAM,KAAK,GAAG,EAAE,GAAG,OAAO,IAAI,MAAM,KAAK,CAAC,EAAE;AAAA,EAC7N;AAEO,WAAS,iBAAiB,GAAQ,IAAY;AACnD,QAAI,MAAM,EAAE,GAAG,KAAK,EAAE,IAAI,SAAS,EAAE,EAAG,QAAO,EAAE,MAAM,OAAO,KAAK,EAAE,KAAK,MAAM,mBAAmB,EAAE,GAAG,EAAE,KAAK,SAAS,EAAE,IAAI,SAAS,mBAAmB,EAAE,GAAG,EAAE,OAAO,SAAS,EAAE,IAAI,WAAW,QAAQ;AAC1M,QAAI,MAAM,EAAE,MAAM,KAAK,EAAE,OAAO,SAAS,EAAE,EAAG,QAAO,EAAE,MAAM,UAAU,KAAK,EAAE,QAAQ,MAAM,OAAO;AACnG,QAAI,EAAE,QAAQ;AACZ,YAAM,KAAK,oBAAoB,EAAE,MAAM;AACvC,UAAI;AAAI,mBAAW,KAAK,GAAI,KAAK,GAAW,CAAC,GAAG,SAAS,EAAE,EAAG,QAAO,EAAE,MAAM,UAAU,CAAC,IAAI,KAAM,GAAW,CAAC,GAAG,MAAM,mBAAoB,GAAW,CAAC,CAAC,EAAE,KAAK,SAAS,EAAE,IAAI,SAAS,mBAAoB,GAAW,CAAC,CAAC,EAAE,OAAO,SAAS,EAAE,IAAI,WAAW,QAAQ;AAAA;AAAA,IACrQ;AACA,WAAO,EAAE,MAAM,YAAY,KAAK,CAAC,GAAG,MAAM,OAAO;AAAA,EACnD;AAEO,WAAS,gBAAgB,SAAgB,UAA0B,IAAkB;AAC1F,QAAI,IAAI;AACR,aAAS,IAAI,GAAG,IAAI,SAAS,QAAQ,EAAE,GAAG,IAAK,KAAI,SAAS,CAAC,MAAM,SAAU;AAC7E,aAAS,IAAI,SAAS,QAAQ,EAAE,IAAI,GAAG,IAAI,SAAS,QAAQ;AAC1D,UAAI,SAAS,CAAC,MAAM,UAAU;AAC5B,YAAI,IAAI;AACR,iBAAS,IAAI,GAAG,IAAI,QAAQ,QAAQ,IAAK,KAAI,QAAQ,CAAC,MAAM,YAAY,EAAE,MAAM,IAAI,EAAG,QAAO,KAAK,QAAQ,OAAO,GAAG,GAAG,EAAE;AAAA,MAC5H,OAAO;AACL,cAAM,MAAM,QAAQ,QAAQ,SAAS,CAAC,CAAC;AACvC,YAAI,QAAQ,GAAI,QAAO,KAAK,QAAQ,OAAO,KAAK,GAAG,EAAE;AAAA,MACvD;AACF,YAAQ,KAAK,EAAE;AAAA,EACjB;;;ACjHO,MAAe,eAAf,MAAuD;AAAA;AAAA,IAW5D,YAAY,MAAkB,QAAgBC,QAAe;AAV7D,0BAAmB,MAAK,IAAI,gBAAgB;AAC5C,0BAAmB,UAAS,KAAK,GAAG;AACpC,0BAAgB;AAChB,0BAAgB;AAChB,0BAAgB;AAChB;AAAA,0BAAO;AAML,sBAAgB,MAAM,KAAK,KAAK;AAChC,WAAK,SAAS,YAAY,IAAI,CAAC,KAAK,QAAQ,KAAK,MAAM,CAAC;AACxD,WAAK,OAAO;AACZ,WAAK,QAAQ,KAAK;AAClB,WAAK,QAAS,MAAMA,MAAK,IAAI,SAASA,MAAK,IAAIA;AAC/C,WAAK,SAAS;AAAA,IAChB;AAAA;AAAA,IAXA,IAAW,WAAW;AACpB,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IAWO,QAAc;AACnB,aAAO,KAAK,QAAQ,GAAG;AAAA,IACzB;AAAA,IAGO,UAAgB;AACrB,OAAC,KAAK,OAAO,WAAW,KAAK,GAAG,MAAM,gDAAgD;AACtF,WAAK,UAAU,GAAI,KAAK,OAAe,UAAU,GAAG,KAAK,WAAW,KAAK,SAAS,OAAQ,KAAK,QAAgB,OAAO,KAAM,KAAK,QAAgB,UAAU;AAC3J,WAAK,IAAI;AAAA,IACX;AAAA,IACU,YAAkB;AAAA,IAAC;AAAA,EAC/B;;;ACxCO,MAAM,gBAAgB;AAAA;AAAA,IAE3B,WAAW,EAAE,OAAO,eAAe;AAAA,IACnC,SAAS,EAAE,OAAO,gBAAgB,QAAQ,MAAM;AAAA,IAChD,SAAS,EAAE,OAAO,aAAa,QAAQ,MAAM;AAAA,IAC7C,UAAU,EAAE,OAAO,aAAa,QAAQ,WAAW;AAAA,IACnD,YAAY,EAAE,OAAO,eAAe,QAAQ,aAAa;AAAA,IACzD,cAAc,EAAE,OAAO,iBAAiB,QAAQ,eAAe;AAAA,IAC/D,gBAAgB,EAAE,OAAO,mBAAmB,QAAQ,iBAAiB;AAAA,IACrE,gBAAgB,EAAE,OAAO,oBAAoB,QAAQ,iBAAiB;AAAA,IACtE,kBAAkB,EAAE,OAAO,sBAAsB,QAAQ,mBAAmB;AAAA,IAC5E,SAAS,EAAE,OAAO,gBAAgB,QAAQ,MAAM;AAAA,IAChD,SAAS,EAAE,OAAO,aAAa,QAAQ,MAAM;AAAA,IAC7C,MAAM,EAAE,OAAO,YAAY,QAAQ,YAAY;AAAA,IAC/C,MAAM,EAAE,OAAO,QAAQ,QAAQ,YAAY;AAAA,IAC3C,UAAU,EAAE,OAAO,YAAY,QAAQ,WAAW;AAAA,IAClD,oBAAoB,EAAE,OAAO,yBAAyB;AAAA,IACtD,sBAAsB,EAAE,OAAO,2BAA2B;AAAA,IAC1D,oBAAoB,EAAE,OAAO,wBAAwB;AAAA,IACrD,oBAAoB,EAAE,OAAO,wBAAwB;AAAA,IACrD,qBAAqB,EAAE,OAAO,yBAAyB;AAAA,IACvD,qBAAqB,EAAE,OAAO,yBAAyB;AAAA,IACvD,2BAA2B,EAAE,OAAO,+BAA+B;AAAA,IACnE,uBAAuB,EAAE,OAAO,2BAA2B;AAAA,IAC3D,4BAA4B,EAAE,OAAO,2BAA2B;AAAA,IAChE,uBAAuB,EAAE,OAAO,2BAA2B;AAAA,IAC3D,WAAW,EAAE,OAAO,aAAa;AAAA,IACjC,SAAS,EAAE,OAAO,iBAAiB,QAAQ,UAAU;AAAA,IACrD,MAAM,EAAE,OAAO,QAAQ,QAAQ,OAAO;AAAA,IACtC,SAAS,EAAE,OAAO,WAAW,QAAQ,UAAU;AAAA,IAC/C,MAAM,EAAE,OAAO,YAAY;AAAA,IAC3B,UAAU,EAAE,OAAO,YAAY,KAAK,KAAK;AAAA;AAAA,IAEzC,MAAM,EAAE,OAAO,QAAQ,QAAQ,cAAc;AAAA,IAC7C,YAAY,EAAE,OAAO,cAAc,QAAQ,cAAc,OAAO,CAAC,EAAE,MAAM,2BAA2B,IAAI,SAAS,CAAC,EAAE;AAAA,IACpH,SAAS,EAAE,OAAO,WAAW,QAAQ,WAAW,OAAO,CAAC,EAAE,MAAM,wBAAwB,IAAI,SAAS,CAAC,EAAE;AAAA,IACxG,kBAAkB,EAAE,OAAO,sBAAsB,QAAQ,oBAAoB,OAAO,CAAC,EAAE,MAAM,iCAAiC,IAAI,SAAS,CAAC,EAAE;AAAA,IAC9I,YAAY,EAAE,OAAO,cAAc;AAAA,IACnC,UAAU,EAAE,OAAO,YAAY;AAAA;AAAA,IAE/B,gBAAgB,EAAE,OAAO,qBAAqB,KAAK,KAAK;AAAA,IACxD,gBAAgB,EAAE,OAAO,qBAAqB,KAAK,KAAK;AAAA,IACxD,WAAW,EAAE,OAAO,eAAe,KAAK,KAAK;AAAA,IAC7C,YAAY,EAAE,OAAO,gBAAgB,KAAK,KAAK;AAAA,IAC/C,aAAa,EAAE,OAAO,iBAAiB,KAAK,KAAK;AAAA,IACjD,mBAAmB,EAAE,OAAO,qBAAqB,KAAK,KAAK;AAAA,IAC3D,kBAAkB,EAAE,OAAO,kBAAkB,KAAK,KAAK;AAAA,IACvD,kBAAkB,EAAE,OAAO,qBAAqB,KAAK,KAAK;AAAA,IAC1D,kBAAkB,EAAE,OAAO,qBAAqB,KAAK,KAAK;AAAA,IAC1D,mBAAmB,EAAE,OAAO,wBAAwB,KAAK,KAAK;AAAA,IAC9D,eAAe,EAAE,OAAO,oBAAoB,KAAK,KAAK;AAAA,IACtD,gBAAgB,EAAE,OAAO,qBAAqB,KAAK,KAAK;AAAA,EAC1D;;;AChDO,MAAM,eAAwC;AAAA,IACnD,WAAW;AAAA,IACX,aAAa;AAAA,IACb,OAAO,EAAE,QAAQ,EAAE,aAAa,MAAM,aAAa,MAAM,YAAY,IAAI,EAAE;AAAA,IAC3E,SAAS,OAAO,YAAY,OAAO,QAAQ,aAAa,EAAE,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC,GAAG,EAAE,IAAI,GAAG,GAAG,EAAE,CAAC,CAAC,CAAC;AAAA,IAC/F,oBAAoB,CAAC,eAAe,gBAAgB,cAAc,kBAAkB,cAAc,iBAAiB,uBAAuB,mBAAmB,uBAAuB;AAAA,IACpL,UAAU;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASV;AAAA,IACA,OAAO;AAAA,IACP,SAAS,IAAI;AAAA,IACb,YAAY,CAAC;AAAA;AAAA,EACf;;;ACTO,MAAM,eAAN,MAAsB;AAAA,IAAtB;AACL,0BAAU,SAA2B,CAAC;AAAA;AAAA,IAE/B,SAAS,MAAc,OAAU,QAAoB;AAC1D,aAAO,KAAK,WAAW,IAAI,GAAG,KAAK,MAAM,KAAK,EAAE,MAAM,OAAO,OAAO,CAAC,GAAG;AAAA,IAC1E;AAAA,IACO,WAAW,MAAc,MAAM,KAAK,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,IAAI,GAAS;AACxF,aAAO,QAAQ,MAAM,KAAK,MAAM,OAAO,KAAK,CAAC,GAAG;AAAA,IAClD;AAAA,IACO,IAAI,MAA6B;AACtC,aAAO,KAAK,MAAM,KAAK,CAAC,MAAM,EAAE,SAAS,IAAI,GAAG;AAAA,IAClD;AAAA,IACO,OAAO,OAAuB;AACnC,UAAI,CAAC,MAAO,QAAO,KAAK,MAAM,IAAI,CAAC,MAAM,EAAE,KAAK;AAChD,aAAO,KAAK,MAAM,KAAK,CAAC,GAAG,GAAG,KAAK,MAAM,QAAQ,EAAE,IAAI,GAAG,KAAK,MAAM,QAAQ,EAAE,IAAI,MAAO,OAAO,MAAM,OAAO,KAAK,IAAI,OAAO,KAAK,IAAI,OAAO,KAAK,KAAK,KAAK,EAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK;AAAA,IACtL;AAAA,IACO,QAAQ;AACb,aAAQ,KAAK,QAAQ,CAAC,GAAI;AAAA,IAC5B;AAAA,EACF;AAEO,MAAM,kBAAN,cAAiC,aAAgB;AAAA,IAC/C,cAAc,MAAc,OAAU,QAAc;AACzD,aAAO,KAAK,WAAW,IAAI,GAAG,KAAK,MAAM,QAAQ,EAAE,MAAM,OAAO,OAAO,CAAC,GAAG;AAAA,IAC7E;AAAA,IACO,eAAe,KAAa,MAAc,OAAU,QAAc;AACvE,WAAK,WAAW,IAAI;AACpB,YAAM,MAAM,KAAK,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG;AACtD,aAAO,QAAQ,MAAM,KAAK,MAAM,OAAO,KAAK,GAAG,EAAE,MAAM,OAAO,OAAO,CAAC,GAAG,QAAQ,KAAK,SAAS,MAAM,OAAO,MAAM;AAAA,IACpH;AAAA,IACO,cAAc,KAAa,MAAc,OAAU,QAAc;AACtE,WAAK,WAAW,IAAI;AACpB,YAAM,MAAM,KAAK,MAAM,UAAU,CAAC,MAAM,EAAE,SAAS,GAAG;AACtD,aAAO,QAAQ,MAAM,KAAK,MAAM,OAAO,MAAM,GAAG,GAAG,EAAE,MAAM,OAAO,OAAO,CAAC,GAAG,QAAQ,KAAK,SAAS,MAAM,OAAO,MAAM;AAAA,IACxH;AAAA,EACF;AAEO,MAAM,gBAAN,MAAM,sBAAqB,gBAAiC;AAAA,IAKjE,OAAc,IAAI,MAAmB;AACnC,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AAAA,IACA,OAAc,SAAS,MAA6B;AAClD,WAAK,SAAS,SAAS,KAAK,UAAU,IAAI;AAAA,IAC5C;AAAA,IACA,OAAc,WAAW,MAAoB;AAC3C,WAAK,SAAS,WAAW,IAAI;AAAA,IAC/B;AAAA,IACA,OAAc,eAAe,KAAa,MAA6B;AACrE,WAAK,SAAS,eAAe,KAAK,KAAK,UAAU,IAAI;AAAA,IACvD;AAAA,IACA,OAAc,cAAc,KAAa,MAA6B;AACpE,WAAK,SAAS,cAAc,KAAK,KAAK,UAAU,IAAI;AAAA,IACtD;AAAA,IACA,OAAc,KAAK,KAAa,WAA8C;AAC5E,aAAO,KAAK,SAAS,OAAO,SAAS,EAAE,KAAK,CAAC,SAAS,KAAK,cAAc,GAAG,CAAC,KAAK;AAAA,IACpF;AAAA,EACF;AAtBE,gBADW,eACI,YAAW,IAAI,cAAa;AADtC,MAAM,eAAN;AAyBA,MAAM,gBAAN,MAAM,sBAAqB,gBAAiC;AAAA,IAKjE,OAAc,IAAI,MAAmB;AACnC,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AAAA,IACA,OAAc,SAAS,MAAuB,YAAY,KAAK,UAAU,QAAiB;AACxF,WAAK,SAAS,SAAS,KAAK,UAAU,IAAI;AAC1C,mBAAa,QAAQ,cAAW,KAAK,UAAU,KAAK,KAAK;AAAA,IAC3D;AAAA,IACA,OAAc,WAAW,UAAkB,YAAY,MAAY;AACjE,WAAK,SAAS,WAAW,QAAQ;AACjC,mBAAa,WAAW,cAAW,QAAQ;AAAA,IAC7C;AAAA,IACA,OAAc,eAAe,KAAa,MAA6B;AACrE,WAAK,SAAS,eAAe,KAAK,KAAK,UAAU,IAAI;AAAA,IACvD;AAAA,IACA,OAAc,cAAc,KAAa,MAA6B;AACpE,WAAK,SAAS,cAAc,KAAK,KAAK,UAAU,IAAI;AAAA,IACtD;AAAA,IACA,OAAc,aAAgC;AAC5C,aAAO,KAAK,SAAS,OAAO;AAAA,IAC9B;AAAA,EACF;AAxBE,gBADW,eACI,YAAW,IAAI,cAAa;AADtC,MAAM,eAAN;AA2BA,MAAM,eAAN,MAAM,qBAAoB,aAA6B;AAAA,IAK5D,OAAc,IAAI,MAAmB;AACnC,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AAAA,IACA,OAAc,SAAS,KAAqB,YAAY,IAAI,UAAU,QAAiB;AACrF,WAAK,SAAS,SAAS,IAAI,UAAU,GAAG;AACxC,mBAAa,QAAQ,cAAW,IAAI,KAAK,WAAW,MAAM,IAAI,SAAS,IAAI,KAAK;AAAA,IAClF;AAAA,IACA,OAAc,WAAW,UAAkB,YAAY,MAAY;AACjE,WAAK,SAAS,WAAW,QAAQ;AACjC,mBAAa,WAAY,SAAS,MAAM,GAAG,SAAS,QAAQ,GAAG,CAAC,KAAK,eAAK,eAAK,aAAG,UAAkB,QAAQ;AAAA,IAC9G;AAAA,EACF;AAfE,gBADW,cACI,YAAW,IAAI,aAAY;AADrC,MAAM,cAAN;AAkBA,MAAM,gBAAN,MAAM,sBAAqB,aAAkB;AAAA,IAIlD,OAAc,IAAI,MAAmB;AACnC,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AAAA,IAEA,OAAc,SAAS,MAAc,SAAoB;AACvD,WAAK,SAAS,SAAS,MAAM,OAAO;AAAA,IACtC;AAAA,IACA,OAAc,WAAW,MAAmC;AAC1D,WAAK,SAAS,WAAW,IAAI;AAAA,IAC/B;AAAA,EACF;AAbE,gBADW,eACI,YAAW,IAAI,cAAa;AADtC,MAAM,eAAN;AAgBA,MAAM,qBAAN,MAAM,2BAA0B,aAAmC;AAAA,IAKxE,OAAc,IAAI,MAAmB;AACnC,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AAAA,IACA,OAAc,SAAS,MAAkC;AACvD,WAAK,SAAS,SAAS,KAAK,eAAe,IAAI;AAAA,IACjD;AAAA,IACA,OAAc,WAAW,MAAwC;AAC/D,WAAK,SAAS,WAAW,IAAI;AAAA,IAC/B;AAAA,IAGA,OAAc,KAAK,MAAc,MAAW,SAAS,CAAC,GAAQ;AAC5D,YAAM,OAAO,KAAK,SAAS,IAAI,IAAI;AACnC,UAAI,CAAC,KAAM,QAAO;AAClB,YAAM,WAAW,IAAI,KAAK,MAAM,MAAM;AACtC,aAAO,SAAS,OAAO,GAAG,SAAS,MAAM;AAAA,IAC3C;AAAA,IACA,OAAc,SAAiC;AAC7C,aAAO,KAAK,SAAS,OAAO;AAAA,IAC9B;AAAA,EACF;AAxBE,gBADW,oBACI,YAAW,IAAI,mBAAkB;AAD3C,MAAM,oBAAN;AA2BA,MAAM,gBAAN,MAAM,sBAAqB,aAAqB;AAAA,IAIrD,OAAc,IAAI,MAAc,MAAM,OAAO,QAAQ,4BAA4B;AAC/E,cAAQ,MAAM,KAAK,SAAS,IAAI,IAAI,GAAG,QAAQ,OAAO,EAAE,IAAI,KAAK,SAAS,IAAI,IAAI,MAAM;AAAA,IAC1F;AAAA,IAEA,OAAc,SAAS,MAAc,KAAmB;AACtD,WAAK,SAAS,SAAS,MAAM,GAAG;AAAA,IAClC;AAAA,IACA,OAAc,WAAW,MAAmC;AAC1D,WAAK,SAAS,WAAW,IAAI;AAAA,IAC/B;AAAA;AAAA,IAEA,OAAc,YAAY,OAAoF;AAC5G,iBAAW,KAAK,OAAO,KAAK,KAAK,EAAG,MAAK,SAAS,SAAS,GAA4B,MAAM,CAA0B,CAAC;AAAA,IAC1H;AAAA,EACF;AAjBE,gBADW,eACI,YAAW,IAAI,cAAa;AADtC,MAAM,eAAN;;;ACzJA,MAAMC,WAAU,CAAoC,IAAO,OAAgC,CAAC,MAAwB,QAAY,QAAQ,IAAI,IAAI;AAEhJ,MAAM,iBAAiB,CAAoC,OAAUA,SAAQ,EAAE;AAC/E,MAAM,WAAW,CAAoC,IAAO,MAAM,IAAI,MAAMA,SAAQ,IAAI,GAAG;AAO3F,WAAS,UAAU,SAAuB;AAC/C,mBAAe,MAAM,QAAQ,KAAK,OAAO,CAAC,EAAE;AAAA,EAC9C;AAQO,WAAS,kBAAkB,OAAe,SAAiB,SAAwB;AACxF,cAAU,UAAU,GAAG,OAAO,yCAAyC,KAAK,WAAW,OAAO,cAAc,GAAG,OAAO,yCAAyC,KAAK,KAAK;AAAA,EAC3K;;;ACvBA,WAAS,iBAAiB,IAAI,EAAE,UAAU,OAAO,YAAY,MAAM,aAAa,MAAM,cAAc,MAAM,gBAAgB,OAAO,cAAc,OAAO,cAAc,OAAO,OAAO,QAAQ,SAAS,MAAM,SAAAC,WAAU,KAAK,IAAI,KAAK;AAC/N,UAAM,QAAQ,KAAK,qBAAL,KAAK,mBAAqB,CAAC,IAAG,YAAY,KAAK,eAAL,KAAK,aAA+B,oBAAI,QAAQ,IAAG,IAAI,EAAE;AACjH,QAAI,CAAC,WAAW,SAAU,QAAO,WAAW,WAAW;AACvD,aAAS,UAAU,gBAAgB,aAAa,OAAO,SAAS,OAAO,SAAS,WAAW,WAAW;AACtG,UAAM,cAAc,CAAC,GAAG,GAAG,IAAI,EAAE,UAAU,CAAC,KAAK,GAAG,OAAO,cAAc,GAAG,sBAAsB,IAAI,SAAS;AAC7G,UAAI,MAAM,GAAG,EAAE,MAAM,OAAO,cAAc,EAAE,WAAW,KAAK,QAAQ,EAAE,WAAW,KAAK,SAAS,EAAE,WAAW,KAAK,OAAO,EAAE,WAAW,KAAK,SAAS,GAAG,SAAS,CAAC,GAAI,QAAO;AAC3K,cAAQ,CAAC,SAAS,OAAO,KAAK,SAAS,CAAC,MAAM,UAAU,CAAC;AAAA,IAC3D,GAAG,eAAe,CAAC,MAAM,cAAc,EAAE,eAAe,cAAc,EAAE,MAAM,MAAM,YAAY,GAAG,EAAE,MAAM,IAAI,gBAAgB,CAAC,MAAM,eAAe,EAAE,QAAQ,YAAY,CAAC,EAAE,WAAW,CAAC,EAAE,YAAY,CAAC,EAAE,UAAU,CAAC,EAAE,WAAW,MAAM,GAAG,EAAE,MAAM,MAAM,UAAU,CAAC,IAAI,iBAAiB,CAAC,MAAM,iBAAiB,CAAC,GAAG,SAAS,EAAE,aAAa,KAAK,YAAY,GAAG,EAAE,aAAa;AACjX,SAAK,iBAAiB,aAAa,aAAaA,QAAO,GAAG,KAAK,iBAAiB,cAAc,aAAa,EAAE,SAAS,MAAM,SAAAA,SAAQ,CAAC;AACrI,SAAK,iBAAiB,WAAW,cAAcA,QAAO;AACtD,OAAG,iBAAiB,YAAY,gBAAgBA,QAAO;AACvD,UAAM,UAAU,MAAM;AACpB,WAAK,oBAAoB,aAAa,aAAaA,QAAO,GAAG,KAAK,oBAAoB,cAAc,aAAaA,QAAO;AACxH,WAAK,oBAAoB,WAAW,cAAcA,QAAO;AACzD,SAAG,oBAAoB,YAAY,gBAAgBA,QAAO;AAC1D,WAAK,WAAW,OAAO,EAAE,GAAG,MAAM,OAAO,MAAM,QAAQ,EAAE,GAAG,CAAC;AAAA,IAC/D;AACA,WAAO,CAAC,MAAM,SAAS,EAAE,KAAK,MAAM,KAAK,EAAE,GAAG,KAAK,WAAW,IAAI,IAAI,OAAO,GAAG;AAAA,EAClF;AACA,MAAI,qBAAqB,CAAC,OAAO,KAAK,YAAY,IAAI,EAAE,IAAI;AAI5D,WAAS,cAAc,IAAI,EAAE,UAAU,OAAO,kBAAkB,oBAAoB,gBAAgB,iBAAiB,OAAO,QAAQ,SAAS,MAAM,SAAAA,WAAU,KAAK,IAAI,KAAM;AAC1K,UAAM,QAAQ,KAAK,qBAAL,KAAK,mBAAqB,CAAC,IAAG,YAAY,KAAK,eAAL,KAAK,aAA+B,oBAAI,QAAQ,IAAG,IAAI,EAAE;AACjH,QAAI,CAAC,WAAW,SAAU,QAAO,WAAW,WAAW;AACvD,aAAS,UAAU,gBAAgB,aAAa,OAAO,SAAS,OAAO,SAAS,WAAW,WAAW;AACtG,QAAI,aAAa;AACjB,UAAM,UAAU,SAAS,cAAc,QAAQ,GAAG,UAAU,GAAG,cAAc,eAAe,GAAG,QAAQ,SAAS,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,QAAQ,GAAG,EAAE,UAAU,YAAY,OAAO,KAAK,QAAQ,KAAK,eAAe,OAAO,CAAC,GAAG,OAAO,SAAS,QAAQ,EAAE,UAAU,EAAE,GAAG,EAAE,YAAY,MAAM,GAAG,EAAE,UAAU,YAAY,OAAO,KAAK,QAAQ,KAAK,eAAe,OAAO,CAAC,GAAG,eAAe,CAAC,IAAI,OAAO,CAAC,GAAG,EAAE,iBAAiB,oBAAoB,CAAC,GAAG,aAAa,CAAC,IAAI,GAAG,MAAM,aAAa,MAAM,CAAC,eAAe,aAAa,MAAM,KAAK,SAAS,IAAI,GAAG,CAAC,EAAE,MAAM,KAAK,CAAC,GAAG,aAAa,UAAU,MAAM,GAAG,WAAW,KAAK,GAAG,MAAM,IAAI,aAAa,QAAQ,YAAY,CAAC,MAAM,OAAO,KAAK,SAAS;AAClrB,UAAI,CAAC,OAAQ,QAAO,WAAW,MAAM,KAAK,CAAC;AAC3C,UAAI,GAAG,aAAa,UAAU,EAAG,QAAO,GAAG,MAAM;AACjD,YAAM,QAAQ,aAAa;AAC3B,UAAI,CAAC,MAAM,OAAQ,QAAO,WAAW,GAAG,IAAI;AAC5C,YAAM,OAAO,SAAS,qBAAqB,SAAS,cAAc,cAAc,KAAK,SAAS;AAC9F,UAAI,IAAI,GAAG,iBAAiB,MAAM,MAAM,aAAa,CAAC;AACtD,aAAO,MAAM,SAAS,CAAC,IAAI,WAAW,MAAM,GAAG,SAAS,IAAI,CAAC,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG,EAAE,CAAC,IAAK,OAAM,aAAa,IAAI,EAAE,iBAAiB,IAAI;AAC3I,eAAS,QAAQ,MAAM,IAAI,QAAQ,IAAI,IAAI,QAAQ,MAAM,MAAM,IAAI,MAAM,SAAS,CAAC,CAAC,KAAK,MAAM,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,KAAK,MAAM,MAAM,IAAK,KAAI,CAAC,GAAG,SAAS,SAAS,IAAI,CAAC,CAAC,EAAG,QAAO,OAAO,MAAM;AACxM,OAAC,MAAM,QAAQ,MAAM,KAAK;AAAA,IAC5B,GAAG,gBAAgB,CAAC,MAAM;AACxB,UAAI,SAAS,cAAc,cAAc,KAAK,CAAC,GAAG,QAAQ,cAAc,EAAG;AAC3E,YAAM,GAAG,EAAE,MAAM,MAAM,YAAY,GAAG,aAAa,MAAM,QAAQ,CAAC,GAAG,SAAS,YAAY,GAAG,aAAa,CAAC,KAAK,CAAC,EAAE,aAAa,EAAE,SAAS,EAAE,KAAK,WAAW;AAAA,IAC/J,GAAG,oBAAoB,MAAM,QAAQ,UAAU,OAAO,aAAa;AACnE,UAAM,iBAAiB,SAAS,CAAC,MAAM,GAAG,SAAS,EAAE,aAAa,IAAI,UAAU,IAAI,IAAI,WAAW,GAAGA,QAAO,GAAG,GAAG,QAAQ,KAAK;AAChI,SAAK,iBAAiB,SAAS,CAAC,MAAM,GAAG,SAAS,EAAE,aAAa,IAAI,UAAU,IAAI,WAAW,EAAE,GAAGA,QAAO,GAAG,GAAG,OAAO,IAAI;AAC3H,SAAK,iBAAiB,WAAW,eAAeA,QAAO;AACvD,QAAI,WAAW,CAAC,GAAG,SAAS,OAAO,EAAG,EAAC,UAAU,WAAW,UAAU,IAAI,WAAW,OAAO,QAAQ,UAAU,IAAI,aAAa,GAAG,QAAQ,MAAM,GAAG,QAAQ,iBAAiB,QAAQ,mBAAmBA,QAAO,EAAE;AAChN,UAAM,UAAU,MAAM;AACpB,eAAS,eAAe,QAAQ,MAAM,GAAG,MAAM,OAAO,GAAG,KAAK,OAAO;AACrE,WAAK,oBAAoB,WAAW,eAAeA,QAAO;AAC1D,eAAS,oBAAoB,QAAQ,mBAAmBA,QAAO;AAC/D,WAAK,WAAW,OAAO,EAAE,GAAG,MAAM,OAAO,MAAM,QAAQ,EAAE,GAAG,CAAC;AAAA,IAC/D;AACA,UAAM,SAAS,EAAE,SAAS,MAAM,OAAO,GAAG,QAAQ,KAAK,GAAG,GAAG,OAAO,IAAI,GAAG;AAC3E,WAAO,CAAC,MAAM,SAAS,EAAE,KAAK,MAAM,KAAK,EAAE,GAAG,KAAK,WAAW,IAAI,IAAI,MAAM,GAAG;AAAA,EACjF;AACA,MAAI,kBAAkB,CAAC,OAAO,KAAK,YAAY,IAAI,EAAE,GAAG,QAAQ;AAChE,MAAI,gBAAgB,CAAC,OAAO,KAAK,YAAY,IAAI,EAAE,GAAG,KAAK;AAI3D,WAAS,cAAc,GAAG,EAAE,QAAQ,cAAc,OAAO,mBAAmB,uBAAuB,YAAY,eAAe,gBAAgB,oBAAoB,gBAAgB,oBAAoB,cAAc,IAAI,IAAI,KAAM;AAChO,UAAM,KAAK,UAAU,EAAE;AACvB,QAAI,CAAC,MAAM,EAAE,WAAW,EAAE,iBAAiB,cAAc,EAAE,MAAM,KAAK,GAAG,aAAa,UAAU,KAAK,EAAE,gBAAgB,WAAW,EAAE,WAAW,EAAG;AAClJ,MAAE,kBAAkB;AACpB,UAAM,EAAE,aAAa,IAAI,cAAc,GAAG,IAAI,IAAI,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,GAAG,KAAK,EAAE,IAAI,GAAG,sBAAsB,GAAG,OAAO,KAAK,IAAI,IAAI,EAAE,GAAG,IAAI,cAAc,KAAK,IAAI,OAAO,KAAK,EAAE,UAAU,KAAK,KAAK,IAAI,OAAO,GAAG,IAAI,cAAc,KAAK,IAAI,OAAO,KAAK,EAAE,UAAU,KAAK,KAAK,IAAI,OAAO,GAAG,UAAU,SAAS,QAAQ,EAAE,WAAW,iBAAiB,CAAC,GAAG,SAAS,SAAS,QAAQ,EAAE,WAAW,YAAY,MAAM,cAAc,GAAG,CAAC,GAAG,EAAE,SAAS,SAAS,IAAI,aAAa,IAAI,WAAW,CAAC,UAAU,CAAC,MAAM,CAAC;AAC1f,QAAI,aAAa;AACjB,WAAO,iBAAiB,gBAAgB,MAAM,aAAa,MAAM,EAAE,MAAM,KAAK,CAAC;AAC/E,OAAG,OAAO,QAAQ,YAAY,MAAM,EAAE,aAAa;AACnD,QAAI,WAAW;AACf,UAAM,UAAU,CAACC,WAAU;AACzB,UAAI,SAAU;AACd,UAAI,CAAC,cAAcA,WAAU,KAAM,QAAO,OAAO,iBAAiB,gBAAgB,SAAS,EAAE,MAAM,KAAK,CAAC,GAAG,KAAK,WAAW,SAAS,aAAa,IAAI;AACtJ,iBAAW;AACX,aAAO,UAAU,QAAQ,eAAe,aAAa;AACrD,aAAO,iBAAiB,gBAAgB,MAAM,WAAW,MAAM,QAAQ,OAAO,CAAC,CAAC,GAAG,WAAW,MAAM,QAAQ,OAAO,GAAG,WAAW;AACjI,iBAAW,OAAO,CAAC,aAAa,eAAe,EAAG,EAAC,GAAG,eAAe,eAAe,QAAQ,oBAAoB,KAAK,OAAO;AAAA,IAC9H;AACA,eAAW,OAAO,CAAC,aAAa,eAAe,EAAG,EAAC,GAAG,eAAe,eAAe,QAAQ,iBAAiB,KAAK,OAAO;AAAA,EAC3H;AAGA,MAAI,iBAAiB,CAAC,EAAE,KAAK,WAAW,QAAQ,OAAO,OAAO,QAAQ,MAAAC,OAAM,UAAU,OAAO,IAAI,MAAM;AACrG,UAAM,WAAW,YAAY,YAAY,OAAO,SAAS,KAAK,IAAI,WAAW,QAAQ,GAAG,SAAS,CAAC,GAAG,WAAW,YAAY,OAAO,SAAS,KAAK,IAAI,WAAW,SAAS,QAAQ,IAAI,SAAS,CAAC,GAAG,OAAO,QAAQ,GAAG,OAAO,QAAQ,GAAG,iBAAiB,MAAM,EAAE,YAAY,OAAO,KAAK,GAAG,WAAW,OAAO,IAAI,EAAE,IAAI,EAAE,YAAY,OAAO,IAAI,GAAG,WAAW,OAAO,KAAK,EAAE,GAAG,OAAO,EAAE,GAAG,gBAAgB,WAAW,OAAO,QAAQ,GAAG,SAAS,OAAO,CAAC,QAAQ,GAAG,MAAM,UAAU,IAAI,UAAU,KAAK,UAAU,SAAS,IAAI,QAAQ,WAAW,SAAS,KAAK,OAAO,QAAQ,EAAE,SAAS,KAAK,MAAM,EAAE,GAAG,KAAK;AAC7kB,QAAI,cAAc,QAAQ,UAAU,QAAQ,QAAQ,OAAO,YAAY;AACvE,QAAI,QAAQ,aAAa;AACvB,UAAI,CAACA,SAAQ,eAAe,OAAQ,gBAAe;AAAA,IACrD,WAAW,QAAQ,WAAW;AAC5B,UAAI,CAACA,SAAQ,cAAc,EAAG,gBAAe,KAAK,IAAI,IAAI;AAAA,IAC5D,WAAW,QAAQ,YAAY;AAC7B,UAAI,CAACA,SAAQ,eAAe,OAAQ,eAAc;AAAA,IACpD,WAAW,QAAQ,UAAU;AAC3B,UAAI,CAACA,SAAQ,cAAc,EAAG,eAAc;AAAA,IAC9C;AACA,WAAOA,SAAQ,cAAc,UAAU,SAAS,MAAM,GAAG,aAAa,SAAS,CAAC;AAAA,EAClF;AACA,MAAI,oBAAoB,CAAC,OAAO,WAAW;AACzC,QAAI,CAAC,MAAO,QAAO;AACnB,QAAI,CAAC,OAAQ,QAAO,MAAM;AAC1B,UAAM,YAA4B,oBAAI,IAAI;AAC1C,QAAI,UAAU;AACd,WAAO,QAAS,WAAU,IAAI,OAAO,GAAG,UAAU,QAAQ;AAC1D,cAAU;AACV,WAAO,SAAS;AACd,UAAI,UAAU,IAAI,OAAO,EAAG,QAAO;AACnC,gBAAU,QAAQ;AAAA,IACpB;AACA,WAAO;AAAA,EACT;AACA,MAAI,UAAU,CAAC,KAAK,IAAI,MAAM,IAAI,MAAM,KAAK,SAAS;AACpD,UAAM,MAAM,IAAI,QAAQ,OAAO,CAAC;AAChC,QAAI,CAAC,IAAK,QAAO;AACjB,QAAI,OAAO,IAAI,UAAU,CAAC,OAAO,GAAG,cAAc,IAAI,CAAC,EAAE,SAAS;AAClE,WAAO,OAAO,IAAI,OAAO;AACzB,QAAI,EAAG,MAAK,IAAI;AAChB,QAAI,OAAO,KAAK,KAAK,MAAM,IAAI;AAC/B,QAAI,EAAG,MAAK,IAAI;AAChB,QAAI,IAAI;AACN,YAAM,aAAa,IAAI,CAAC,EAAE,gBAAgB,GAAG,kBAAkB,kBAAkB,IAAI,CAAC,GAAG,IAAI,CAAC,CAAC,GAAG,gBAAgB;AAClH,aAAO,MAAM,GAAG,KAAK,MAAM,kBAAkB,UAAU,GAAG,IAAI,KAAK;AACnE,WAAK,KAAK;AAAA,IACZ;AACA,WAAO;AAAA,EACT;AAIA,MAAI,aAAa,CAAC,cAAc,aAAa,QAAQ,KAAK;AAC1D,MAAI,aAAa,CAAC,WAAW,aAAa,YAAY,QAAQ;AAC9D,MAAI,WAAW,CAAC,GAAG,YAAY,GAAG,UAAU;AAC5C,MAAI,iBAAiB;AAAA,IACnB,SAAS;AAAA,IACT,UAAU;AAAA,IACV,cAAc;AAAA,IACd,MAAM;AAAA,IACN,SAAS;AAAA,IACT,WAAW;AAAA,IACX,WAAW;AAAA,IACX,sBAAsB;AAAA,IACtB,cAAc;AAAA,IACd,SAAS;AAAA,IACT,KAAK;AAAA,IACL,MAAM,CAAC;AAAA,IACP,aAAa;AAAA,IACb,eAAe;AAAA,IACf,cAAc,EAAE,eAAe,MAAM;AAAA,IACrC,gBAAgB,EAAE,OAAO,WAAW,QAAQ,UAAU;AAAA,IACtD,UAAU;AAAA,IACV,YAAY;AAAA,EACd;;;ACxIA,WAAS,iBAAiB,IAAI,EAAE,cAAc,IAAI,kBAAkB,sBAAsB,WAAW,MAAM,aAAa,KAAK,IAAI,KAAK;AACpI,UAAM,SAAS,IAAI,eAAe,YAAY,KAAK,eAAL,KAAK,aAA+B,oBAAI,QAAQ,IAAG,IAAI,EAAE;AACvG,QAAI,CAAC,UAAU,SAAU,QAAO,WAAW,WAAW;AACtD,SAAK,0BAAL,KAAK,wBAA0B,IAAI,eAAe,CAAC,YAAY;AAC7D,iBAAW,EAAE,OAAO,KAAK,QAAS,MAAK,WAAW,IAAI,MAAM,GAAG,OAAO;AAAA,IACxE,CAAC;AACD,SAAK,0BAAL,KAAK,wBAA0B,IAAI,iBAAiB,CAAC,YAAY;AAC/D,YAAM,MAAsB,oBAAI,IAAI;AACpC,iBAAW,SAAS,SAAS;AAC3B,YAAI,OAAO,MAAM,kBAAkB,UAAU,MAAM,SAAS;AAC5D,eAAO,QAAQ,CAAC,KAAK,WAAW,IAAI,IAAI,EAAG,QAAO,KAAK;AACvD,YAAI,KAAM,KAAI,IAAI,IAAI;AAAA,MACxB;AACA,iBAAW,OAAO,IAAK,MAAK,WAAW,IAAI,GAAG,GAAG,OAAO;AAAA,IAC1D,CAAC;AACD,UAAM,SAAS,CAAC;AAChB,QAAI,WAAW,MAAM,OAAO,YAAY,IAAI,GAAG,cAAc,IAAI,eAAe;AAChF,UAAM,SAAS,MAAM;AACnB,YAAM,iBAAiB,CAAC,CAAC,OAAO,cAAc,oBAAoB;AAClE,UAAI,YAAY;AACd,cAAM,IAAI,OAAO,MAAM,eAAe,aAAa,QAAQ,iBAAiB,GAAG,cAAc,IAAI,IAAI;AACrG,eAAO,KAAK,MAAM,UAAU,QAAQ,SAAS,GAAG,aAAa,IAAI,UAAU;AAC3E,eAAO,MAAM,MAAM,UAAU,QAAQ,SAAS,GAAG,aAAa,GAAG,cAAc,GAAG,cAAc,IAAI,UAAU;AAC9G,sBAAc;AAAA,MAChB;AACA,UAAI,UAAU;AACZ,cAAM,IAAI,OAAO,IAAI,gBAAgB,cAAc,QAAQ,iBAAiB,GAAG,eAAe,IAAI,IAAI;AACtG,eAAO,GAAG,MAAM,UAAU,QAAQ,SAAS,GAAG,YAAY,IAAI,UAAU;AACxE,eAAO,KAAK,MAAM,UAAU,QAAQ,SAAS,GAAG,YAAY,GAAG,eAAe,GAAG,eAAe,IAAI,UAAU;AAC9G,uBAAe;AAAA,MACjB;AAAA,IACF;AACA,UAAM,SAAS,CAAC,QAAQ;AACtB,YAAM,QAAQ,MAAM;AAClB,cAAM,MAAM,YAAY,IAAI,GAAG,KAAK,MAAM;AAC1C,eAAO;AACP,cAAM,IAAI,cAAc,KAAK;AAC7B,YAAI,QAAQ,OAAQ,IAAG,aAAa,KAAK,IAAI,GAAG,GAAG,aAAa,CAAC;AACjE,YAAI,QAAQ,QAAS,IAAG,aAAa,KAAK,IAAI,GAAG,cAAc,GAAG,aAAa,GAAG,aAAa,CAAC;AAChG,YAAI,QAAQ,KAAM,IAAG,YAAY,KAAK,IAAI,GAAG,GAAG,YAAY,CAAC;AAC7D,YAAI,QAAQ,OAAQ,IAAG,YAAY,KAAK,IAAI,GAAG,eAAe,GAAG,cAAc,GAAG,YAAY,CAAC;AAC/F,mBAAW,sBAAsB,KAAK;AAAA,MACxC;AACA,aAAO,YAAY,IAAI;AACvB,YAAM;AAAA,IACR;AACA,UAAM,OAAO,OAAO,qBAAqB,YAAY,CAAC,GAAG,WAAW;AACpE,UAAM,YAAY,CAAC,QAAQ;AACzB,YAAM,MAAM,SAAS,OAAO,EAAE,WAAW,gBAAgB,GAAG,EAAE,iBAAiB,IAAI,GAAG,EAAE,SAAS,OAAO,CAAC;AACzG,UAAI,CAAC,IAAK;AACV,iBAAW,OAAO,CAAC,gBAAgB,WAAW,EAAG,KAAI,iBAAiB,KAAK,MAAM,OAAO,GAAG,CAAC;AAC5F,iBAAW,OAAO,CAAC,gBAAgB,aAAa,iBAAiB,aAAa,SAAS,EAAG,KAAI,iBAAiB,KAAK,IAAI;AACxH,cAAQ,UAAU,QAAQ,OAAO,OAAO,aAAa,KAAK,EAAE,IAAI,OAAO,OAAO,GAAG;AACjF,aAAO,GAAG,IAAI;AAAA,IAChB;AACA,QAAI,WAAY,YAAW,OAAO,CAAC,QAAQ,OAAO,EAAG,WAAU,GAAG;AAClE,QAAI,SAAU,YAAW,OAAO,CAAC,MAAM,MAAM,EAAG,WAAU,GAAG;AAC7D,UAAM,SAAS;AAAA,MACb;AAAA,MACA,UAAU;AACR,aAAK,GAAG,GAAG,oBAAoB,UAAU,MAAM;AAC/C,aAAK,sBAAsB,UAAU,EAAE,GAAG,KAAK,WAAW,OAAO,EAAE;AACnE,mBAAW,KAAK,OAAO,OAAO,MAAM,EAAG,GAAE,OAAO;AAAA,MAClD;AAAA,IACF;AACA,WAAO,GAAG,GAAG,iBAAiB,UAAU,MAAM;AAC9C,SAAK,sBAAsB,QAAQ,EAAE,GAAG,KAAK,sBAAsB,QAAQ,IAAI,EAAE,WAAW,MAAM,SAAS,MAAM,eAAe,KAAK,CAAC;AACtI,WAAO,KAAK,WAAW,IAAI,IAAI,MAAM,GAAG;AAAA,EAC1C;AACA,MAAI,qBAAqB,CAAC,OAAO,KAAK,WAAW,IAAI,EAAE,GAAG,QAAQ;AAIlE,WAAS,kBAAkB,EAAE,YAAY,GAAG,WAAW,IAAI,YAAY,KAAK,WAAW,IAAI,aAAa,IAAI,SAAS,IAAI,MAAM,OAAO,IAAI,KAAM;AAC9I,QAAI,cAAc,WAAW,UAAU,MAAM,WAAW;AACxD,UAAM,QAAQ,CAAC,SAAS,QAAQ,OAAO,UAAU,MAAM;AACrD,UAAI,QAAQ,OAAQ,YAAW;AAC/B,YAAM,MAAM,YAAY,IAAI,GAAG,QAAQ,cAAc,eAAe,WAAW,MAAM,WAAW,YAAY;AAC5G,UAAI,CAAC,UAAU,UAAU,UAAU,WAAW,IAAI,eAAe,IAAI,gBAAgB,SAAS;AAC5F,oBAAY,OAAO,UAAU,WAAW,MAAM,eAAe,GAAG,SAAS,IAAI,cAAc,cAAc,cAAc,KAAK,IAAI,cAAc,GAAG,QAAQ;AACzJ,YAAI,WAAW,GAAG,UAAU,SAAS,CAAC,QAAQ,KAAK;AAAA,MACrD,MAAO,OAAM;AACb,aAAO,WAAW,CAAC,QAAQ,MAAM,MAAM;AAAA,IACzC;AACA,UAAM,QAAQ,OAAO,WAAW,aAAa,OAAO,GAAG,UAAU,MAAM,cAAc,WAAW,WAAW;AAC3G,WAAO,EAAE,OAAO,MAAM;AAAA,EACxB;AAGA,WAAS,oBAAoB,WAAW,SAAS,CAAC,GAAG;AACnD,UAAM,YAAY,KAAK,eAAL,KAAK,aAA+B,oBAAI,QAAQ,IAAG,IAAI,SAAS;AAClF,QAAI,CAAC,OAAO,WAAW,SAAU,QAAO,WAAW,WAAW;AAC9D,UAAM,EAAE,SAAS,WAAW,UAAU,cAAc,MAAAC,OAAM,SAAS,WAAW,SAAS,aAAa,eAAe,sBAAsB,cAAc,MAAM,KAAK,OAAO,cAAc,gBAAgB,UAAU,YAAY,UAAU,IAAI,EAAE,GAAG,gBAAgB,GAAG,OAAO;AAC1Q,QAAI,QAAQ,KAAK,KAAK,GAAG,QAAQ,KAAK,KAAK,GAAG,SAAS,KAAK,MAAM,GAAG,cAAc,IAAI,SAAS,IAAI,UAAU,MAAM,QAAQ,CAAC;AAC7H,UAAM,UAAU,aAAa,SAAS,SAAS,aAAa,CAAC,SAAS,MAAM,UAAU,gBAAgB,OAAO,WAAW,QAAQ,iBAAiB,SAAS,EAAE,cAAc,QAAQ,aAAa,MAAM,CAAC,WAAW,CAAC,WAAW,iBAAiB,CAAC,OAAO,CAAC,MAAM,GAAG,QAAQ,qDAAqD,GAAG,WAAW,MAAM,QAAQ,MAAM,KAAK,UAAU,iBAAiB,QAAQ,CAAC;AACxY,UAAM,eAAe,CAAC,aAAa,IAAI,EAAE,KAAK,cAAc,SAAS,MAAM,MAAM;AAC/E,UAAI,WAAW,KAAK,CAAC,MAAM,OAAQ,QAAO;AAC1C,UAAI,QAAQ;AACZ,UAAI,WAAW;AACf,aAAO,WAAW,MAAM,QAAQ;AAC9B,YAAI,CAAC,eAAe,MAAM,KAAK,CAAC,EAAG,QAAO;AAC1C,gBAAQ,eAAe,EAAE,KAAK,EAAE,KAAK,WAAW,OAAO,OAAO,OAAO,QAAQ,QAAQ,MAAM,QAAQ,MAAAA,OAAM,SAAS,EAAE,SAAS,IAAI,CAAC;AAClI;AAAA,MACF;AACA,aAAO;AAAA,IACT;AACA,UAAM,YAAY,CAAC,aAAa,IAAI,EAAE,KAAK,aAAa,MAAM;AAC5D,UAAI,WAAW,EAAG;AAClB,YAAM,MAAM,aAAa,aAAa,CAAC;AACvC,UAAI,QAAQ,KAAM;AAClB,uBAAiB,GAAG;AACpB,iBAAW,MAAM,GAAG,GAAG,CAAC,GAAG,UAAU;AACrC,UAAI,SAAS;AACX,cAAM,GAAG,GAAG,eAAe,cAAc;AACzC,kBAAU,aAAa,yBAAyB,MAAM,GAAG,EAAE,MAAM,EAAE;AAAA,MACrE,MAAO,OAAM,GAAG,GAAG,MAAM,YAAY;AAAA,IACvC;AACA,UAAM,YAAY,MAAM;AACtB,UAAI,WAAW,KAAK,CAAC,WAAW,CAAC,UAAU,CAAC,MAAM,OAAQ;AAC1D,YAAM,qBAAqB,yBAAyB,QAAQ,yBAAyB,QAAQ,gBAAgB,sBAAsB,CAAC,eAAe,MAAM,oBAAoB,CAAC,IAAI,uBAAuB,aAAa,CAAC;AACvN,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,cAAM,KAAK,MAAM,CAAC,GAAG,WAAW,MAAM;AACtC,YAAI,OAAQ,IAAG,aAAa,YAAY,MAAM,eAAe,gBAAgB,MAAM,MAAM,gBAAgB,eAAe,IAAI;AAAA,iBACnH,WAAW,cAAc,EAAG,IAAG,aAAa,YAAY,IAAI,cAAc,eAAe,IAAI;AAAA,YACjG,IAAG,aAAa,YAAY,YAAY;AAC7C,YAAI,QAAS,IAAG,aAAa,iBAAiB,OAAO,QAAQ,CAAC,GAAG,GAAG,UAAU,OAAO,aAAa,QAAQ;AAAA,MAC5G;AAAA,IACF;AACA,UAAM,mBAAmB,CAAC,QAAQ,QAAQ,cAAc,OAAO,UAAU;AACzE,UAAM,YAAY,CAAC,QAAQ;AACzB,UAAI,WAAW,KAAK,CAAC,UAAW;AAChC,gBAAU,IAAI,YAAY;AAC1B,UAAI,QAAS,cAAa,OAAO;AACjC,gBAAU,WAAW,MAAM,SAAS,IAAI,OAAO;AAC/C,YAAM,QAAQ,eAAe,IAAI,cAAc,IAAI;AACnD,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,cAAM,OAAO,QAAQ,KAAK,MAAM,QAAQ,SAAS,MAAM,GAAG,EAAE,aAAa,YAAY,KAAK,MAAM,GAAG,EAAE,aAAa,IAAI,KAAK,EAAE,YAAY;AACzI,YAAI,MAAM,WAAW,MAAM,EAAG,QAAO,UAAU,GAAG;AAAA,MACpD;AAAA,IACF;AACA,UAAM,cAAc,CAAC,MAAM;AACzB,YAAM,IAAI,EAAE;AACZ,UAAI,WAAW,KAAK,YAAY,GAAG,aAAa,GAAG,QAAQ,QAAQ,EAAG;AACtE,YAAM,EAAE,IAAI,IAAI;AAChB,UAAI,CAAC,MAAM,OAAQ;AACnB,UAAI,YAAY,QAAQ,OAAO,QAAQ,SAAU,QAAO,MAAM,WAAW,GAAG,MAAM;AAClF,UAAI,GAAG,QAAQ,eAAe,aAAa,KAAK,CAAC,QAAS;AAC1D,UAAI,aAAa,IAAI,WAAW,KAAK,cAAc,KAAK,GAAG,EAAG,QAAO,UAAU,GAAG;AAClF,UAAI,CAAC,SAAS,SAAS,GAAG,EAAG;AAC7B,UAAI,EAAE,EAAE,eAAe,QAAQ,eAAe,aAAa,KAAK,SAAS,KAAK,WAAW,SAAS,GAAG,GAAI,GAAE,iBAAiB,GAAG,EAAE,kBAAkB;AACnJ,YAAM,YAAY,UAAU,cAAc,MAAM,QAAQ,YAAY,GAAG,aAAa,CAAC,GAAG,cAAc,eAAe,EAAE,WAAW,OAAO,OAAO,QAAQ,QAAQ,MAAM,QAAQ,MAAAA,OAAM,KAAK,KAAK,SAAS,EAAE,QAAQ,CAAC;AAClN,gBAAU,aAAa,CAAC;AAAA,IAC1B;AACA,aAAS,GAAG,UAAU;AACtB,UAAM,iBAAiB,CAAC,UAAU,CAAC,SAAS,IAAI,CAAC,UAAU,cAAc,aAAa,CAAC;AACvF,eAAW,MAAM,eAAgB,KAAI,iBAAiB,WAAW,WAAW;AAC5E,UAAM,iBAAiB,CAAC,MAAM;AAC5B,UAAI,CAAC,UAAU,SAAS,EAAE,aAAa,EAAG,QAAO,iBAAiB,GAAG,UAAU,GAAG,aAAa,CAAC;AAChG,YAAM,QAAQ,MAAM,SAAS,EAAE,aAAa;AAC5C,UAAI,CAAC,UAAU,wBAAwB,OAAO,EAAG,QAAO,iBAAiB,GAAG,UAAU;AACtF,UAAI,QAAS,kBAAiB,GAAG,UAAU;AAAA,IAC7C;AACA,cAAU,iBAAiB,YAAY,cAAc;AACrD,UAAM,cAAc,CAAC,MAAM;AACzB,UAAI,CAAC,WAAW,CAAC,aAAc;AAC/B,YAAM,KAAK,EAAE,eAAe,MAAM,MAAM,QAAQ,EAAE;AAClD,UAAI,QAAQ,GAAI,WAAU,GAAG;AAAA,IAC/B;AACA,eAAW,MAAM,MAAO,IAAG,iBAAiB,cAAc,WAAW;AACrE,UAAM,OAAO,MAAM;AACjB,YAAM,QAAQ,MAAM,WAAW;AAC/B,iBAAW,MAAM,MAAO,IAAG,oBAAoB,cAAc,WAAW;AACxE,eAAS;AACT,iBAAW,MAAM,MAAO,IAAG,iBAAiB,cAAc,WAAW;AACrE,eAAS;AACT,YAAM,QAAQ,MAAM,WAAW;AAC/B,gBAAU;AACV,UAAI,SAAS,SAAS,UAAU,MAAO;AACvC,uBAAiB,GAAG,UAAU;AAAA,IAChC;AACA,UAAMC,oBAAmB,IAAI,iBAAiB,IAAI;AAClD,IAAAA,kBAAiB,QAAQ,WAAW,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AACtE,UAAM,UAAU,CAAC,MAAM;AACrB,UAAI,EAAE,MAAM,OAAQ,SAAQ,EAAE;AAC9B,UAAI,EAAE,MAAM,OAAQ,SAAQ,EAAE;AAC9B,UAAI,EAAE,OAAO,OAAQ,UAAS,EAAE;AAAA,IAClC;AACA,QAAI,WAAW;AACf,UAAMC,kBAAiB,IAAI,eAAe,MAAM,SAAS,CAAC;AAC1D,UAAM,WAAW,MAAM;AACrB,cAAQ,QAAQ,OAAO,CAAC,KAAK,GAAG,CAAC,KAAK,GAAG,CAAC,KAAK,EAAE,CAAC;AAClD,YAAMC,QAAO,MAAM,SAAS,IAAI,kBAAkB,MAAM,CAAC,GAAG,MAAM,CAAC,CAAC,IAAI;AACxE,UAAIA,SAAQA,UAAS,SAAU,aAAYD,gBAAe,UAAU,QAAQ,GAAG,WAAWC,OAAMD,gBAAe,QAAQ,QAAQ;AAAA,IACjI;AACA,YAAQ,IAAI,GAAG,SAAS;AACxB,UAAM,UAAU,MAAM;AACpB,iBAAW,MAAM,eAAgB,KAAI,oBAAoB,WAAW,WAAW;AAC/E,gBAAU,oBAAoB,YAAY,cAAc;AACxD,iBAAW,MAAM,MAAO,IAAG,oBAAoB,cAAc,WAAW;AACxE,MAAAD,kBAAiB,WAAW,GAAGC,gBAAe,WAAW;AACzD,UAAI,QAAS,cAAa,OAAO;AACjC,WAAK,WAAW,OAAO,SAAS;AAAA,IAClC;AACA,UAAM,SAAS,EAAE,OAAO,MAAM,OAAO,OAAO,MAAM,OAAO,QAAQ,MAAM,QAAQ,OAAO,MAAM,OAAO,aAAa,MAAM,aAAa,YAAY,MAAM,MAAM,WAAW,KAAK,MAAM,cAAc,WAAW,WAAW,aAAa,MAAM,QAAQ;AAChP,WAAO,KAAK,WAAW,IAAI,WAAW,MAAM,GAAG;AAAA,EACjD;AACA,MAAI,wBAAwB,CAAC,cAAc,KAAK,YAAY,IAAI,SAAS,GAAG,QAAQ;AACpF,MAAI,sBAAsB,CAAC,cAAc,KAAK,YAAY,IAAI,SAAS,GAAG,KAAK;;;ACnO/E,MAAM,MAAM,gBAAgB,OAAO,SAAS,SAAS;AAU9C,WAAS,UAAU,IAAa,OAAkB,KAAc;AACrE,UAAM,OAAO,GAAG,sBAAsB,GACpC,MAAM,KAAK,OAAO,IAAK,WAAW,KAAK,KAAK,QAAQ,IAAK,WAAW,IAAK,WAAW,IAAK,cAAc,IAAK,SAAS,gBAAgB,cACrI,MAAM,KAAK,MAAM,IAAK,WAAW,KAAK,KAAK,SAAS,IAAK,WAAW,IAAK,WAAW,IAAK,eAAe,IAAK,SAAS,gBAAgB;AACxI,WAAO,SAAS,MAAM,MAAM,SAAS,MAAM,MAAM,OAAO;AAAA,EAC1D;AAEO,WAAS,eAAe,GAAW,KAAgB,KAA8C,MAAiC,SAAkC;AACzK,WACE,IAAI,UAEF,MAAM,UAAU,OAAO;AAAA,MACrB;AAAA,OACC,CAAC,SAA2D,UAAmB;AAC9E,cAAM,EAAE,KAAK,IAAI,MAAM,IAAI,OAAO,IAAI,QAAQ,GAAG,IAAI,MAAM,sBAAsB,GAC/E,SAAS,KAAK,QAAQ,MAAM,KAAK,OAAO,QAAQ,MAAM,KAAK,MAAM,GACjE,YAAY,QAAQ,UAAU,SAAS,KAAK,SAAS,QAAQ,SAAS,QAAQ,WAAW,SAAS,KAAK,SAAS,QAAQ,SAAS,QAAQ,OAAO,KAAK,IAAI,MAAM,MAAM,QAAQ,MAAM,KAAK,MAAM,KAAK,KAAK,IAAI,MAAM,IAAI,KAAK,IAAI,QAAQ,MAAM,IAAI;AACnP,eAAO,YAAY,EAAE,QAAQ,SAAS,MAAM,IAAI;AAAA,MAClD;AAAA,MACA,EAAE,QAAQ,QAAQ,UAAU,YAAY,UAAU,SAAS,OAAU;AAAA,IACvE,EACA;AAAA,EAEN;AAGO,MAAM,kBAAkB,MAAe,QAAQ,kBAAkB,CAAC;AAClE,MAAM,oBAAoB,CAAC,IAAI,aAAoC,EAAE,qBAAqB,EAAE,2BAA2B,EAAE,wBAAwB,EAAE,uBAAuB;AAE1K,MAAM,wBAAwB,MAAe,QAAQ,wBAAwB,CAAC;AAC9E,MAAM,0BAA0B,MAAM,SAAS;AAE/C,MAAM,qBAAqB,CAAC,KAAK,iBAAiB,WAAkB,IAAI,aAAoB,QAAQ,EAAE,qBAAqB,EAAE,wBAAwB,EAAE,uBAAuB,EAAE,2BAA2B,EAAE,4BAA4B,GAAG,qBAAqB;AACjQ,MAAM,2BAA2B,CAAC,KAAK,iBAAiB,WAAkB,IAAI,UAAiB,IAAI,WAAkB,QAAQ,EAAE,2BAA2B,GAAG,2BAA2B,EAAE,wBAAwB;AAElN,MAAM,kBAAkB,CAAC,OAA4B,GAAG,wBAAwB,GAAG,sBAAsB,IAAI,GAAG,oBAAoB,GAAG,kBAAkB,IAAI,GAAG,uBAAuB,GAAG,qBAAqB,IAAI,GAAG,0BAA0B,GAAG,wBAAwB,IAAI,GAAG,sBAAsB,GAAG,oBAAoB,IAAI,QAAQ,OAAO,IAAI,MAAM,iCAAiC,CAAC;AAC9X,MAAM,iBAAiB,CAAC,IAAS,IAAI,aAAoC,kBAAkB,CAAC,MAAM,KAAM,GAAG,uBAAuB,GAAG,qBAAqB,IAAI,EAAE,iBAAiB,EAAE,eAAe,IAAI,EAAE,sBAAsB,EAAE,oBAAoB,IAAI,EAAE,uBAAuB,EAAE,qBAAqB,IAAI,EAAE,mBAAmB,EAAE,iBAAiB,IAAI,QAAQ,OAAO,IAAI,MAAM,iCAAiC,CAAC,IAAK,QAAQ,QAAQ;AAQxa,WAAS,cAAc,IAAyB,UAAkC,MAAM,aAAqC,MAAM,SAAmD;AAC3L,UAAM,iBAAiB,EAAE;AACzB,QAAI,iBAAiB,SAAU,GAAG,gBAAgB,CAAC,OAAmB,aAAa,GAAG,eAAe,GAAI,GAAG,kBAAkB,WAAW,MAAM,QAAQ,CAAC,GAAG,GAAG,IAAM,OAAO;AAC3K,QAAI,iBAAiB,YAAa,GAAG,mBAAmB,CAAC,OAAmB,aAAa,GAAG,eAAe,GAAG,WAAW,CAAC,IAAK,OAAO;AAAA,EACxI;AACO,WAAS,iBAAiB,IAA+B;AAC9D,QAAI,oBAAoB,SAAS,GAAG,aAA8B;AAClE,QAAI,oBAAoB,YAAY,GAAG,gBAAiC;AAAA,EAC1E;AAWO,MAAM,uBAAuB,MAChC,IAAI;AAAA,IACF,CAAC,YAAY;AACX,iBAAW,SAAS,QAAS,KAAI,MAAM,OAAO,cAAe,YAAW,MAAM,MAAM,OAAO,cAAe,IAAG,KAAK;AAAA,IACpH;AAAA,IACA,EAAE,MAAM,MAAM,YAAY,OAAO,WAAW,IAAI;AAAA,EAClD,IACA;AAEG,MAAM,iBAAiB,MAC1B,IAAI,eAAe,CAAC,YAAY;AAC9B,eAAW,SAAS,QAAS,KAAI,MAAM,OAAO,WAAY,YAAW,MAAM,MAAM,OAAO,WAAY,IAAG,KAAK;AAAA,EAC9G,CAAC,IACD;AAEG,MAAM,mBAAmB,MAC5B,IAAI,iBAAiB,CAAC,cAAc;AASlC,UAAM,SAAS,UAAU,CAAC,EAAE;AAC5B,QAAI,OAAO,aAAc,YAAW,MAAM,OAAO,aAAc,IAAG,SAAS;AAAA,EAC7E,CAAC,IACD;AAGG,WAAS,cAAc,IAAa,IAA0C,KAAmB;AACtG,KAAC,GAAG,eAAe,GAAG,aAAa,oBAAI,IAAI,IAAI,IAAI,EAAE;AACrD,oBAAgB,QAAQ,EAAE;AAC1B,WAAO,oBAAQ,OAAO,GAAG,YAAY,OAAO,EAAE,GAAG,CAAC,GAAG,YAAY,QAAQ,gBAAgB,UAAU,EAAE,IAAI,GAAG;AAAA,EAC9G;AAEO,WAAS,oBAAoB,IAAa,IAAgD,KAAmB;AAClH,KAAC,GAAG,kBAAkB,GAAG,gBAAgB,oBAAI,IAAI,IAAI,IAAI,EAAE;AAC3D,0BAAsB,QAAQ,EAAE;AAChC,WAAO,oBAAQ,OAAO,GAAG,eAAe,OAAO,EAAE,GAAG,CAAC,GAAG,eAAe,QAAQ,sBAAsB,UAAU,EAAE,IAAI,GAAG;AAAA,EAC1H;AAEO,WAAS,gBAAgB,IAAa,IAA2C,SAA+B,KAAmB;AACxI,KAAC,GAAG,iBAAiB,GAAG,eAAe,oBAAI,IAAI,IAAI,IAAI,EAAE;AACzD,sBAAkB,QAAQ,IAAI,OAAO;AACrC,WAAO,oBAAQ,MAAM,GAAG,cAAc,OAAO,EAAE,GAAG,GAAG;AAAA,EACvD;;;AC7GO,MAAM,SAAN,MAAa;AAAA,IAelB,YAAY,QAAoB,CAAC,GAAiB;AAdlD,0BAAQ,UAAkC;AAC1C,0BAAQ,UAAkB;AAC1B,0BAAQ,UAAqB,gBAAgB,YAAY;AACzD,0BAAQ,cAAgC;AAYtC,WAAK,UAAU,EAAE,GAAG,OAAO,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC,eAAe,YAAY,SAAS,CAAC,GAAG,CAAC;AAAA,IAC/F;AAAA,IAZA,IAAW,aAAa;AACtB,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAW,QAAoB;AAC7B,aAAO,KAAK;AAAA,IACd;AAAA,IACA,IAAW,MAAM,OAAmB;AAClC,WAAK,UAAU,KAAK;AAAA,IACtB;AAAA,IAMQ,aAAsB;AAC5B,aAAO,CAAC,KAAK,WAAW,KAAK,OAAO,EAAE,OAAO,oEAAoE,KAAK,gFAAgF,CAAC,GAAG;AAAA,IAC5M;AAAA,IACO,UAAU,OAAyB;AACxC,UAAI,KAAK,WAAW,KAAK,MAAM,KAAK,EAAG,MAAK,SAAS,UAAU,KAAK,QAAQ,aAAa,KAAK,CAAC;AAAA,IACjG;AAAA,IAEA,MAAa,OAAO,QAA0B;AAC5C,UAAI,OAAO,MAAM,EAAG,QAAO,KAAK,OAAO,EAAE,OAAO,mEAAmE,KAAK,oFAAoF,CAAC;AAC7M,UAAI,KAAK,OAAQ,QAAO;AACxB,aAAO,WAAW,OAAO;AACzB,kBAAY,KAAK,KAAK,MAAM,EAAS;AACrC,WAAK,MAAM,SAAS,QAAQ,KAAK,kBAAkB,YAAY,MAAM,SAAS;AAC9E,aAAO,YAAY;AACnB,WAAK,SAAS;AACd,YAAM,KAAK,aAAa,GAAG,MAAM,KAAK,iBAAiB;AACvD,WAAK,MAAM,SAAS,QAAQ,QAAQ,kBAAkB,YAAY,QAAQ,KAAK,UAAW,IAAI,CAAC,SAAS;AACxG,aAAO,KAAK,YAAY,KAAK,aAAa,KAAK,WAAW,OAAO,GAAG;AAAA,IACtE;AAAA,IACO,SAAS;AACd,UAAI,CAAC,KAAK,OAAQ;AAClB,YAAM,SAAS,KAAK,YAAY,QAAQ,KAAM,CAAC;AAC/C,WAAK,cAAc,YAAY,OAAO,YAAY,QAAQ,KAAK,UAAU,GAAG,CAAC;AAC7E,aAAO,WAAW,OAAO,OAAO,KAAK,MAAM,SAAS,IAAI,aAAa,UAAU;AAC/E,aAAO,cAAc,KAAK,SAAS;AAEnC,aAAQ,OAAO,YAAY,KAAK,aAAa,KAAK,SAAS,MAAO;AAAA,IACpE;AAAA,IAEA,MAAa,eAAe;AAC1B,UAAI,CAAC,KAAK,OAAQ;AAClB,UAAI,KAAK,OAAO,aAAa,KAAK,GAAG,SAAS,OAAO;AACnD,cAAM,MAAM,KAAK,OAAO,aAAa,KAAK,CAAE,EACzC,KAAK,CAAC,QAAQ;AACb,cAAI,CAAC,IAAI,GAAI,OAAM,IAAI,MAAM,iDAAiD,IAAI,MAAM,EAAE;AAC1F,iBAAO,IAAI,KAAK;AAAA,QAClB,CAAC,EACA,KAAK,CAAC,SAAS,KAAK,UAAU,IAAI,CAAC,EACnC,MAAM,CAAC,EAAE,QAAQ,MAAM,KAAK,OAAO,EAAE,OAAO,SAAS,KAAK,qEAAqE,CAAC,CAAC;AACtI,YAAM,QAAQ,CAAC,GACb,aAAa,KAAK,OAAO,kBAAkB,EAAE,OAAO,CAAC,SAAS,KAAK,WAAW,OAAO,CAAC;AACxF,iBAAW,QAAQ,WAAY,eAA0B,OAAO,MAAa,KAAK,OAAQ,aAAa,IAAI,CAAE;AAC7G,WAAK,UAAU,KAAK;AAAA,IACtB;AAAA,IAEA,MAAc,mBAAmB;AAC/B,UAAI,KAAK,UAAU,CAAC,KAAK,QAAQ,YAAa;AAC9C,UAAI,EAAE,KAAK,kBAAkB,kBAAmB,QAAO,KAAK,OAAO,EAAE,OAAO,4CAA6C,KAAK,OAAuB,OAAO,oCAAoC,SAAS,iEAAiE,KAAK,GAAG,CAAC;AACnR,WAAK,MAAM,YAAY,KAAK,OAAO,QAAQ,YAAY;AACvD,WAAK,OAAO,WAAW;AACvB,WAAK,OAAO,cAAc,KAAK,SAAS;AACxC,WAAK,OAAO,UAAU,IAAI,OAAO,KAAK,MAAM,SAAS,IAAI,aAAa,UAAU;AAChF,YAAM,QAAQ,IAAI,CAAC,aAAa,OAAO,iBAAkB,GAAG,aAAa,OAAO,mBAAoB,UAAU,EAAE,QAAQ,KAAK,CAAC,GAAG,aAAa,OAAO,mBAAoB,QAAQ,CAAC,CAAC;AACnL,kBAAY,YAAY,QAAQ,KAAK,MAAM,EAAS,CAAC,IAAI,KAAK,aAAa,IAAI,WAAW,KAAK,QAAQ,KAAK,MAAM;AAAA,IACpH;AAAA,IAEQ,OAAO,EAAE,OAAO,SAAS,IAAI,GAA+D;AAClG,UAAI,KAAK,MAAM,MAAO,UAAS,QAAQ,MAAM,gBAAgB,KAAK,EAAE,GAAG,WAAW,QAAQ,KAAK,gBAAgB,OAAO,EAAE,GAAG,OAAO,QAAQ,KAAK,gBAAgB,GAAG,EAAE;AAAA,IACtK;AAAA,EACF;AAEO,WAAS,WAAW,MAA0B;AACnD,UAAM,IAAI,YAAY,QAAQ,KAAK,OAAO,EAAS;AACnD,WAAO,MAAM,KAAK,YAAY,QAAQ,IAAI,IAAI;AAAA,EAChD;;;AC3FA,MAAME,OAAM,gBAAgB,OAAO,SAAS,SAAS;AAgBrD,MAAM,kBAAkB,oBAAI,QAAqB;AACjD,MAAI;AAEG,MAAI,gBAAqC;AACzC,MAAI,gBAA+C;AACnD,MAAI,mBAAmB;AACvB,MAAM,cAAyB,EAAE,YAAY,GAAG,mBAAmB,CAAC,CAAC,eAAe,mBAAmB,MAAM,yBAAyB,MAAM,YAAY,EAAE,WAAW,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,IAAI,GAAG,iBAAiB,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,IAAI,GAAG,QAAQ,EAAE,OAAOA,MAAK,YAAa,QAAQA,MAAK,YAAa,EAAE,GAAG,mBAAmB,EAAE,MAAMA,MAAK,QAAQ,aAAa,QAAQ,IAAI,OAAOA,MAAK,QAAQ,aAAa,SAAUA,MAAa,eAAe,EAAE,GAAG,oBAAoBA,MAAK,SAAS,iBAAkB,iBAAiB,gBAAgB,EAAE;AACpiB,MAAM,cAA4B,CAAC;AAEnC,WAAS,kBAAkB,WAAmC;AACnE,eAAW,YAAY,WAAW;AAChC,UAAI,SAAS,SAAS,aAAc;AACpC,YAAM,SAAS,SAAS;AACxB,UAAI,SAAS,kBAAkB,cAAe,EAAC,gBAAgB,IAAI,MAAM,MAAM,OAAO,cAAc,OAAO,aAAa,aAAa;AAAA,eAC5H,SAAS,eAAe,WAAW,KAAK,EAAG,QAAO,aAAa,SAAS,aAAa,KAAK,OAAO,WAAW,aAAa;AAAA,eACzH,SAAS,kBAAkB,WAAY,QAAO,aAAa,aAAa,KAAK,OAAO,gBAAgB,UAAU;AAAA,IACzH;AAAA,EACF;AAEO,WAAS,kBAAkB,WAAmC;AACnE,eAAW,YAAY,WAAW;AAChC,iBAAW,QAAQ,MAAM,KAAK,SAAS,UAAU,GAAG;AAClD,YAAI,EAAE,gBAAgB,aAAc;AACpC,cAAM,MAAM,KAAK,QAAQ,iCAAiC,IAAI,CAAC,IAAI,IAAI,KAAK,iBAAiB,iCAAiC;AAC9H,mBAAW,MAAM,KAAK;AACpB,0BAAgB,IAAI,mBAAmB,EAAE,YAAY,KAAK,CAAC;AAC3D,UAAC,GAAwB,cAAc,GAAG,aAAa,aAAa;AAAA,QACtE;AAAA,MACF;AACA,iBAAW,QAAQ,MAAM,KAAK,SAAS,YAAY,GAAG;AACpD,YAAI,EAAE,gBAAgB,aAAc;AACpC,cAAM,MAAM,KAAK,QAAQ,WAAW,IAAI,CAAC,IAAI,IAAI,KAAK,iBAAiB,WAAW;AAClF,mBAAW,MAAM,IAAK,EAAE,GAAwB,WAAW,YAAY,gBAAiB,GAAwB,WAAW,OAAO;AAAA,MACpI;AAAA,IACF;AAAA,EACF;AAEA,WAAS,aAAa,GAAgB,QAAQ,MAAY;AACxD,KAAC,gBAAgB,IAAI,CAAC,KAAK,SAAS,gBAAgB,IAAI,CAAC;AAAA,EAC3D;AAEA,WAAS,aAAa,GAAsB;AAC1C,iBAAa,cAAc;AAC3B,qBAAiBC,YAAW,MAAM,EAAE,iBAAiB,WAAc,gBAAgB,OAAO,CAAC,CAAC;AAAA,EAC9F;AAEO,WAAS,aAAa;AAC3B,QAAI,gBAAgB,OAAO,iBAAkB;AAC7C,eAAW,MAAM,CAAC,kBAAkB,gBAAgB;AAClD,aAAO,eAAe,GAAG,WAAW,eAAe;AAAA,QACjD,KAAK,WAAY;AACf,iBAAO,KAAK,aAAa,aAAa;AAAA,QACxC;AAAA,QACA,KAAK,eAAgB,OAAO;AAC1B,cAAI,OAAO;AACT,yBAAa,IAAI;AACjB,mBAAQ,KAA0B,aAAa,IAAI,OAAO,GAAG,OAAO,IAAI;AACxE,iBAAK,aAAa,eAAe,EAAE;AACnC,yBAAa,IAAI;AAAA,UACnB,OAAO;AACL,yBAAa,MAAM,KAAK,aAAa,aAAa,CAAC;AACnD,iBAAK,gBAAgB,aAAa;AAClC,YAAC,KAA0B,WAAW,OAAO;AAC7C,yBAAa,IAAI;AAAA,UACnB;AAAA,QACF;AAAA,QACA,YAAY;AAAA,QACZ,cAAc;AAAA,MAChB,CAAC;AAAA,EACL;AAEO,WAAS,eAAqB;AACnC,eAAW,MAAM,CAAC,kBAAkB,gBAAgB,EAAG,QAAQ,GAAG,UAAkB;AAAA,EACtF;AAEO,WAAS,oBAA0B;AACxC,QAAI,CAAC,iBAAiB,kBAAkB;AACtC,sBAAgB,KAAKD,KAAK,gBAAiBA,KAAY,oBAAoB;AAC3E,YAAM,IAAK,gBAAgB,cAAe,yBAAyB;AACnE,MAAC,EAAE,UAAU,QAAQ,IAAQ,EAAE,KAAK,QAAQ,GAAO,EAAE,MAAM,QAAQ,IAAM,EAAE,OAAO,QAAQ,MAAS,EAAE,QAAQ,QAAQ;AACrH,iBAAW,KAAK,YAAa,KAAI,EAAE,MAAO,GAAE,MAAM,oBAAoB;AAAA,IACxE,WAAW,eAAe,UAAU,YAAa,eAAc,OAAO;AAAA,EACxE;AAEO,WAAS,2BAA2B,QAA0B;AACnE,QAAI,CAAC,cAAe,QAAO;AAC3B,WAAO,2BAAP,OAAO,yBAA2B,cAAc,yBAAyB,MAAM;AAC/E,WAAO,iBAAP,OAAO,eAAiB,cAAc,WAAW;AACjD,WAAO,+BAAP,OAAO,6BAA+B,cAAc,yBAAyB;AAC7E,WAAO,uBAAuB,QAAQ,OAAO,0BAA0B;AACvE,WAAO,2BAA2B,QAAQ,OAAO,YAAY;AAC7D,WAAO,aAAa,QAAQ,aAAc;AAC1C,kBAAe,QAAQ,cAAe,WAAW;AAAA,EACnD;AAEO,WAAS,OAAa;AAC3B,eAAW;AACX,eAAW,KAAK,CAAC,SAAS,eAAe,SAAS,EAAG,UAAS,iBAAiB,GAAG,OAAQ,mBAAmB,MAAO,kBAAkB,IAAI,IAAI;AAC9I,eAAW,UAAU,SAAS,iBAAmC,aAAa,GAAG;AAC/E,sBAAgB,QAAQ,mBAAmB,EAAE,YAAY,KAAK,CAAC;AAC/D,aAAO,cAAc,OAAO,aAAa,aAAa;AAAA,IACxD;AACA,oBAAgB,SAAS,iBAAiB,mBAAmB,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC;AAC/F,IAAAA,KAAK,iBAAiB,UAAU,MAAM;AACpC,iBAAW,KAAK,YAAa,KAAI,EAAE,MAAO,CAAC,EAAE,MAAM,WAAW,OAAO,QAAQA,KAAK,YAAc,EAAE,MAAM,WAAW,OAAO,SAASA,KAAK;AAAA,IAC1I,CAAC;AACD,QAAIA,MAAK,QAAQ;AACf,MAAAA,KAAI,OAAO,YAAY,iBAAiB,UAAU,CAAC,EAAE,OAAO,GAAG,IAAI,WAAgC;AACjG,mBAAW,KAAK,YAAa,KAAI,EAAE,MAAO,CAAC,EAAE,MAAM,kBAAkB,OAAO,EAAE,MAAQ,EAAE,MAAM,kBAAkB,QAAQ,EAAE;AAAA,MAC5H,CAAC;AAAA;AAED,MAAAA,MAAK,iBAAiB,qBAAqB,MAAM;AAC/C,mBAAW,KAAK,YAAa,KAAI,EAAE,MAAO,GAAE,MAAM,kBAAkB,QAASA,KAAY,eAAe;AAAA,MAC1G,CAAC;AACH,aAAS,iBAAiB,oBAAoB,MAAM;AAClD,iBAAW,KAAK,YAAa,KAAI,EAAE,MAAO,GAAE,MAAM,qBAAqB,SAAS;AAAA,IAClF,CAAC;AACD,eAAW,KAAK,CAAC,oBAAoB,0BAA0B,uBAAuB,oBAAoB;AACxG,eAAS,iBAAiB,GAAG,CAAC,GAAG,OAAO,gBAAgB,MAAM;AAC5D,mBAAW,KAAK,YAAa,KAAI,EAAE,MAAO,GAAE,MAAM,kBAAkB;AAAA,MACtE,CAAC;AAAA,EACL;;;AC9IA,MAAAE;AAiBA,MAAI,qBAAoBA,MAAA,MAAM;AAAA,IAiB5B,YAAY,QAAQ,KAAKC,QAAO;AAZhC,gCAAK,IAAI,gBAAgB;AACzB,oCAAS,KAAK,GAAG;AACjB,kCAAuB,oBAAI,IAAI;AAC/B,kCAAuB,oBAAI,QAAQ;AAEnC;AAAA,qCAAU,EAAE,QAAQ,KAAK,OAAO;AAEhC;AAAA;AAEA;AAAA;AACA,mCAAQ;AACR,mCAAwB,oBAAI,IAAI;AAqDhC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mCAAQ,CAAC,OAAO;AACd,eAAO,YAAY,IAAI,CAAC,MAAM,KAAK,KAAK,OAAO,EAAE,KAAK,EAAE,OAAO,IAAI,aAAa,KAAK,IAAI,oBAAoB,CAAC,EAAE,CAAC;AAAA,MACnH;AASA,4CAAiB,CAAC,GAAG,MAAM,KAAK,WAAW,CAAC;AA9D1C,sBAAgB,MAAM,KAAK,KAAK;AAChC,WAAK,SAAS,MAAM,MAAM,IAAI,SAAS,MAAM,IAAI;AACjD,WAAK,QAAQ,MAAMA,MAAK,IAAI,SAASA,MAAK,IAAIA;AAC9C,aAAO,KAAK,OAAO,GAAG;AAAA,IACxB;AAAA,IApBA,IAAI,OAAO;AACT,aAAO,KAAK,YAAY;AAAA,IAC1B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA6BA,OAAO,QAAQ,KAAK,KAAK,KAAK,MAAM;AAClC,YAAM,MAAM,WAAW,MAAM;AAC7B,UAAI,CAAC,OAAO,KAAK,KAAK,IAAI,EAAE,EAAG,QAAO;AACtC,aAAO,KAAK,KAAK,KAAK,KAAK,KAAK,IAAI,IAAI,GAAG,GAAG,MAAM,EAAE,GAAG,KAAK,SAAS,KAAK,EAAE,GAAG;AAAA,IACnF;AAAA,IACA,SAAS,MAAM,MAAM;AAAA,IACrB;AAAA,IACA,YAAY,KAAK,KAAK,QAAQ,KAAK,SAAS,GAAG,GAAG;AAChD,UAAI,QAAQ,KAAK,MAAM,IAAI,GAAG;AAC9B,UAAI,CAAC,MAAO,MAAK,MAAM,IAAI,KAAK,QAAQ,CAAC,CAAC;AAC1C,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,cAAM,OAAO,MAAM,CAAC;AACpB,SAAC,KAAK,OAAO,WAAW,MAAM,KAAK,KAAK,OAAO,cAAc,IAAI,MAAM,MAAM,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,IAAI,GAAG,MAAM,KAAK,YAAY,KAAK,OAAO,CAAC,IAAI,KAAK,OAAO,cAAc,IAAI,QAAQ,MAAM,KAAK,cAAc,IAAI,IAAI,IAAI,MAAM,KAAK,YAAY,KAAK,OAAO;AAAA,MAC5R;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,MAAM,QAAQ,IAAI;AAChB,aAAO,KAAK,OAAO,QAAQ,EAAE,GAAG,CAAC,KAAK,UAAU,KAAK,KAAK,GAAG,KAAK,QAAQ,OAAO;AAAA,IACnF;AAAA,IACA,UAAU;AACR,UAAI,KAAK,GAAI,MAAK,GAAG,MAAM,GAAG,KAAK,YAAY,GAAG,KAAK,IAAI;AAAA,IAC7D;AAAA;AAAA,IAWA,gBAAgB,EAAE,eAAe,EAAE,OAAO,MAAM,EAAE,GAAG;AACnD,iBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,KAAM,MAAK,QAAQ,GAAG,GAAG,KAAK,YAAY,KAAK,KAAK,KAAK,SAAS,KAAK,KAAK,CAAC;AAAA,IAC7G;AAAA;AAAA,IAEA,WAAW,GAAG,MAAM,KAAK,KAAK,IAAI,EAAE,OAAO,GAAG;AAC5C,OAAC,CAAC,KAAK,OAAO,aAAa,CAAC,WAAW,KAAK,SAAS,KAAK,KAAK,OAAO,WAAW,IAAI,GAAG,EAAE,IAAI,MAAM,KAAK,OAAO,GAAG,GAAG;AAAA,IACxH;AAAA,IAEA,OAAOC,KAAI,MAAM;AAAA,IACjB;AAAA,IACA,oBAAoB;AAClB,iBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,KAAM,MAAK,QAAQ,GAAG,GAAG,KAAK,YAAY,KAAK,GAAG;AAAA,IAClF;AAAA;AAAA,IAEA,QAAQ,KAAK;AACX,YAAM,QAAQ,KAAK,MAAM,IAAI,GAAG;AAChC,UAAI,MAAO,UAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,IAAK,OAAM,CAAC,EAAE;AACtE,gBAAU,MAAM,SAAS;AAAA,IAC3B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,SAAS,QAAQ,QAAQ,KAAK,OAAO,WAAW,aAAa,UAAU,KAAK,OAAO,WAAW;AAC5F,YAAM,MAAM,QAAQ,OAAO,KAAK,KAAK,IAAI,MAAM,IAAI;AACnD,cAAQ,UAAU,MAAM,QAAQ,KAAK,IAAI,QAAQ,MAAM,OAAO,GAAG,CAAC,QAAQ,CAAC,aAAa,QAAQ,CAAC;AAAA,IACnG;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,WAAW,QAAQ,MAAM,QAAQ,SAAS,QAAQ,KAAK,KAAK,OAAO,GAAG;AACpE,YAAM,OAAO,QAAQ,OAAO,SAAS,KAAK,KAAK,IAAI,MAAM;AACzD,UAAI,MAAM,QAAQ,CAAC,IAAI;AACvB,iBAAW,CAAC,KAAK,GAAG,KAAK,CAAC,SAAS,KAAK,OAAO,CAAC,CAAC,QAAQ,QAAQ,IAAI,CAAC,GAAG;AACvE,cAAM,OAAO,KAAK,OAAO,YAAY,KAAK,OAAO,aAAa,SAAS,IAAI,OAAO,oBAAoB,IAAI,OAAO,eAAe,OAAO,IAAI,SAAS,KAAK,IAAI,MAAM,MAAM,KAAK,OAAO,YAAY,CAAC,IAAI;AACtM,YAAI,KAAK,OAAO,WAAW;AACzB,gBAAM,QAAQ,KAAK,SAAS,GAAG;AAC/B,mBAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,kBAAM,QAAQ,MAAM,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,eAAe,CAAC,MAAM,SAAS,QAAQ,IAAI,QAAQ,MAAM,QAAQ,UAAU,OAAO;AAC9H,oBAAQ,KAAK,OAAO,QAAQ,MAAM,IAAI,CAAC;AAAA,UACzC;AAAA,QACF;AACA,gBAAQ,QAAQ,KAAK,KAAK,GAAG,IAAI,MAAM;AAAA,MACzC;AACA,aAAO;AAAA,IACT;AAAA,EACF,GA3HE,cADsBF,KACf,eADeA;AA6HxB,MAAI,QAAQ,CAAC,GAAG;;;AC7GhB,MAAI,qBAAqB,MAAM;AAAA,IAI7B,YAAY,QAAQ;AAHpB,kCAAO;AACP;AACA,kCAAO,CAAC,MAAM,IAAI,OAAO,iCAAiC,MAAM,IAAI,QAAQ,OAAO,KAAK,OAAO,SAAS,QAAQ,KAAK,IAAI,KAAK,YAAY,IAAI,MAAM,GAAG,aAAa,MAAM,QAAQ,GAAG,KAAK,EAAE,GAAG,QAAQ,QAAQ,KAAK,MAAM,EAAE,GAAG,KAAK,OAAO,SAAS,OAAO,KAAK,OAAO,MAAM,KAAK,EAAE,KAAK,IAAI,GAAG;AAE9R,WAAK,SAAS,EAAE,OAAO,OAAO,GAAG,OAAO;AAAA,IAC1C;AAAA,EACF;AACA,MAAI,iBAAiB,cAAc,mBAAmB;AAAA,IAAjC;AAAA;AACnB,kCAAO;AAAA;AAAA,EACT;AAMA,MAAI,sBAAsB,cAAc,eAAe;AAAA,IAA7B;AAAA;AACxB,kCAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMP,IAAI,MAAM,KAAK,OAAO,KAAK,UAAU,KAAK,OAAO,SAAS;AACxD,UAAI;AACF,cAAM,IAAI,aAAa,QAAQ,GAAG;AAClC,eAAO,IAAI,KAAK,MAAM,GAAG,OAAO,IAAI;AAAA,MACtC,SAAS,GAAG;AACV,YAAI,KAAK,OAAO,YAAa,OAAM;AACnC,eAAO;AAAA,MACT;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAOA,IAAI,MAAM,KAAK,OAAO,KAAK,OAAO,WAAW,KAAK,OAAO,UAAU;AACjE,UAAI;AACF,eAAO,aAAa,QAAQ,KAAK,KAAK,UAAU,OAAO,QAAQ,CAAC,GAAG;AAAA,MACrE,SAAS,GAAG;AACV,YAAI,KAAK,OAAO,YAAa,OAAM;AACnC,eAAO,KAAK,KAAK,WAAW,QAAQ,GAAG,GAAG;AAAA,MAC5C;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO,MAAM,KAAK,OAAO,KAAK;AAC5B,UAAI;AACF,eAAO,aAAa,WAAW,GAAG,GAAG;AAAA,MACvC,SAAS,GAAG;AACV,YAAI,KAAK,OAAO,YAAa,OAAM;AACnC,eAAO,KAAK,KAAK,cAAc,QAAQ,GAAG,GAAG;AAAA,MAC/C;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,QAAQ;AACN,UAAI;AACF,eAAO,aAAa,MAAM,GAAG;AAAA,MAC/B,SAAS,GAAG;AACV,YAAI,KAAK,OAAO,YAAa,OAAM;AACnC,eAAO,KAAK,KAAK,SAAS,MAAM,GAAG;AAAA,MACrC;AAAA,IACF;AAAA,EACF;AA+SA,MAAI,uBAAuB;AAAA,IACzB,UAAU;AAAA,IACV,KAAK;AAAA,IACL,UAAU;AAAA,IACV,UAAU;AAAA,IACV,aAAa;AAAA,IACb,cAAc;AAAA,IACd,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAhaA,MAAAG;AAmaA,MAAI,iBAAgBA,MAAA,cAAc,kBAAkB;AAAA,IAQlD,YAAY,QAAQ,KAAK;AACvB,YAAM,UAAU,sBAAsB,QAAQ,KAAK,MAAM,GAAG,KAAK,EAAE,UAAU,MAAM,CAAC;AAPtF;AACA,qCAA0B,oBAAI,IAAI;AAClC,mCAAQ;AACR,wCAAa;AACb,wCAAa;AACb,2CAAgB;AAAA,IAGhB;AAAA,IACA,OAAO;AACL,sBAAgB,OAAO,UAAU,OAAO,iBAAiB,YAAY,KAAK,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5G,sBAAgB,OAAO,YAAY,SAAS,iBAAiB,oBAAoB,MAAM,SAAS,oBAAoB,YAAY,KAAK,UAAU,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AACzK,WAAK,OAAO,GAAG,WAAW,KAAK,eAAe,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,CAAC;AACjF,WAAK,OAAO,GAAG,YAAY,KAAK,gBAAgB,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,CAAC;AACnF,WAAK,OAAO,GAAG,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,CAAC;AACrF,WAAK,OAAO,GAAG,eAAe,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC/E;AAAA,IACA,SAAS,KAAK,KAAK;AACjB,UAAI,OAAO,gBAAgB;AAC3B,WAAK,YAAY,KAAK,GAAG;AACzB,WAAK,MAAM,YAAY,KAAK,SAAS,KAAK,QAAQ,KAAK,KAAK,OAAO,IAAI,QAAQ,KAAK,OAAO,GAAG,IAAI,KAAK,OAAO,KAAK,GAAG;AAAA,IACxH;AAAA,IACA,SAAS;AACP,UAAI,KAAK,MAAM,SAAU,MAAK,kBAAL,KAAK,gBAAkBC,YAAW,KAAK,SAAS,KAAK,OAAO,UAAU,KAAK,MAAM;AAAA,IAC5G;AAAA,IACA,MAAM,UAAU;AACd,YAAM,MAAM,EAAE,KAAK;AACnB,UAAI,UAAU,KAAK,WAAW;AAC9B,UAAI,KAAK,OAAO,YAAY;AAC1B,cAAM,MAAM,KAAK,OAAO,WAAW,OAAO;AAC1C,YAAI,QAAQ,MAAO;AACnB,YAAI,OAAO,QAAQ,KAAM,WAAU;AAAA,MACrC;AACA,WAAK,gBAAgB;AACrB,UAAI,KAAK,OAAO,WAAW,KAAM,QAAO,KAAK,MAAM,KAAK,QAAQ,IAAI,KAAK,OAAO,KAAK,OAAO;AAC5F,UAAI;AACF,cAAM,OAAO,MAAM,KAAK,QAAQ,IAAI,KAAK,OAAO,KAAK,OAAO;AAC5D,YAAI,QAAQ,KAAK,WAAY;AAC7B,aAAK,OAAO,OAAO,SAAS,QAAQ,IAAI;AAAA,MAC1C,SAAS,GAAG;AACV,aAAK,OAAO,OAAO,SAAS,OAAO,CAAC;AAAA,MACtC;AAAA,IACF;AAAA,IACA,MAAM,cAAc,EAAE,QAAQ,oBAAoB,GAAG;AACnD,YAAM,MAAM,EAAE,KAAK;AACnB,UAAI,KAAK,WAAW,UAAU,KAAK,QAAQ,YAAa;AACxD,WAAK,MAAM,WAAW;AACtB,WAAK,SAAS,OAAO,KAAK,OAAO,GAAG;AACpC,WAAK,UAAU,eAAe,OAAO,QAAQ,IAAI,MAAM,EAAE,OAAO,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,MAAM,OAAO,QAAQ,CAAC,CAAC,KAAK,KAAK,OAAO,EAAE,KAAK,EAAE,OAAO,QAAQ;AAChL,UAAI;AACF,YAAI,QAAQ,KAAK,QAAQ,IAAI,KAAK,OAAO,GAAG;AAC5C,cAAM,UAAU,iBAAiB,SAAS,OAAO,aAAa,KAAK,OAAO,UAAU,SAAS,eAAe,OAAO;AACnH,gBAAQ,CAAC,UAAU,QAAQ,MAAM;AACjC,YAAI,KAAK,OAAO,iBAAiB,OAAO;AACtC,gBAAM,MAAM,KAAK,OAAO,cAAc,KAAK;AAC3C,cAAI,QAAQ,MAAO;AACnB,cAAI,OAAO,QAAQ,KAAM,SAAQ;AAAA,QACnC;AACA,YAAI,QAAQ,KAAK,cAAc,CAAC,MAAO;AACvC,aAAK,QAAQ,KAAK,OAAO,eAAe,QAAQ;AAChD,mBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,KAAM,MAAK,QAAQ,KAAK,KAAK,OAAO,IAAI,QAAQ,OAAO,GAAG,IAAI,OAAO,KAAK,KAAK,MAAM,KAAK;AACxH,mBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,KAAM,KAAI,KAAK,KAAK,SAAS,CAAC,KAAK,OAAO,YAAY,MAAM,KAAK,QAAQ,IAAI,GAAG,KAAK,CAAC,CAAC;AACrH,aAAK,QAAQ,MAAM;AAAA,MACrB,UAAE;AACA,YAAI,QAAQ,KAAK,WAAY,MAAK,MAAM,WAAW;AAAA,MACrD;AAAA,IACF;AAAA,IACA,eAAe,EAAE,MAAM,GAAG;AACxB,iBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,KAAM,MAAK,YAAY,KAAK,GAAG;AAC7D,eAAS,KAAK,SAAS,OAAO,KAAK,OAAO,GAAG;AAAA,IAC/C;AAAA,IACA,QAAQ,OAAO,KAAK,MAAM,KAAK,KAAK,IAAI,GAAG,GAAG,EAAE,OAAO,QAAQ,MAAM,QAAQ,cAAc,IAAI,aAAa,KAAK,OAAO,QAAQ,eAAe,OAAO,GAAG,OAAO,MAAM;AACpK,UAAI,CAAC,MAAO;AACZ,YAAM,SAAS,KAAK,SAAS,GAAG,GAAG,SAAS,KAAK,SAAS,KAAK,KAAK,OAAO,WAAW,IAAI,GAAG,MAAM,CAAC,GAAG,MAAMC,WAAU,QAAQ,SAAS,SAAS,IAAI,MAAM,GAAG,QAAQ,UAAU,MAAMA,OAAM,IAAI,MAAM,IAAIA,OAAM,QAAQ,EAAE,OAAO,QAAQ,eAAe,aAAa,IAAI,OAAO,YAAY,IAAI,MAAM;AACtS,UAAI,QAAQ,KAAK,QAAQ,IAAI,GAAG;AAChC,eAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,IAAK,YAAW,OAAO,OAAO,CAAC,CAAC;AAC9E,eAAS,IAAI,GAAG,MAAM,OAAO,QAAQ,IAAI,KAAK,KAAK;AACjD,YAAI;AACJ,cAAM,QAAQ,OAAO,CAAC,GAAG,OAAO,CAAC,KAAK,OAAO,gBAAgB,CAAC,MAAM,SAAS,OAAO,KAAK,CAAC,QAAQ,IAAI,MAAM,SAAS,MAAM,QAAQ,SAAS,QAAQ,CAAC,IAAI,QAAQ,QAAQ,QAAQ,QAAQ,OAAO,KAAK;AACrM,kBAAU,WAAW,IAAI,MAAM,QAAQ,IAAI,MAAM,IAAI,GAAG,KAAK,IAAI,UAAU,KAAK,QAAQ,IAAI,KAAK,QAAQ,CAAC,CAAC,GAAG,QAAQ,KAAK,IAAI;AAAA,MACjI;AACA,eAAS,IAAI,KAAK,SAAS,CAAC,KAAK,OAAO,YAAY,MAAM,SAAS,CAAC,CAAC,GAAG,KAAK,QAAQ,OAAO,GAAG;AAAA,IACjG;AAAA;AAAA,IAEA,QAAQ;AACN,mBAAa,KAAK,aAAa;AAC/B,WAAK,gBAAgB;AACrB,qBAAe,MAAM,KAAK,gBAAgB,CAAC;AAC3C,WAAK,SAAS,OAAO,KAAK,OAAO,GAAG;AAAA,IACtC;AAAA;AAAA,IAEA,aAAa;AACX,WAAK,QAAQ;AAAA,IACf;AAAA,IACA,YAAY;AACV,WAAK,OAAO,UAAU,KAAK,MAAM,YAAY,CAAC,KAAK,OAAO,YAAY,KAAK,SAAS,IAAI,KAAK,OAAO,KAAK,KAAK,WAAW,CAAC;AAAA,IAC5H;AAAA,EACF,GAlGE,cADkBF,KACX,cAAa,YADFA;AAsGpB,MAAI,2BAA2B;AAAA,IAC7B,OAAO;AAAA,IACP,cAAc;AAAA,IACd,kBAAkB;AAAA,IAClB,aAAa;AAAA,IACb,cAAc;AAAA,IACd,SAAS;AAAA,EACX;AAhhBA,MAAAA;AAmhBA,MAAI,oBAAmBA,MAAA,cAAc,kBAAkB;AAAA;AAAA,IASrD,YAAY,QAAQ,KAAK;AACvB,YAAM,EAAE,GAAG,0BAA0B,GAAG,OAAO,GAAG,KAAK,EAAE,cAAc,CAAC,GAAG,SAAS,CAAC,GAAG,UAAU,MAAM,cAAc,GAAG,QAAQ,MAAM,SAAS,KAAK,CAAC;AARxJ,mCAAwB,oBAAI,QAAQ;AACpC,qCAAU,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO;AAE/C;AAAA,2CAAgB;AAChB,yCAAc;AACd;AAmBA,oCAAS,KAAK;AAAA,IAfd;AAAA;AAAA;AAAA;AAAA,IAIA,OAAO;AACL,WAAK,gBAAgB,YAAY,IAAI;AACrC,WAAK,OAAO,GAAG,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK,CAAC;AACrF,WAAK,OAAO,GAAG,eAAe,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7E,OAAC,KAAK,MAAM,UAAU,KAAK,SAAS,KAAK,MAAM,OAAO;AAAA,IACxD;AAAA,IACA,SAAS,KAAK,KAAK;AACjB,UAAI,OAAO,iBAAiB,IAAI,OAAO,oBAAoB,IAAI,OAAO,eAAe,IAAI,OAAO,kBAAkB;AAClH,UAAI,CAAC,KAAK,MAAM,QAAQ,UAAU,CAAC,KAAK,MAAM,aAAa,GAAG,EAAG,MAAK,MAAM,aAAa,GAAG,IAAI,KAAK,WAAW,KAAK,GAAG;AACxH,WAAK,YAAY,KAAK,GAAG;AAAA,IAC3B;AAAA;AAAA,IAGA,OAAO,GAAG,MAAM,KAAK,KAAK,IAAI,EAAE,OAAO,GAAG;AACxC,UAAI,CAAC,KAAK,MAAM,UAAU,EAAE,KAAK,aAAa,KAAK,MAAM,aAAa,EAAE,OAAQ;AAChF,UAAI,KAAK,MAAM,eAAe,KAAK,MAAM,QAAQ,OAAQ,MAAK,MAAM,QAAQ,SAAS,KAAK,MAAM;AAChG,YAAM,YAAY,EAAE,aAAa,YAAY,IAAI;AACjD,UAAI,KAAK,EAAE,MAAM,EAAE,OAAO,MAAM,IAAI,EAAE,QAAQ,SAAS,OAAO,EAAE,OAAO,KAAK,GAAG,MAAM,CAAC,KAAK,OAAO,eAAe,CAAC,EAAE,OAAO,KAAK,SAAS,QAAQ,IAAI,EAAE,QAAQ,SAAS,OAAO,EAAE,OAAO,QAAQ,IAAI,QAAQ,EAAE,QAAQ,MAAM,EAAE,OAAO,KAAK,QAAQ,UAAU,OAAO,CAAC,GAAG,MAAM,EAAE,cAAc,EAAE,MAAM,KAAK,QAAQ,YAAY,KAAK,cAAc;AACjV,OAAC,EAAE,OAAO,WAAW,GAAG,SAAS;AACjC,UAAI,KAAK,OAAO,aAAa;AAC3B,cAAM,MAAM,KAAK,OAAO,YAAY,IAAI,KAAK,MAAM,OAAO;AAC1D,YAAI,QAAQ,MAAO;AACnB,YAAI,OAAO,QAAQ,KAAM,MAAK;AAAA,MAChC;AACA,UAAI,EAAE,IAAI;AACR,YAAI,SAAS,KAAK,MAAM,IAAI,EAAE,EAAE;AAChC,YAAI,CAAC,QAAQ;AACX,eAAK,MAAM,IAAI,EAAE,IAAI,SAAS,EAAE,IAAI,EAAE,GAAG,IAAI,OAAO,EAAE,GAAG,OAAO,OAAO,CAAC,EAAE,GAAG,QAAQ,GAAG,QAAQ,OAAO,WAAW,KAAK,UAAU,CAAC;AAClI,gBAAM,WAAW,EAAE,GAAG,SAAS,KAAK,MAAM,IAAI,EAAE,GAAG,MAAM,IAAI;AAC7D,WAAC,WAAW,SAAS,QAAQ,KAAK,MAAM,SAAS,KAAK,MAAM;AAAA,QAC9D,MAAO,QAAO,MAAM,KAAK,EAAE,GAAG,OAAO,MAAM;AAAA,MAC7C,MAAO,MAAK,MAAM,QAAQ,KAAK,EAAE;AACjC,YAAM,MAAM,KAAK,MAAM,eAAe,KAAK,MAAM,QAAQ,QAAQ,CAAC,CAAC,EAAE,EAAE;AACvE,aAAO,KAAK,MAAM,QAAQ,SAAS,KAAK,OAAO,MAAO,MAAK,MAAM,QAAQ,MAAM,GAAG,KAAK,MAAM;AAC7F,WAAK,gBAAgB;AAAA,IACvB;AAAA;AAAA,IAEA,QAAQ;AACN,WAAK,MAAM,WAAW,KAAK,YAAY,MAAM,CAAC,KAAK,MAAM,UAAU,KAAK,SAAS,KAAK,MAAM,OAAO;AAAA,IACrG;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,UAAU;AACR,WAAK,gBAAgB,YAAY,IAAI;AACrC,aAAO,KAAK,MAAM,WAAW,KAAK,YAAY,OAAO;AAAA,IACvD;AAAA;AAAA,IAEA,QAAQ;AACN,WAAK,MAAM;AACX,WAAK,MAAM,QAAQ,SAAS,KAAK,MAAM,eAAe;AACtD,iBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,KAAM,MAAK,MAAM,aAAa,GAAG,IAAI,KAAK,WAAW,KAAK,GAAG;AAC3F,WAAK,gBAAgB,YAAY,IAAI;AAAA,IACvC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,QAAQ,GAAG,aAAa,OAAO;AACpC,WAAK,MAAM,SAAS;AACpB,YAAM,SAAS,MAAM,GAAG,OAAO,KAAK,MAAM,QAAQ,MAAM,GAAG,UAAU,SAAS,KAAK,MAAM;AACzF,aAAO,KAAK,MAAM,iBAAiB,QAAQ;AACzC,cAAM,QAAQ,KAAK,MAAM,QAAQ,UAAU,KAAK,MAAM,eAAe,KAAK,MAAM,eAAe,CAAC;AAChG,aAAK,UAAU,OAAO,OAAO;AAC7B,kBAAU,KAAK,MAAM,iBAAiB,KAAK,MAAM;AACjD,aAAK,OAAO,QAAQ,OAAO,OAAO;AAAA,MACpC;AACA,iBAAW,OAAO,KAAK,KAAK,OAAO,EAAG,KAAI,KAAK;AAC/C,UAAI,CAAC,WAAY,MAAK,MAAM,SAAS;AAAA,IACvC;AAAA;AAAA,IAEA,UAAU,MAAM,UAAU,MAAM;AAC9B,UAAI,WAAW,KAAM,UAAS,MAAM,KAAK,MAAM,QAAQ,IAAI,UAAU,IAAI,MAAM,GAAG,UAAU,IAAI,MAAM,KAAK,GAAG,UAAU,MAAM,IAAK,MAAK,UAAU,KAAK,MAAM,CAAC,GAAG,OAAO;AAAA,WACnK;AACH,YAAI;AACJ,cAAM,MAAM,KAAK,KAAK,IAAI,KAAK,GAAG,KAAK,KAAK,KAAK,OAAO,EAAE,KAAK,EAAE,OAAO,OAAO,CAAC,KAAK,OAAO,gBAAgB,CAAC,KAAK,KAAK,SAAS,OAAO,KAAK,CAAC,QAAQ,IAAI,MAAM,SAAS,KAAK,KAAK,QAAQ,SAAS,QAAQ,CAAC,IAAI,KAAK,OAAO;AAC5N,YAAI,QAAS,MAAK,SAAS,WAAW,WAAW,IAAI,MAAM,IAAI,IAAI,QAAQ,IAAI,MAAM,MAAM,UAAU,KAAK,IAAI,IAAI,MAAM,CAAC;AAAA,YACpH,MAAK,WAAW,QAAQ,WAAW,IAAI,MAAM,IAAI,IAAI,QAAQ,IAAI,MAAM,MAAM,UAAU,KAAK,MAAM,IAAI,MAAM,CAAC;AAAA,MACpH;AAAA,IACF;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,KAAK,SAAS,GAAG,UAAU,MAAM;AAC/B,UAAI,UAAU,KAAK,MAAM,gBAAgB,KAAK,MAAM,QAAQ,SAAS,KAAK,MAAM,gBAAgB,EAAG;AACnG,WAAK,MAAM,GAAG,UAAU,KAAK,OAAO,KAAK,MAAM,eAAe,MAAM,IAAI,KAAK,OAAO,KAAK,MAAM,eAAe,MAAM;AAAA,IACtH;AAAA;AAAA,IAEA,IAAI,UAAU;AACZ,aAAO,KAAK,MAAM,eAAe;AAAA,IACnC;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,KAAK,QAAQ;AACX,WAAK,KAAK,UAAU,UAAU,aAAa,OAAO,SAAS,SAAS,GAAG,KAAK;AAAA,IAC9E;AAAA;AAAA,IAEA,IAAI,UAAU;AACZ,aAAO,KAAK,MAAM,eAAe,KAAK,MAAM,QAAQ;AAAA,IACtD;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,KAAK,QAAQ;AACX,WAAK,KAAK,UAAU,UAAU,aAAa,OAAO,SAAS,SAAS,GAAG,IAAI;AAAA,IAC7E;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IASA,MAAM,SAAS,UAAU,MAAM;AAC7B,YAAM,MAAM,EAAE,KAAK;AACnB,WAAK,MAAM,SAAS;AACpB,WAAK,MAAM,UAAU;AACrB,aAAO,QAAQ,KAAK,eAAe,CAAC,KAAK,MAAM,WAAW,UAAU,KAAK,MAAM,eAAe,KAAK,MAAM,QAAQ,SAAS,KAAK,MAAM,eAAe,IAAI;AACtJ,cAAM,SAAS,KAAK,MAAM,QAAQ,KAAK,MAAM,gBAAgB,UAAU,IAAI,GAAG,GAAG,QAAQ,KAAK,KAAK,WAAW,SAAS,OAAO,MAAM,OAAO,QAAQ,OAAO,SAAS,OAAO,UAAU,KAAK,OAAO,cAAc,KAAK,OAAO,gBAAgB;AAC1O,YAAI,QAAQ,EAAG,OAAM,IAAI,QAAQ,CAAC,QAAQC,YAAW,KAAK,OAAO,KAAK,MAAM,CAAC;AAC7E,YAAI,CAAC,KAAK,MAAM,OAAQ,MAAK,OAAO,KAAK,MAAM,gBAAgB,UAAU,IAAI,KAAK,IAAI;AAAA,MACxF;AACA,UAAI,QAAQ,KAAK,YAAa,MAAK,MAAM,SAAS;AAAA,IACpD;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,OAAO;AACL,aAAO,KAAK,SAAS,IAAI;AAAA,IAC3B;AAAA;AAAA;AAAA;AAAA;AAAA,IAKA,SAAS;AACP,aAAO,KAAK,SAAS,KAAK;AAAA,IAC5B;AAAA;AAAA,IAEA,QAAQ;AACN,WAAK,eAAe,KAAK,MAAM,SAAS;AAAA,IAC1C;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,OAAO,UAAU,OAAO;AACtB,aAAO,KAAK,UAAU,KAAK,OAAO,UAAU,KAAK;AAAA,IACnD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMA,OAAO,MAAM,SAAS,QAAQ,KAAK,MAAM,cAAc,SAAS,CAAC,KAAK,MAAM,QAAQ,UAAU,KAAK,MAAM,SAAS;AAChH,cAAQ,KAAK,OAAO,KAAK,KAAK,MAAM,MAAM,OAAO,CAAC;AAClD,WAAK,gBAAgB,YAAY,IAAI;AACrC,WAAK,MAAM,SAAS;AACpB,iBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,MAAM;AAClC,cAAM,QAAQ,KAAK,SAAS,GAAG;AAC/B,iBAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,gBAAM,OAAO,MAAM,CAAC;AACpB,iBAAO,IAAI,MAAM,MAAM,QAAQ,KAAK,MAAM,aAAa,GAAG,GAAG,IAAI,CAAC;AAAA,QACpE;AAAA,MACF;AACA,iBAAW,CAAC,KAAK,GAAG,KAAK,KAAK,KAAM,KAAI,KAAK,KAAK,OAAO,YAAY,KAAK,SAAS,GAAG,IAAI,GAAG;AAC7F,WAAK,MAAM,eAAe,GAAG,KAAK,OAAO,KAAK,GAAG,UAAU,KAAK,SAAS,OAAO;AAAA,IAClF;AAAA,EACF,GAvME,cADqBD,KACd,cAAa,eADCA;AA2MvB,WAAS,QAAQ,IAAI;AACnB,WAAO,SAAS,EAAE,QAAQ,KAAK,GAAG,EAAE;AAAA,EACtC;AAiCA,WAAS,qBAAqB;AAC5B,UAAM,YAA4B,oBAAI,QAAQ;AAC9C,WAAO,CAAC,UAAU;AAChB,YAAM,KAAK,IAAI,MAAM;AACrB,UAAI,CAAC,GAAI,QAAO;AAChB,UAAI,QAAQ,UAAU,IAAI,EAAE;AAC5B,UAAI,CAAC,MAAO,WAAU,IAAI,IAAI,QAAwB,oBAAI,IAAI,CAAC;AAC/D,UAAI,MAAM,IAAI,MAAM,IAAI,GAAG;AACzB,cAAM,WAAW,MAAM,IAAI,MAAM,IAAI;AACrC,iBAAS,KAAK,MAAM;AACpB,iBAAS,UAAU,MAAM;AACzB,eAAO;AAAA,MACT;AACA,aAAO,MAAM,IAAI,MAAM,MAAM,KAAK,GAAG;AAAA,IACvC;AAAA,EACF;;;AC7wBO,WAAS,gBAAgB,EAAE,MAAM,SAAS,WAAW,UAAU,MAAM,SAAS,OAAO,SAAS,SAAS,IAAoH,EAAE,MAAM,EAAE,GAAW;AACrP,UAAM,OAAO,OAAO,SAAS,MAAM,GACjC,KAAK,CAAC,IAAI,MAAO,KAAK,IAAI,KAAK,KAC/B,KAAK,CAAC,QAAiB,WAAW,UAAU,IAAI,YAAY,IAAI,WAAW,UAAU,IAAI,QAAQ,aAAa,CAACG,OAAMA,GAAE,YAAY,CAAC,IAAI,IAAI,YAAY,GACxJ,MAAM,CAAC,IAAI,OAAO,EAAE,GAAG,GAAG,OAAO,SAAS,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,OAAO,UAAU,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,OAAO,YAAY,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,GAAG,GAAG,OAAO,YAAY,GAAG,CAAC,IAAI,MAAM,GAAG,GAAG,IAAI,GAAG,OAAO,iBAAiB,GAAG,CAAC,IAAI,MAAM,IAAI,EAAE,IACtP,MAAM,CAAC,GAAoB,IAAI,GAAG,MAAiB,QAAQ,CAAC,IAAI,IAAI,OAAO,CAAC,EAAE,SAAS,GAAG,MAAM,CAAC,CAAC,IAAI,MAAM,GAAG;AACjH,QAAI,MAAM,QAAQ,GAAG,KAAK,SAAS,SAAU,QAAO,WAAW,aAAa,MAAM,IAAI,EAAE,IAAI,IAAI,GAAG,IAAI,IAAI,EAAE,KAAK,CAAC,UAAU,SAAS,KAAK,KAAK,IAAI,CAAC,UAAU,SAAS;AACxK,UAAM,IAAI,KAAK,MAAM,KAAK,IAAI,IAAK,IAAI,EAAE,GACvC,IAAI,KAAK,MAAM,KAAK,IAAI,IAAK,IAAI,EAAE,IAAI,IACvC,IAAI,KAAK,MAAM,KAAK,IAAI,IAAK,IAAI,IAAI,IAAI,IACzC,IAAI,KAAK,MAAM,KAAK,IAAI,IAAK,IAAI,KAAK,GACtC,KAAK,KAAK,MAAO,KAAK,IAAI,IAAK,IAAI,IAAK,GAAI;AAC9C,QAAI,WAAW,WAAW;AACxB,YAAMC,QAAO,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI,IAAI,IAAI,MAAM,IAAI,GAAG,GAAG,IAAI;AAC7K,aAAO,CAAC,UAAU,MAAMA,QAAOA;AAAA,IACjC;AACA,UAAM,OAAO,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,IAAI,CAAC,IAAI,IAAI,CAAC,EAAE,GACpL,SAAS,UAAU,KAAK,IAAI,IAAI,CAAC,IAAI,IAAI,EAAE,EAAE,KAAK;AACpD,YAAQ,OAAO,UAAU,CAAC,OAAO,MAAM,OAAO,CAAC,UAAU,SAAS,KAAK,KAAK;AAAA,EAC9E;AAIO,WAAS,iBAAiB,QAAuE;AACtG,QAAI,kBAAkB,WAAY,QAAO;AACzC,QAAI,CAAC;AACH,aAAO,OAAO,OAAO,WAAW,WAAW;AAAA,QACzC,QAAQ,EAAE,OAAO,EAAE;AAAA,QACnB,OAAO;AAAA,UACL,OAAO,MAAM;AACX,kBAAM,IAAI,aAAa,uBAAuB,gBAAgB;AAAA,UAChE;AAAA,QACF;AAAA,QACA,KAAK;AAAA,UACH,OAAO,MAAM;AACX,kBAAM,IAAI,aAAa,uBAAuB,gBAAgB;AAAA,UAChE;AAAA,QACF;AAAA,MACF,CAAC;AAEH,UAAM,YAAY,MAAM,QAAQ,MAAM,IAAI,SAAS,MAAM,KAAK,MAAwB,GAAG,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC;AAEnH,UAAM,QAA4B,CAAC;AACnC,eAAW,WAAW,UAAU;AAC9B,YAAM,OAAO,MAAM,MAAM,SAAS,CAAC;AACnC,UAAI,CAAC,QAAQ,QAAQ,CAAC,IAAI,KAAK,CAAC,EAAG,OAAM,KAAK,CAAC,QAAQ,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC;AAAA,UACjE,MAAK,CAAC,IAAI,KAAK,IAAI,KAAK,CAAC,GAAG,QAAQ,CAAC,CAAC;AAAA,IAC7C;AAEA,WAAO,OAAO,OAAO,WAAW,WAAW;AAAA,MACzC,QAAQ,EAAE,OAAO,MAAM,OAAO;AAAA,MAC9B,OAAO;AAAA,QACL,OAAO,CAAC,MAAc;AACpB,cAAI,IAAI,KAAK,KAAK,MAAM,OAAQ,OAAM,IAAI,aAAa,uBAAuB,gBAAgB;AAC9F,iBAAO,MAAM,CAAC,EAAE,CAAC;AAAA,QACnB;AAAA,MACF;AAAA,MACA,KAAK;AAAA,QACH,OAAO,CAAC,MAAc;AACpB,cAAI,IAAI,KAAK,KAAK,MAAM,OAAQ,OAAM,IAAI,aAAa,uBAAuB,gBAAgB;AAC9F,iBAAO,MAAM,CAAC,EAAE,CAAC;AAAA,QACnB;AAAA,MACF;AAAA,IACF,CAAC;AAAA,EACH;;;AC9DO,MAAM,oBAAyC;AAAA;AAAA,IAEpD,KAAK;AAAA;AAAA,IACL,aAAa;AAAA,IACb,QAAQ;AAAA;AAAA,IAER,QAAQ;AAAA,IACR,OAAO;AAAA,IACP,YAAY;AAAA,IACZ,MAAM;AAAA,IACN,cAAc;AAAA;AAAA,IAEd,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,YAAY;AAAA,IACZ,QAAQ;AAAA;AAAA,IAER,SAAS;AAAA,IACT,MAAM;AAAA;AAAA,IAEN,WAAW;AAAA,IACX,QAAQ;AAAA,IACR,kBAAkB;AAAA,IAClB,YAAY;AAAA,IACZ,YAAY;AAAA,IACZ,aAAa;AAAA;AAAA,IACb,WAAW,KAAK;AAAA;AAAA,IAChB,UAAU;AAAA,IACV,UAAU;AAAA,IACV,UAAU;AAAA,IACV,eAAe,CAAC;AAAA;AAAA,IAEhB,gBAAgB;AAAA,IAChB,kBAAkB;AAAA,IAClB,mBAAmB;AAAA,IACnB,mBAAmB;AAAA,IACnB,cAAc;AAAA,IACd,aAAa;AAAA,IACb,WAAW;AAAA;AAAA;AAAA,IAEX,QAAQ;AAAA,IACR,UAAU;AAAA,IACV,MAAM;AAAA,IACN,SAAS;AAAA,IACT,aAAa;AAAA,IACb,aAAa;AAAA,IACb,UAAU;AAAA;AAAA,IACV,cAAc;AAAA,IACd,yBAAyB;AAAA;AAAA,IAEzB,SAAS,CAAC;AAAA,IACV,QAAQ,CAAC;AAAA;AAAA,IAET,MAAM;AAAA;AAAA,IAEN,WAAW;AAAA,EACb;AAGO,MAAM,qBAA2C;AAGjD,MAAM,qBAA2C;AAAA;AAAA,IAEtD,YAAY;AAAA;AAAA,IACZ,cAAc;AAAA;AAAA,IACd,OAAO;AAAA,IACP,WAAW;AAAA;AAAA,IAEX,SAAS;AAAA,IACT,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU,iBAAiB;AAAA,IAC3B,QAAQ,iBAAiB;AAAA,IACzB,UAAU,iBAAiB;AAAA,IAC3B,UAAU;AAAA;AAAA,IACV,OAAO;AAAA;AAAA,IAEP,YAAY;AAAA,IACZ,aAAa;AAAA;AAAA,IAEb,gBAAgB;AAAA,IAChB,YAAY;AAAA,IACZ,SAAS;AAAA,IACT,gBAAgB;AAAA;AAAA,IAEhB,YAAY,CAAC;AAAA,IACb,aAAa,CAAC;AAAA,IACd,aAAa,CAAC;AAAA,IACd,QAAQ,CAAC;AAAA;AAAA,IAET,WAAW;AAAA;AAAA,IAEX,gBAAgB;AAAA;AAAA,IAEhB,QAAQ;AAAA,IACR,aAAa;AAAA,EACf;AAGO,MAAM,uBAAmD;AAAA;AAAA,IAE9D,cAAc;AAAA,IACd,qBAAqB;AAAA;AAAA,IAErB,WAAW;AAAA;AAAA,IAEX,UAAU;AAAA,MACR,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,SAAS;AAAA,MACT,OAAO;AAAA,MACP,SAAS,CAAC;AAAA,MACV,aAAa,CAAC;AAAA,MACd,OAAO;AAAA,QACL,OAAO;AAAA,QACP,QAAQ;AAAA,QACR,SAAS;AAAA,MACX;AAAA,MACA,eAAe;AAAA,IACjB;AAAA,IACA,YAAY;AAAA;AAAA,IAEZ,eAAe;AAAA,IACf,cAAc;AAAA,EAChB;;;ACpHO,WAAS,eAAe,GAAqB,QAAQ,aAAa,kBAAkB,OAAO,EAAE,eAAe,KAAK,GAAgB;AACtI,UAAM,cAAc,YAAY,GAAG,MAAM,GACvC,SAAS,EAAE,OAAO,cAAc,GAAG,OAAO,WAAW,GAAG,QAAQ,eAAe,GAAG,OAAO,WAAW,GAAG,UAAU,iBAAiB,CAAC,EAAE;AACvI,WAAO,EAAE,OAAO,UAAM,mBAAmB,OAAO,OAAO,IAAI,GAAG,QAAQ,UAAM,oBAAoB,OAAO,OAAO,IAAI,GAAG,QAAQ,UAAM,oBAAoB,OAAO,QAAQ,IAAI,GAAG,UAAU,UAAM,sBAAsB,OAAO,UAAU,IAAI,EAAE;AAAA,EAC5O;AACO,MAAM,gBAAgB,CAAC,GAAqB,QAAQ,aAAa,kBAAkB,eAAe,YAAY,GAAG,MAAM,OAA4B,EAAE,KAAK,EAAE,KAAK,aAAa,EAAE,aAAa,QAAQ,EAAE,QAAQ,QAAQ,EAAE,SAAS,KAAK,OAAO,EAAE,OAAO,cAAc,EAAE,cAAc,kBAAkB,wBAAwB,MAAM,GAAG,YAAY,kBAAkB,MAAM,GAAG,kBAAkB,cAAc,mBAAmB,YAAY,GAAG,OAAO,GAAG,mBAAmB,YAAY,GAAG,OAAO,GAAG,QAAQ,QAAS,EAAuB,SAAS,IAAI,UAAU,EAAE,UAAU,MAAM,EAAE,MAAM,SAAS,EAAE,SAAS,aAAa,QAAQ,EAAE,cAAc,OAAO,aAAa,EAAE,aAAa,UAAU,EAAE,UAAU,cAAc,EAAE,gBAAgB,EAAE,aAAa,cAAc,GAAG,yBAAyB,QAAQ,EAAE,2BAA2B,EAAE,aAAa,yBAAyB,IAAI,OAAO,SAAS,WAAW,CAAC,GAAG,QAAQ,UAAU,CAAC,EAAE;AACh5B,MAAM,iBAAiB,CAAC,GAAqB,QAAQ,aAAa,kBAAkB,eAAe,YAAY,GAAG,MAAM,GAAG,aAAa,WAAiC,EAAE,YAAY,EAAE,YAAY,cAAc,EAAE,cAAc,OAAO,EAAE,OAAO,SAAS,EAAE,SAAS,UAAU,EAAE,UAAU,QAAQ,EAAE,QAAQ,UAAU,EAAE,UAAU,UAAU,EAAE,UAAU,OAAO,EAAE,OAAO,gBAAgB,EAAE,cAAc,GAAG,YAAY,EAAE,cAAc,GAAG,SAAS,EAAE,cAAc,GAAG,gBAAgB,EAAE,cAAc,GAAG,YAAY,QAAS,EAAuB,aAAa,GAAG,aAAa,QAAS,EAAuB,cAAc,GAAG,YAAY,aAAa,SAAY,EAAE,YAAY,aAAa,aAAa,SAAa,EAAU,aAAa,aAAa,aAAa,SAAa,EAAU,aAAa,WAAW,aAAa,SAAY,EAAE,WAAW,YAAY,GAAG,aAAa,CAAC,KAAK,KAAK;AAC72B,MAAM,mBAAmB,CAAC,OAAqD,EAAE,cAAc,EAAE,cAAc,qBAAqB,EAAE,qBAAqB,WAAW,EAAE,UAAU;AAElL,WAAS,iBAAiB,EAAE,OAAO,GAAG,QAAQ,GAAG,GAAc,OAAO,EAAE,aAAqB;AAClG,QAAI,GAAG,QAAQ;AACb,UAAI,CAAC,GAAG,SAAS,UAAU,EAAE,KAAM,QAAO;AAC1C,YAAM,MAAM,GAAG,SAAS,MAAM,CAAC,GAC7B,MAAM,GAAG,SAAS,IAAI,GAAG,SAAS,SAAS,CAAC,IAAI;AAClD,aAAO,MAAM,KAAK,OAAO,OAAO,MAAM;AAAA,IACxC,MAAO,QAAO,OAAO,GAAG;AAAA,EAC1B;AACO,MAAM,eAAe,CAAC,OAAkB,SAAiB,OAAO,YAAY,KAAK,MAAe,MAAM,OAAO,SAAS,OAAQ,WAAW,YAAY,KAAK,IAAI,QAAS,UAAU,MAAM,OAAO;AAC9L,MAAM,cAAc,CAAC,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAoD,GAAG,SAAU,GAAG,SAAS,SAAU,GAAG,cAAc,GAAG,SAAS,MAAM,CAAC,IAAI,GAAG,SAAS,IAAI,GAAG,SAAS,SAAS,CAAC,IAAK,EAAE,cAAe;AACvO,MAAM,cAAc,CAAC,EAAE,QAAQ,IAAI,OAAO,EAAE,MAAoD,GAAG,SAAU,GAAG,SAAS,SAAS,GAAG,SAAS,IAAI,GAAG,SAAS,SAAS,CAAC,IAAI,EAAE,cAAe,GAAG;AAEhM,WAAS,qBAAqB,OAAkB,OAA2B,UAAoB;AACpG,WAAO,OAAO,KAAK,MAAM,IAAI,CAAC,EAAE,OAAO,CAAC,MAAM,OAAO,MAAM,IAAI,EAAE,CAAqB,MAAM,SAAS;AAAA,EACvG;AAGO,WAAS,eAAe,EAAE,aAAa,WAAW,GAAkD,EAAE,OAAO,cAAc,GAAG,QAAQ,eAAe,EAAE,GAAwC,EAAE,YAAY,SAAS,iBAAiB,UAAU,GAAyG;AAC/V,UAAM,OAAO,EAAE,OAAO,aAAa,QAAQ,aAAa,GACtD,OAAS,8BAAgB,OAAQ,4BAAe,eAAe,KAAK,KAAM,cAAc,cAAc,EAAE,OAAO,YAAY,QAAQ,YAAY,IAAI;AACrJ,QAAI,CAAC,OAAO,CAAC,aAAa,CAAC,eAAgB,QAAO,CAAC;AACnD,QAAI,cAAc,aAAc,aAAY,KAAK,QAAQ,IAAI,SAAS,KAAK,SAAS,IAAI,SAAS,YAAY;AAC7G,QAAI,cAAc,OAAQ,QAAO,EAAE,GAAG,eAAe,gBAAgB,MAAM,GAAG,GAAG,GAAG,IAAI;AAAA,aAC/E,cAAc,WAAW;AAChC,YAAM,WAAW,IAAI,SAAS,IAAI,OAChC,YAAY,KAAK,SAAS,KAAK,OAC/B,QAAQ,YAAY,WAAW,KAAK,QAAQ,KAAK,SAAS,UAC1D,SAAS,YAAY,WAAW,KAAK,QAAQ,WAAW,KAAK;AAC/D,aAAO,EAAE,GAAG,eAAe,gBAAgB,MAAM,EAAE,OAAO,OAAO,CAAC,GAAG,OAAO,OAAO;AAAA,IACrF,WAAW,cAAc,QAAQ;AAC/B,YAAM,EAAE,MAAM,KAAK,SAAS,OAAO,IAAI,eAAe,gBAAgB,MAAM,GAAG;AAC/E,aAAO,EAAE,MAAM,QAAQ,SAAS,GAAG,IAAI,IAAI,MAAM,KAAK,OAAO,SAAS,GAAG,IAAI,IAAI,KAAK,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO;AAAA,IAC/H,WAAW,cAAc,SAAS;AAChC,YAAM,WAAW,KAAK,IAAI,KAAK,QAAQ,IAAI,OAAO,KAAK,SAAS,IAAI,MAAM;AAC1E,UAAI,QAAQ,IAAI,QAAQ,UACtB,SAAS,IAAI,SAAS,UACtB,WAAW;AACb,UAAI,QAAQ,KAAK,MAAO,YAAW,KAAK,QAAQ;AAChD,UAAI,KAAK,IAAI,WAAW,CAAC,IAAI,SAAS,SAAS,KAAK,OAAQ,YAAW,KAAK,SAAS;AACrF,MAAC,SAAS,UAAY,UAAU;AAChC,aAAO,EAAE,GAAG,eAAe,gBAAgB,MAAM,EAAE,OAAO,OAAO,CAAC,GAAG,OAAO,OAAO;AAAA,IACrF;AACA,WAAO,CAAC;AAAA,EACV;AACA,MAAM,eAAe,CAAC,KAAa,UAAkB,eAA+B;AAClF,YAAQ,WAAY,MAAM,QAAS,QAAQ,UAAU,QAAQ,QAAS,MAAM,QAAS,QAAQ,WAAW,QAAQ,cAAc,MAAM;AACpI,UAAM,MAAM,WAAW,GAAG;AAC1B,WAAO,CAAC,IAAI,SAAS,GAAG,IAAI,OAAO,WAAW,eAAe,MAAM;AAAA,EACrE;AACA,MAAM,iBAAiB,CAAC,UAAkB,MAAe,WAAuF;AAC9I,QAAI,aAAa,SAAU,YAAW;AACtC,UAAM,CAAC,MAAM,MAAM,KAAK,IAAI,SAAS,MAAM,GAAG;AAC9C,WAAO,EAAE,MAAM,aAAa,MAAM,KAAK,OAAO,OAAO,KAAK,GAAG,KAAK,aAAa,KAAK,KAAK,QAAQ,OAAO,MAAM,GAAG,SAAS,MAAM,QAAQ,IAAI;AAAA,EAC9I;AAEO,WAAS,YAAY,WAAwB,EAAE,aAAa,GAAG,cAAc,EAAE,IAAI,WAAW;AACnG,WAAO,EAAE,OAAO,GAAG,QAAQ,GAAG,MAAM,KAAK,MAAM,UAAU,KAAK,MAAM,SAAS,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,KAAK,MAAM,MAAM,GAAG;AAAA,EACxI;AAGO,WAAS,WAAuC,GAAS;AAC9D,UAAM,OAAO,EAAE,UAAU,IAAI;AAC7B,SAAK,YAAY,EAAE;AACnB,MAAE,eAAe,aAAa,MAAM,CAAC;AACrC,QAAI,EAAE,YAAa,MAAK,cAAc,EAAE;AACxC,QAAI,EAAE,iBAAiB,EAAG,MAAK,eAAe,EAAE;AAChD,QAAI,EAAE,wBAAwB,EAAG,MAAK,sBAAsB,EAAE;AAC9D,QAAI,EAAE,WAAW,EAAG,MAAK,SAAS,EAAE;AACpC,QAAI,EAAE,MAAO,MAAK,QAAQ;AAC1B,QAAI,EAAE,aAAc,MAAK,eAAe;AACxC,QAAI,EAAE,UAAW,MAAK,YAAY,EAAE;AACpC,QAAI,EAAE,SAAU,MAAK,WAAW;AAChC,QAAI,EAAE,KAAM,MAAK,OAAO;AACxB,QAAI,EAAE,SAAU,MAAK,WAAW;AAChC,QAAI,EAAE,YAAa,MAAK,cAAc,EAAE;AACxC,QAAI,EAAE,YAAa,MAAK,cAAc;AACtC,QAAI,EAAE,cAAc,OAAQ,MAAK,eAAe,EAAE;AAClD,QAAI,EAAE,wBAAyB,MAAK,0BAA0B;AAC9D,QAAI,CAAC,EAAE,UAAU,KAAK,YAAa,MAAK,KAAK;AAC7C,WAAO;AAAA,EACT;AAGO,WAAS,iBAAiB,QAAa,IAAmD;AAC/F,QAAI,OAAO,IAAK,IAAG,MAAM,OAAO;AAChC,QAAI,OAAO,KAAM,IAAG,OAAO,OAAO;AAClC,QAAI,OAAO,MAAO,IAAG,QAAQ,OAAO;AAAA,EACtC;AACO,WAAS,WAAW,UAA6C,CAAC,GAAG,QAA8D;AACxI,UAAM,YAAY,CAAC,QAAoB,QAAqB;AAC1D,YAAM,WAAW,SAAS,QAAQ;AAClC,uBAAiB,QAAQ,QAAQ;AACjC,aAAO,IAAI,YAAY,QAAQ;AAAA,IACjC;AACA,WAAO,OAAO,OAAO,IAAI,MAAM,KAAK,SAAiC,CAAC,WAAW,UAAU,QAAQ,MAAM,CAAC,IAAI,UAAU,SAAS,MAAM;AAAA,EACzI;AACO,WAAS,WAAW,QAA4C;AACrE,UAAM,UAAU,OAAO,iBAAoC,QAAQ,GACjE,WAAyB,CAAC;AAC5B,eAAW,UAAU,SAAS;AAC5B,YAAM,MAA2B,CAAC;AAClC,uBAAiB,QAAQ,GAAG;AAC5B,eAAS,KAAK,GAAiB;AAAA,IACjC;AACA,WAAO;AAAA,EACT;AACO,MAAM,gBAAgB,CAAC,QAAqB,UAAU,QAAQ,iBAAiB,QAAQ,MAAY;AACxG,QAAI,QAAS,YAAW,UAAU,QAAS,QAAO,OAAO;AAAA,EAC3D;AACO,WAAS,cAAc,GAAa,GAAsB;AAC/D,QAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,OAAQ,QAAO;AAC9C,UAAM,MAAM,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;AAC3E,WAAO,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,GAAG,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,KAAK,EAAE,CAAC;AAAA,EAC1E;AAIO,WAAS,gBAAgB,OAAY,IAAkD;AAC5F,QAAI,MAAM,GAAI,IAAG,KAAK,MAAM;AAC5B,QAAI,MAAM,KAAM,IAAG,OAAO,MAAM;AAChC,QAAI,MAAM,MAAO,IAAG,QAAQ,MAAM;AAClC,QAAI,MAAM,QAAS,IAAG,UAAU,MAAM;AACtC,QAAI,MAAM,IAAK,IAAG,MAAM,MAAM;AAC9B,QAAI,MAAM,QAAS,IAAG,UAAU,MAAM;AAAA,EACxC;AACO,WAAS,UAAU,SAA0C,CAAC,GAAG,QAA4D;AAClI,UAAM,WAAW,CAAC,OAAkB,QAAqB;AACvD,YAAM,UAAU,SAAS,OAAO;AAChC,aAAO,gBAAgB,OAAO,OAAO,GAAG,IAAI,YAAY,OAAO;AAAA,IACjE;AACA,WAAO,OAAO,MAAM,IAAI,MAAM,KAAK,QAA+B,CAAC,UAAU,SAAS,OAAO,MAAM,CAAC,IAAI,SAAS,QAAQ,MAAM;AAAA,EACjI;AACO,WAAS,UAAU,QAAqB,OAAO,OAAoB;AACxE,UAAM,SAAS,OAAO,iBAAmC,CAAC,OAAO,UAAU,iDAAiD,GAC1H,UAAuB,CAAC;AAC1B,eAAW,SAAS,QAAQ;AAC1B,YAAM,MAA2B,CAAC;AAClC,sBAAgB,OAAO,GAAG,GAAG,QAAQ,KAAK,GAAgB;AAAA,IAC5D;AACA,WAAO;AAAA,EACT;AACO,MAAM,eAAe,CAAC,QAAqB,SAAS,QAAQ,iBAAiB,OAAO,MAAY;AACrG,QAAI;AAAQ,iBAAW,SAAS,OAAQ,KAAI,MAAM,SAAS,eAAe,MAAM,SAAS,WAAY,OAAM,OAAO;AAAA;AAAA,EACpH;AACO,WAAS,aAAa,GAAY,GAAqB;AAC5D,QAAI,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,EAAE,OAAQ,QAAO;AAC9C,UAAM,MAAM,IAAI,IAAI,EAAE,IAAI,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;AACrG,WAAO,EAAE,MAAM,CAAC,MAAM,IAAI,IAAI,GAAG,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,OAAO,IAAI,EAAE,OAAO,EAAE,CAAC;AAAA,EACpG;AACA,MAAM,UAAU,CAAC,MAAiB,SAAc,GAAG,IAAI,WAAW,UAAU,gBAAiB,OAAe,GAAG,IAAI,OAAO;AACnH,WAAS,YAAY,QAA0B,OAAkB,QAAQ,OAAY,UAAU,OAAQ,OAAe,GAAG,KAAK,YAAY,CAAC,QAAQ,GAAW;AACnK,QAAI,MAAM,IAAI,EAAG,QAAO;AACxB,QAAI,QAAQ,SAAS,UAAU;AAC7B,UAAI,SAAS;AAAQ,iBAAS,IAAI,GAAG,IAAI,CAAC,KAAK,QAAQ,IAAK,KAAI,KAAK,CAAC,EAAE,SAAS,UAAW,QAAO;AAAA;AACnG,UAAI,SAAS;AAAS,iBAAS,IAAI,GAAG,IAAI,CAAC,KAAK,QAAQ,IAAK,KAAI,KAAK,CAAC,EAAE,QAAS,QAAO;AAAA;AACzF,UAAI,SAAS,QAAS,QAAO,KAAK,iBAAiB;AAAA,IACrD;AACA,QAAI,QAAQ,QAAQ,MAAM,IAAI,EAAG,QAAO,MAAM,UAAU,QAAQ,KAAK,MAAM,IAAI;AAC/E,QAAI,QAAQ,MAAM,IAAI,GAAG;AACvB,aAAO,KAAK,YAAY;AACxB,aAAO,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,OAAO,MAAM,UAAU,UAAU,KAAK,MAAM,CAAC,MAAW,EAAE,GAAG,YAAY,MAAM,QAAQ,EAAE,MAAM,YAAY,MAAM,QAAQ,EAAE,SAAS,YAAY,MAAM,QAAQ,EAAE,SAAS,YAAY,MAAM,QAAQ,UAAU,EAAE,KAAK,IAAI,CAAC;AAAA,IACnP;AACA,WAAO;AAAA,EACT;AACO,WAAS,gBAAgB,QAA0B,OAAkB,QAAQ,MAAW,QAAQ,OAAO,OAAQ,OAAe,GAAG,KAAK,YAAY,CAAC,QAAQ,GAAS;AACzK,UAAM,MAAM,YAAY,QAAQ,MAAM,MAAM,IAAI;AAChD,QAAI,QAAQ,SAAS,QAAS,UAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,UAAS,SAAU,KAAK,CAAC,EAAE,OAAO,MAAM,MAAM,YAAY,QAAQ,aAAa,WAAa,KAAK,CAAC,EAAE,UAAU,MAAM;AAAA,QACnL,QAAO,GAAG,MAAM,KAAK,GAAG,EAAE,WAAW;AAAA,EAC5C;AAGO,MAAM,YAAY,SAAS,OAAO;AAClC,MAAM,YAAY,SAAS,OAAO;AAClC,WAAS,aAAa,OAAkB,SAAS,QAAQ,SAAS,UAAU,YAAY,WAAoB;AACjH,QAAI;AACF,YAAMC,QAAO,MAAM;AACnB,YAAM,SAAS;AACf,YAAM,QAAQ,MAAM,WAAW;AAC/B,aAAQ,MAAM,SAASA,OAAO;AAAA,IAChC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACO,MAAM,gBAAgB,CAAC,OAAkB,SAAS,QAAQ,SAAS,UAAU,YAAY,cAAuB,CAAC,CAAC,SAAS,WAAW;AACtI,WAAS,WAAW,OAAkB,SAAS,QAAQ,SAAS,UAAU,YAAY,WAAoB;AAC/G,QAAI;AACF,YAAMA,QAAO,MAAM;AACnB,YAAM,eAAe;AACrB,YAAM,QAAQ,MAAM,iBAAiB;AACrC,aAAQ,MAAM,eAAeA,OAAO;AAAA,IACtC,QAAQ;AACN,aAAO;AAAA,IACT;AAAA,EACF;AACO,MAAM,gBAAgB,CAAC,OAAkB,SAAS,QAAQ,SAAS,UAAU,YAAY,cAAuB,CAAC,CAAC,SAAS,gBAAgB;AAC3I,MAAM,iBAAiB,CAAC,OAAkB,SAAS,QAAQ,SAAS,UAAU,YAAY,cAAuB,CAAC,CAAC,SAAS,iBAAiB;AAC7I,MAAM,iBAAiB,CAAC,OAAkB,SAAS,QAAQ,SAAS,UAAU,YAAY,cAAuB,CAAC,CAAC,SAAS,iBAAiB;AAG7I,MAAM,YAAY,CAAC,SAAyB,KAAK,QAAQ,iCAAiC,EAAE;AAE5F,WAAS,SAAS,KAAa,WAAqB,CAAC,UAAU,EAAE,GAAW;AACjF,UAAM,QAAQ,IAAI,QAAQ,UAAU,IAAI,EAAE,KAAK;AAC/C,eAAW,SAAS,MAAM,MAAM,QAAQ,GAAG;AACzC,YAAM,QAAQ,MAAM,MAAM,IAAI;AAC9B,UAAI,MAAM,QAAQ,KAAK,MAAM,CAAC,EAAE,KAAK,CAAC,IAAI,IAAI;AAC9C,YAAM,SAAS,MAAM,GAAG,GAAG,KAAK,EAAE,QAAQ,QAAQ,GAAG,GACnD,IAAI,QAAQ,MAAM,yFAAyF;AAC7G,UAAI,CAAC,EAAG;AACR,YAAM,CAAC,EAAE,UAAU,aAAa,KAAK,QAAQ,WAAW,GAAG,IAAI,GAC7D,MAAM,CAAC,OAAe,GAAG,OAAO,GAAG,GAAG,EAAE,MAAM,GAAG,CAAC;AACpD,eAAS,KAAK,WAAW,MAAM,IAAI,UAAU,IAAI,UAAU,SAAS,MAAM,IAAI,QAAQ,CAAC;AACvF,eAAS,IAAI,MAAM,GAAG,IAAI,MAAM,QAAQ,IAAK,UAAS,KAAK,MAAM,CAAC,CAAC;AACnE,eAAS,KAAK,EAAE;AAAA,IAClB;AACA,WAAO,SAAS,KAAK,IAAI;AAAA,EAC3B;AAEO,WAAS,aAAa,MAAsB;AACjD,UAAMC,SAAQ,EAAE,KAAK,iCAAiC,GAAG,IAAI,GAAG,GAAG,GAAG,MAAuB,GAAG,GAAG,GACjG,MAAM,CAAC,MAAc,EAAE,QAAQ,YAAY,CAAC,OAAO,EAAE,KAAK,SAAS,KAAK,QAAQ,KAAK,QAAQ,KAAK,UAAU,KAAK,QAAQ,GAAE,CAAC,CAAG;AACjI,QAAI;AACJ,WAAQ,IAAIA,OAAM,IAAI,KAAK,IAAI,GAAI;AACjC,YAAM,QAAQ,KAAK,MAAMA,OAAM,GAAG,EAAE,KAAK;AACzC,UAAI,MAAO,CAAAA,OAAM,KAAK,IAAI,KAAK;AAC/B,YAAM,CAAC,GAAG,KAAK,OAAO,IAAI,IAAI,GAC5B,MAAM,MAAM,YAAY;AAC1B,UAAI,SAAS,KAAK,KAAK,GAAG;AACxB,QAAAA,OAAM,KAAKA,OAAM,IAAI,sCAAsCA,OAAM,CAAC,KAAKA,OAAM,CAAC,YAAYA,OAAM;AAChG,QAAAA,OAAM,IAAI;AACV,QAAAA,OAAM,IAAI;AAAA,MACZ,WAAW,IAAK,CAAAA,OAAM,KAAK,CAAC,KAAK,KAAK,MAAM,EAAE,SAAS,GAAG,IAAI,YAAY,KAAK,GAAG;AAAA,eACzE,CAAC,KAAK,KAAK,KAAK,QAAQ,IAAI,EAAE,SAAS,GAAG,EAAG,CAAAA,OAAM,KAAK,IAAI,GAAG;AAAA,eAC/D,QAAQ,IAAK,CAAAA,OAAM,KAAK,sBAAsB,KAAK,QAAQ,qBAAqB,KAAK,EAAE,KAAK,CAAC;AAAA,eAC7F,QAAQ,IAAK,CAAAA,OAAM,KAAK,0BAA0B,KAAK,KAAK,IAAI,WAAW,IAAI,KAAK,KAAK,CAAC,CAAC,MAAM,EAAE;AAAA,eACnG,QAAQ,OAAQ,CAAAA,OAAM,KAAK,eAAe,IAAI,KAAK,KAAK,CAAC,CAAC;AACnE,MAAAA,OAAM,IAAIA,OAAM,IAAI;AAAA,IACtB;AACA,UAAM,SAAS,KAAK,MAAMA,OAAM,CAAC;AACjC,QAAI,OAAQ,CAAAA,OAAM,KAAK,IAAI,MAAM;AACjC,WAAOA,OAAM,KAAKA,OAAM,IAAI,sCAAsCA,OAAM,CAAC,KAAKA,OAAM,CAAC,YAAYA,OAAM;AAAA,EACzG;AAEO,WAAS,cAAc,GAAW,UAA4B;AACnE,UAAMA,SAAQ,EAAE,QAAQ,EAAE,MAAM,cAAc,KAAK,CAAC,GAAG,OAAO,CAAC,GAAe,OAAO,CAAC,GAAe,MAAM,IAAI,KAAK,GAAG,SAAS,IAAI,UAAU,IAAI,SAAS,IAAI,YAAY,MAAM,GAC/K,aAAa,OAAQA,OAAM,UAAUA,OAAM,MAAM,IAAI,CAAC,MAAM,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAKA,OAAM,WAAWA,OAAM,MAAM,YAAY,CAAC,GAAG,MAAM,IAAI,KAAK,CAAC,KAAK,EAAE,IACtJ,QAAQ,MAAMA,OAAM,SAASA,OAAM,MAAM,KAAKA,OAAM,OAAOA,OAAM,QAAQ,GAAIA,OAAM,QAAQA,OAAM,WAAW,MAAMA,OAAM,SAAWA,OAAM,MAAM,GAAKA,OAAM,aAAa;AACzK,eAAW,OAAOA,OAAM,QAAQ;AAC9B,YAAM,MAAM,IAAI,CAAC,MAAM,KACrB,WAAW,OAAO,IAAI,CAAC,MAAM;AAC/B,UAAI,KAAK;AACP,YAAIA,OAAM,QAAQ,CAACA,OAAM,cAAc,CAAC,SAAU,CAAAA,OAAM,QAAQ;AAChE,cAAM,IAAI,IAAI,MAAM,0BAA0B,GAC5C,IAAI,IAAI,CAAC,KAAK,IACd,SAAS,MAAM,KAAK,CAAC;AACvB,YAAI,QAAQ;AACV,UAACA,OAAM,UAAU,KAAOA,OAAM,QAAQ,KAAOA,OAAM,aAAa;AAChE;AAAA,QACF;AACA,YAAI,CAAC,YAAY,CAAC,IAAI,SAAS,IAAI,KAAK,EAAG,CAAAA,OAAM,MAAM,KAAK,CAAC,GAAG,WAAW;AAC3E,YAAI,YAAYA,OAAM,MAAM,OAAQ,CAAAA,OAAM,MAAM,IAAI,GAAG,WAAW;AAClE,QAACA,OAAM,aAAa,MAAQA,OAAM,QAAQ;AAC1C;AAAA,MACF;AACA,YAAM,MAAM,UAAU,GAAG,EAAE,QACzB,YAAYA,OAAM,QAAQ,CAACA,OAAM;AACnC,UAAIA,OAAM,OAAO,YAAY,IAAI,KAAK,MAAM,SAAU,OAAM;AAC5D,UAAI,UAAW,CAACA,OAAM,QAAQ,KAAOA,OAAM,OAAO;AAClD,MAACA,OAAM,QAAQ,KAAOA,OAAM,OAAO,KAAOA,OAAM,aAAa;AAAA,IAC/D;AACA,WAAO,MAAM,GAAGA,OAAM;AAAA,EACxB;;;ACvRO,MAAe,WAAf,cAAsE,aAAkC;AAAA,IAkB7G,YAAY,MAAkB,WAA0B,CAAC,GAAG;AAC1D,WAAK,MAAM,KAAK,UAAU,GAAG,KAAK,IAAI,SAAS,WAAW,QAAQ,oBAAoB;AACtF,YAAM,MAAM,KAAK,KAAK;AAZxB,0BAAO;AAIP,0BAAgB,WAAoE,EAAE,IAAI,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,GAAG,QAAQ,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,EAAE;AACjL;AAAA,0BAAgB,iBAA0C,oBAAI,IAAI;AAClE;AAAA,0BAAO,SAAQ;AACf;AAAA,0BAAmB,WAAU,oBAAI,IAAwB;AACzD,0BAAU,gBAAwB;AAKhC,WAAK,OAAO,cAAc;AAC1B,WAAK,UAAU,KAAK,MAAM;AAC1B,iBAAW,OAAO,OAAO,KAAK,KAAK,MAAM,QAAQ,EAAG,MAAK,MAAM,SAAS,GAA0B,IAAI;AACtG,aAAO,KAAK,MAAM,UAAU,QAAQ;AAAA,IACtC;AAAA,IAvBA,OAAc,cAAc,MAAuB;AACjD,aAAO;AAAA,IACT;AAAA,IACA,IAAW,OAAO;AAChB,aAAQ,KAAK,YAAgC;AAAA,IAC/C;AAAA,IAEA,IAAW,KAAK;AACd,aAAO,KAAK;AAAA,IACd;AAAA,IAemB,UAAgB;AACjC,WAAK,MAAM;AACX,WAAK,KAAK,MAAM,aAAa,KAAK,KAAK,IAAI,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACnH;AAAA,IACmB,YAAkB;AACnC,WAAK,QAAQ,GAAI,KAAK,OAAO,OAAO,YAAY;AAAA,IAClD;AAAA,IAEO,QAAc;AACnB,MAAC,KAAK,OAAe,KAAK,OAAO,WAAW,KAAK,OAAO,QAAQ,YAAY,KAAK,EAAE;AAAA,IACrF;AAAA,IACO,UAAgB;AACrB,MAAC,KAAK,OAAe,KAAK,OAAO,WAAW,KAAK,GAAG,YAAY,KAAK,OAAO,OAAO;AAAA,IACrF;AAAA,IAEO,OAAa;AAElB,MAAC,KAAK,GAAW,YAAY,KAAK,OAAO,QAAQ;AAEjD,WAAK,OAAO,MAAM,qBAAqB,KAAK,eAAe,KAAK,QAAQ,MAAM;AAE9E,WAAK,OAAO,GAAG,UAAU,KAAK,aAAa,KAAK,QAAQ,MAAM;AAC9D,WAAK,OAAO,GAAG,YAAY,KAAK,aAAa,KAAK,QAAQ,MAAM;AAEhE,WAAK,QAAQ,GAAG,KAAK,gBAAgB,GAAG,KAAK,aAAa,GAAG,KAAK,WAAW,GAAG,KAAK,UAAU,GAAG,KAAK,aAAa;AAEpH,OAAC,KAAK,KAAK,QAAQ,SAAS,KAAK,KAAK,cAAc,OAAO,KAAK,OAAO,QAAQ,eAAe,KAAK,IAAW,QAAW,QAAW,IAAI,GAAG,EAAE,eAAe,KAAK,CAAC;AAClK,cAAQ,OAAO,OAAO,KAAK,OAAO,QAAQ,KAAK,OAAO,KAAK,KAAK,SAAS,CAAC,GAAG,OAAO,KAAK,OAAO,UAAU,KAAK,OAAO,QAAQ,EAAE;AAChI,OAAC,KAAK,KAAK,QAAQ,SAAS,MAAM,MAAM,KAAK,OAAO,KAAK,CAAC;AAC1D,WAAK,QAAQ;AAAA,IACf;AAAA;AAAA,IAQU,eAAqB;AAC7B,WAAK,MAAM,GAAG,YAAY,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACpF;AAAA,IACU,YAAY,SAAoC;AACxD,OAAC,KAAK,cAAc,IAAI,OAAO,MAAM,KAAK,cAAc,IAAI,OAAO,GAAI,KAAa,OAAO,WAAW,OAAO,CAAC,EAAE,IAAI;AAAA,IACtH;AAAA;AAAA,IAEU,qBAA2B;AACnC,WAAK,OAAO,IAAI,yBAAyB,CAAC,SAAU,MAAM,IAAI,IAAI,OAAO,KAAK,OAAO,SAAS,SAAS,YAAY,UAAU,CAAC,MAAM,EAAE,UAAU,QAAQ,EAAE,cAAc,QAAQ,EAAE,YAAY,IAAI,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7N,WAAK,OAAO,GAAG,yBAAyB,KAAK,4BAA4B,KAAK,QAAQ,MAAM;AAAA,IAC9F;AAAA;AAAA,IAEU,eAAe,EAAE,MAAM,OAAO,GAAwC;AAC9E,UAAI,SAAS,SAAU,MAAK,YAAY,OAAO,GAAG;AAAA,eACzC,SAAS,OAAQ,YAAW,WAAW,OAAO,KAAK,OAAO,KAAK,EAAG,MAAK,YAAY,OAA8B;AAAA,IAC5H;AAAA,IACU,YAAY,GAAmD;AACvE,UAAI,EAAE,SAAS,YAAY,KAAK,OAAO,SAAS,EAAE,OAAO,GAA0B,MAAM,SAAS,EAAE,MAAO,QAAO,EAAE,OAAO,KAAK,IAAI,GAAG,EAAE,yBAAyB;AAAA,IACpK;AAAA,IACU,2BAA2B,GAAqD;AACxF,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,kBAAkB,GAAG,CAAC,UAAU,KAAK,OAAO,SAAS,SAAS,YAAY,EAAE,KAAe,MAAM,YAAY,KAAK,MAAM,OAAO,cAAc,QAAQ,UAAU;AACzK,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA;AAAA,IAEU,cAAc,GAAiB;AACvC,UAAI,CAAC,KAAK,aAAc;AACxB,YAAMC,YAAW,KAAK,OAAO,SAAS,SAAS;AAC/C,UAAIA,WAAU;AAAQ,iBAAS,MAAMA,UAAS,QAAQ,IAAI,MAAM,GAAG,KAAK,GAAG,IAAK,KAAI,KAAKA,UAAS,CAAC,EAAE,UAAW,QAAO,MAAM,KAAK,OAAO,MAAM,iBAAiB;AAAA;AAChK,WAAK,MAAM,MAAM,iBAAiB;AAAA,IACpC;AAAA;AAAA,IAEO,KAAoC,QAA2B,GAAQ,MAAkB,SAAS,MAAM,OAAO,SAAS,EAAE,MAAM,SAAS,CAAC,UAAU,EAAE,KAAK,KAAK,MAAM,aAAa,KAAK,OAAO,KAAK,OAAO,OAAO,MAAM,GAAG,OAAO,CAAC,KAAK,OAAO,OAAO,MAAM,GAAS;AAC1Q,YAAM,WAAW,KAAK,KAAK,MAAM,CAAC,GAAQ,IAAS,OAAO,SAAS,MAAM,QAAQ,KAAK,QAAQ,IAAI,IAAI,IAAI,GAAG,KAAK,QAAQ,OAAO,IAAI,GAAG,KAAK,GAAG,QAAQ,QAAQ,IAAI,oBAAoB,MAAM,IAAI,EAAE,IAAI,kBAAkB,EAAE,KAAK,KAAK,KAAK,OAAO,OAAO,MAAM,GAAG,KAAK,KAAK,QAAQ,UAAU,EAAE;AAChS,WAAK,QAAQ,IAAI,IAAI,IAAI,GAAG,SAAS,SAAS,QAAQ,MAAM,KAAK,IAAI,KAAK,QAAQ,IAAI,MAAM,KAAK,OAAO,MAAM,UAAU,MAAM,IAAI,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC;AAAA,IACtK;AAAA;AAAA,EACF;AAnGE,gBADoB,UACG;;;ACPlB,MAAM,mBAAmB;AACzB,MAAM,mBAAmB;AACzB,MAAM,iBAAiB;AACvB,MAAM,kBAAkB;AAOxB,MAAM,gBAAgB;AAGtB,MAAM,oBAAoB;AAG1B,MAAM,kBAAkB;AAGxB,MAAM,mBAAmB;AAGzB,MAAM,oBAAoB;AAG1B,MAAM,mBAAmB;AAGzB,MAAM,mBAAmB;AAMzB,MAAM,YAAoC;AAAA;AAAA,IAE/C,KAAK;AAAA,IAAmB,KAAK;AAAA,IAAa,KAAK;AAAA,IAAoB,KAAK;AAAA,IACxE,KAAK;AAAA,IAAe,MAAM;AAAA,IAAc,KAAK;AAAA,IAAa,KAAK;AAAA,IAAa,KAAK;AAAA,IACjF,OAAO;AAAA,IAAc,OAAO;AAAA,IAAe,MAAM;AAAA,IAAc,KAAK;AAAA,IACpE,IAAI;AAAA,IAAc,KAAK;AAAA,IAAe,MAAM;AAAA,IAAiC,KAAK;AAAA;AAAA,IAElF,KAAK;AAAA,IAAc,KAAK;AAAA,IAAa,KAAK;AAAA,IAAa,MAAM;AAAA,IAAc,KAAK;AAAA,IAChF,KAAK;AAAA,IAAa,KAAK;AAAA,IAAa,MAAM;AAAA,IAAa,KAAK;AAAA,IAAkB,MAAM;AAAA,IACpF,KAAK;AAAA,IAAc,MAAM;AAAA,IAAc,MAAM;AAAA,IAAc,KAAK;AAAA,IAAc,MAAM;AAAA,IACpF,KAAK;AAAA,IAAc,KAAK;AAAA,IAAc,MAAM;AAAA,IAAc,KAAK;AAAA;AAAA,IAE/D,KAAK;AAAA,IAAc,MAAM;AAAA,IAAc,KAAK;AAAA,IAAa,MAAM;AAAA,IAAc,KAAK;AAAA,IAClF,KAAK;AAAA,IAAa,KAAK;AAAA,IAAiB,KAAK;AAAA,IAAc,MAAM;AAAA,IAAc,MAAM;AAAA,IACrF,KAAK;AAAA,IAAgB,MAAM;AAAA,IAAc,MAAM;AAAA;AAAA,IAE/C,KAAK;AAAA,IAAmB,KAAK;AAAA,IAAc,IAAI;AAAA,IAAiB,KAAK;AAAA,IACrE,MAAM;AAAA,IAAoB,KAAK;AAAA,IAAmB,MAAM;AAAA,IAAa,KAAK;AAAA,IAC1E,MAAM;AAAA,IACN,KAAK;AAAA,IAA4B,MAAM;AAAA,IACvC,KAAK;AAAA,IAAiC,MAAM;AAAA,IAC5C,KAAK;AAAA,IAAmB,KAAK;AAAA,IAAuB,MAAM;AAAA,EAC5D;;;ACtDA,MAAMC,OAAM,gBAAgB,OAAO,SAAS,SAAS;AAArD,MACE,MAAMA,MAAK;AADb,MAEE,KAAK,KAAK,aAAa;AAFzB,MAGE,SAAU,KAAsF;AAG3F,MAAI,aAAa;AACjB,MAAI,aAAa;AACjB,MAAI,aAAa;AACjB,MAAI,UAAU;AACd,MAAI,YAAY;AAChB,MAAI,cAAc;AAClB,MAAI,YAAY;AAChB,MAAI,QAAQ;AACZ,MAAI,WAAW;AACf,MAAI,WAAW;AACf,MAAI,UAAU;AACd,MAAI,UAAU;AACd,MAAI,YAAY;AAEhB,MAAI,cAAuB;AAC3B,MAAI,kBAA2B;AAC/B,MAAI,iBAA0B;AAC9B,MAAI,mBAA4B;AAChC,MAAI,aAAsB;AAE1B,MAAI,SAAS;AACb,MAAI,YAAY;AAChB,MAAI,cAAc;AAElB,MAAM,yBAAyB,QAASA,MAAa,MAAM,WAAW,mBAAmB;AACzF,MAAM,cAAc,QAAQA,SAAQ,iBAAiBA,QAAO,uBAAuBA,KAAI;AACvF,MAAM,gBAAgB,QAAQA,SAAQ,kBAAkBA,QAAQ,KAAiD,kBAAoBA,KAAY,iBAAiBA,KAAI,oBAAqBA,KAAY,cAAe;AAEtN,MAAM,mBAAmB,CAAC,QAAQ,kGAAkG,QAAQA,QAAO,gBAAgBA,QAAOA,KAAI,WAAW,KAAK,EAAE,OAAO;AAG9M,MAAI,QAAQ,YAAY,QAAQ,QAAQ;AAEtC,UAAM,cAAc,CAAC,QAAsB,WAA4B,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,UAAU,EAAE,OAAO,GAAG,WAAW;AAEvI,iBAAa,OAAO,aAAa;AACjC,iBAAa,OAAO,aAAa;AAEjC,cAAU,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,gBAAgB;AAChE,kBAAc,OAAO,OAAO,KAAK,CAAC,MAAM,EAAE,UAAU,cAAc,EAAE,UAAU,eAAe;AAC7F,gBAAY,eAAe,CAAC;AAE5B,uBAAmB,iBAAiB,YAAY,OAAO,QAAQ,UAAU,KAAK,YAAY,OAAO,QAAQ,eAAe;AAAA,EAC1H;AAGA,MAAI,MAA2C;AAE7C,gCAAe,WAAW,KAAK,EAAE;AACjC,gCAAe,WAAW,KAAK,EAAE;AAEjC,iBAAa,iBAAiB,KAAK,EAAE;AACrC,0BAAY,cAAc,KAAK,EAAE;AACjC,kCAAgB,gBAAgB,KAAK,EAAE;AACvC,gBAAY,eAAe,CAAC;AAC5B,gBAAY,UAAU,KAAK,EAAE,KAAK,CAAC,aAAa,CAAC,cAAc,CAAC;AAChE,YAAQ,iCAAiC,KAAK,EAAE;AAEhD,eAAW,SAAS,KAAK,EAAE;AAC3B,eAAW,SAAS,KAAK,EAAE;AAE3B,cAAU,QAAQ,KAAK,EAAE;AACzB,cAAU,QAAQ,KAAK,EAAE,KAAM,aAAa,iBAAiB,CAAC,UAAU,KAAK,EAAE;AAC/E,gBAAY,UAAU,KAAK,EAAE,KAAK,CAAC;AAEnC,kBAAc,GAAG,MAAM,YAAY,IAAI,CAAC,KAAK;AAC7C,sBAAkB,GAAG,MAAM,2BAA2B,IAAI,CAAC,KAAK;AAChE,uBAAmB,iBAAiB,GAAG,MAAM,yBAAyB,IAAI,CAAC,KAAK;AAChF,iBAAa,GAAG,MAAM,iBAAiB,IAAI,CAAC,MAAM,gBAAgB,KAAK,EAAE,KAAK,UAAU,KAAK,EAAE,IAAI,SAAS;AAAA,EAC9G;AAGA,WAAS,aAAa,WAAW;AACjC,cAAY,QAAQ,cAAc,aAAa,WAAW,OAAO;AACjE,gBAAc,YAAY;;;ACtFnB,WAAS,UAAU,KAAmB;AAC3C,WAAO,MAAM,GAAG,KAAK,CAAC,MAAM,OAAO,GAAG,KAAK,QAAQ;AAAA,EACrD;AAEO,WAAS,QAAQ,QAAa,WAAW,GAAW;AACzD,WAAO,UAAU,MAAM,IAAI,SAAS;AAAA,EACtC;AAGO,WAAS,eAAe,SAAc,QAAa,UAAU,MAAc;AAChF,UAAM,MAAM,SAAS,WAAW,GAAG,IAAI,QAAS,WAAW,OAAO,IAAI,MAAO,MAAM,IAAI;AACvF,WAAO,OAAO,UAAU,WAAW,UAAU,MAAM,SAAS,UAAU;AAAA,EACxE;AAEO,WAAS,cAAc,OAAe,QAAQ,gBAAgB,KAAK,KAAK,GAAG,QAAQ,EAAE,GAAG,GAAG,GAAG,GAAG,GAAG,IAAI,GAAG,IAAI,GAAG,KAAK,GAAG,KAAK,GAAG,IAAK,GAAqC;AACjL,QAAI,CAAC,MAAO,QAAO;AACnB,WAAO,MACJ,YAAY,EACZ,MAAM,EAAE,EACR,OAAO,CAAC,KAAK,KAAK,GAAG,QAAQ;AAC5B,YAAM,OAAO,MAAM,GAAG,KAAK,GACzBC,QAAO,MAAM,IAAI,IAAI,CAAC,CAAC,KAAK;AAC9B,aAAO,OAAO,OAAOA,QAAO,CAAC,OAAO;AAAA,IACtC,GAAG,CAAC;AAAA,EACR;AAGO,WAAS,QAA4B,IAAI,GAAG,EAAE,KAAK,KAAK,KAAK,GAAc;AAChF,UAAM,IAAI,OAAO,KAAK,OAAO,QAAQ,CAAC,KAAK,OAAO,MAAM,IAAI,IAAI,QAAQ,OAAO,KAAK,QAAQ,CAAC;AAC7F,WAAO,MAAM,KAAK,CAAC,EAAE,QAAQ,EAAE,GAAG,GAAG;AAAA,EACvC;AAEA,MAAM,cAAc,oBAAI,IAAsB;AAGvC,WAAS,UAAU,KAAU,OAAY,MAAgC,YAAY,OAAO,MAAW;AAC5G,QAAI;AACJ,QAAI,MAAM,QAAQ,KAAK,EAAG,QAAO;AAAA,SAC5B;AACH,YAAM,MAAM,GAAG,MAAM,GAAG,IAAI,MAAM,GAAG,IAAI,MAAM,IAAI;AACnD,UAAI,YAAY,IAAI,GAAG,EAAG,QAAO,YAAY,IAAI,GAAG;AAAA,UAC/C,aAAY,IAAI,KAAM,OAAO,MAAM,KAAK,EAAE,QAAQ,KAAK,OAAO,MAAM,MAAM,MAAM,OAAO,MAAM,IAAI,IAAI,EAAE,GAAG,CAAC,GAAG,MAAM,MAAM,MAAM,IAAI,MAAM,IAAI,CAAE;AAAA,IACvJ;AACA,QAAI,MAAM,MAAM,GAAG,IAAI,KAAK,OAAO,CAAC,GAAG,GAAG,MAAO,KAAK,IAAI,IAAI,GAAG,IAAI,KAAK,IAAI,KAAK,CAAC,IAAI,GAAG,IAAI,IAAI,GAAI,CAAC,IAAI,KAAK,QAAQ,GAAG;AAC5H,UAAM,OAAO,QAAQ,aAAa,IAAI;AACtC,WAAO,KAAK,QAAQ,MAAM,KAAK,UAAU,KAAK,SAAS,MAAM,GAAG,KAAK,KAAK,SAAS,CAAC,CAAC;AAAA,EACvF;;;ACnCO,MAAM,YAAN,cAAwB,SAA2B;AAAA,IAMxD,YAAY,MAAkB,UAA0B;AAEtD,YAAM,UAAU,KAAK,MAAM,SAAS,SAAS,cAAc,cAAc,KAAK,MAAM,IAAI,GAAG,cAAc,CAAC,WAAW,eAAe,KAAK,MAAM,IAAI,GAAG,cAAc,eAAe,KAAK,MAAM,IAAI;AAElM,YAAM,MAAM;AAAA;AAAA,QAEV,QAAQ,aAAa,KAAK,MAAM,IAAI;AAAA,QAAG,OAAO,cAAc,KAAK,MAAM,IAAI;AAAA,QAAG,cAAc,WAAW,KAAK,MAAM,IAAI;AAAA;AAAA,QAEtH,kBAAkB,CAAC,WAAW,yBAAyB,KAAK,CAAC,KAAK,MAAM,MAAM;AAAA,QAAyB,YAAY,CAAC,WAAW,mBAAmB;AAAA;AAAA,QAElJ,QAAQ,CAAC;AAAA,QAAS,UAAU;AAAA,QAAM,MAAM;AAAA,QAAM,aAAa,CAAC;AAAA,QAAS,SAAS;AAAA,QAAM,aAAa;AAAA,QACjG,UAAU;AAAA,QAAM,cAAc;AAAA,QAAM,yBAAyB;AAAA,QAAM,SAAS;AAAA,QAAM,QAAQ;AAAA,QAAM,MAAM;AAAA;AAAA,QAEtG,YAAY;AAAA,QAAa,aAAa,CAAC,WAAW;AAAA,QAAa,aAAa;AAAA;AAAA,QAE5E,gBAAgB;AAAA,QAAa,kBAAkB;AAAA,QAAa,mBAAmB;AAAA,QAAa,mBAAmB;AAAA,QAAa,aAAa;AAAA,QAAa,WAAW;AAAA;AAAA,QAEjK,YAAY;AAAA,QAAM,cAAc;AAAA,QAAM,OAAO;AAAA,QAAM,SAAS;AAAA,QAAM,SAAS;AAAA,QAC3E,SAAS;AAAA,QAAM,UAAU;AAAA,QAAM,QAAQ;AAAA,QAAM,UAAU;AAAA,QAAM,YAAY,CAAC;AAAA,QAAS,aAAa,CAAC;AAAA,QACjG,gBAAgB;AAAA,QAAM,YAAY;AAAA,QAAM,SAAS;AAAA,QAAM,gBAAgB;AAAA,QAAM,QAAQ;AAAA,QAAM,aAAa;AAAA;AAAA,QAExG,cAAc;AAAA,QAAM,qBAAqB;AAAA,QAAM,WAAW;AAAA,QAAM,UAAU;AAAA,QAAa,eAAe;AAAA,QAAM,cAAc;AAAA,QAAM,GAAG;AAAA,MACrI,CAAC;AAvBH,0BAAU,gBAAwB;AAyKlC;AAAA,0BAAU,aAA8B;AASxC,0BAAU,gBAAiC;AAkD3C,0BAAQ,eAAc;AACtB,0BAAQ,eAAc;AAoJtB,0BAAQ;AAMR,0BAAQ;AAvWN,WAAK,MAAM,OAAO,YAAY;AAAA,IAChC;AAAA,IA5BA,OAAuB,cAAc,KAAsB;AACzD,aAAO,iBAAiB,KAAK,GAAG,KAAK,iBAAiB,KAAK,GAAG,KAAK,CAAC,EAAE,CAAC,eAAe,UAAU,YAAY,+BAA+B,KAAK,eAAe,KAAK,GAAG;AAAA,IACzK;AAAA;AAAA;AAAA;AAAA;AAAA,IA+BmB,UAAgB;AACjC,WAAK,GAAG,iBAAiB,aAAa,KAAK,kBAAkB,KAAK,QAAQ,EAAE;AAC5E,WAAK,OAAO,GAAG,cAAc,KAAK,iBAAiB,KAAK,QAAQ,MAAM;AAAA,IACxE;AAAA,IACmB,kBAAwB;AACzC,WAAK,GAAG,iBAAiB,cAAc,KAAK,oBAAoB,KAAK,QAAQ,EAAE;AAC/E,WAAK,GAAG,iBAAiB,WAAW,KAAK,iBAAiB,KAAK,QAAQ,EAAE;AACzE,WAAK,GAAG,iBAAiB,UAAU,KAAK,gBAAgB,KAAK,QAAQ,EAAE;AACvE,WAAK,OAAO,IAAI,qBAAqB,MAAM,KAAK,GAAG,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvF,WAAK,OAAO,GAAG,sBAAsB,KAAK,yBAAyB,KAAK,QAAQ,MAAM;AAAA,IACxF;AAAA,IACmB,eAAqB;AACtC,WAAK,GAAG,iBAAiB,kBAAkB,KAAK,wBAAwB,KAAK,QAAQ,EAAE;AAAA,IACzF;AAAA,IACmB,aAAmB;AACpC,WAAK,GAAG,iBAAiB,QAAQ,KAAK,cAAc,KAAK,QAAQ,EAAE;AACnE,WAAK,GAAG,iBAAiB,SAAS,KAAK,eAAe,KAAK,QAAQ,EAAE;AACrE,WAAK,OAAO,GAAG,iBAAiB,KAAK,oBAAoB,KAAK,QAAQ,MAAM;AAAA,IAC9E;AAAA,IACmB,YAAkB;AACnC,WAAK,GAAG,iBAAiB,SAAS,KAAK,eAAe,KAAK,QAAQ,EAAE;AAAA,IACvE;AAAA;AAAA,IAEmB,eAAqB;AACtC,YAAM,aAAa;AACnB,WAAK,cAAc;AAEnB,YAAM,aAAa,CAAC,aAAa,YAAY,WAAW,SAAS,WAAW,SAAS;AACrF,iBAAW,KAAK,WAAY,MAAK,GAAG,iBAAiB,GAAG,KAAK,kBAAkB,KAAK,QAAQ,MAAM;AAClG,WAAK,GAAG,iBAAiB,SAAS,KAAK,mBAAmB,KAAK,QAAQ,MAAM;AAC7E,WAAK,GAAG,iBAAiB,WAAW,KAAK,qBAAqB,KAAK,QAAQ,MAAM;AACjF,WAAK,GAAG,iBAAiB,WAAW,KAAK,qBAAqB,KAAK,QAAQ,MAAM;AACjF,WAAK,GAAG,iBAAiB,WAAW,KAAK,qBAAqB,KAAK,QAAQ,MAAM;AACjF,WAAK,GAAG,iBAAiB,kBAAkB,KAAK,4BAA4B,KAAK,QAAQ,MAAM;AAC/F,WAAK,GAAG,iBAAiB,cAAc,KAAK,wBAAwB,KAAK,QAAQ,MAAM;AACvF,WAAK,GAAG,iBAAiB,WAAW,KAAK,qBAAqB,KAAK,QAAQ,MAAM;AACjF,WAAK,GAAG,iBAAiB,kBAAkB,KAAK,4BAA4B,KAAK,QAAQ,MAAM;AAAA,IACjG;AAAA;AAAA,IAEU,aAAmB;AAC3B,WAAK,GAAG,iBAAiB,gBAAgB,KAAK,sBAAsB,KAAK,QAAQ,EAAE;AACnF,WAAK,OAAO,GAAG,iBAAiB,KAAK,oBAAoB,KAAK,QAAQ,MAAM;AAAA,IAC9E;AAAA,IACU,YAAkB;AAE1B,WAAK,OAAO,GAAG,gBAAgB,KAAK,mBAAmB,KAAK,QAAQ,MAAM;AAAA,IAC5E;AAAA,IACU,mBAAyB;AACjC,WAAK,GAAG,iBAAiB,cAAc,KAAK,oBAAoB,KAAK,QAAQ,EAAE;AAC/E,WAAK,OAAO,GAAG,uBAAuB,KAAK,0BAA0B,KAAK,QAAQ,MAAM;AAAA,IAC1F;AAAA;AAAA,IAEU,uBAA6B;AACrC,WAAK,GAAG,iBAAiB,yBAAyB,KAAK,kBAAkB,KAAK,QAAQ,EAAE;AACxF,WAAK,GAAG,iBAAiB,yBAAyB,KAAK,kBAAkB,KAAK,QAAQ,EAAE;AACxF,WAAK,OAAO,GAAG,2BAA2B,KAAK,8BAA8B,KAAK,QAAQ,MAAM;AAAA,IAClG;AAAA,IACU,iBAAuB;AAC/B,WAAK,GAAG,iBAAiB,yBAAyB,KAAK,+BAA+B,KAAK,QAAQ,MAAM;AACzG,WAAK,GAAG,iBAAiB,uBAAuB,KAAK,6BAA6B,KAAK,QAAQ,MAAM;AACrG,WAAK,KAAK,MAAM,MAAM,mBAAmB,KAAK,0BAA0B,KAAK,QAAQ,MAAM;AAC3F,WAAK,OAAO,GAAG,qBAAqB,KAAK,wBAAwB,KAAK,QAAQ,MAAM;AAAA,IACtF;AAAA;AAAA,IAEU,iBAAiB,MAAuB;AAChD,WAAK,OAAO,IAAI,iBAAiB,IAAI,SAAS,CAAC,SAAS,YAAY,KAAK,IAAI,MAAM,MAAM,KAAK,OAAO,OAAO,GAAG,KAAK,YAAY,CAAyB,QAAQ,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5L,MAAC,KAAK,GAAW,GAAG,KAAK,YAAY,CAAC,QAAQ,GAAG,iBAAiB,UAAU,MAAM,KAAK,qBAAqB,IAAI,GAAG,KAAK,QAAQ,MAAM;AACtI,WAAK,OAAO,GAAG,iBAAiB,IAAI,SAAS,CAAC,MAAM,KAAK,yBAAyB,GAAG,IAAI,GAAG,KAAK,QAAQ,MAAM;AAAA,IACjH;AAAA,IACU,uBAA6B;AACrC,WAAK,iBAAiB,MAAM;AAAA,IAC9B;AAAA,IACU,wBAA8B;AACtC,WAAK,iBAAiB,OAAO;AAAA,IAC/B;AAAA,IACU,wBAA8B;AACtC,WAAK,iBAAiB,OAAO;AAAA,IAC/B;AAAA,IACU,kBAAwB;AAChC,WAAK,OAAO,GAAG,sBAAsB,KAAK,yBAAyB,KAAK,QAAQ,MAAM;AAAA,IACxF;AAAA;AAAA,IAEU,gBAAsB;AAC9B,sBAAgB,KAAK,IAAI,KAAK,0BAA0B,EAAE,YAAY,MAAM,WAAW,MAAM,SAAS,MAAM,GAAG,KAAK,MAAM;AAAA,IAC5H;AAAA;AAAA,IAEU,cAA2C,KAAQC,UAAS,OAAa;AACjF,WAAK,OAAO,GAAG,UAAU,GAAG,IAAwB,CAAC,MAAM,KAAK,sBAAsB,GAAG,KAAKA,OAAM,GAAG,KAAK,QAAQ,MAAM;AAAA,IAC5H;AAAA,IACU,aAAmB;AAC3B,WAAK,cAAc,QAAQ;AAAA,IAC7B;AAAA,IACU,eAAqB;AAC7B,WAAK,cAAc,YAAY,IAAI;AAAA,IACrC;AAAA,IACU,WAAiB;AACzB,WAAK,cAAc,QAAQ,IAAI;AAAA,IACjC;AAAA,IACU,cAAoB;AAC5B,WAAK,cAAc,SAAS;AAAA,IAC9B;AAAA,IACU,kBAAwB;AAChC,WAAK,cAAc,eAAe,IAAI;AAAA,IACxC;AAAA,IACU,kBAAwB;AAChC,WAAK,cAAc,aAAa;AAAA,IAClC;AAAA,IACU,eAAqB;AAC7B,WAAK,cAAc,YAAY,IAAI;AAAA,IACrC;AAAA,IACU,mBAAyB;AACjC,WAAK,cAAc,cAAc;AAAA,IACnC;AAAA,IACU,8BAAoC;AAC5C,WAAK,cAAc,2BAA2B,IAAI;AAClD,WAAK,OAAO,MAAM,iCAAiC,KAAK,iBAAiB;AAAA,IAC3E;AAAA;AAAA,IAEU,cAAoB;AAC5B,WAAK,OAAO,GAAG,kBAAkB,KAAK,qBAAqB,KAAK,QAAQ,MAAM;AAAA,IAChF;AAAA,IACU,aAAmB;AAC3B,WAAK,OAAO,GAAG,iBAAiB,KAAK,oBAAoB,KAAK,QAAQ,MAAM;AAAA,IAC9E;AAAA;AAAA,IAEU,gBAAgB,MAAiB,OAAQ,KAAK,GAAW,GAAG,KAAK,YAAY,CAAC,QAAQ,GAAS;AACvG,UAAI,KAAM,YAAW,KAAK,CAAC,YAAY,aAAa,EAAG,MAAK,iBAAiB,GAAG,MAAM,KAAK,mBAAmB,MAAM,IAAI,GAAG,KAAK,QAAQ,MAAM;AAC9I,UAAI,KAAM,MAAK,mBAAmB,MAAM,MAAM,IAAI;AAAA,IACpD;AAAA,IACU,iBAAuB;AAC/B,WAAK,gBAAgB,MAAM;AAAA,IAC7B;AAAA,IACU,kBAAwB;AAChC,WAAK,gBAAgB,OAAO;AAAA,IAC9B;AAAA,IACU,kBAAwB;AAChC,WAAK,gBAAgB,OAAO;AAAA,IAC9B;AAAA,IAGU,gBAAsB;AAC9B,YAAM,WAAW,MAAM;AACrB,cAAM,QAAQ,KAAK,MAAM,OAAO,WAAW,CAAC,KAAK,eAAe,KAAK,OAAO,MAAM,mBAAmB,YAAY,KAAK,IAAI,QAAQ,KAAK,OAAO,OAAO,WAAW,KAAK,OAAO,MAAM,gBAAgB,GAAG,IAAI,KAAK,OAAO,OAAO,UAAU,CAAC;AACvO,YAAI,KAAK,aAAa,KAAK,cAAc,MAAO,MAAK,UAAU,oBAAoB,aAAa,KAAK,uBAAuB,KAAK,QAAQ,EAAE;AAC3I,SAAC,KAAK,YAAY,QAAQ,iBAAiB,aAAa,KAAK,uBAAuB,KAAK,QAAQ,EAAE,GAAG,KAAK,sBAAsB,EAAE,QAAQ,MAAM,CAAC;AAAA,MACpJ;AACA,WAAK,OAAO,GAAG,0BAA0B,UAAU,KAAK,QAAQ,MAAM,GAAG,KAAK,OAAO,GAAG,qBAAqB,UAAU,KAAK,QAAQ,MAAM;AAAA,IAC5I;AAAA,IAEU,eAAe,OAAwB;AAC/C,UAAI,KAAK,gBAAgB,KAAK,iBAAiB,MAAO,MAAK,aAAa,oBAAoB,aAAa,KAAK,wBAAwB,KAAK,QAAQ,EAAE;AACrJ,OAAC,KAAK,eAAe,OAAO,iBAAiB,aAAa,KAAK,wBAAwB,KAAK,QAAQ,EAAE,GAAG,KAAK,uBAAuB,EAAE,QAAQ,MAAM,CAAC;AAAA,IACxJ;AAAA;AAAA,IAEU,WAAiB;AACzB,WAAK,OAAO,GAAG,eAAe,KAAK,kBAAkB,KAAK,QAAQ,MAAM;AACxE,WAAK,OAAO,MAAM,iBAAiB,KAAK,gBAAgB,KAAK,QAAQ,MAAM;AAAA,IAC7E;AAAA;AAAA,IAEU,mBAAyB;AACjC,WAAK,OAAO,GAAG,yBAAyB,KAAK,2BAA2B,KAAK,QAAQ,MAAM;AAAA,IAC7F;AAAA,IACU,0BAAgC;AACxC,WAAK,OAAO,GAAG,gCAAgC,KAAK,kCAAkC,KAAK,QAAQ,MAAM;AAAA,IAC3G;AAAA,IACU,gBAAsB;AAC9B,WAAK,OAAO,GAAG,sBAAsB,KAAK,wBAAwB,KAAK,QAAQ,MAAM;AAAA,IACvF;AAAA;AAAA;AAAA;AAAA;AAAA,IAKU,mBAAyB;AACjC,YAAM,EAAE,OAAO,GAAG,QAAQ,GAAG,IAAI,KAAK;AACtC,SAAG,QAAQ,GAAG,YAAY;AAC1B,YAAM,OAAQ,GAAG,WAAW,KAAK,GAAG,UAAY,GAAG,WAAW,KAAK,GAAG,SAAU;AAChF,SAAG,WAAW,KAAK,GAAG;AACtB,QAAE,SAAS,KAAK,GAAG;AACnB,SAAG,QAAQ,GAAG,UAAU,GAAG,aAAa,GAAG,iBAAiB,GAAG,UAAU,GAAG,iBAAiB;AAAA,IAC/F;AAAA,IACU,qBAA2B;AACnC,YAAM,EAAE,QAAQ,IAAI,UAAU,KAAK,OAAO,EAAE,IAAI,KAAK;AACrD,QAAE,cAAc,KAAK,GAAG;AACxB,UAAI,GAAG;AACL,YAAI,GAAG,SAAS,QAAQ;AACtB,gBAAM,MAAM,GAAG,SAAS,IAAI,GAAG,SAAS,SAAS,CAAC;AAClD,aAAG,cAAc,MAAM,GAAG,SAAS,MAAM,CAAC,KAAK,IAAI;AACnD,YAAE,OAAO,MAAM,EAAE,eAAe,IAAI;AAAA,QACtC,MAAO,GAAE,OAAO,EAAE,GAAG,cAAc;AAAA,UAChC,MAAK,OAAO,OAAO,QAAQ,KAAK,GAAG,gBAAgB,KAAK,GAAG;AAAA,IAClE;AAAA,IACU,kBAAwB;AAChC,WAAK,OAAO,OAAO,UAAU;AAC7B,YAAM,MAAO,KAAK,OAAO,OAAO,SAAS,KAAK,GAAG,MAAO;AAAA,IAC1D;AAAA,IACU,iBAAuB;AAC/B,WAAK,OAAO,OAAO,UAAU;AAAA,IAC/B;AAAA,IAGU,yBAA+B;AACvC,UAAI,KAAK,GAAG,eAAe,KAAK,YAAa,CAAC,KAAK,cAAc,GAAK,KAAK,cAAc,KAAK,GAAG;AACjG,YAAMC,QAAO,KAAK,OAAO,OAAO;AAChC,WAAK,KAAK,OAAO,OAAO,WAAW,KAAK,GAAG,cAAc,SAAU,QAAO,MAAM,KAAK,OAAO,OAAO,SAAS;AAC5G,MAAAA,UAAS,WAAY,KAAK,OAAO,OAAO,SAAS,QAASA,QAAO,KAAK,KAAK,GAAG,WAAWA,SAAQ,EAAE,KAAK,cAAc,MAAM,KAAK,OAAO,OAAO,SAAS;AAAA,IAC1J;AAAA,IACU,eAAqB;AAC7B,WAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA,IACU,gBAAsB;AAC9B,WAAK,OAAO,MAAM,SAAS;AAC3B,YAAM,MAAO,KAAK,OAAO,OAAO,SAAS,KAAK,GAAG,MAAO;AACxD,WAAK,OAAO,OAAO,UAAU;AAAA,IAC/B;AAAA,IACU,gBAAsB;AAC9B,WAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,MAAM,SAAS;AAAA,IACxD;AAAA;AAAA,IAEU,gBAAgB,GAA0C;AAClE,UAAI,EAAE,YAAa,KAAK,SAAS,UAAU,KAAK,GAAG,YAAY,EAAE,KAAK,EAAI;AAC1E,WAAK,GAAG,MAAM,EAAE;AAChB,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,wBAAwB,GAAkD;AAClF,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,cAAc,GAAG,CAAC,MAAM,YAAY,KAAK,MAAM,GAAG,MAAM,YAAY,KAAK,MAAM,MAAM;AAC7F,YAAI,EAAE,QAAQ,OAAQ,EAAE,QAAQ,IAAM,GAAE,OAAO,KAAK,IAAI;AACxD,aAAK,GAAG,cAAc,MAAM,KAAK,EAAE,OAAO,GAAG;AAAA,MAC/C,CAAC;AACD,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,mBAAmB,GAA6C;AACxE,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,kBAAkB,GAAG,OAAO,EAAE,QAAQ,KAAK,GAAG,MAAM,IAAI,KAAK,GAAG,KAAK,IAAI,QAAQ,CAACC,OAAM,KAAK,KAAK,IAAIA,IAAG,SAAS,IAAI,CAAC,GAAG,KAAK;AACzI,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA;AAAA,IAEU,uBAA6B;AACrC,WAAK,OAAO,MAAM,SAAS,KAAK,GAAG,SAAS;AAC5C,WAAK,OAAO,MAAM,QAAQ,KAAK,GAAG;AAAA,IACpC;AAAA,IACU,qBAA2B;AACnC,WAAK,OAAO,MAAM,eAAe,KAAK,GAAG;AAAA,IAC3C;AAAA,IACU,mBAAyB;AACjC,WAAK,OAAO,MAAM,mBAAmB;AAAA,IACvC;AAAA,IACU,mBAAyB;AACjC,WAAK,OAAO,MAAM,mBAAmB;AAAA,IACvC;AAAA,IACU,yBAAyB,SAAyB;AAC1D,WAAK,OAAO,MAAM,aAAa,UAAU,kBAAkB,MAAM,KAAK,KAAK;AAAA,IAC7E;AAAA,IACU,gCAAsC;AAC9C,WAAK,OAAO,MAAM,aAAa;AAAA,IACjC;AAAA,IACU,8BAAoC;AAC5C,WAAK,OAAO,MAAM,aAAa;AAAA,IACjC;AAAA,IACU,qBAAqB,MAAiB,OAAO,KAAK,MAAM,OAAO,GAAG,KAAK,YAAY,CAAyB,QAAQ,GAAS;AACrI,WAAK,OAAO,MAAM,UAAU,IAAI,OAAO,IAAI,YAAY,KAAK,IAAI,MAAM,UAAU,IAAI;AAAA,IACtF;AAAA,IACU,yBAAyB,WAAmC;AACpE,iBAAW,KAAK,WAAW;AACzB,cAAM,EAAE,OAAAC,QAAO,UAAAC,UAAS,IAAI,KAAK;AACjC,YAAI,EAAE,SAAS,aAAa;AAC1B,gBAAM,QAAQ,CAAC,GAAG,EAAE,YAAY,GAAG,EAAE,YAAY;AACjD,cAAI,MAAM,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,OAAO,QAAQ,EAAG,CAAAD,OAAM,UAAU,MAAM,WAAW,KAAK,EAAE,CAAC;AAChG,cAAI,MAAM,KAAK,CAAC,EAAE,UAAU,GAAG,MAAM,OAAO,OAAO,EAAG,CAAAA,OAAM,SAAS,MAAM,UAAU,KAAK,EAAE,CAAC;AAAA,QAC/F,WAAW,EAAE,SAAS,gBAAgB,CAAC,EAAE,cAAe;AACxD,gBAAQ,EAAE,eAAe;AAAA,UACvB,KAAK;AACH,mBAAO,MAAMA,OAAM,SAAU,KAAK,GAAwB;AAAA,UAC5D,KAAK;AACH,mBAAO,MAAMA,OAAM,WAAW,KAAK,GAAG;AAAA,UACxC,KAAK;AACH,mBAAO,MAAMA,OAAM,OAAO,KAAK,GAAG;AAAA,UACpC,KAAK;AACH,mBAAO,MAAMA,OAAM,UAAU,KAAK,GAAG;AAAA,UACvC,KAAK;AACH,mBAAO,MAAMA,OAAM,cAAc,KAAK,GAAG;AAAA,UAC3C,KAAK;AACH,mBAAO,MAAMA,OAAM,WAAW,KAAK,GAAG;AAAA,UACxC,KAAK;AAAA,UACL,KAAK;AACH,mBAAO,MAAMA,OAAM,cAAc,KAAK,GAAG;AAAA,UAC3C,KAAK;AACH,mBAAO,MAAMA,OAAM,eAAe,KAAK,GAAG,gBAAgB,KAAK,GAAG,aAAa,EAAE,aAAa;AAAA,UAChG,KAAK;AACH,mBAAO,MAAMA,OAAM,0BAA0B,KAAK,GAAG,2BAA2B,KAAK,GAAG,aAAa,EAAE,aAAa;AAAA,UACtH,KAAK;AACH,mBAAO,MAAOA,OAAM,QAAQ,KAAK,GAAG,OAASC,UAAS,eAAe,KAAK,GAAG;AAAA,QACjF;AAAA,MACF;AAAA,IACF;AAAA;AAAA,IAEU,mBAAmB,GAA6C;AACxE,UAAI,EAAE,SAAU;AAChB,UAAI,EAAE,QAAQ,KAAK,EAAE,QAAQ,IAAK,GAAE,OAAO,KAAK,IAAI;AACpD,WAAK,GAAG,SAAS,MAAM,GAAG,EAAE,QAAQ,KAAK,CAAC;AAC1C,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,kBAAkB,GAA4C;AACtE,UAAI,EAAE,SAAU;AAChB,WAAK,GAAG,QAAQ,EAAE;AAClB,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,yBAAyB,GAAmD;AACpF,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,kBAAkB,GAAG,MAAO,KAAK,GAAG,eAAe,EAAE,KAAM;AACrE,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,6BAA6B,GAAuD;AAC5F,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,kBAAkB,GAAG,MAAO,EAAE,QAAS,KAAK,GAAwB,wBAAwB,GAAG,MAAM,KAAK,KAAK,MAAM,IAAI,SAAS,4BAA4B,KAAK,MAAM,SAAS,qBAAqB,GAAG,MAAM,KAAK,KAAK,MAAM,GAAI,IAAI;AAClP,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,uBAAuB,GAAiD;AAChF,UAAI,EAAE,SAAU;AAChB,OAAC,EAAE,QAAQ,gBAAgB,KAAK,EAAE,IAAI,eAAe,KAAK,EAAE,IAAI,MAAM,KAAK,KAAK,MAAM;AACtF,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,yBAAyB,GAAyD,MAAuB;AACjH,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,kBAAkB,GAAG,CAAC,OAAO,KAAK,OAAO,OAAO,GAAG,KAAK,YAAY,CAAyB,QAAQ,MAAM;AACnH,YAAK,EAAE,QAAmB,KAAK,QAAQ;AACrC,0BAAgB,KAAK,IAAI,MAAM,EAAE,OAAiB,MAAM,IAAI;AAC5D,eAAK,qBAAqB,MAAM,IAAI;AAAA,QACtC;AAAA,MACF,CAAC;AACD,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,wBAAwB,GAAkD;AAClF,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,kBAAkB,GAAG,MAAM;AACnC,YAAI,EAAE,SAAS,KAAK,MAAM,OAAO,WAAW,UAAU,KAAK,MAAM,MAAM,qBAAqB,GAAI,SAAQ,MAAO,KAAK,MAAM,OAAO,mBAAmB,KAAK,IAAI,GAAG,YAAY,KAAK,MAAM,SAAS,QAAQ,KAAK,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,MAAM,OAAO,UAAU,CAAC,CAAE;AAC3R,YAAI,KAAK,UAAW,MAAK,UAAU,OAAO,EAAE,QAAQ,YAAY;AAChE,aAAK,OAAO,MAAM,cAAc,EAAE;AAAA,MACpC,CAAC;AACD,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,sBAAsB,GAAsB,KAAaJ,SAAiB,OAAO,IAAI,YAAY,GAAS;AAClH,UAAI,EAAE,YAAa,QAAQ,YAAY,UAAW,KAAK,GAAwB,QAAQ,EAAE,KAAK,EAAI;AAClG,MAAAA,UAAS,KAAK,GAAG,gBAAgB,MAAM,QAAQ,EAAE,KAAK,CAAC,IAAI,EAAE,QAAQ,KAAK,GAAG,aAAa,MAAM,EAAE,KAAK,IAAI,KAAK,GAAG,gBAAgB,IAAI;AACvI,UAAI,QAAQ,cAAe,MAAK,GAAG,gBAAgB,sBAAsB,QAAQ,EAAE,KAAK,CAAC;AACzF,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,oBAAoB,GAA8C;AAC1E,UAAI,EAAE,YAAY,cAAc,MAAM,KAAK,KAAK,GAAG,iBAAiB,QAAQ,CAAC,GAAG,EAAE,KAAK,EAAG;AAC1F,OAAC,KAAK,kBAAL,KAAK,gBAAkB,mBAAsC,EAAE,WAAW,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,GAAG,EAAE,KAAK,IAAI,YAAY,CAAC,MAAM,SAAS,UAAU,CAAC,GAAG,YAAY,CAAC,IAAI,MAAM,SAAS,IAAI,GAAG,QAAW,QAAW,KAAK,GAAG,UAAU,CAAC,IAAI,aAAa,cAAc,qBAAqB,SAAS,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,GAAG,GAAG,KAAK,EAAE,EAAE,CAAC,IAAG,EAAE,cAAc,KAAK;AAC1Y,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,mBAAmB,GAA6C;AACxE,UAAI,EAAE,YAAY,aAAa,MAAM,KAAK,KAAK,GAAG,iBAAiB,OAAO,CAAC,GAAG,EAAE,KAAK,EAAG;AACxF,OAAC,KAAK,iBAAL,KAAK,eAAiB,mBAAkB,EAAE,WAAW,KAAK,IAAI,QAAQ,CAAC,MAAM,GAAG,SAAS,EAAE,GAAG,CAAC,IAAI,EAAE,IAAI,IAAI,EAAE,KAAK,IAAI,EAAE,OAAO,IAAI,EAAE,OAAO,IAAI,YAAY,CAAC,MAAM,SAAS,SAAS,CAAC,GAAG,YAAY,CAAC,IAAI,MAAM,SAAS,IAAI,GAAG,QAAW,QAAW,KAAK,GAAG,UAAU,CAAC,IAAI,aAAa,cAAc,oBAAoB,SAAS,GAAG,SAAS,GAAG,GAAG,CAAC,IAAI,GAAG,IAAI,IAAI,GAAG,KAAK,IAAI,GAAG,OAAO,IAAI,GAAG,OAAO,EAAE,EAAE,CAAC,IAAG,EAAE,cAAc,KAAK;AAC3a,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACU,iBAAiB,GAA2C;AACpE,UAAI,EAAE,SAAU;AAChB,WAAK,KAAK,kBAAkB,GAAG,CAAC,WAAW,KAAK,OAAO,OAAO,aAAa,EAAE,SAAS,SAAS,WAAW,KAAK,MAAM,OAAO,cAAc,SAAS,IAAI,SAAS,SAAS,CAAC,IAAI,EAAE;AAChL,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA;AAAA,IAEU,mBAAyB;AACjC,WAAK,OAAO,OAAO,aAAa,KAAK,GAAG;AACxC,WAAK,OAAO,OAAO,eAAe,KAAK,GAAG;AAC1C,YAAM,OAAQ,KAAK,OAAO,OAAO,WAAW,KAAK,GAAG,UAAY,KAAK,OAAO,OAAO,WAAW,KAAK,GAAG,SAAU;AAAA,IAClH;AAAA,IACU,6BAAmC;AAC3C,MAAC,KAAK,OAAO,OAAO,aAAa,KAAK,OAAO,SAAS,UAAU,KAAK,OAAO,QAAQ,aAAa,GAAK,KAAK,OAAO,OAAO,cAAc,KAAK,OAAO,SAAS,UAAU,KAAK,OAAO,QAAQ,cAAc;AACxM,WAAK,OAAO,OAAO,UAAU,KAAK,OAAO,OAAO,WAAW,KAAK,GAAG,cAAc;AACjF,WAAK,iBAAiB;AACtB,WAAK,OAAO,OAAO,iBAAiB;AAAA,IACtC;AAAA,IACU,yBAA+B;AACvC,WAAK,OAAO,OAAO,aAAa;AAAA,IAClC;AAAA,IACU,sBAA4B;AACpC,WAAK,OAAO,OAAO,UAAU;AAAA,IAC/B;AAAA,IACU,6BAAmC;AAC3C,WAAK,OAAO,OAAO,iBAAiB;AAAA,IACtC;AAAA,IACU,sBAA4B;AACpC,WAAK,OAAO,OAAO,UAAU;AAAA,IAC/B;AAAA,IACU,sBAA4B;AACpC,WAAK,OAAO,OAAO,UAAU;AAAA,IAC/B;AAAA,IACU,sBAA4B;AACpC,WAAK,OAAO,OAAO,QAAQ;AAC3B,WAAK,OAAO,OAAO,UAAU,KAAK,OAAO,OAAO,UAAU;AAAA,IAC5D;AAAA,IACU,kBAAkB,GAAQ,SAAS,GAAG,QAAc;AAC5D,UAAI,UAAU,WAAW,KAAK,GAAI,QAAO,KAAK,KAAK,IAAI,EAAE,SAAS,SAAS,OAAO,YAAY,OAAO,4BAA4B,OAAO,GAAG,OAAO,GAAG,SAAS,IAAI;AAClK,WAAK,OAAO,OAAO,QAAQ,KAAK,GAAG,SAAS,EAAE,SAAU,MAAM,CAAC,KAAK,KAAM,GAAG,QAAQ;AACrF,WAAK,OAAO,OAAO,UAAU;AAAA,IAC/B;AAAA,IACU,mBAAmB,MAAiB,MAAWK,QAAO,OAAa;AAC3E,WAAK,OAAO,OAAO,GAAG,KAAK,YAAY,CAAyB,QAAQ,IAAI,MAAM,UAAU,OAAO,KAAK,MAAM,CAAC,MAAO,SAAS,SAAS,EAAE,SAAS,eAAe,EAAE,SAAS,aAAa,IAAK;AAC/L,eAAS,WAAW,KAAK,eAAe,KAAK,OAAO,SAAS,SAAS,kBAAkB,KAAK,qBAAqB,IAAI;AACtH,OAACA,SAAQ,QAAQ,MAAO,KAAK,OAAO,OAAO,UAAU,IAAI,OAAO,IAAI,KAAK,OAAO,MAAM,UAAU,IAAI,OAAO,CAAE;AAC7G,OAACA,SAAQ,SAAS,UAAU,QAAQ,MAAO,KAAK,OAAO,OAAO,cAAc,KAAK,OAAO,MAAM,WAAY;AAAA,IAC5G;AAAA,IACU,qBAAqB,OAAO,KAAK,GAAG,YAAkB;AAC9D,YAAM,QAAQ,MAAM,UAAU,KAAK,KAAK,MAAM,CAAC,MAAM,EAAE,SAAS,UAAU,KAAK;AAC/E,UAAI,CAAC,MAAO,QAAO,MAAO,KAAK,OAAO,SAAS,SAAS,cAAc,CAAC,GAAK,KAAK,OAAO,MAAM,iBAAiB;AAC/G,UAAI,MAAM,SAAS,WAAY,OAAM,OAAO;AAC5C,YAAM,UAAU,MAAO,KAAK,OAAO,SAAS,SAAS,cAAc,MAAM,MAAM,SAAS,MAAM,KAAK,MAAM,MAAM,CAAC,SAAc,EAAE,OAAO,IAAI,MAAM,WAAW,IAAI,WAAW,SAAS,CAAC,EAAE,EAAE,IAAI,CAAC;AAC9L,YAAM,KAAK,SAAS,QAAQ,IAAI,MAAM,iBAAiB,aAAa,SAAS,EAAE,GAAG,KAAK,QAAQ,IAAI,MAAM,KAAK,CAAC,GAAG,KAAK,eAAe,KAAK;AAAA,IAC7I;AAAA,IACU,sBAAsB,GAA+C,SAAS,OAAO,QAAQ,GAAG,QAAkC;AAC1I,UAAI,CAAC,UAAW,SAAS,YAAY,KAAK,IAAI,QAAQ,OAAO,KAAK,OAAO,OAAO,UAAU,MAAM,KAAK,OAAO,MAAM,iBAAmB,MAAK,OAAO,OAAO,YAAY,OAAO,aAAa,CAAC,KAAK;AAAA,IAChM;AAAA,IACU,uBAAuB,GAA+C,QAAQ,GAAG,QAA4B,MAAM,OAAO,aAAa,CAAC,KAAK,MAAY;AACjK,WAAK,OAAO,MAAM,iBAAiB,MAAM,KAAK,OAAO,SAAS,SAAS,aAAa,UAAU,CAAC,MAAM,EAAE,cAAc,IAAI,SAAS,KAAK,KAAK;AAAA,IAC9I;AAAA;AAAA,IAEU,0BAA0B,GAAqD;AACvF,WAAK,GAAG,eAAe,EAAE;AAAA,IAC3B;AAAA,IACU,iCAAiC,GAA4D;AACrG,WAAK,GAAG,sBAAsB,EAAE;AAAA,IAClC;AAAA,IACU,uBAAuB,GAAkD;AACjF,WAAK,GAAG,YAAY,EAAE;AAAA,IACxB;AAAA;AAAA,IAEU,kBAAkB,GAAkB;AAC5C,WAAK,MAAM,OAAO,mBAAmB;AACrC,WAAK,OAAO,SAAS,mBAAmB,CAAC;AAAA,IAC3C;AAAA,IACU,eAAe,GAAkB;AACzC,WAAK,OAAO,SAAS,OAAO;AAAA,IAC9B;AAAA;AAAA,IAEmB,YAAkB;AACnC,WAAK,GAAG,gBAAgB,KAAK;AAAA,IAC/B;AAAA,EACF;AA3dE,gBADW,WACY,YAAmB;;;ACGrC,MAAM,aAAN,MAAiB;AAAA;AAAA,IAsBtB,YAAY,QAA0B,OAAmB;AApBzD;AAAA,0BAAQ,MAAK,IAAI,gBAAgB;AACjC,0BAAgB,UAAS,KAAK,GAAG;AACjC,0BAAO,SAAQ,oBAAI,IAAkB;AAErC;AAAA,0BAAO;AACP,0BAAO;AACP;AAAA,0BAAO;AAQP;AAAA,0BAAO,WAAkH,EAAE,UAAU,KAAK;AAC1I,0BAAO;AAEP;AAAA;AAAA,0BAAO,OAAwB,CAAC;AAChC;AAAA,0BAAO,gBAAe;AAoFtB,0BAAO,SAAQ,CAAsB,IAAQ,SAAS,UAAU,YAAY,IAAI,CAAC,MAAM,KAAK,OAAO,GAAG,SAAS,CAAC,MAAM,CAAC;AAevH,0BAAO,WAAoB,CAAC,UAAU;AA+DtC,0BAAQ;AA/JN,sBAAgB,MAAM,KAAK,KAAK;AAChC,YAAM,OAAO,UAAM,eAAe,MAAM,GAAG,MAAM,KAAK;AACtD,WAAK,SAAS,SAAS,SAAS,KAAK,GAAG,EAAE,mBAAmB,MAAM,cAAc,MAAM,OAAO,MAAM,CAAC;AACrG,WAAK,QAAQ,SAAoB,gBAAgB,WAAW,GAAG,EAAE,OAAO,MAAM,CAAC;AAC/E,WAAK,MAAM,MAAM,cAAc,CAAC,OAAQ,KAAK,QAAQ,aAAa,GAAK,KAAK,QAAQ,cAAc,IAAI,GAAK,KAAK,QAAQ,QAAQ,IAAI,GAAK,KAAK,QAAQ,YAAY,IAAI,IAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClM,WAAK,QAAQ,SAAS,EAAE,QAAQ,SAAS,OAAO,KAAK,MAAM,CAAC,GAAG,OAAO,KAAK,OAAO,QAAQ,KAAK,QAAQ,UAAU,SAAS,OAAO,KAAK,QAAQ,CAAC,GAAG,MAAM,MAAM,CAAC,CAAC,GAAG,UAAU,CAAC,GAAG,MAAM,MAAM,WAAW,SAAS,QAAQ,eAAe,SAAS,MAAM,SAAS,GAAG,WAAW,SAAS,KAAK,GAAG,iBAAiB,SAAS,KAAK,EAAE,GAAG,EAAE,OAAO,MAAM,CAAC;AACnV,WAAK,MAAM,IAAI,QAAQ,CAAC,MAAM,MAAM,CAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAChE,WAAK,IAAK,KAAK,SAAS,KAAK,OAAO,SAAS,CAAE,GAAG,OAAO,KAAK,OAAO;AACrE,WAAK,cAAc,CAAC,GAAG,KAAK,KAAK;AAAA,IACnC;AAAA,IAvBA,IAAW,WAAW;AACpB,aAAO,KAAK,OAAO;AAAA,IACrB;AAAA;AAAA,IACA,IAAW,UAAU;AACnB,aAAO,KAAK,OAAO;AAAA,IACrB;AAAA,IAoBA,MAAc,OAAsB;AAClC,WAAK,aAAa,GAAG,KAAK,gBAAgB,GAAG,KAAK,iBAAiB;AACnE,YAAM,UAAU,CAAC,GAAG,KAAK,cAAc,CAAC;AACxC,WAAK,MAAM,MAAM,cAAc,MAAO,CAAC,KAAK,MAAM,MAAM,SAAS,KAAK,cAAc,CAAC,IAAI,KAAK,MAAM,MAAM,gBAAgB,MAAM,KAAK,cAAc,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AACzM,YAAM,UAAU,CAAC,GAAG,KAAK,cAAc,CAAC;AACxC,MAAAC,YAAW,MAAO,KAAK,eAAe,OAAQ,GAAG,KAAK,MAAM;AAAA,IAC9D;AAAA,IAEO,aAAa,QAAQ,aAAa,WAAW,GAAS;AAC3D,UAAI,CAAC,KAAK,QAAQ,MAAO,YAAW,QAAQ,MAAO,MAAK,OAAO,IAAI;AACnE,YAAM,QAAQ,KAAK,QAAQ,SAAS,MAAM,OAAO,CAAC,SAAS,KAAK,OAAO,eAAe,QAAQ,CAAC,KAAK,OAAO,WAAW,SAAS,KAAK,QAAQ,KAAK,KAAK,OAAO,EAAE,IAAI,CAAC,SAAS,IAAI,KAAK,IAAI,CAAC;AAC3L,UAAI,MAAO,OAAM,QAAQ,CAAC,SAAS,KAAK,QAAQ,CAAC,GAAG,MAAM,QAAQ,CAAC,SAAS,KAAK,OAAO,CAAC;AAAA,IAC3F;AAAA,IACO,kBAAwB;AAC7B,iBAAW,QAAQ,CAAC,GAAG,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ,EAAG,MAAK,QAAQ;AAAA,IACtE;AAAA,IACO,OAAO,MAAU,QAAoB;AAC1C,aAAO,KAAK,OAAO,eAAe,QAAQ,CAAC,KAAK,OAAO,WAAW,SAAS,KAAK,QAAQ,KAAK,KAAK,WAAW,IAAI,KAAK,MAAM,MAAM,EAAE,MAAM,GAAG;AAAA,IAC/I;AAAA,IAGO,KAAK,UAAuB;AACjC,aAAO,KAAK,MAAM,IAAI,QAAQ;AAAA,IAChC;AAAA,IAEU,kBAAwB;AAChC,WAAK,MAAM,GAAG,cAAc,KAAK,YAAY,EAAE,SAAS,MAAM,QAAQ,KAAK,QAAQ,MAAM,KAAK,CAAC;AAC/F,WAAK,MAAM,GAAG,kBAAkB,KAAK,YAAY,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AACvF,WAAK,MAAM,GAAG,sBAAsB,KAAK,YAAY,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC7F;AAAA,IACU,aAAmB;AAC3B,YAAM,EAAE,KAAK,QAAQ,IAAI,KAAK,MAAM;AACpC,UAAI,KAAK,MAAM,SAAS,UAAW,QAAO,KAAK,QAAQ;AACvD,UAAI,eAAuC,aAAa,KAAK,KAAK,KAAK,OAAO,SAAS,SAAS,GAC9F,iBAAgC,eAAe,MAAM;AACvD,UAAI,CAAC,gBAAgB,CAAC,cAAc,SAAS,KAAK,MAAM,MAAM,OAAO;AACnE,mBAAW,UAAU,SAAS;AAC5B,yBAAe,aAAa,KAAK,OAAO,KAAK,KAAK,OAAO,SAAS,SAAS;AAC3E,cAAI,cAAc;AAChB,6BAAiB,OAAO;AACxB;AAAA,UACF;AAAA,QACF;AACF,MAAC,OAAO,KAAK,MAAM,KAAK,EAAE,MAAM,KAAO,OAAO,KAAK,MAAM,KAAK,EAAE,UAAU,MAAM,OAAO;AACvF,WAAK,QAAQ,gBAAgB,MAAS;AACtC,UAAI,mBAAmB,OAAO,CAAC,KAAK,MAAM,SAAS,QAAS,SAAQ,MAAO,KAAK,MAAM,OAAO,MAAM,cAAgB;AAAA,IACrH;AAAA,IACO,QAAQ,YAA6B,WAAiB;AAC3D,oBAAc,KAAK,MAAM,KAAK,gBAAgB,KAAK,MAAM,OAAO,IAAI,UAAU,IAAI,GAAG,MAAM;AAAA,IAC7F;AAAA,IACA,IAAW,YAAgC;AACzC,aAAO,KAAK,QAAQ,QAAQ,UAAU;AAAA,IACxC;AAAA,IACA,IAAW,aAAsB;AAC/B,aAAO,KAAK,MAAM,YAAY,KAAK,MAAM,KAAK;AAAA,IAChD;AAAA,IAEQ,mBAAyB;AAC/B,0BAAoB,KAAK,MAAM,UAAU,eAAgB,CAAC,UAAW,KAAK,MAAM,0BAA0B,MAAM,gBAAiB,KAAK,MAAM;AAC5I,0BAAoB,KAAK,MAAM,WAAW,CAAC,UAAW,KAAK,MAAM,oBAAoB,MAAM,gBAAiB,KAAK,MAAM;AACvH,oBAAc,KAAK,MAAM,WAAW,MAAM,OAAO,KAAK,MAAM,WAAW,WAAW,YAAY,KAAK,MAAM,SAAS,CAAC,GAAG,KAAK,MAAM;AACjI,oBAAc,KAAK,MAAM,iBAAiB,MAAM,OAAO,KAAK,MAAM,WAAW,iBAAiB,YAAY,KAAK,MAAM,eAAe,CAAC,GAAG,KAAK,MAAM;AAAA,IACrJ;AAAA,IAEO,cAAcC,QAAsB;AACzC,WAAK,MAAM,aAAa,CAAC,KAAK,QAAQ,IAAIA,UAAS,KAAK,MAAM,aAAa;AAC3E,YAAM,KAAK,KAAK,MAAM;AACtB,WAAK,KAAK,uBAAuB,KAAK,OAAO,GAAG,KAAK,KAAK,OAAO,IAAI,cAAc,OAAO,IAAI,YAAY,OAAO,IAAI,YAAY,OAAO,IAAI,iBAAiB,OAAO,KAAK,eAAe,IAAI,KAAK,OAAO;AAAA,IAC1M;AAAA;AAAA,IAGO,OAAO,MAAW,OAAiC,SAASC,QAAiC,UAAU,MAAY;AACxH,WAAK,IAAI,MAAM,MAAM,OAAO,GAAGA,WAAU,UAAU,SAAS,SAAU,SAAS,WAAW,WAAW,CAAC,KAAK,OAAO,UAAW,KAAK,KAAK,iBAAiB,GAAG,QAAQ,KAAK,KAAK,iBAAiB,GAAG,QAAQ,IAAI,KAAKA,WAAU,QAAQ,KAAK,OAAO,UAAU,OAAO,MAAMA,MAAK,IAAIA,SAAQ,wBAAwB,EAAE,KAAK,WAAW,CAAC;AAAA,IACrU;AAAA,IAEO,IAAI,MAAW,OAAiC,OAAO,UAAU,OAAa;AACnF,UAAI,CAAC,KAAK,OAAO,MAAO;AACxB,UAAI,SAAS,QAAS,QAAO,WAAW,CAAC,KAAK,OAAO,UAAU,QAAQ,KAAK,qCAAqC,IAAI,IAAI,QAAQ,MAAM,oCAAoC,IAAI;AAAA,UAC1K,UAAS,SAAS,QAAQ,KAAK,6BAA6B,IAAI,IAAI,QAAQ,IAAI,yBAAyB,IAAI;AAAA,IACpH;AAAA,IAEO,KAAK,IAAY,SAAc,MAAM,KAAgC,KAAK,MAAM,SAAS,UAAU,MAAM,aAAa,MAAY;AACvI,YAAM,IAAI,cAAc,IAAI,YAAY,IAAI,EAAE,QAAQ,SAAS,WAAW,CAAC,CAAC;AAAA,IAC9E;AAAA;AAAA,IAGO,eAAe,KAAa,QAAkC;AACnE,YAAM,WAAW,KAAK,QAAQ,GAAG,KAAK,CAAC;AACvC,WAAK,QAAQ,GAAG,IAAI,EAAE,GAAG,QAAQ,GAAG,UAAU,IAAI,KAAY,IAAI,OAAO,GAAG;AAC5E,WAAK,OAAO,GAAG,WAAW,GAAG,IAAW,MAAM,KAAK,QAAQ,GAAG,KAAK,KAAK,QAAQ,GAAG,EAAE,OAAO,OAAO,OAAO,KAAK,QAAQ,GAAG,EAAE,KAAK,OAAO,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACtK;AAAA,IACO,iBAAiB,KAAmB;AACzC,aAAO,KAAK,QAAQ,GAAG;AAAA,IACzB;AAAA,IACO,UAAU,OAAe,MAAmB;AACjD,YAAM,SAAS,KAAK,QAAQ,EAAE;AAC9B,UAAI,CAAC,UAAW,CAAC,OAAO,OAAO,KAAK,QAAQ,KAAK,KAAK,UAAU,EAAI;AACpE,kBAAY,MAAM;AAChB,YAAI,OAAO,OAAO,QAAQ;AACxB,gBAAM,OAAO,EAAE,OAAO,KAAK,OAAO,UAAU,KAAK,OAAO,SAAS;AACjE,qBAAW,QAAQ,OAAO,OAAO;AAC/B,kBAAM,MAAM,QAAQ,MAAM,KAAK,IAAW;AAC1C,iBAAK,OAAO,WAAW,QAAQ,MAAM,KAAK,MAAa,CAAC,GAAG,IAAI,KAAK,OAAO,cAAc,QAAQ,MAAM,KAAK,MAAc,OAAkB,KAAK,SAAS,EAAE,IAAI,KAAK,OAAO,cAAc,QAAQ,MAAM,KAAK,MAAc,OAAkB,KAAK,SAAS,EAAE,IAAI,QAAQ,MAAM,KAAK,MAAa,KAAK,KAAK;AAAA,UAC7S;AAAA,QACF;AACA,eAAO,KAAK,GAAG,IAAI,GAAG,OAAO,UAAU,KAAK,KAAK,oBAAoB,GAAG,OAAO,OAAO,MAAM,GAAG,OAAO,SAAS,KAAK,KAAK,iBAAiB,GAAG,SAAS,OAAO,OAAO,MAAM,MAAM,IAAI,OAAO,MAAM,OAAO,IAAI,OAAO,MAAM,WAAW,oBAAoB,OAAO,KAAK;AAAA,MACtQ,GAAG,OAAO,SAAS,OAAO,EAAE;AAAA,IAC9B;AAAA,IACO,YAAY,MAAuB;AACxC,aAAO,KAAK,OAAO,mBAAmB,KAAK,CAAC,MAAM,SAAS,KAAK,KAAK,WAAW,IAAI,GAAG,CAAC,KAAM,KAAK,WAAW,eAAe,KAAK,CAAE,KAAK,MAAM,SAAiB,KAAK,MAAM,GAAG,EAAE,IAAI,CAAE,IAAK,QAAQ;AAAA,IACrM;AAAA,IAEO,SAAS,KAAa,IAAc,QAAQ,IAAI,SAA+C,MAAM,SAAS,KAAK,QAAQ;AAChI,eAAS,KAAK,OAAO,KAAK,KAAK,IAAI,OAAO,QAAQ,QAAQ,UAAU,KAAK,MAAM,SAAS,CAAC;AAAA,IAC3F;AAAA,IACO,SAAS,KAAa,IAAc,QAAQ,IAAI,SAAS,MAAM,SAAS,KAAK,QAAQ;AAC1F,eAAS,KAAK,OAAO,KAAK,KAAK,IAAI,OAAO,QAAQ,QAAQ,UAAU,KAAK,MAAM,SAAS,CAAC;AAAA,IAC3F;AAAA,IACO,QAAQ,KAAa,IAAc,SAAS,KAAK,QAAc;AACpE,cAAQ,KAAK,OAAO,KAAK,KAAK,IAAI,QAAQ,UAAU,KAAK,MAAM,SAAS,CAAC;AAAA,IAC3E;AAAA,IACO,cAAc,KAAmB;AACtC,oBAAc,KAAK,OAAO,KAAK,GAAG;AAAA,IACpC;AAAA,IACO,iBAAuB;AAC5B,UAAI,KAAK,YAAa,YAAW,KAAK,KAAK,YAAY,KAAK,EAAG,GAAE,WAAW,KAAK,OAAO,EAAE,KAAK,cAAc,CAAC;AAAA,IAChH;AAAA,IAEO,WAAW,MAAuB;AACvC,aAAO,KAAK,MAAM,UAAU,UAAU,SAAS,aAAa,WAAW,SAAS,aAAa,kBAAkB,MAAM,GAAG,CAAC,EAAE;AAAA,IAC7H;AAAA,IAKO,SAAS,OAAe,MAAM,OAAO,WAAW,OAAO;AAC5D,aAAO,OAAO,WAAW,KAAK,MAAM,kBAAkB,KAAK,MAAM,WAAW,iBAAiB,KAAK,KAAK,WAAW,KAAK,MAAM,kBAAkB,KAAK,MAAM,WAAW,cAAc,KAAK;AAAA,IAC1L;AAAA,IAEO,iBAAiB,KAAuB,MAAM,MAAwB;AAC3E,aAAO,CAAC,QAAQ,OAAO,EAAE,QAAQ,CAAC,OAAO,IAAI,iBAAiB,IAAI,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC,GAAG,OAAO,KAAK,gBAAgB,EAAE,QAAQ,IAAI,CAAC,GAAG;AAAA,IACnK;AAAA,IACO,gBAAkD,EAAE,QAAQ,IAAI,GAAa;AAClF,qBAAe,oBAAoB,KAAK,aAAa,eAAe,OAAO,IAAI,YAAY,IAAI,eAAe,CAAC,CAAC;AAAA,IAClH;AAAA,IACO,eAAiD,EAAE,QAAQ,IAAI,GAAa;AACjF,qBAAe,oBAAoB,IAAI,QAAQ,OAAO,0BAA0B,IAAI,MAAM,OAAO;AAAA,IACnG;AAAA,IAEO,kBAAkB,QAA2B,SAA2C,YAAY,CAAC,MAAM,KAAK,WAAW,SAAS,UAAW,KAAK,SAAS,KAAO,GAAG,GAAG,OAAO,OAAO,OAAO,MAAM,GAAS;AACnN,YAAM,OAAO,WAAW,KAAK,UAAU,KAAK,OAAO,QAAQ,OAAO,wBAAwB,UAAU,IAAI,SAAS,OAAO,EAAE,KAAK,OAAO,uBAAuB,QAAQ,MAAM,UAAU,IAAwB,EAAE,CAAC;AAAA,IAClN;AAAA,IAEO,UAAU;AACf,WAAK,eAAe;AACpB,WAAK,cAAc,EAAE;AACrB,WAAK,GAAG,MAAM,8CAA8C,GAAG,KAAK,eAAe;AACnF,WAAK,gBAAgB,GAAG,KAAK,MAAM,KAAK,QAAQ;AAChD,YAAM,KAAK,KAAK,OAAO,gBAAgB,WAAW,KAAK,MAAM,OAAO,IAAI,KAAK,MAAM;AACnF,WAAK,MAAM,QAAQ,GAAG,KAAK,OAAO,QAAQ,GAAG,KAAK,MAAM,QAAQ;AAChE,aAAO,KAAK,IAAI,GAAG;AAAA,IACrB;AAAA,EACF;;;AC1MO,MAAM,aAAN,MAAiB;AAAA,IAAjB;AAEL;AAAA,0BAAQ,QAAmB,CAAC;AAC5B,0BAAQ,WAAU;AAAA;AAAA,IAElB,MAAc,SAAwB;AACpC,UAAI,KAAK,QAAS;AAClB,WAAK,UAAU;AACf,aAAO,KAAK,KAAK,SAAS,GAAG;AAC3B,cAAM,MAAM,KAAK,KAAK,MAAM;AAC5B,YAAI,IAAK,KAAI,YAAY,IAAI,QAAQ,EAAE,SAAS,OAAO,WAAW,MAAM,SAAS,MAAM,CAAC,KAAK,IAAI,UAAU,GAAG,IAAI,QAAQ,MAAM,IAAI,KAAK,CAAC;AAAA,MAC5I;AACA,WAAK,UAAU;AAAA,IACjB;AAAA,IAEO,IAAa,MAAwB,IAAa,WAAqB,SAAgD;AAC5H,aAAO,IAAI,QAAQ,CAAC,aAAa,KAAK,KAAK,KAAK,EAAE,MAAM,IAAI,SAAS,WAAW,QAAQ,CAAC,GAAG,KAAK,OAAO,EAAE;AAAA,IAC5G;AAAA,IAEO,KAAK,IAAqB;AAC/B,YAAM,MAAM,KAAK,KAAK,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AAClD,WAAK,KAAK,GAAG,GAAG,QAAQ,EAAE,SAAS,OAAO,WAAW,MAAM,SAAS,KAAK,CAAC;AAC1E,aAAO,QAAQ,MAAM,KAAK,KAAK,OAAO,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC;AAAA,IACpD;AAAA,IAEO,OAAO,IAAqB;AACjC,YAAM,MAAM,KAAK,KAAK,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AAC7C,aAAO,QAAQ,IAAI,YAAY,OAAO,CAAC,CAAC,KAAK;AAAA,IAC/C;AAAA,IAEO,UAAgB;AACrB,iBAAW,OAAO,KAAK,KAAM,KAAI,QAAQ,EAAE,SAAS,OAAO,WAAW,MAAM,SAAS,KAAK,CAAC;AAC3F,WAAK,OAAO,CAAC;AAAA,IACf;AAAA,IAEO,YAAkB;AACvB,iBAAW,OAAO,KAAK,KAAM,KAAI,YAAY;AAAA,IAC/C;AAAA,EACF;;;ACrDA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACOO,MAAe,WAAf,cAA2D,aAA4B;AAAA,IAK5F,WAAkB,UAAU;AAC1B,aAAO,KAAK,SAAS,KAAK;AAAA,IAC5B;AAAA,IACA,WAAkB,WAAW;AAC3B,aAAQ,KAAK,UAAU,KAAK;AAAA,IAC9B;AAAA,IACA,IAAW,OAAO;AAChB,aAAQ,KAAK,YAAmB;AAAA,IAClC;AAAA,IAEA,YAAY,MAAkB,SAA6B,QAAQ,KAAK,QAAe,WAAW,QAAQ,GAAGC,QAAe;AAC1H,WAAK,KAAK,WAAW,QAAQ,GAAG,QAAQ;AACxC,YAAM,MAAM,QAAQA,MAAK;AACzB,YAAM,OAAO,WAAW;AACxB,WAAK,KAAK,OAAO,MAAM,MAAM,MAAO,KAAK,SAAS,QAAQ,KAAK,KAAK,QAAQ,IAAI,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC3G,WAAK,MAAM,IAAI,WAAW,UAAU,IAAI;AAAA,IAC1C;AAAA,IAEmB,UAAgB;AACjC,WAAK,QAAQ;AACb,WAAK,KAAK,MAAM,aAAa,KAAK,OAAO,IAAI,KAAK,QAAQ,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClI;AAAA,IACmB,YAAkB;AACnC,WAAK,UAAU;AACf,WAAK,KAAK,MAAM,OAAQ,KAAK,YAAmB,QAAQ;AAAA,IAC1D;AAAA,IAEO,QAAe;AAAA,IAAC;AAAA,IAChB,UAAiB;AAAA,IAAC;AAAA,IAClB,OAAa;AAClB,WAAK,aAAa;AAAA,IACpB;AAAA,IAEU,eAAqB;AAC7B,WAAK,KAAK,KAAK,uBAAuB,GAAG,KAAK,SAAS,aAAa,IAAK,KAAK,YAAmB,QAAiC,IAAI,IAAW,CAAC;AAAA,IACpJ;AAAA;AAAA,EACF;AAxCE,gBADoB,UACG;AACvB,gBAFoB,UAEG,UAAkB;AACzC,gBAHoB,UAGG,UAAkB;AACzC,gBAJoB,UAIG;AAuClB,MAAe,UAAf,cAA4F,aAA4B;AAAA,IAI7H,WAAkB,UAAU;AAC1B,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IACA,WAAkB,WAAW;AAC3B,aAAQ,KAAK,UAAU,MAAM,KAAK;AAAA,IACpC;AAAA,IACA,IAAW,OAAO;AAChB,aAAQ,KAAK,YAAoB,KAAK;AAAA,IACxC;AAAA,IACA,IAAW,OAAa;AACtB,aAAO,KAAK,KAAK,KAAY,KAAK,YAAoB,KAAK,QAAQ;AAAA,IACrE;AAAA,IAEA,YAAY,MAAkB,QAAgBA,QAAe;AAC3D,YAAM,MAAM,QAAQA,MAAK;AACzB,YAAM,OAAQ,WAAW,KAAK,WAAW,MAAM,WAAW;AAC1D,WAAK,KAAK,OAAO,MAAM,MAAM,MAAO,KAAK,SAAS,QAAQ,KAAK,KAAK,QAAQ,IAAI,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC7G;AAAA,IAEmB,UAAgB;AAAA,IAAC;AAAA;AAAA,IACjB,YAAkB;AACnC,WAAK,UAAU;AAAA,IACjB;AAAA,IAEO,QAAe;AAAA,IAAC;AAAA,IAChB,UAAiB;AAAA,IAAC;AAAA,IAClB,OAAc;AAAA,IAAC;AAAA,EACxB;AA9BE,gBADoB,SACG;AACvB,gBAFoB,SAEG;AACvB,gBAHoB,SAGG;;;ACnDlB,MAAM,iBAAiC;;;ACMvC,MAAM,eAAN,cAA2B,SAAwC;AAAA,IAKxE,YAAY,MAAkB,SAAS,KAAK,OAAO,UAAU;AAC3D,YAAM,MAAM,QAAQ,EAAE,SAAS,GAAG,CAAC;AAAA,IACrC;AAAA,IAEgB,OAAa;AAE3B,WAAK,KAAK,OAAO,GAAG,YAAY,KAAK,QAAQ,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEhF,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,OAAO,EAAE,MAAM,GAAyC;AAChE,UAAI,OAAO;AACT,aAAK,KAAK,KAAK,uBAAuB,GAAG,UAAU;AACnD,aAAK,KAAK,eAAe;AACzB,aAAK,MAAM,UAAU,UAAU,IAAI,oBAAoB;AACvD,gBAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK;AAC/C,aAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACzC,aAAK,KAAK,IAAI,kBAAkB,aAAa,SAAS,EAAE;AACxD,aAAK,KAAK,KAAK,eAAe,GAAG,kBAAkB,QAAQ;AAC3D,aAAK,KAAK,OAAO,uDAAuD,QAAQ,IAAI;AAAA,MACtF,OAAO;AACL,aAAK,MAAM,UAAU,UAAU,OAAO,oBAAoB;AAC1D,aAAK,KAAK,IAAI,kBAAkB,gBAAgB,OAAO;AACvD,aAAK,KAAK,KAAK,eAAe,GAAG,kBAAkB;AAAA,MACrD;AAAA,IACF;AAAA,IAEO,WAAW,SAAuB;AACvC,WAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACzC,WAAK,KAAK,IAAI,kBAAkB,aAAa,gBAAiB,KAAK,MAAM,UAAU,OAAQ;AAC3F,YAAM,WAAW,KAAK,KAAK,KAAK,uBAAuB,GAAG,KAAK,UAAU;AACzE,UAAI,SAAU,MAAK,KAAK,kBAAkB,SAAS,eAAe,GAAG,SAAS,gBAAgB,CAAE,GAAG,KAAK,KAAK,kBAAkB,SAAS,iBAAiB,GAAG,SAAS,kBAAkB,CAAE;AACzL,WAAK,MAAM,UAAU,UAAU,IAAI,oBAAoB;AAAA,IACzD;AAAA,IAEO,aAAmB;AACxB,WAAK,QAAQ,QAAQ,GAAG,KAAK,KAAK,OAAO,EAAE,iBAAiB,WAAW;AACvE,UAAI,CAAC,KAAK,MAAM,UAAU,UAAU,SAAS,oBAAoB,EAAG;AACpE,WAAK,MAAM,UAAU;AACrB,WAAK,KAAK,IAAI,kBAAkB,gBAAgB,cAAc;AAC9D,WAAK,MAAM,UAAU,UAAU,OAAO,oBAAoB;AAAA,IAC5D;AAAA,EACF;AA/CE,gBADW,cACY,YAAW;AAClC,gBAFW,cAEY,UAAkB;AACzC,gBAHW,cAGY,SAAQ;;;ACR1B,MAAM,oBAAmD;AAAA,IAC9D,UAAU;AAAA,IACV,UAAU,CAAC,QAAQ,gBAAgB,uBAAuB;AAAA,IAC1D,SAAS;AAAA,MACP,WAAW;AAAA,MACX,MAAM;AAAA,IACR;AAAA,EACF;;;ACDO,MAAM,iBAAN,cAA6B,SAA2B;AAAA,IAAxD;AAAA;AAIL,0BAAU,cAAa;AACvB,0BAAU;AAAA;AAAA,IAEM,OAAa;AAE3B,WAAK,KAAK,MAAM,IAAI,cAAc,CAAC,MAAO,MAAM,KAAK,CAAC,KAAK,OAAO,YAAa,KAAK,aAAa,MAAO,cAAc,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEjJ,WAAK,MAAM,GAAG,sBAAsB,KAAK,yBAAyB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAExG,WAAK,KAAK,OAAO,GAAG,uBAAuB,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACnG,WAAK,KAAK,OAAO,GAAG,uBAAuB,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACnG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACjG,WAAK,KAAK,OAAO,GAAG,2BAA2B,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEvF,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,wBAAwB,GAAkD;AAClF,UAAI,EAAE,YAAY,KAAK,OAAO,SAAU;AACxC,UAAI,EAAE,UAAU,KAAK,WAAY,GAAE,QAAQ,KAAK,IAAI;AAAA,IACtD;AAAA,IAEU,eAAe,EAAE,MAAM,GAAoD;AACnF,UAAI,OAAO;AACT,YAAI,KAAK,SAAS,KAAK,SAAS,KAAM,MAAK,MAAM,OAAO,cAAc,KAAK,SAAS,KAAK;AACzF,aAAK,MAAM,UAAU,UAAU,OAAO,iBAAiB;AACvD,aAAK,MAAM,QAAQ,gBAAgB,KAAK,MAAM;AAC9C,aAAK,KAAK,IAAI,mBAAmB,oBAAoB,SAAS,KAAK,WAAW;AAC9E,SAAC,KAAK,KAAK,QAAQ,SAAS,KAAK,cAAc,KAAK,KAAK,cAAc,CAAC;AAAA,MAC1E,OAAO;AACL,aAAK,OAAO,QAAQ,YAAY,KAAK,OAAO,QAAQ;AACpD,aAAK,MAAM,UAAU,UAAU,IAAI,iBAAiB;AACpD,aAAK,MAAM,MAAM,gBAAgB,KAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrE,aAAK,KAAK,IAAI,mBAAmB,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,MACtG;AAAA,IACF;AAAA,IAEU,iBAAuB;AAC/B,iBAAW,KAAK,KAAK,KAAK,SAAS,qBAAqB,IAAI,EAAG,GAAE,QAAQ,eAAe,KAAK,QAAQ,EAAE,QAAQ,SAAU,IAAI,SAAS;AAAA,IACxI;AAAA,IAEU,gBAAgB,EAAE,QAAQ,EAAE,OAAO,OAAO,EAAE,GAA6D;AACjH,UAAI,KAAK,OAAO,YAAa,SAAS,KAAK,MAAM,MAAM,OAAS;AAChE,cAAQ,MAAO,KAAK,MAAM,OAAO,cAAc,KAAK,aAAa,OAAO,IAAK;AAC7E,UAAI,CAAC,KAAK,MAAM,OAAO,eAAgB,MAAK,MAAM,KAAK,yBAAyB,MAAO,KAAK,OAAO,QAAQ,YAAY,OAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACxJ;AAAA,IAEU,WAAW,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAwD;AAChG,OAAC,KAAK,OAAO,aAAa,CAAC,OAAO,aAAa,CAAC,KAAK,MAAM,MAAM,WAAW,QAAQ,MAAO,KAAK,MAAM,OAAO,cAAc,KAAK,aAAa,OAAO,IAAM;AAAA,IAC5J;AAAA,IAEU,YAAY,EAAE,OAAO,GAAqB;AAClD,iBAAW,KAAK,KAAK,IAAI,qBAAqB,KAAK,OAAO;AAAA,IAC5D;AAAA,IAEU,MAAY;AACpB,WAAK,OAAO,WAAW;AAAA,IACzB;AAAA,IACU,SAAe;AACvB,WAAK,OAAO,WAAW;AACvB,WAAK,QAAQ,cAAc,KAAK,KAAK,MAAM;AAC3C,WAAK,MAAM,OAAO,SAAS;AAAA,IAC7B;AAAA,IAEU,QAAc;AACtB,WAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACzC,YAAM,aAAa,KAAK,KAAK,KAAK,uBAAuB,GAAG,OAAO,cAAc;AACjF,oBAAc,KAAK,MAAM,UAAU,UAAU,IAAI,iBAAiB;AAClE,kBAAY,iBAAiB,gBAAgB,MAAM,KAAK,MAAM,UAAU,UAAU,OAAO,iBAAiB,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClJ;AAAA,IAEU,QAAQ,WAA4B;AAC5C,aAAO,aAAa,KAAK,OAAO,UAAU,SAAS;AAAA,IACrD;AAAA,EACF;AA7EE,gBADW,gBACY,YAAW;AAClC,gBAFW,gBAEY,UAAkB;AACzC,gBAHW,gBAGY,SAAQ;;;ACT1B,MAAM,iBAA8C;AAAA,IACzD,eAAe,EAAE,KAAK,MAAM,QAAQ,MAAM,MAAM,KAAK;AAAA,IACrD,SAAS;AAAA,EACX;AAEO,MAAM,sBAAuD;AAAA,IAClE,OAAO;AAAA,MACL,QAAQ;AAAA,QACN,KAAK;AAAA,QACL,QAAQ,CAAC;AAAA,MACX;AAAA,MACA,UAAU;AAAA,QACR,UAAU;AAAA,UACR,OAAO;AAAA,UACP,aAAa,CAAC;AAAA,UACd,OAAO;AAAA,YACL,OAAO;AAAA,UACT;AAAA,QACF;AAAA,MACF;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,MAAM;AAAA,QACJ,OAAO;AAAA,MACT;AAAA,MACA,cAAc;AAAA,QACZ,UAAU;AAAA,UACR,UAAU;AAAA,UACV,OAAO,CAAC;AAAA,QACV;AAAA,MACF;AAAA,IACF;AAAA,EACF;;;ACvBO,MAAM,eAAN,cAA2B,SAAyB;AAAA,IAIzD,IAAW,UAAU;AACnB,aAAO,KAAK,MAAM,gBAAgB;AAAA,IACpC;AAAA,IACA,IAAW,SAAS;AAClB,aAAO,CAAC,KAAK,OAAO,WAAW,KAAK,MAAM,gBAAgB,KAAK,OAAO,QAAQ,SAAS;AAAA,IACzF;AAAA,IAEA,YAAY,MAAkB,SAAS,KAAK,OAAO,UAAU;AAC3D,YAAM,MAAM,QAAQ,EAAE,cAAc,EAAE,CAAC;AAAA,IACzC;AAAA,IAEgB,OAAa;AAE3B,WAAK,KAAK,OAAO,IAAI,YAAY,CAAC,MAAM,KAAK,EAAE,SAAS,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEvF,WAAK,KAAK,OAAO,IAAI,oBAAoB,CAAC,MAAO,IAAK,EAAE,IAAI,CAAC,MAAM,UAAU,qBAA4B,aAAa,CAAC,CAAC,CAAC,IAAY,MAAO,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/K,WAAK,MAAM,GAAG,2BAA2B,CAAC,EAAE,MAAM,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,KAAK,MAAM,YAAY,EAAE,MAAM,SAAS,SAAS,QAAQ,QAAQ,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAC1M,WAAK,MAAM,GAAG,iCAAiC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,KAAK,MAAM,YAAY,EAAE,MAAM,SAAS,SAAS,cAAc,QAAQ,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC;AACzO,WAAK,MAAM,GAAG,iCAAiC,CAAC,EAAE,MAAM,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,KAAK,MAAM,YAAY,EAAE,MAAM,SAAS,SAAS,MAAM,QAAQ,QAAQ,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAEtN,WAAK,KAAK,OAAO,GAAG,uBAAuB,CAAC,EAAE,MAAM,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,KAAK,MAAM,YAAY,EAAE,SAAS,KAAK,QAAQ,QAAQ,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAClM,WAAK,KAAK,OAAO,GAAG,2CAA2C,CAAC,EAAE,MAAM,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,KAAK,MAAM,YAAY,EAAE,SAAS,aAAa,SAAS,WAAW,QAAQ,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAC1O,WAAK,KAAK,OAAO,GAAG,wCAAwC,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,OAAO,YAAY,KAAK,OAAO,QAAQ,KAAK,MAAM,YAAY,EAAE,SAAS,aAAa,SAAS,QAAQ,QAAQ,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAEvP,WAAK,KAAK,OAAO,GAAG,oBAAoB,KAAK,eAAe,EAAE,QAAQ,KAAK,QAAQ,MAAM,MAAM,OAAO,EAAE,CAAC;AACzG,WAAK,KAAK,OAAO,GAAG,0BAA0B,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExF,WAAK,KAAK,eAAe,QAAQ,EAAE,IAAI,OAAO,KAAK,SAAS,GAAG,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,WAAW,IAAI,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC3J,WAAK,KAAK,eAAe,QAAQ,EAAE,IAAI,OAAO,KAAK,KAAK,GAAG,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,WAAW,IAAI,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACvJ,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,cAAc,EAAE,eAAe,EAAE,OAAO,QAAQ,EAAE,GAAoD;AAC9G,WAAK,aAAa;AAClB,YAAM,IAAI,SAAS,KAAK,CAACC,OAAOA,GAAE,MAAM,SAAS,SAAS,MAAMA,GAAE,MAAM,SAAS,SAAS,OAAO,KAAK,MAAM,SAAS,SAAS,MAAO,UAAUA,GAAE,MAAM,OAAO,KAAK,KAAK,MAAM,OAAO,GAAG,CAAC,GACvL,QAAQ,KAAK,KAAK,KAAK,kBAAkB,GAAG,QAC5C,QAAQ,MAAO,IAAI,KAAK,UAAU,GAAG,KAAK,IAAI,KAAK,OAAO,KAAK,MAAM,YAAY;AACnF,WAAK,MAAM,gBAAgB,KAAK,QAAS,QAAQ,CAAC,MAAM;AACxD,eAAS,CAAC,MAAM,MAAM,WAAW,MAAM,MAAM,MAAM,YAAY,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,IAAI,MAAM;AAAA,IACzG;AAAA,IAEU,UAAU,MAA0B,SAAS,MAAY;AACjE,aAAO,KAAK,UAAU,KAAK,QAAQ,GAAG,OAAO,KAAK,OAAO,KAAK,KAAK;AAAA,IACrE;AAAA,IAEO,OAAO,OAAe,YAAsB,QAAQ,QAAc;AACvE,UAAI,CAAC,KAAK,OAAO,WAAW,CAAC,KAAK,OAAO,QAAQ,KAAK,EAAG;AACzD,WAAK,MAAM,eAAe;AAC1B,kBAAY,OAAO,KAAK,UAAU,KAAK,OAAO,QAAS,KAAK,CAAC,GAAG,OAAO,UAAU,MAAM,KAAK,MAAM,OAAO,SAAS,CAAC,cAAc,YAAY,KAAK,EAAE;AAAA,IACtJ;AAAA,IAEO,OAAO,OAAqB;AACjC,UAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,WAAK,OAAO,QAAQ,OAAO,OAAO,CAAC;AACnC,UAAI,UAAU,KAAK,MAAM,gBAAgB,KAAK,OAAO,QAAQ,SAAS,EAAG,MAAK,OAAO,KAAK,IAAI,OAAO,KAAK,OAAO,QAAQ,SAAS,CAAC,CAAC;AAAA,IACtI;AAAA,IAEO,UAAgB;AACrB,UAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,YAAM,OAAO,KAAK,OAAO;AACzB,eAAS,IAAI,KAAK,SAAS,GAAG,IAAI,GAAG,KAAK;AACxC,cAAM,IAAI,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,EAAE;AAC5C,SAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC,IAAI,CAAC,KAAK,CAAC,GAAG,KAAK,CAAC,CAAC;AAAA,MACxC;AAAA,IACF;AAAA,IAEO,WAAiB;AACtB,UAAI,QAAQ,KAAK,MAAM,MAAM,WAAW,KAAK,EAAG,aAAY,OAAQ,KAAK,MAAM,OAAO,cAAc,GAAK,KAAK,MAAM,OAAO,SAAS,QAAS,6BAA6B;AAAA,eACjK,KAAK,OAAO,WAAW,KAAK,MAAM,eAAe,EAAG,MAAK,OAAO,KAAK,MAAM,eAAe,GAAG,MAAM,UAAU;AAAA,IACxH;AAAA,IAEO,OAAa;AAClB,UAAI,CAAC,KAAK,OAAO,QAAS;AAC1B,UAAI,KAAK,MAAM,eAAe,KAAK,OAAO,QAAQ,SAAS,EAAG,MAAK,OAAO,KAAK,MAAM,eAAe,GAAG,MAAM,MAAM;AAAA,IACrH;AAAA,IAEU,eAAqB;AAC7B,WAAK,MAAM,SAAS,WAAW,CAAC,EAAE,KAAK,OAAO,SAAS,UAAU,KAAK,OAAO,cAAc;AAAA,IAC7F;AAAA,EACF;AAnFE,gBADW,cACY,YAAW;AAClC,gBAFW,cAEY,UAAkB;AACzC,gBAHW,cAGY,SAAQ;;;ACb1B,MAAM,iBAA0C;AAAA,IACrD,cAAc;AAAA,EAChB;;;ACMO,MAAM,eAAN,cAA2B,SAAyB;AAAA,IAMzC,QAAc;AAE5B,eAAS,KAAK,MAAM,WAAW,EAAE,MAAM,UAAU,WAAW,GAAG,WAAW,KAAK,MAAM,IAAI,CAAC,WAAW,WAAW,OAAO,KAAK,MAAM,IAAI,oDAAoD,YAAY,sBAAsB,EAAE,GAAG,KAAK,MAAM,MAAM,SAAS,sBAAsB,EAAE,GAAG,GAAG,EAAE,WAAW,YAAY,aAAa,SAAS,iBAAiB,QAAQ,WAAW,UAAU,CAAC;AACvX,eAAS,KAAK,MAAM,iBAAiB,EAAE,MAAM,UAAU,WAAW,cAAc,KAAK,MAAM,IAAI,2DAA2D,CAAC;AAC3J,eAAS,KAAK,MAAM,eAAe,EAAE,YAAY,QAAQ,WAAW,cAAc,KAAK,MAAM,IAAI,8BAA8B,OAAO,MAAM,UAAU,MAAM,CAAC;AAE7J,WAAK,MAAM,gBAAgB,YAAY,KAAK,MAAM,aAAa;AAC/D,WAAK,MAAM,QAAQ,eAAe,aAAa,KAAK,MAAM,WAAW,KAAK,MAAM,OAAO;AACvF,WAAK,gBAAgB,GAAG,KAAK,KAAK,IAAI,kBAAkB,QAAQ,KAAK,MAAM,OAAO;AAAA,IACpF;AAAA,IACgB,UAAgB;AAC9B,UAAI,KAAK,MAAM,cAAc,YAAa,MAAK,MAAM,QAAQ,eAAe,KAAK,gBAAgB,IAAI,GAAG,KAAK,MAAM,UAAU,OAAO;AAAA,eAC3H,KAAK,MAAM,QAAQ,YAAa,MAAK,MAAM,UAAU,eAAe,aAAa,KAAK,MAAM,SAAS,KAAK,MAAM,SAAS;AAAA,IACpI;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,gBAAgB,KAAK,cAAc,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEvG,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAO,KAAK,SAAS,IAAI,mBAAmB,OAAO,KAAK,KAAM,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5H,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAM,KAAK,MAAM,UAAU,UAAU,OAAO,oBAAoB,KAAK,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACrK,WAAK,MAAM,GAAG,kBAAkB,CAAC,EAAE,MAAM,MAAM,KAAK,MAAM,UAAU,UAAU,OAAO,uBAAuB,KAAK,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC1K,WAAK,MAAM,GAAG,yBAAyB,KAAK,4BAA4B,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE9H,WAAK,KAAK,MAAM,GAAG,cAAc,MAAO,KAAK,MAAM,UAAU,QAAQ,YAAY,IAAI,OAAO,KAAK,KAAK,MAAM,UAAU,GAAI,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEhL,YAAM,OAAO,KAAK,KAAK,KAAK,uBAAuB,GAAG;AACtD,YAAM,SAAS,aAAa,IAAI,eAAe,IAAI,KAAK,IAAI,CAAC;AAC7D,YAAM,SAAS,aAAa,IAAI,kBAAkB,IAAI,KAAK,IAAI,CAAC;AAChE,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,kBAAwB;AAChC,OAAC,KAAK,KAAK,SAAS,sCAAsC,KACxD,KAAK,MAAM,UAAU;AAAA,QACnB;AAAA,QACA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,qHAQ6G,aAAa,IAAI,YAAY,CAAC;AAAA;AAAA;AAAA;AAAA;AAAA,MAK7I;AACF,WAAK,KAAK,IAAI,0BAA0B,KAAK,KAAK,SAAS,sCAAsC;AACjG,WAAK,KAAK,IAAI,mBAAmB,KAAK,KAAK,SAAS,8BAA8B;AAClF,WAAK,KAAK,IAAI,oBAAoB,KAAK,KAAK,SAAS,+BAA+B;AACpF,WAAK,KAAK,IAAI,WAAW,KAAK,KAAK,SAAS,qBAAqB;AACjE,WAAK,KAAK,IAAI,kBAAkB,KAAK,KAAK,SAAS,6BAA6B;AAChF,WAAK,KAAK,IAAI,mBAAmB,KAAK,KAAK,SAAS,+BAA+B;AACnF,WAAK,KAAK,IAAI,sBAAsB,KAAK,KAAK,SAAS,kCAAkC;AAAA,IAC3F;AAAA,IAEU,aAAa,EAAE,OAAO,YAAY,SAAS,GAA8D;AACjH,UAAI,cAAc,CAAC,SAAU;AAC7B,UAAI,CAAC,cAAc,CAAC,SAAS,KAAK,OAAO,aAAc,YAAW,SAAS,SAAS,iBAAmC,cAAc,EAAG,WAAU,KAAK,MAAM,WAAW,CAAC,MAAM,UAAU,MAAM,MAAM;AACrM,WAAK,MAAM,UAAU,UAAU,OAAO,oBAAoB,KAAK;AAAA,IACjE;AAAA,IAEU,2BAA2B,EAAE,MAAM,GAAqD;AAChG,UAAI,CAAC,MAAO;AACZ,WAAK,MAAM,cAAc,MAAM,KAAK,MAAM,QAAQ;AAClD,WAAK,MAAM,cAAc,cAAc,KAAK,MAAM,QAAQ;AAAA,IAC5D;AAAA,IAEO,kBAAwB;AAC7B,MAAC,KAAK,MAAM,cAAc,KAAK,KAAK,MAAM,QAAQ,IAAM,KAAK,MAAM,QAAQ,KAAK;AAChF,WAAK,MAAM,cAAc,aAAa,MAAM,KAAK,MAAM,QAAQ,UAAU,QAAQ,2CAA2C,EAAE;AAC9H,WAAK,MAAM,gBAAgB,aAAa,MAAM,KAAK,MAAM,UAAU,UAAU,QAAQ,mFAAmF,EAAE;AAC1K,WAAK,MAAM,UAAU,eAAe,aAAa,KAAK,MAAM,iBAAiB,KAAK,MAAM,SAAS;AACjG,eAAS,KAAK,OAAO,KAAK,MAAM,SAAS;AAAA,IAC3C;AAAA,IAEO,gBAAgB,UAAU,OAAa;AAC5C,MAAC,KAAK,MAAM,QAAQ,KAAK,KAAK,MAAM,cAAc,IAAM,KAAK,MAAM,cAAc,KAAK;AACtF,WAAK,MAAM,cAAc,YAAY,cAAc,KAAK,MAAM,IAAI;AAClE,WAAK,MAAM,gBAAgB,YAAY,cAAc,KAAK,MAAM,IAAI;AACpE,WAAK,MAAM,gBAAgB,eAAe,aAAa,UAAU,KAAK,MAAM,UAAU,KAAK,MAAM,WAAW,KAAK,MAAM,eAAe;AAAA,IACxI;AAAA,EACF;AA1FE,gBADW,cACY,YAAW;AAClC,gBAFW,cAEY,SAAQ;AAC/B,gBAHW,cAGY,UAAkB;AACzC,gBAJW,cAIY,UAAkB;;;ACdpC,MAAM,gBAAgB;;;ACQtB,MAAM,cAAN,cAA0B,SAAS;AAAA,IAAnC;AAAA;AAGL,0BAAO,eAAc;AACrB,0BAAU,eAAyC;AAAA;AAAA,IAEnC,OAAa;AAE3B,UAAI,OAAO,OAAO,qCAAqC,GAAG;AACxD,aAAK,MAAM,QAAQ,iBAAiB,2CAA2C,KAAK,oBAAoB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC9I,aAAK,MAAM,QAAQ,iBAAiB,gDAAgD,KAAK,sBAAsB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,MACvJ;AAEA,WAAK,MAAM,MAAM,QAAQ,MAAG;AArBhC,YAAAC;AAqBoC,gBAAAA,MAAA,KAAK,MAAM,UAAS,YAApBA,IAAoB,UAAY,KAAK,KAAK,cAAc,KAAK;AAAA,SAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE9I,WAAK,MAAM,GAAG,kBAAkB,KAAK,qBAAqB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEhJ,WAAK,KAAK,eAAe,WAAW,EAAE,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC,GAAG,MAAM,KAAK;AAAA,IACpF;AAAA,IAEU,mBAAmB,GAAQ,MAAM,EAAE,iBAAiB,aAAmB;AAC/E,UAAI,IAAK,EAAC,KAAK,gBAAL,KAAK,cAAgB,kBAAkB,KAAK,sBAAsB,KAAK,IAAI,KAAI,MAAM;AAC/F,UAAI,KAAK,KAAK,WAAY,MAAK,MAAM,SAAS,UAAU,KAAK,cAAc;AAAA,IAC7E;AAAA,IAEU,uBAA6B;AACrC,WAAK,MAAM,UAAU,UAAU,OAAO,qBAAsB,KAAK,MAAM,MAAM,UAAU,CAAC,CAAC,KAAK,MAAM,QAAQ,qCAAsC;AAAA,IACpJ;AAAA,IAEU,oBAAoB,GAA8C;AAC1E,UAAI,EAAE,YAAY,CAAC,EAAE,MAAO;AAC5B,UAAI,CAAC,KAAK,KAAK,WAAW,SAAS,GAAG;AACpC,aAAK,MAAM,SAAS,iCAAiC;AACrD,aAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,SAAS;AAAA,MACxD;AACA,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEmB,YAAkB;AACnC,WAAK,aAAa,QAAQ,GAAG,MAAM,UAAU;AAAA,IAC/C;AAAA,EACF;AAxCE,gBADW,aACY,YAAW;AAClC,gBAFW,aAEY,SAAQ;;;ACR1B,MAAM,gBAA0B;AAAA,IACrC,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,SAAS;AAAA,IACT,UAAU;AAAA,IACV,YAAY;AAAA,EACd;;;ACFO,MAAM,eAAN,cAA2B,SAAyB;AAAA,IAApD;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AA6CP,0BAAQ,aAAY;AACpB,0BAAQ;AAAA;AAAA,IA5CQ,QAAc;AAE5B,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,iDAAiD,YAAY,OAAO,CAAC;AACjH,WAAK,SAAS,SAAS,UAAU,EAAE,WAAW,4BAA4B,CAAC;AAC3E,WAAK,UAAU,KAAK,OAAO,WAAW,MAAM,EAAE,OAAO,MAAM,CAAC;AAE5D,WAAK,KAAK,IAAI,kBAAkB,SAAS,KAAK,QAAQ,OAAO,KAAK,MAAM,GAAG,KAAK,QAAQ;AAAA,IAC1F;AAAA,IACgB,UAAgB;AAC9B,WAAK,OAAO,OAAO;AAAA,IACrB;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,MAAM,GAAG,qBAAqB,KAAK,WAAW,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACzG,WAAK,MAAM,GAAG,gBAAgB,KAAK,cAAc,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACvG,WAAK,MAAM,GAAG,qBAAqB,CAAC,EAAE,MAAM,MAAM,KAAK,YAAY,CAAC,CAAC,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEpG,WAAK,KAAK,MAAM,GAAG,8BAA8B,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACnG,WAAK,KAAK,MAAM,GAAG,+BAA+B,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExF,WAAK,KAAK,OAAO,GAAG,4BAA4B,CAAC,EAAE,MAAM,MAAM,KAAK,YAAY,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC3H,WAAK,KAAK,OAAO,GAAG,0BAA0B,KAAK,YAAY,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAClG,WAAK,KAAK,OAAO,GAAG,6BAA6B,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEzF,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,YAAkB;AAC1B,WAAK,KAAK,cAAc,KAAK,MAAM,SAAS,WAAW,KAAK,KAAK,SAAS,mBAAmB,KAAK,UAAU,KAAK,OAAO,UAAU,KAAK;AAAA,IACzI;AAAA,IACU,SAAS,YAAY,CAAC,KAAK,KAAK,cAAc,KAAK,MAAM,SAAS,SAAe;AACzF,UAAI,CAAC,KAAK,OAAO,UAAU,CAAC,KAAK,MAAM,SAAS,YAAY,CAAC,KAAK,KAAK,MAAM,qBAAqB,CAAC,KAAK,QAAS;AACjH,UAAI,WAAW;AACb,YAAI,CAAC,KAAK,MAAM,MAAM,OAAQ,QAAO,KAAK,QAAQ,UAAU,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AACvG,cAAM,MAAM,EAAE,KAAK,WACjB,IAAI,KAAK,aAAa,KAAK,UAAU,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,QAAQ,UAAU,KAAK,WAAW,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM,IAAK,KAAK,YAAY,SAAS,OAAO,EAAE,KAAK,KAAK,MAAM,MAAM,QAAQ,aAAa,aAAa,QAAQ,MAAM,QAAQ,KAAK,aAAa,KAAK,SAAS,UAAU,GAAuB,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM,EAAE,CAAC;AAAA,MAClY,WAAW,CAAC,KAAK,KAAK,cAAc,KAAK,MAAM,QAAQ,aAAa,EAAG;AACvE,WAAK,QAAQ,cAAc,KAAK,OAAO;AACvC,WAAK,QAAQ,UAAU,KAAK,MAAM,SAA6B,GAAG,GAAG,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM;AAAA,IAC5G;AAAA,IAIU,WAAiB;AACzB,WAAK,OAAO,QAAQ;AACpB,WAAK,OAAO,SAAS,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,WAAW,UAAU,QAAQ,KAAK,KAAK,MAAM,WAAW,UAAU,OAAO;AAC/H,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,YAAY,MAAqB;AACzC,MAAC,KAAK,OAAO,MAAM,UAAU,CAAC,OAAO,SAAS,SAAU,QAAQ,KAAK,SAAS;AAAA,IAChF;AAAA,IAEU,aAAmB;AAC3B,WAAK,OAAO,MAAM,SAAS,QAAQ,KAAK,OAAO,IAAI,eAAe,KAAK,OAAO,OAAO;AAAA,IACvF;AAAA,IAEU,eAAqB;AAzEjC,UAAAC;AA0EI,OAACA,MAAA,KAAK,MAAM,UAAS,aAApBA,IAAoB,WAAa,CAAC,CAAC,KAAK,MAAM,MAAM,SAAS,KAAK,SAAS;AAAA,IAC9E;AAAA,IAEmB,eAAqB;AACtC,WAAK,KAAK,KAAK,uBAAuB,GAAG,KAAK,cAAc,aAAa,IAAI,mBAAmB,IAAI,IAAI,CAAC;AAAA,IAC3G;AAAA,EACF;AAzEE,gBADW,cACY,YAAW;AAClC,gBAFW,cAEY,SAAQ;;;ACJ1B,MAAM,uBAAuB,CAAC,WAAW,YAAY,kBAAkB,iBAAiB;AAE/F,MAAM,sBAAsB,CAAC,EAAE,OAAO,OAAO,SAAS,MAAM,GAAG,GAAG,qBAAqB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,WAAW,WAAW,OAAO,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC;AAEtJ,MAAM,aAAsC;AAAA,IACjD,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,OAAO;AAAA,MACL,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,MAAM;AAAA,MACJ,OAAO;AAAA,MACP,SAAS;AAAA,QACP,WAAW;AAAA,QACX,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,IACF;AAAA,EACF;;;ACZO,MAAM,WAAN,cAAuB,SAAqB;AAAA,IAA5C;AAAA;AAGL,0BAAU,eAAuC;AACjD,0BAAU,uBAAsB;AAAA;AAAA,IAEhB,OAAa;AAE3B,WAAK,KAAK,KAAK,UAAU,GAAG,MAAM,MAAM,gBAAgB,MAAO,KAAK,sBAAsB,MAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExH,WAAK,KAAK,OAAO,MAAM,4BAA4B,KAAK,iBAAiB,EAAE,MAAM,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAE9G,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEtH,WAAK,KAAK,MAAM,GAAG,2BAA2B,KAAK,+BAA+B,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEzG,WAAK,KAAK,OAAO,GAAG,wCAAwC,KAAK,4BAA4B,EAAE,QAAQ,KAAK,OAAO,CAAC;AACpH,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,wBAAwB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5G,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,uBAAuB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE1G,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,gBAAgB,OAA2C;AACnE,cAAQ,MAAO,KAAK,MAAM,OAAO,WAAW,MAAM,KAAK,IAAI,QAAQ,CAAC,CAAC,KAAM;AAAA,IAC7E;AAAA,IAEU,uBAAuB,EAAE,OAAO,KAAK,GAAiD;AAC9F,UAAI,KAAK,MAAM,OAAO,cAAc,QAAQ,KAAK,KAAK,QAAQ,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,OAAO,KAAK,MAAM,OAAO,YAAY,IAAI,KAAK,KAAK,OAAO,KAAK,QAAQ,IAAM,MAAK,cAAc;AAAA,IACxM;AAAA,IAEU,gCAAsC;AAC9C,WAAK,iBAAiB,KAAK,OAAO,MAAM,OAAO,KAAK,GAAG,KAAK,iBAAiB;AAAA,IAC/E;AAAA,IAEU,2BAA2B,EAAE,QAAQ,EAAE,OAAO,OAAO,EAAE,GAAqE;AACpI,UAAI,CAAC,KAAK,eAAgB,SAAS,KAAK,YAAY,OAAS;AAC7D,UAAI,OAAO,MAAO,MAAK,OAAO,KAAK,QAAQ,QAAQ;AAAA,UAC9C,MAAK,YAAY,cAAc,OAAO;AAAA,IAC7C;AAAA,IAEU,uBAAuB,EAAE,QAAQ,EAAE,OAAO,OAAO,EAAE,GAAiE;AAC5H,UAAI,CAAC,KAAK,YAAa;AACvB,WAAK,YAAY,eAAe,MAAM,KAAK,eAAe,OAAO,KAAK,YAAY,WAAW,KAAK,OAAO,QAAQ,KAAK,YAAY,MAAM;AACxI,UAAI,UAAU,CAAC,OAAO,aAAa,CAAC,KAAK,YAAY,QAAS,MAAK,YAAY,KAAK;AAAA,IACtF;AAAA,IAEU,sBAAsB,EAAE,QAAQ,EAAE,OAAO,OAAO,EAAE,GAAgE;AAC1H,UAAI,CAAC,KAAK,eAAgB,OAAO,aAAa,KAAK,YAAY,OAAS;AACxE,WAAK,YAAY,cAAc,OAAO,KAAK;AAAA,IAC7C;AAAA,IAEU,iBAAiB,OAAO,KAAK,OAAO,KAAK,OAAO,OAAO,MAAM,IAAI,KAAK,KAAK,MAAM,0BAA0B,OAAO,OAAa;AACvI,UAAI,SAAS,GAAG,CAAC,eAAgB,MAAK,MAAM,OAAO,SAAS,CAAC;AAAA,eACpD,SAAS,GAAG,CAAC,WAAW,KAAK,KAAK,MAAM,aAAa,EAAG,MAAK,MAAM,OAAO,SAAS,CAAC;AAAA,IAC/F;AAAA,IAEU,gBAAsB;AAC9B,UAAI,CAAC,KAAK,MAAM,OAAO,kBAAkB,CAAC,KAAK,KAAK,OAAO,SAAS,WAAW,KAAK,OAAO,KAAK,QAAQ,KAAK,CAAC,KAAK,uBAAuB,KAAK,KAAK,KAAK,UAAU,EAAG,MAAM,gBAAgB,KAAK,KAAK,OAAO,SAAS,QAAQ,SAAS,KAAK,KAAK,MAAM,MAAM,UAAU,KAAK,MAAM,OAAO,QAAS;AAClS,WAAK,sBAAsB;AAC3B,YAAM,QAAQ,MAAM,GAAG,KAAK,MAAM,QAAQ,KAAK,SAAS,KAAK,OAAO,KAAK,MAAM,OAAO,QAAQ,IAAI,QAAQ,KAAK,MAAM,MAAM,WAAW,CAAC,GAAG,KAAK,OAAO,KAAK,QAAQ,GAAI,GACrK,IAAI,KAAK,KAAK,OAAO,SAAS,QAAQ,KAAK,KAAK,KAAK,UAAU,EAAG,MAAM,eAAe,CAAC,EAAE;AAC5F,YAAM,QAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,IAAI;AAAA,QAC3D,WAAW,QAAQ;AAAA,QACnB,iBAAiB;AAAA,QACjB,UAAU;AAAA,QACV,UAAU,0BAA0B,KAAK,MAAM,IAAI;AAAA;AAAA,wDAED,EAAE,OAAO,UAAU,EAAE,SAAS,SAAS,UAAU,CAAC,GAAG,OAAO,EAAE,UAAU,EAAE,OAAO,OAAO,EAAE;AAAA,aACrI,KAAK,KAAK,KAAK,eAAe,GAAG,WAAW,GAAG,KAAK,MAAM;AAAA;AAAA,mDAEpB,WAAW,KAAK,MAAM,IAAI,CAAC,8CAA8C,KAAK,eAAe,EAAE,SAAS,SAAS,QAAQ,mCAAmC,EAAE,SAAS,SAAS,KAAK,SAAS,EAAE;AAAA,QAC7O,cAAc,CAAC,MAAc,KAAK,KAAK,KAAK,SAAS,2BAA2B,MAAM,OAAO,GAAG,cAAc,OAAO,KAAK,OAAO,QAAQ,MAAO,QAAQ,GAAI,KAAK,CAAC;AAAA,QAClK,SAAS,CAAC,YAAsB,MAAM,gBAAgB,GAAG,WAAW,KAAK,KAAK,KAAK,UAAU,GAAG,KAAK;AAAA,QACrG,KAAK;AAAA,QACL,QAAQ,KAAK;AAAA,MACf,CAAC;AACD,YAAM,WAAW,CAAC,qBAAqB,gBAAgB,gBAAgB,GACrE,UAAU,CAAC,YAAY,WAAW,SAAS,KAAK,OAAO,QAAQ,OAAO,SAAS,GAAI,KAAK,cAAc,MAAQ,KAAK,sBAAsB,CAAC,YAC1I,gBAAgB,MAAM,CAAC,KAAK,MAAM,OAAO,SAAS,QAAQ,GAC1D,cAAc,MAAM,KAAK,MAAM,SAAS,KAAK,SAAS,KAAK,OAAO,KAAK,MAAM,OAAO,YAAY,KAAK,MAAM,MAAM,WAAW,CAAC,IAAI,KAAK,OAAO,KAAK,QAAQ,OAAQ,QAAQ,GAC1K,kBAAkB,MAAM,SAAS,QAAQ,CAAC,GAAG,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,IAAI,cAAc,aAAa,CAAC;AACxG,eAAS,QAAQ,CAAC,GAAG,MAAM,KAAK,MAAM,GAAG,GAAG,CAAC,IAAI,cAAc,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC;AACtG,YAAM,MAAO,KAAK,cAAc,KAAK,KAAK,SAA2B,yBAAyB;AAC9F,UAAI,EAAE,OAAO,SAAS,OAAQ,YAAW,EAAE,OAAO,SAAS,GAAG;AAC9D,iBAAW,KAAK,CAAC,kBAAkB,UAAU,gBAAgB,EAAY,MAAK,iBAAiB,GAAG,CAAC,EAAE,QAAQ,EAAE,MAAQ,EAAuB,mBAAoB,cAAc,KAAK,KAAK,KAAK,eAAe,GAAG,WAAY,EAAuB,QAAQ,KAAK,QAAS,EAAE,QAAQ,KAAK,OAAO,CAAC;AACjS,WAAK,OAAO,KAAK,UAAU,KAAK,OAAO,KAAK;AAC5C,WAAK,wBAAwB,iBAAiB,SAAS,OAAO,QAAQ,IAAI,GAAG,KAAK,KAAK,KAAK,UAAU,GAAG,KAAK,IAAI,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC1J;AAAA,IAEmB,eAAqB;AACtC,WAAK,KAAK,KAAK,uBAAuB,GAAG,KAAK,cAAc,aAAa,IAAI,eAAe,IAAI,IAAI,CAAC;AAAA,IACvG;AAAA,EACF;AA5FE,gBADW,UACY,YAAW;AAClC,gBAFW,UAEY,SAAQ;;;ACL1B,MAAe,iBAAf,cAA0F,SAAwB;AAAA,IAAlH;AAAA;AACL,0BAAO,gBAAe;AACtB,0BAAO,kBAAiB;AACxB,0BAAO,qBAAoB;AAC3B,0BAAU,cAA6B;AACvC,0BAAU,aAA2B;AAAA;AAAA;AAAA,IAErC,IAAc,SAA4B;AACxC,aAAO,KAAK;AAAA,IACd;AAAA;AAAA;AAAA,IAIU,UAAU,KAAmB;AACrC,UAAI,KAAK,MAAM,MAAM,KAAK,MAAM,IAAI,IAAK,MAAK,MAAM,OAAO,KAAK,MAAM,IAAI;AAC1E,UAAI,KAAK,MAAM,WAAW,IAAK,MAAK,MAAM,WAAW;AAAA,IACvD;AAAA,IACU,UAAU,KAAmB;AACrC,UAAI,KAAK,MAAM,MAAM,KAAK,MAAM,IAAI,IAAK,MAAK,MAAM,OAAO,KAAK,MAAM,IAAI;AAC1E,UAAI,KAAK,MAAM,WAAW,IAAK,MAAK,MAAM,WAAW;AACrD,WAAK,MAAM,UAAU,UAAU,OAAO,aAAa,KAAK,MAAM,UAAU,MAAM,GAAG;AACjF,WAAK,SAAS,IAAI,GAAG,KAAK,MAAM,eAAe,IAAI,KAAK,MAAO,MAAM,MAAO,GAAG;AAC/E,WAAK,SAAS,IAAI,MAAM,WAAW,KAAK,MAAM,CAAC,OAAO,IAAI,MAAM;AAAA,IAClE;AAAA,IACU,kBAAkB,OAAqB;AAC/C,YAAM,WAAW,UAAU,IAAI,KAAK,YAAY,QAAQ,KAAK,QAAQ,SAAS,MAAM,SAAS,SAC3F,WAAW,QAAQ,MAAM,KAAK,OAAO,MAAM;AAC7C,WAAK,MAAM,UAAU,QAAQ,GAAG,KAAK,MAAM,OAAO,IAAI;AACtD,YAAM,MAAM,KAAK,SAAS,KACxB,SAAS,WAAW,KAAK,MAAM;AACjC,UAAI,KAAK,OAAO,MAAM,IAAK,KAAI,SAAS,KAAK;AACrC,YAAI,UAAU,MAAM,gBAAgB,IAAI,QAAQ;AAChD,YAAI,UAAU,MAAM,qBAAqB,IAAI,IAAI,GAAG,KAAK,MAAM,oBAAoB,IAAI;AAAA,MACzF,OAAO;AACL,YAAI,UAAU,MAAM,gBAAgB,IAAI;AACxC,YAAI,UAAU,MAAM,qBAAqB,KAAK,QAAQ,QAAQ,KAAK,OAAO,MAAM;AAChF,YAAI,GAAG,KAAK,MAAM,oBAAoB,IAAI,IAAI,GAAG,KAAK,MAAM,eAAe;AAAA,MAC7E;AAAA,UAAO,KAAI,UAAU,MAAM,gBAAgB,IAAI;AAAA,IACvD;AAAA;AAAA,IAEU,cAAc,OAAe,SAAS,KAAK,cAAc,OAAa;AAC9E,UAAI,CAAC,UAAU,QAAQ,EAAG,SAAQ,MAAO,KAAK,MAAM,OAAO,KAAK,SAAS,IAAK,KAAK,aAAa,KAAgB;AAAA,IAClH;AAAA,IACU,eAAe,SAAkB,SAAS,KAAK,eAAe,SAAe;AACrF,UAAI,SAAS;AACX,YAAI,KAAK,MAAM,MAAM,KAAK,MAAM,EAAG,CAAC,KAAK,MAAM,WAAW,KAAK,MAAM,MAAM,KAAK,MAAM,GAAK,KAAK,oBAAoB;AACpH,aAAK,eAAe;AACpB,YAAI,CAAC,UAAU,KAAK,MAAM,MAAM,KAAK,MAAM,EAAG,SAAQ,MAAO,KAAK,MAAM,OAAO,KAAK,MAAM,IAAK,KAAK,YAAY,CAAY;AAAA,MAC9H,OAAO;AACL,cAAM,UAAU,KAAK,oBAAoB,KAAK,MAAM,WAAW,KAAK,MAAM,MAAM,KAAK,MAAM;AAC3F,YAAI,CAAC,OAAQ,SAAQ,MAAO,KAAK,MAAM,OAAO,KAAK,MAAM,IAAK,KAAK,YAAY,UAAU,UAAU,KAAK,cAAyB;AACjI,aAAK,eAAe,KAAK,oBAAoB;AAAA,MAC/C;AAAA,IACF;AAAA;AAAA,IAEO,kBAAkB,OAAqB;AAC5C,WAAK,eAAe,KAAK,oBAAoB;AAC7C,WAAK,MAAM,OAAO,KAAK,MAAM,IAAI;AACjC,UAAI,QAAQ,EAAG,MAAK,iBAAiB;AAAA,IACvC;AAAA,IACO,OAAO,QAAuB;AACnC,UAAI,WAAW,UAAU,KAAK,qBAAqB,CAAC,KAAK,MAAM,SAAU,MAAK,MAAM,WAAW,KAAK,OAAO;AAC3G,WAAK,MAAM,OAAO,KAAK,SAAS,IAAI,EAAE,KAAK,MAAM,MAAM,KAAK,SAAS,KAAK,CAAC,KAAK,MAAM,MAAM,KAAK,MAAM;AAAA,IACzG;AAAA;AAAA,IAEO,eAAe,OAAqB;AACzC,YAAM,OAAO,SAAS,IAAI,MAAM;AAChC,cAAQ,KAAK,IAAI,KAAK;AACtB,UAAI,QAAQ,KAAK,MAAM,KAAK,oBAAoB,KAAK,MAAM,WAAW,KAAK,MAAM,MAAM,KAAK,MAAM,CAAC;AACnG,UAAI,SAAS,KAAK;AAChB,YAAI,QAAQ,KAAK,OAAO,IAAK,UAAS,QAAQ,SAAS;AACvD,aAAK,MAAM,SAAS,KAAK,MAA6B,KAAK,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,UAAU,IAAI,GAAG,KAAK,MAAM,GAAG,KAAK,SAAS,KAAK,GAAG,KAAK,MAAM,MAAM;AAAA,MAChL,OAAO;AACL,YAAI,QAAQ,KAAK,OAAO,IAAK,UAAS,QAAQ,QAAQ,QAAS,QAAQ,QAAS;AAChF,aAAK,MAAM,SAAS,KAAK,MAA6B,KAAK,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,GAAG,KAAK,MAAM,IAAI;AAAA,MAC5H;AACA,WAAK,oBAAqB,KAAK,MAAM,WAAW,QAAU,KAAK,MAAM,OAAO,KAAK,MAAM,IAAI;AAAA,IAC7F;AAAA,EACF;;;ACtFO,MAAM,mBAA8C;AAAA,IACzD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,EACR;;;ACEO,MAAM,iBAAN,cAA6B,eAAkD;AAAA,IAOpF,YAAY,MAAkB,SAAS,KAAK,SAAS,YAAY;AAC/D,YAAM,MAAM,QAAQ,EAAE,UAAU,IAAI,CAAC;AA6CvC,0BAAU,iBAAgB,MAAY;AACpC,aAAK,OAAO,MAAM;AAClB,aAAK,MAAM,SAAS,cAAc,KAAK,MAAM,MAAM,oBAAoB,CAAC,MAAM,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,CAAC,IAAI,mBAAmB,cAAc,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC7L;AACA,0BAAU,yBAAwB,MAAY;AAC5C,aAAK,eAAe,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,cAAc,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI;AAAA,MACxH;AACA,0BAAU,2BAA0B,MAAY;AAC9C,aAAK,eAAe,EAAE,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,cAAc,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK;AAAA,MAC3H;AAAA,IArDA;AAAA,IANA,IAAc,YAAY;AACxB,aAAO;AAAA,IACT;AAAA,IAMgB,OAAa;AAE3B,YAAM,aAAa,KAAK,MAAM,OAAO,cAAc,KAAK,MAAM,MAAM,cAAc,KAAK,SAAS,IAAI;AACpG,WAAK,MAAM,WAAW,MAAM,KAAK,OAAO,KAAK,YAAY,KAAK,OAAO,GAAG;AACxE,WAAK,eAAe,KAAK,oBAAoB,KAAK,MAAM,OAAO,QAAQ;AACvE,WAAK,MAAM,OAAO,aAAa,KAAK,eAAe,IAAI,KAAK,MAAM;AAElE,WAAK,MAAM,IAAI,qBAAqB,CAAC,MAAM,MAAM,KAAK,eAAe,IAAI,KAAK,OAAO,KAAK,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEtI,WAAK,MAAM,MAAM,QAAQ,MAAG;AA5BhC,YAAAC,KAAAC;AA4BqC,gBAAAD,MAAA,KAAK,MAAM,UAAS,eAApBA,IAAoB,aAAe,QAAQC,MAAA,KAAK,MAAM,UAAS,SAApBA,IAAoB,OAAS;AAAA,SAAQ,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEpJ,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtJ,WAAK,MAAM,GAAG,eAAe,KAAK,kBAAkB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC1I,WAAK,MAAM,GAAG,oBAAoB,CAAC,MAAM,KAAK,kBAAkB,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEhI,WAAK,KAAK,OAAO,GAAG,2BAA2B,CAAC,MAAM,KAAK,UAAU,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAClH,WAAK,KAAK,OAAO,GAAG,2BAA2B,CAAC,MAAM,KAAK,UAAU,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAElH,WAAK,KAAK,eAAe,QAAQ,EAAE,IAAI,KAAK,eAAe,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AACzF,WAAK,KAAK,eAAe,gBAAgB,EAAE,IAAI,KAAK,uBAAuB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC3G,WAAK,KAAK,eAAe,kBAAkB,EAAE,IAAI,KAAK,yBAAyB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC/G,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,uBAAuB,GAA2C,SAAS,KAAK,cAAc,EAAE,OAAa;AACrH,UAAI,EAAE,SAAU;AAChB,UAAI,OAAQ,MAAK,YAAY;AAC7B,WAAK,cAAc,EAAE,OAAO,MAAM;AAClC,WAAK,SAAS,IAAI,aAAa,EAAE;AACjC,WAAK,MAAM,MAAM,aAAa,EAAE;AAAA,IAElC;AAAA,IAEU,iBAAiB,GAAqC,SAAS,KAAK,eAAe,EAAE,OAAa;AAC1G,UAAI,EAAE,SAAU;AAChB,UAAI,OAAQ,MAAK,aAAa;AAAA,eACrB,KAAK,MAAM,MAAM,SAAS,EAAE,SAAS,CAAC,CAAC,KAAK,MAAM,MAAM,WAAY,QAAO,EAAE,QAAQ,KAAK,IAAI;AACvG,WAAK,eAAe,EAAE,OAAO,MAAM;AACnC,WAAK,MAAM,MAAM,OAAO,EAAE;AAAA,IAE5B;AAAA,EAYF;AA9DE,gBADW,gBACY,YAAW;AAClC,gBAFW,gBAEY,SAAQ;;;ACP1B,MAAM,cAAc,CAAC,8BAA8B,4BAA4B,6BAA6B,+BAA+B,8BAA8B,+BAA+B,mCAAmC,qCAAqC,+BAA+B,iCAAiC,qCAAqC,8BAA8B;AACnZ,MAAM,eAAe,CAAC,8BAA8B,8BAA8B,+BAA+B,+BAA+B,qCAAqC,iCAAiC,qCAAqC,8BAA8B;AAEzR,MAAM,iBAA8C;AAAA,IACzD,UAAU;AAAA,IACV,eAAe;AAAA,IACf,MAAM;AAAA,MACJ,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,IAAI,SAAS,UAAU;AAAA,UAChC,EAAE,OAAO,aAAa,SAAS,YAAY;AAAA,UAC3C,EAAE,OAAO,cAAc,SAAS,aAAa;AAAA,UAC7C,EAAE,OAAO,SAAS,SAAS,QAAQ;AAAA,UACnC,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,UACvC,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,UACvC,EAAE,OAAO,aAAa,SAAS,YAAY;AAAA,UAC3C,EAAE,OAAO,SAAS,SAAS,QAAQ;AAAA,UACnC,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,UACvC,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,UACrC,EAAE,OAAO,mBAAmB,SAAS,kBAAkB;AAAA,UACvD,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,UACvC,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,UACrC,EAAE,OAAO,iBAAiB,SAAS,gBAAgB;AAAA,QACrD;AAAA,MACF;AAAA,MACA,MAAM;AAAA,QACJ,KAAK;AAAA,QACL,KAAK;AAAA,QACL,OAAO;AAAA,QACP,MAAM;AAAA,QACN,SAAS;AAAA,UACP,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,UAC9B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,UAC9B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,UAC9B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,UAC9B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,MACA,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,UACrC,EAAE,OAAO,WAAW,SAAS,SAAS;AAAA,UACtC,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,UACrC,EAAE,OAAO,WAAW,SAAS,OAAO;AAAA,UACpC,EAAE,OAAO,WAAW,SAAS,OAAO;AAAA,UACpC,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,UACvC,EAAE,OAAO,WAAW,SAAS,MAAM;AAAA,UACnC,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,QACvC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,MACA,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,OAAO,SAAS,OAAO;AAAA,UAChC,EAAE,OAAO,OAAO,SAAS,cAAc;AAAA,UACvC,EAAE,OAAO,OAAO,SAAS,QAAQ;AAAA,UACjC,EAAE,OAAO,OAAO,SAAS,SAAS;AAAA,UAClC,EAAE,OAAO,OAAO,SAAS,SAAS;AAAA,UAClC,EAAE,OAAO,OAAO,SAAS,YAAY;AAAA,UACrC,EAAE,OAAO,OAAO,SAAS,OAAO;AAAA,UAChC,EAAE,OAAO,OAAO,SAAS,aAAa;AAAA,UACtC,EAAE,OAAO,OAAO,SAAS,QAAQ;AAAA,QACnC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,UACrC,EAAE,OAAO,cAAc,SAAS,aAAa;AAAA,UAC7C,EAAE,OAAO,kBAAkB,SAAS,iBAAiB;AAAA,QACvD;AAAA,MACF;AAAA,IACF;AAAA,IACA,YAAY;AAAA,MACV,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,UACrC,EAAE,OAAO,WAAW,SAAS,SAAS;AAAA,UACtC,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,UACrC,EAAE,OAAO,WAAW,SAAS,OAAO;AAAA,UACpC,EAAE,OAAO,WAAW,SAAS,OAAO;AAAA,UACpC,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,UACvC,EAAE,OAAO,WAAW,SAAS,MAAM;AAAA,UACnC,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,QACvC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,GAAG,SAAS,KAAK;AAAA,UAC1B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,UACrC,EAAE,OAAO,WAAW,SAAS,SAAS;AAAA,UACtC,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,UACrC,EAAE,OAAO,WAAW,SAAS,OAAO;AAAA,UACpC,EAAE,OAAO,WAAW,SAAS,OAAO;AAAA,UACpC,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,UACvC,EAAE,OAAO,WAAW,SAAS,MAAM;AAAA,UACnC,EAAE,OAAO,WAAW,SAAS,QAAQ;AAAA,QACvC;AAAA,MACF;AAAA,MACA,SAAS;AAAA,QACP,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,GAAG,SAAS,KAAK;AAAA,UAC1B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,IAAI,SAAS,MAAM;AAAA,UAC5B,EAAE,OAAO,KAAK,SAAS,OAAO;AAAA,QAChC;AAAA,MACF;AAAA,IACF;AAAA,IACA,oBAAoB;AAAA,MAClB,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,QAAQ,SAAS,OAAO;AAAA,QACjC,EAAE,OAAO,eAAe,SAAS,cAAc;AAAA,QAC/C,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,QACrC,EAAE,OAAO,aAAa,SAAS,YAAY;AAAA,QAC3C,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,MACzC;AAAA,IACF;AAAA,IACA,eAAe;AAAA,MACb,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,QAAQ,SAAS,OAAO;AAAA,QACjC,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,QACrC,EAAE,OAAO,SAAS,SAAS,QAAQ;AAAA,MACrC;AAAA,IACF;AAAA,IACA,gBAAgB;AAAA,EAClB;;;AC9IO,MAAM,eAAN,cAA2B,SAAwC;AAAA,IAQxE,YAAY,MAAkB,SAAS,KAAK,SAAS,UAAU;AAC7D,YAAM,MAAM,QAAQ,EAAE,iBAAiB,CAAC,EAAE,CAAC;AAN7C,0BAAU,QAA4B;AACtC,0BAAU,SAA6B;AACvC;AAAA,0BAAU;AACV,0BAAU,kBAAiB,oBAAI,IAA0B;AAAA,IAIzD;AAAA,IAEgB,QAAc;AAE5B,UAAK,KAAK,OAAO,kBAAkB,KAAK,gBAAgB,KAAK,IAAI,EAAI,MAAK,KAAK,IAAI,oBAAoB,KAAK,KAAK;AACjH,WAAK,QAAQ,kBAAkB,KAAK,gBAAgB,KAAK,IAAI;AAAA,IAC/D;AAAA,IAEgB,OAAa;AAnC/B,UAAAC;AAqCI,OAAAA,MAAA,KAAK,QAAO,aAAZA,IAAY,WAAa;AACzB,WAAK,SAAS,IAAI,kBAAkB,KAAK,SAAS,IAAI;AAEtD,WAAK,MAAM,MAAM,mBAAmB,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE5E,WAAK,MAAM,IAAI,0BAA0B,CAAC,MAAO,KAAK,KAAK,cAAc,MAAM,KAAK,qBAAqB,aAAa,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEjJ,WAAK,MAAM,MAAM,QAAQ,MAAG;AA5ChC,YAAAA,KAAAC,KAAAC,KAAAC;AA4CqC,gBAAAH,MAAA,KAAK,MAAM,UAAS,eAApBA,IAAoB,aAAe,KAAK,KAAK,cAAcC,MAAA,KAAK,MAAM,UAAS,qBAApBA,IAAoB,mBAAqB,KAAK,KAAK,cAAc,KAAK,MAAM,SAAS,cAAcC,MAAA,KAAK,MAAM,UAAS,gBAApBA,IAAoB,cAAgB,KAAK,MAAM,SAAS,aAAaC,MAAA,KAAK,MAAM,UAAS,qBAApBA,IAAoB,mBAAqB,KAAK,MAAM,SAAS;AAAA,SAAoB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAExX,WAAK,KAAK,OAAO,MAAM,8BAA8B,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7F,iBAAW,KAAK,YAAa,MAAK,KAAK,OAAO,MAAM,YAAY,CAAC,IAAI,CAAC,WAAY,KAAK,SAAS,IAAI,SAAS,EAAE,QAAQ,UAAU,EAAE,GAAG,IAAI,CAAC,IAAI,EAAE,SAAS,SAAS,IAAI,CAAC,QAAQ,MAAM,OAAQ,KAAK,MAAM,SAAS,IAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEzP,WAAK,MAAM,GAAG,2BAA2B,KAAK,8BAA8B,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAClK,WAAK,MAAM,GAAG,sBAAsB,KAAK,yBAAyB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AACxJ,WAAK,MAAM,GAAG,0BAA0B,KAAK,QAAQ,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC3G,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACnG,WAAK,MAAM,GAAG,qBAAqB,OAAO,KAAK,MAAM,YAAY,GAAG,KAAK,eAAe,QAAQ,CAAC,SAAS,KAAK,YAAY,CAAC,IAAI,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtL,WAAK,MAAM,GAAG,aAAa,OAAQ,KAAK,MAAM,kBAAkB,CAAC,GAAK,KAAK,OAAO,WAAW,QAAS,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7H,WAAK,MAAM,GAAG,qBAAqB,OAAO,KAAK,WAAW,GAAG,KAAK,OAAO,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AACpG,WAAK,MAAM,GAAG,oBAAoB,KAAK,uBAAuB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEpH,WAAK,KAAK,eAAe,YAAY,EAAE,IAAI,OAAO,KAAK,cAAc,GAAG,KAAK,MAAM,SAAS,eAAe,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,UAAU,IAAI,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AACpM,WAAK,KAAK,eAAe,sBAAsB,EAAE,IAAI,MAAM,KAAK,eAAe,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,oBAAoB,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,IAAI,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC9O,WAAK,KAAK,eAAe,wBAAwB,EAAE,IAAI,MAAM,KAAK,eAAe,EAAE,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,oBAAoB,IAAI,KAAK,OAAO,KAAK,KAAK,IAAI,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACnP,WAAK,KAAK,eAAe,sBAAsB,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,KAAK,OAAO,QAAQ,8BAA8B,OAAO,IAAI,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACnM,WAAK,KAAK,eAAe,sBAAsB,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,KAAK,OAAO,QAAQ,8BAA8B,OAAO,IAAI,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACnM,WAAK,KAAK,eAAe,uBAAuB,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,KAAK,QAAQ,QAAQ,+BAA+B,OAAO,IAAI,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACtM,WAAK,KAAK,eAAe,uBAAuB,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,KAAK,QAAQ,QAAQ,6BAA6B,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACzL,WAAK,KAAK,eAAe,6BAA6B,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,WAAW,QAAQ,QAAQ,mCAAmC,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC3M,WAAK,KAAK,eAAe,yBAAyB,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,OAAO,QAAQ,QAAQ,+BAA+B,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC/L,WAAK,KAAK,eAAe,8BAA8B,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,mBAAmB,QAAQ,qCAAqC,KAAK,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACnN,WAAK,KAAK,eAAe,yBAAyB,EAAE,IAAI,MAAM,KAAK,WAAW,WAAW,KAAK,MAAM,EAAE,cAAc,QAAQ,gCAAgC,KAAK,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACpM,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,6BAA6B,GAAuD;AAC5F,UAAI,CAAC,KAAK,KAAK,WAAY,QAAO,EAAE,OAAO,KAAK,IAAI;AACpD,WAAK,MAAM,KAAK,KAAK,kBAAkB,GAAG,MAAM;AAC9C,aAAK,MAAM,MAAM,mBAAmB,KAAK,qBAAqB,EAAE;AAChE,aAAK,WAAW;AAAA,MAClB,CAAC;AACD,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,wBAAwB,GAAkD;AAClF,UAAI,EAAE,SAAU;AAChB,UAAI,CAAC,KAAK,MAAM,SAAS,UAAW,QAAO,EAAE,OAAO,KAAK,IAAI;AAC7D,WAAK,MAAM,KAAK,KAAK,kBAAkB,GAAG,MAAM;AAC9C,YAAI,EAAE,SAAS,KAAK,MAAM,OAAO,WAAW,UAAU,KAAK,MAAM,MAAM,qBAAqB,GAAI,SAAQ,MAAO,KAAK,MAAM,OAAO,mBAAmB,KAAK,IAAI,GAAG,YAAY,KAAK,MAAM,SAAS,QAAQ,KAAK,MAAM,MAAM,OAAO,KAAK,CAAC,MAAM,EAAE,OAAO,GAAG,IAAI,KAAK,MAAM,OAAO,UAAU,CAAC,CAAE;AAC3R,cAAM,UAAU,KAAK,KAAK,KAAK,cAAc;AAC7C,YAAI,QAAS,CAAC,KAAK,SAAS,IAAI,mBAAmB,QAAQ,OAAO,kBAAqB,KAAK,SAAS,IAAI,mBAAmB,QAAQ,OAAO;AAC3I,aAAK,MAAM,MAAM,cAAc,EAAE;AAAA,MACnC,CAAC;AACD,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,uBAAuB,EAAE,MAAM,GAAiD;AACxF,WAAK,MAAM,UAAU,UAAU,OAAO,sBAAsB,KAAK,cAAc,KAAK;AACpF,YAAM,QAAQ,KAAK,MAAM,OAAO,WAAW,KAAK,MAAM,MAAM,gBAAgB;AAC5E,eAAS,SAAS,KAAK,OAAO,QAAQ,KAAK,cAAc,KAAK,CAAC;AAAA,IACjE;AAAA,IAEU,sBAAsB,EAAE,MAAM,GAAgD;AACtF,QAAE,CAAC,KAAK,KAAK,WAAW,UAAU,KAAK,KAAK,MAAM,aAAa,MAAM,KAAK,MAAM,OAAO,KAAK;AAAA,IAC9F;AAAA,IAEU,gBAAgB,GAA+C,QAAQ,GAAG,QAAkC;AACpH,YAAM,MAAM,MAAM,UAAU,QAAQ,KAAK,KAAK,MAAM,OAAO,YAAY,KAAK;AAC5E,eAAS,QAAQ,MAAM,QAAQ,KAAK,MAAM,MAAM,oBAAoB,KAAK,eAAe,IAAI,GAAG,GAAG,OAAO,MAAM,aAAa,CAAC,KAAK,IAAI;AAAA,IACxI;AAAA,IAEO,gBAAsB;AAC3B,UAAI,CAAC,KAAK,WAAY,QAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,SAAS,aAAa,kCAAkC,KAAK,MAAM,IAAI,KAAK,mCAAmC,KAAK,MAAM,IAAI,EAAE;AAC3L,WAAK,MAAM,OAAO,cAAc,CAAC,KAAK,MAAM,MAAM;AAAA,IACpD;AAAA,IAEO,eAAe,OAAqB;AACzC,YAAM,OAAO,SAAS,IAAI,MAAM;AAChC,cAAQ,KAAK,IAAI,KAAK;AACtB,YAAM,OAAO,OAAO,KAAK,SAAS,IAAI,gBAAgB;AACtD,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,cAAI,OAAO,KAAK,OAAO,KAAK,KAAK,IAAK,MAAK,OAAO,KAAK,KAAK,QAAQ,QAAQ,OAAO,SAAS;AAC5F;AAAA,QACF;AACE,cAAI,OAAO,KAAK,OAAO,KAAK,KAAK,IAAK,MAAK,OAAO,KAAK,KAAK,QAAQ,QAAQ,OAAO,QAAQ,OAAO,QAAQ;AAAA,MAC9G;AACA,WAAK,MAAM,SAAS,aAAa,KAAK,QAAQ,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,OAAO,GAAG,KAAK,SAAS,KAAK,KAAK,OAAO,MAAM,MAAM,KAAK,MAAO,aAAa,KAAK,KAAK,MAAO,QAAQ,KAAK,cAAc,CAAC,CAAC;AAAA,IAC7M;AAAA,IAEU,WAAW,OAA2E,MAAqC,UAAU,MAAM,WAAW,OAAa;AAC3K,UAAI,CAAC,MAAM,OAAQ;AACnB,YAAM,SAAS,KAAK,SAAS,IAAI,SAAS,KAAK,QAAQ,UAAU,EAAE,GAAG,IAAI,CAAC;AAC3E,cAAQ,KAAK,UAAU,MAAM,WAAW,UAAU,SAAS,QAAQ,KAAK,SAAS,SAAS,IAAI,OAAO,MAAM,IAAI,MAAM,MAAM,GAAG,KAAK,CAAC;AACpI,kBAAY,KAAK,MAAM,SAAS,aAAa,KAAK,QAAQ,KAAK,KAAK,OAAO,MAAM,KAAK,KAAK,OAAO;AAAA,IACpG;AAAA,IAEO,SAAe;AACpB,WAAK,MAAM,UAAU,UAAU,OAAO,sBAAsB,KAAK,cAAc,KAAK,MAAM,MAAM,WAAW;AAC3G,WAAK,MAAM,UAAU,QAAQ,YAAY,KAAK,aAAa;AAAA,IAC7D;AAAA,IAEA,IAAW,aAAsB;AAC/B,cAAQ,KAAK,MAAM,SAAS,cAAc,KAAK,MAAM,SAAS,YAAY,CAAC,CAAC,KAAK,MAAM,OAAO,WAAW,SAAS,CAAC,KAAK,MAAM,SAAS,cAAc,CAAC,CAAC,KAAK,MAAM,SAAS;AAAA,IAC7K;AAAA,IAEO,aAAa,QAAQ,KAAK,MAAM,OAAO,WAAW,KAAK,MAAM,MAAM,gBAAgB,GAAW;AACnG,cAAQ,OAAO,QAAQ,OAAO,SAAS;AAAA,IACzC;AAAA,IAEO,cAAc,QAAQ,KAAK,MAAM,OAAO,WAAW,KAAK,MAAM,MAAM,gBAAgB,GAAY;AACrG,aAAO,EAAE,MAAM,GAAG,OAAO,SAAS,OAAO,IAAI,IAAI,KAAK,aAAa,KAAK,CAAC;AAAA,6BAA4B,QAAQ,EAAE,iBAAiB,IAAI,iBAAiB,GAAG,EAAE;AAAA,IAC5J;AAAA,IAEU,aAAmB;AAC3B,YAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,UAAI,CAAC,KAAM;AACX,iBAAW,CAAC,KAAK,IAAI,KAAK,KAAK,gBAAgB;AAC7C,YAAI,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,MAAM,gBAAgB,SAAS,GAAG,GAAG;AACtE,eAAK,QAAQ,GAAG,KAAK,eAAe,OAAO,GAAG;AAC9C,gBAAM,QAAQ,KAAK,GAAG;AACtB,eAAK,KAAK,cAAc,QAAQ,KAAK,MAAM,MAAM,oBAAoB,UAAW,MAAM,OAAO,YAAa,MAAM,oBAAoB,aAAa,KAAK,eAAe;AAAA,QACvK;AAAA,MACF;AACA,UAAI,CAAC,KAAK,KAAK,WAAY;AAC3B,eAAS,IAAI,GAAG,MAAM,KAAK,QAAQ,IAAI,KAAK,KAAK;AAC/C,cAAM,cAAc,KAAK,OAAO,YAAY,KAAK,MAAM,gBAAgB,SAAS,CAAC;AACjF,aAAK,CAAC,EAAE,OAAO,MAAM,KAAK,MAAM,MAAM,oBAAoB,cAAc,WAAW;AACnF,YAAI,eAAe,CAAC,KAAK,eAAe,IAAI,CAAC,GAAG;AAC9C,gBAAM,OAAO,kBAAkB,KAAK,gBAAgB,KAAK,MAAM,EAAE,gBAAgB,KAAK,eAAe,OAAO,EAAE,CAAC;AAC/G,cAAI,KAAM,MAAK,eAAe,IAAI,GAAG,IAAI,GAAG,KAAK,CAAC,EAAE,iBAAiB,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,KAAK,gBAAgB,EAAE,QAAQ,KAAK,CAAC,EAAE,CAAC;AAAA,QAC5K;AAAA,MACF;AAAA,IACF;AAAA,IAEmB,aAAa,QAAQ,aAAa,IAAI,mBAAmB,IAAI,IAAI,GAAG,OAAO,KAAK,KAAK,KAAK,uBAAuB,GAAG,MAAY;AACjJ,UAAI,SAAS,KAAM,MAAK,WAAW,UAAU,GAAG,MAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,CAAC,SAAS,KAAK,eAAe,YAAY,IAAI,CAAC,IAAI,KAAK,eAAe,YAAY,KAAK;AAAA,IAC/K;AAAA,IAEmB,YAAkB;AACnC,WAAK,MAAM,QAAQ,GAAG,KAAK,OAAO,QAAQ;AAC1C,iBAAW,QAAQ,KAAK,eAAe,OAAO,EAAG,MAAK,QAAQ;AAC9D,WAAK,eAAe,MAAM;AAC1B,YAAM,OAAO,KAAK,MAAM,OAAO;AAC/B,UAAI,KAAM,UAAS,IAAI,GAAG,IAAI,KAAK,QAAQ,IAAK,MAAK,CAAC,EAAE,oBAAoB,aAAa,KAAK,eAAe;AAC7G,UAAI,KAAK,KAAK,IAAI,sBAAsB,KAAK,MAAM,QAAS,MAAK,KAAK,IAAI,oBAAoB;AAC9F,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AAvKE,gBADW,cACY,YAAW;AAClC,gBAFW,cAEY,SAAQ;;;ACjB1B,MAAM,aAAyB,EAAE,SAAS,CAAC,EAAE;;;ACM7C,WAAS,aAAa,IAAoB;AAC/C,WAAO,GAAG,MAAM,GAAG,YAAY,GAAG,IAAI,CAAC,EAAE,YAAY,KAAK;AAAA,EAC5D;AAEO,WAAS,YAAY,IAAY,UAAU,OAAe;AAC/D,WAAO,GAAG,QAAQ,CAAC,UAAU,mBAAmB,0BAA0B,EAAE;AAAA,EAC9E;AAGO,WAAS,yBAAyB,MAAc;AACrD,WAAO,UAAU,aAAa,IAAI,CAAC,KAAK;AAAA,EAC1C;AAGO,WAAS,cAA0C,OAAY,QAAQ,OAAO,WAAW,aAAa,MAAM,QAAQ,CAAC,UAAkB,SAAgB,QAAQ,IAAI,YAAY,KAAK,KAAK,GAAG,IAAI,IAAI,MAAM,SAAS,oBAAI,IAAI,GAAG,SAAS,oBAAI,IAAI,GAAG,SAAS,oBAAI,IAAI,GAAG;AAC3Q,aAAS,QAAQ,KAAK,UAAU,GAAG,IAAI,QAAQ,WAAW,MAAM,MAAM,WAAW;AAEjF,aAAS,cAAc,MAAc,OAAO,SAAS,IAAI,GAAG,QAAQ,KAAK,MAAM,wEAAwE,GAAG;AAExJ,aAAO,OAAO,IAAI,MAAM,IAAI,IAAI,QAAS,MAAM,CAAC,EAAE,QAAQ,gBAAgB,GAAG,EAAE,KAAK,EAAE,YAAY,IAAI,OAAO,MAAM,CAAC,EAAE,SAAS,GAAG,GAAG,IAAK,KAAK,QAAQ,yCAAyC,EAAE,EAAE,QAAQ,gBAAgB,GAAG,EAAE,KAAK,EAAE,YAAY,MAAM;AAAA,IAC5P;AAEA,aAAS,kBAAkB,MAAc,OAAO,OAAO,IAAI,IAAI,EAAE,YAAY,GAAG;AAE9E,YAAM,QAAQ,KAAK,MAAM,iEAAiE;AAC1F,UAAI,MAAO,QAAO,CAAC,SAAS,MAAM,CAAC,CAAC,GAAG,SAAS,MAAM,CAAC,CAAC,CAAC;AAEzD,YAAM,MAAM,KAAK,MAAM,aAAa;AACpC,UAAI,IAAK,QAAO,CAAC,SAAS,IAAI,CAAC,CAAC,GAAG,SAAS,IAAI,CAAC,CAAC,CAAC;AAEnD,YAAM,QAAQ,KAAK,MAAM,gFAAgF;AACzG,UAAI,MAAO,QAAO,CAAC,cAAc,MAAM,CAAC,GAAG,IAAI,GAAG,cAAc,MAAM,CAAC,GAAG,IAAI,CAAC;AAE/E,YAAM,QAAQ,KAAK,MAAM,uCAAuC;AAChE,UAAI,MAAO,QAAO,CAAC,KAAK,SAAS,MAAM,CAAC,CAAC,CAAC;AAE1C,aAAO,CAAC,UAAU,QAAQ;AAAA,IAC5B;AACA,eAAW,QAAQ,OAAO;AACxB,YAAM,MAAM,cAAc,KAAK,IAAI;AACnC,UAAI,QAAQ,OAAO,IAAI,GAAG;AAC1B,UAAI,UAAU,IAAI,KAAK,IAAI,SAAS,GAAG,GAAG,IAAI,UAAU,OAAO,IAAI,KAAM,QAAQ,CAAC,CAAE,GAAG,QAAQ,KAAK,IAAI;AAAA,IAC1G;AACA,UAAM,cAAc,CAAC,GACnB,UAAU,CAAC,CAAC,CAAC,GAAkB,CAAC,CAAC,GAAkB,OAAO,MAAM,YAAY,IAAI,MAAM,YAAY,KAAK,EAAE,cAAc,CAAC,OAAO,IAAI,iBAAiB,IAAI,CAAC,SAAS,CAAC,OAAO,OAAO,IAAI,YAAY,OAAO,IAAI,YAAY,KAAK,EAAE,GAAG,OAClO,SAAS,CAAC,MAAc,MAAM,OAAO,IAAI,IAAI,MAAO,MAAM,OAAO,OAAO,IAAI,MAAO,MAAM,kBAAkB,IAAI,CAAE,GAAG,MACpH,YAAY,CAAC,GAAM,GAAM,KAAK,OAAO,EAAE,IAAI,GAAG,KAAK,OAAO,EAAE,IAAI,GAAG,OAAO,GAAG,CAAC,MAAM,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,IAAI,GAAG,CAAC,OAAO,IAAI,mBAAmB,IAAI,EAAE,SAAS,EAAE,OAAO,OAAO,IAAI,YAAY,OAAO,IAAI,YAAY,KAAK,OAAO,EAAE,IAAI,QAAQ,EAAE,IAAI,IAAI,GAAG,OACnQ,gBAAgB,IAAI,UAAU,cAAc,OAAO,IAAI,aAAa,MAAM,GAAG,CAAC,GAAG,OAAO,QAAQ,CAAC,EAAE,KAAK,OAAO;AACjH,eAAW,CAAC,EAAE,KAAK,KAAK,aAAc,OAAM,KAAK,SAAS,GAAG,YAAY,KAAK,GAAG,KAAK;AACtF,WAAO,IAAI,QAAQ,WAAW,GAAG,SAAS,QAAQ,QAAQ,UAAU,GAAG;AAAA,EACzE;;;AC/CO,MAAM,WAAN,cAAuB,SAAqB;AAAA,IAA5C;AAAA;AAGL,0BAAO,gBAAmD;AAC1D,0BAAO,oBAAiE;AACxE,0BAAO,YAAW;AAClB,0BAAU,eAAsC;AAAA;AAAA,IAEhC,QAAc;AAC5B,WAAK,KAAK,QAAQ,QAAQ,KAAK,QAAQ,IAAI,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,SAAS,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACtH;AAAA,IACA,MAAgB,UAAyB;AACvC,UAAI,KAAK,SAAU;AACnB,UAAI,OAAO,SAAS,aAAa;AAC/B,cAAMC,QAAQ,OAAe;AAC7B,QAAE,OAAe,wBAAwB,CAAC,SAAkBA,QAAO,GAAG,GAAG,OAAO,UAAU,UAAU,KAAK,SAAS,IAAK,MAAM,aAAa,OAAO,qBAAsB,QAAQ;AAAA,MACjL,MAAO,MAAK,SAAS;AAAA,IACvB;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,MAAG;AAhChC,YAAAC;AAgCoC,gBAAAA,MAAA,KAAK,MAAM,UAAS,SAApBA,IAAoB,OAAS,KAAK,KAAK,cAAc,KAAK;AAAA,SAAW,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAExI,WAAK,MAAM,GAAG,eAAe,KAAK,kBAAkB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC1I,WAAK,MAAM,GAAG,iBAAiB,KAAK,oBAAoB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC9F,WAAK,MAAM,GAAG,sBAAsB,KAAK,yBAAyB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AACxG,WAAK,MAAM,GAAG,iBAAiB,KAAK,oBAAoB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC9F,WAAK,MAAM,GAAG,gBAAgB,KAAK,mBAAmB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE5F,WAAK,KAAK,eAAe,QAAQ,EAAE,IAAI,MAAO,KAAK,MAAM,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM,MAAO,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC,GAAG,MAAM,KAAK;AAAA,IAC9I;AAAA,IAEU,iBAAiB,GAA2C;AACpE,UAAI,EAAE,YAAY,CAAC,KAAK,SAAU;AAClC,YAAM,UAAU,KAAK,UAAU,YAAY,YAAY,GACrD,SAAS,KAAK,KAAK,WAAW,MAAM;AACtC,UAAI,EAAE,SAAS,CAAC,QAAQ;AACtB,aAAK,KAAK,KAAK,mBAAmB,GAAG,YAAY;AACjD,gBAAQ,eAAe,EAAE,KAAK,KAAK,gBAAgB,EAAE,MAAM,KAAK,KAAK,MAAM;AAC3E,aAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,MAAM;AAAA,MACrD,WAAW,QAAQ;AACjB,gBAAQ,kBAAkB,IAAI;AAC9B,aAAK,MAAM,UAAU,UAAU,OAAO,gBAAgB;AACtD,aAAK,MAAM,MAAM,OAAO;AAAA,MAC1B;AACA,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,mBAAmB,GAA6C;AACxE,UAAI,CAAC,KAAK,MAAM,MAAM,QAAQ,EAAE,SAAU;AAC1C,UAAI,EAAE,UAAU,KAAK,aAAc,SAAU,MAAK,iBAAkB,YAAY;AAChF,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,wBAAwB,GAAkD;AAClF,UAAI,CAAC,KAAK,MAAM,MAAM,QAAQ,EAAE,SAAU;AAC1C,WAAK,aAAc,cAAc,EAAE;AACnC,WAAK,iBAAkB,KAAK;AAC5B,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,mBAAmB,GAA6C;AACxE,UAAI,CAAC,KAAK,MAAM,MAAM,QAAQ,EAAE,SAAU;AAC1C,WAAK,aAAc,cAAc,EAAE,QAAQ;AAC3C,WAAK,iBAAkB,eAAe;AACtC,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,kBAAkB,GAA4C;AACtE,UAAI,CAAC,KAAK,MAAM,MAAM,QAAQ,EAAE,SAAU;AAC1C,UAAI,KAAK,aAAc,YAAY,EAAE,MAAO,MAAK,iBAAkB,aAAa;AAChF,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,WAAiB;AACzB,UAAI,CAAC,OAAO,KAAM;AAClB,YAAM,UAAU,KAAK,UAAU,YAAY,YAAY;AACvD,cAAQ,WAAW,EAAE,uBAAuB,OAAO,KAAK,MAAM,+BAA+B,gBAAgB,OAAO,KAAK,eAAe,eAAe,GAAG,KAAK,OAAO,QAAQ,CAAC;AAC/K,WAAK,eAAe,IAAI,KAAK,UAAU,aAAa;AACpD,WAAK,mBAAmB,IAAI,KAAK,UAAU,uBAAuB,KAAK,YAAY;AACnF,WAAK,iBAAiB,iBAAiB,KAAK,UAAU,sBAAsB,YAAY,KAAK,eAAe;AAC5G,OAAC,KAAK,cAAc,kBAAkB,KAAK,mBAAmB,KAAK,IAAI,IAAI,MAAM;AACjF,WAAK,MAAM,SAAS,OAAO,KAAK,WAAW;AAAA,IAC7C;AAAA,IAEA,MAAgB,mBAAkC;AAChD,YAAM,UAAU,KAAK,UAAU,YAAY,YAAY,EAAE,kBAAkB;AAC3E,UAAI,CAAC,QAAS;AACd,cAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK;AAC/C,YAAM,SAAS,KAAK,aAAa,GAAG,cAAc,GAAG,GACnD,UAAU,IAAI,OAAO,KAAK,MAAM,YAAY,IAAI,OAAO,KAAK,MAAM,UAAU,KAAK,MAAM,MAAM,KAAK,yBAAyB,KAAK,MAAM,MAAM,GAAG,CAAC,CAAC;AACnJ,cAAQ,cAAc,KAAK,MAAM,MAAM;AACvC,YAAM,QAAQ,UAAU,OAAO;AAC/B,UAAI,OAAQ,QAAO,cAAc,cAAc,QAAQ,cAAc,EAAE,gBAAgB,kBAAkB;AACzG,WAAK,MAAM,UAAU,UAAU,IAAI,gBAAgB;AACnD,WAAK,MAAM,MAAM,OAAO;AAAA,IAE1B;AAAA;AAAA,IAEU,gBAAgB,OAAsD;AAC9E,YAAM,cAAc,KAAK,aAAc;AACvC,UAAI,KAAK,MAAM,MAAM,SAAS,YAAa,MAAK,MAAM,MAAM,OAAO;AACnE,UAAI,CAAC,YAAa;AAClB,cAAQ,MAAM,OAAO;AAAA,QACnB,KAAK;AACH,iBAAO,MAAM,KAAK,MAAM,MAAM,cAAc,KAAK,aAAc;AAAA,QACjE,KAAK;AACH,iBAAO,MAAM,KAAK,MAAM,MAAM,SAAS,KAAK,aAAc;AAAA,QAC5D,KAAK;AACH,iBAAO,MAAM,KAAK,MAAM,MAAM,SAAS,KAAK,aAAc,cAAc;AAAA,QAC1E,KAAK;AACH,iBAAO,MAAM,KAAK,MAAM,MAAM,QAAQ,KAAK,aAAc;AAAA,QAC3D,KAAK;AACH,iBAAO,MAAM,KAAK,MAAM,OAAO,WAAW,KAAK,aAAc;AAAA,MACjE;AAAA,IACF;AAAA,IAEmB,YAAkB;AACnC,WAAK,kBAAkB,oBAAoB,KAAK,UAAU,sBAAsB,YAAY,KAAK,eAAe;AAChH,WAAK,MAAM,MAAM,QAAQ,KAAK,UAAU,YAAY,YAAY,EAAE,kBAAkB,IAAI;AACxF,WAAK,aAAa,QAAQ,GAAG,MAAM,UAAU;AAAA,IAC/C;AAAA,EACF;AAzHE,gBADW,UACY,YAAW;AAClC,gBAFW,UAEY,SAAQ;;;ACT1B,MAAM,WAAW,CAAC,GAAG,GAAG,CAAC;AAEzB,MAAM,WAAW,CAAC,oBAAoB,oBAAoB,QAAQ,YAAY,WAAW,yBAAyB,kBAAkB,cAAc,QAAQ,aAAa,QAAQ,aAAa,cAAc,UAAU,mBAAmB,UAAU,YAAY,YAAY,aAAa,oBAAoB,WAAW,cAAc,QAAQ,WAAW,SAAS;AAE/V,MAAM,eAAe,CAAC,WAAW,gBAAgB,SAAS;AAE1D,MAAM,gCAAuD,CAAC,IAAI,OAAO,SAAS;AAElF,MAAM,sBAAuD;AAAA,IAClE,SAAS;AAAA,IACT,OAAO;AAAA,IACP,QAAQ;AAAA,IACR,KAAK,CAAC,oBAAoB,UAAU,QAAQ,UAAU,WAAW,kBAAkB,WAAW,QAAQ,yBAAyB,kBAAkB;AAAA,IACjJ,QAAQ,CAAC,WAAW,gBAAgB,SAAS;AAAA,IAC7C,QAAQ;AAAA,MACN,GAAG,CAAC;AAAA,MACJ,GAAG,CAAC,UAAU,YAAY,QAAQ;AAAA,MAClC,GAAG,CAAC,GAAI,CAAC,YAAa,CAAC,QAAQ,aAAa,MAAM,IAAc,CAAC,GAAI,cAAc,UAAU,mBAAmB,WAAW,UAAU,YAAY,YAAY,aAAa,oBAAoB,WAAW,YAAY;AAAA,IACvN;AAAA,IACA,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,QACvC,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,QACrC,EAAE,OAAO,OAAO,SAAS,MAAM;AAAA,MACjC;AAAA,IACF;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,QACL,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,QAAQ,SAAS,OAAO;AAAA,UACjC,EAAE,OAAO,MAAM,SAAS,KAAK;AAAA,UAC7B,EAAE,OAAO,OAAO,SAAS,MAAM;AAAA,QACjC;AAAA,MACF;AAAA,MACA,UAAU;AAAA,MACV,OAAO;AAAA,QACL,MAAM;AAAA,QACN,UAAU,CAAC;AAAA,QACX,QAAQ;AAAA,UACN,OAAO;AAAA,UACP,SAAS;AAAA,QACX;AAAA,MACF;AAAA,MACA,OAAO;AAAA,MACP,SAAS;AAAA,MACT,WAAW;AAAA,MACX,SAAS;AAAA,MACT,aAAa;AAAA,MACb,aAAa;AAAA,IACf;AAAA,IACA,aAAa;AAAA;AAAA,EAEf;;;ACxDO,MAAM,eAAe;AAAA,IAC1B,UAAU;AAAA,IACV,OAAO;AAAA,IACP,UAAU;AAAA,IACV,iBAAiB;AAAA,IACjB,aAAa;AAAA,IACb,WAAW;AAAA,IACX,gBAAgB;AAAA,EAClB;;;ACDO,MAAM,aAAN,cAAyB,SAAoC;AAAA,IAKlE,YAAY,MAAkB,SAAS,KAAK,SAAS,QAAQ;AAC3D,YAAM,MAAM,QAAQ,EAAE,WAAW,CAAC,EAAE,CAAC;AAHvC,0BAAO;AAAA,IAIP;AAAA,IAEgB,OAAa;AAE3B,WAAK,KAAK,OAAO,GAAG,4BAA4B,CAAC,EAAE,MAAM,MAAM,SAAS,KAAK,OAAO,WAAW,KAAK,KAAK,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5I,WAAK,KAAK,OAAO,GAAG,mBAAmB,CAAC,EAAE,MAAM,QAAQ,EAAE,MAAM,KAAK,MAAM,EAAE,MAAM,SAAS,YAAY,CAAC,WAAW,KAAK,IAAI,KAAK,KAAK,OAAO,SAAS,UAAU,EAAE,CAAC,GAAG,GAAG,MAAM,GAAG,KAAK,KAAK,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEhO,YAAM,KAAK;AAAA,IACb;AAAA,IAEgB,QAAc;AAC5B,WAAK,YAAY,SAAS,OAAO,EAAE,WAAW,6BAA6B,CAAC;AAC5E,WAAK,MAAM,UAAU,OAAO,KAAK,SAAS;AAAA,IAC5C;AAAA,IACgB,UAAgB;AAC9B,WAAK,WAAW,OAAO;AAAA,IACzB;AAAA,IAEA,IAAW,QAAQ;AACjB,UAAI,CAAC,KAAK,UAAU,KAAK,OAAO,YAAY,CAAC,KAAK,QAAS,QAAO;AAClE,aAAO,KAAK,QAAQ,EAAE,SAAS,KAAK,KAAK,OAAO,IAAI,aAAa,KAAK,aAAa,KAAK,MAAM,WAAW,QAAQ,KAAK,QAAQ,GAAG,KAAK,OAAO,CAAC;AAAA,IAChJ;AAAA,IAEO,YAAY,MAAqD;AACtE,UAAI,CAAC,KAAK,QAAS;AACnB,YAAM,KAAK,KAAK,IAAI,EAAE,SAAS,GAC7B,WAAW,EAAE,IAAI,GAAG,MAAM,WAAW,EAAE;AACzC,UAAI,CAAC,KAAK,MAAO,QAAO,KAAK,gBAAgB,IAAI,QAAQ;AACzD,eAAS,YAAYC,YAAW,MAAM,KAAK,gBAAgB,EAAE,GAAG,KAAK,OAAO,KAAK,MAAM;AACvF,WAAK,MAAM,UAAU,KAAK,QAAQ;AAAA,IACpC;AAAA,IACO,eAAe,IAAkB;AACtC,YAAM,MAAM,KAAK,MAAM,UAAU,UAAU,CAAC,MAAM,EAAE,OAAO,EAAE;AAC7D,UAAI,QAAQ,GAAI,cAAa,KAAK,MAAM,UAAU,GAAG,EAAE,SAAS,GAAG,KAAK,MAAM,UAAU,OAAO,KAAK,CAAC;AAAA,IACvG;AAAA,IACO,gBAAgB,IAAY,MAA4B;AAC7D,YAAM,IAAI,QAAQ,KAAK,MAAM,UAAU,KAAK,CAAC,MAAM,EAAE,OAAO,EAAE;AAC9D,UAAI,CAAC,EAAG;AACR,WAAK,eAAe,EAAE;AACtB,UAAI,EAAE,SAAU,MAAK,KAAK,UAAU,EAAE,QAAQ;AAC9C,YAAM,EAAE,IAAIC,KAAI,SAASC,KAAI,OAAOC,KAAI,UAAUC,KAAI,WAAWC,KAAI,WAAW,GAAG,KAAK,IAAI;AAC5F,WAAK,QAAQ,EAAE,SAAS,EAAE,GAAG,OAAO,YAAY,OAAO,QAAQ,IAAI,EAAE,OAAO,CAAC,CAAC,EAAE,CAAC,MAAM,MAAM,MAAS,CAAC,EAAE,CAAC,GAAG,KAAK,KAAK,KAAK,uBAAuB,GAAG,KAAK,OAAO;AAAA,IACpK;AAAA,EACF;AAjDE,gBADW,YACY,YAAW;AAClC,gBAFW,YAEY,SAAQ;AAkD1B,MAAM,eAAe,CAAC,UAAsB,UAAiC,EAAE,MAAM,QAAQ,MAAM,aAAM,UAAU,iBAAiB,aAAa,MAAM,iBAAiB,OAAO,WAAW,QAAQ,SAAS,EAAE,WAAW,QAAQ,EAAE;;;AClDlO,MAAM,2BAAN,cAAuC,QAAiD;AAAA,IAAxF;AAAA;AAML,0BAAU,cAAiC;AAC3C,0BAAU,YAA+D;AACzE,0BAAU,iBAAgB;AA0G1B,0BAAU,eAAcC;AAAA,QACtB,OAAO,KAAiB,QAAQC,SAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,UAAU;AACnF,cAAI,CAACA,OAAO;AACZ,gBAAM,KAAK,KAAK,KAAK,SAAS,4BAA4B,IAAI,EAAE,CAAC,GAC/D,MAAM,iBAAiB,KAAK,KAAK,OAAO,SAAS,cAAc,MAAM,GACrE,MAAM,CAAC,GAAW,MAAe,MAAM,WAAW,kBAAmB,GAAG,EAAE,WAAW,KAAK,IAAI,QAAQ,QAAQ,IAAI,MAAM,SAAS,SAAS,MAAM,UAAU,UAAU,QAAQ,IAC5K,WAAW,IAAI,IAAI,MAAM,IAAI,IAAI,GACjC,aAAmD,CAAC,GACpD,UAAU,OAAO,IAAI,UAAU,OAAO,4BAA4B,GAAG,KAAK,KAAK,MAAM,UAAU,UAAU,OAAO,4BAA4B,GAAG,WAAW,QAAQ,CAAC,MAAM,EAAE,KAAK,UAAU,OAAO,oBAAoB,CAAC,GAAG,KAAK,kBAAkB,IAChP,gBAAgB,CAAC,MAAoBA,OAAM,SAAS,GAAG,MAAM,WAAW,QAAQ,CAAC,MAAM,EAAE,KAAK,UAAU,OAAO,oBAAoB,CAAC,GAAG,GAAG,UAAU,IAAI,oBAAoB;AAC9K,qBAAW,KAAK,CAAC,OAAO,YAAY,YAAY,UAAU;AACxD,uBAAW,KAAK,CAAC,QAAQ,UAAU,OAAO,GAAG;AAC3C,oBAAM,MAAM,MAAM,QAAQ,KAAK,KAAK,MAAM,MAAM,KAAK,KAAK,MAAM,OAAO,OAAO,EAAE,MAAM,GAAG,EAAE,CAAC,CAAC,CAAc,GACzG,OAAO,IAAI,CAAgC;AAC7C,kBAAI,EAAE,gBAAgB,gBAAgB,KAAK,QAAQ,CAAC,KAAK,KAAK,cAAc,mDAAmD,KAAK,IAAI,GAAG,CAAC,MAAM,SAAU,YAAW,KAAK,EAAE,KAAK,IAAI,GAAG,CAAC,GAAG,MAAM,KAAK,KAAK,CAAC;AAAA,YACjN;AACF,eAAK,kBAAkB,QAAQ,GAAG,IAAI,UAAU,IAAI,4BAA4B,GAAG,KAAK,KAAK,MAAM,UAAU,UAAU,IAAI,4BAA4B,GAAG,KAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACnM,gBAAM,MAAMA,OAAM,oDAAoD,OAAO,SAAS,SAAS,EAAE,KAAK,EAAE,GAAG,aAAa,OAAO,KAAK,YAAY,MAAM,GAAGA,OAAM,QAAQ,GAAG,EAAE,GAAG,WAAW,OAAO,SAAS,SAAS,QAAQ,KAAK,OAAO,CAAC;AACxO,gBAAM,UAAU,IAAI;AACpB,cAAI,CAACA,OAAM,SAAS,GAAG,EAAG;AAC1B,UAAAA,OAAM,gCAAgC,EAAE,IAAI,KAAK,UAAU,SAAS,CAAC;AACrE,cAAI,WAAW,QAAQ;AACrB,kBAAM,UAAU,IAAI;AACpB,gBAAI,CAACA,OAAM,SAAS,GAAG,EAAG;AAC1B,0BAAc,WAAW,CAAC,EAAE,IAAI,GAAGA,OAAM,mCAAmC,EAAE,IAAI,KAAK,UAAU,WAAW,CAAC,EAAE,IAAI,CAAC;AACpH,qBAAS,IAAI,GAAG,IAAI,WAAW,QAAQ,IAAK,OAAM,UAAU,GAAI,GAAGA,OAAM,SAAS,GAAG,MAAM,cAAc,WAAW,CAAC,EAAE,IAAI,GAAGA,OAAM,eAAe,EAAE,IAAI,KAAK,UAAU,WAAW,CAAC,EAAE,IAAI,CAAC;AAAA,UAC7L;AACA,gBAAM,UAAU,WAAW,SAAS,MAAO,IAAI;AAC/C,cAAIA,OAAM,SAAS,GAAG,EAAG,eAAc,GAAGA,OAAM,0CAA0C,EAAE,IAAI,KAAK,UAAU,iBAAiB,WAAW,KAAK,CAAC,GAAG,QAAQ;AAAA,QAC9J;AAAA,QACA,EAAE,KAAK,gBAAgB,UAAU,EAAE;AAAA,MACrC;AAAA;AAAA,IA/IA,WAAkB,OAAO;AACvB,aAAO;AAAA,IACT;AAAA,IAMgB,OAAa;AAC3B,WAAK,KAAK,OAAO,GAAG,mCAAmC,CAAC,EAAE,MAAM,MAAM,KAAK,kBAAkB,QAAQ,QAAQ,QAAQ,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC7J;AAAA,IAEO,kBAAkB,SAA2B,KAAK,SAAS,QAAQ,UAAgB;AACxF,iBAAW,KAAK,KAAK,KAAK,SAAS,4BAA4B,IAAI,GAAG;AACpE,UAAE,QAAQ,SAAS,EAAE,QAAQ,UAAU;AACvC,cAAM,MAAM,CAAC,aAAa,KAAK,QAAQ,EAAE,QAAQ,MAAM,IAAI,WAAW;AACtE,UAAE,QAAQ,mBAAmB,OAAQ,EAAE,YAAY,QAAQ,KAAM;AACjE,UAAE,GAAG,GAAY,eAAe,EAAE,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5F,UAAE,GAAG,GAAY,eAAe,EAAE,QAAQ,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClF,UAAE,GAAG,GAAY,eAAe,EAAE,WAAW,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC1F;AACA,iBAAW,KAAK,CAAC,GAAG,KAAK,KAAK,SAAS,kCAAkC,IAAI,GAAG,GAAG,KAAK,KAAK,OAAO,GAAG;AACrG,UAAE,QAAQ,SAAS,EAAE,QAAQ,UAAU;AACvC,cAAM,MAAM,CAAC,aAAa,KAAK,QAAQ,EAAE,QAAQ,MAAM,IAAI,WAAW;AACtE,UAAE,QAAQ,WAAW,OAAO,QAAQ,KAAK;AACzC,UAAE,GAAG,GAAY,eAAe,EAAE,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5F,UAAE,GAAG,GAAY,eAAe,EAAE,YAAY,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC1F,UAAE,GAAG,GAAY,eAAe,EAAE,QAAQ,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvF,UAAE,GAAG,GAAY,eAAe,EAAE,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC9F;AAAA,IACF;AAAA,IAEU,gBAAgB,GAAoB;AAC5C,YAAM,EAAE,QAAQ,GAAG,aAAa,IAAI;AACpC,UAAI,CAAC,GAAG,WAAW,EAAE,QAAQ,qBAAqB,OAAQ;AAC1D,UAAI,EAAE,QAAQ,sDAAsD,EAAG,QAAO,EAAE,eAAe;AAC/F,mBAAc,gBAAgB;AAC9B,WAAK,aAAa;AAClB,MAAAC,uBAAsB,OAAO,EAAE,UAAU,IAAI,4BAA4B,GAAG,KAAK,KAAK,MAAM,UAAU,UAAU,IAAI,4BAA4B,IAAI,KAAK,MAAM;AAC/J,WAAK,gBAAgBC,YAAW,OAAO,EAAE,UAAU,OAAO,4BAA4B,GAAG,KAAK,KAAK,MAAM,UAAU,UAAU,OAAO,4BAA4B,IAAI,KAAM,KAAK,MAAM;AACrL,UAAI,EAAE,QAAQ,WAAW,aAAa,EAAE,eAAe,QAAQ,WAAW,UAAW;AACrF,YAAM,EAAE,MAAM,MAAM,IAAI,KAAK,aAAa,GAAG,IAAI;AACjD,cAAQ,KAAK,KAAK,OAAO,MAAM,KAAK;AACpC,WAAK,WAAW,EAAE,QAAQ,EAAE,eAAgB,OAAO,MAAM,MAAM;AAAA,IACjE;AAAA,IAEU,aAAmB;AAC3B,mBAAa,KAAK,aAAa;AAAA,IACjC;AAAA,IAEU,cAAc,GAAc,IAAI,EAAE,QAA6B;AACvE,UAAI,CAAC,GAAG,QAAS;AACjB,QAAE,UAAU,OAAO,4BAA4B,GAAG,KAAK,KAAK,MAAM,UAAU,UAAU,OAAO,4BAA4B;AACzH,WAAK,WAAW,KAAK,aAAa;AAClC,UAAI,EAAE,QAAQ,WAAW,aAAa,EAAE,eAAe,QAAQ,WAAW,UAAW,SAAQ,KAAK,KAAK,OAAO,KAAK,aAAa,CAAC,GAAG,CAAC;AACrI,WAAK,WAAW,GAAG,KAAK,YAAY,EAAE,QAAQ,SAAgB;AAAA,IAChE;AAAA,IAEU,gBAAgB,GAAoB;AAC5C,OAAC,KAAK,UAAU,EAAE,MAAqB,KAAK,KAAK,cAAe,EAAE,OAAuB,UAAU,IAAI,oBAAoB;AAAA,IAC7H;AAAA,IAEU,eAAe,GAAoB;AAC3C,YAAM,EAAE,QAAQ,GAAG,SAAS,GAAG,aAAa,IAAI;AAChD,UAAI,KAAK,UAAU,CAAC,EAAG;AACvB,QAAE,eAAe;AACjB,UAAI,aAAc,cAAa,aAAa;AAC5C,WAAK,KAAK;AAAA,QACR;AAAA,QACA,MAAM;AACJ,cAAI,EAAE,QAAQ,WAAW,WAAW;AAClC,kBAAM,YAAY,eAAe,GAAG,KAAK,EAAE,iBAA8B,4FAA4F,GAAG,IAAI;AAC5K,gBAAI,CAAC,UAAW;AAChB,iBAAK,UAAU,OAAO,aAAa,KAAK,SAAS,OAAO,KAAK,UAAW;AACxE,iBAAK,WAAW,EAAE,QAAQ,GAAG,OAAO,UAAU;AAC9C,mBAAO,EAAE,aAAa,KAAK,YAAa,SAAS;AAAA,UACnD;AACA,gBAAM,YAAY,eAAe,GAAG,KAAK,EAAE,iBAA8B,mDAAmD,CAAC;AAC7H,sBAAY,EAAE,aAAa,KAAK,YAAa,SAAS,IAAI,EAAE,OAAO,KAAK,UAAW;AACnF,cAAI,CAAC,EAAE,QAAQ,OAAQ,YAAW,MAAM,KAAK,KAAK,QAAS,MAAK,KAAK,gBAAgB,EAAE;AAAA,QACzF;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEU,gBAAgB,GAAoB;AAC5C,OAAC,KAAK,UAAU,EAAE,MAAqB,KAAM,EAAE,OAAuB,UAAU,OAAO,oBAAoB;AAAA,IAC7G;AAAA,IAEU,UAAU,GAAgB,OAAO,KAAK,YAAqB;AACnE,aAAO,CAAC,MAAM,WAAW,EAAE,QAAQ,aAAa,UAAW,EAAE,QAAQ,WAAW,KAAK,QAAQ,WAAW,EAAE,QAAQ,WAAW,aAAa,KAAK,QAAQ,WAAW;AAAA,IACpK;AAAA,IAIU,aAAa,QAAqB,OAAO,OAAqD;AACtG,UAAI,MAAM;AACV,YAAM,MAAO,EAAE,GAAG,QAAQ,GAAG,UAAU,GAAG,QAAQ,EAAY,CAAC,GAAG,OAAO,cAAe,QAAQ,EAAE,QAAQ,MAAM,CAAc,GAC5H,MAAM,KAAK,KAAK,SAAS,2EAA2E,IAAI;AAC1G,UAAI,QAAQ,CAAC,GAAG,MAAM,EAAE,SAAS,MAAM,MAAM,MAAO,EAAE,GAAG,QAAQ,GAAG,aAAa,GAAG,aAAa,GAAG,YAAY,EAAY,CAAkB,EAAE;AAChJ,aAAO,OAAO,EAAE,MAAM,MAAM,KAAK,OAAO,QAAQ,KAAK,KAAK,QAAe,MAAM,GAAG,EAAE,IAAI,MAAM;AAAA,IAChG;AAAA,IAEO,aAAmB;AACxB,YAAM,KAAK,CAAC,OAAoB,GAAG,QAAQ,WACzC,SAAS,CAAC,MAAiB,SAAS,UAAU,CAAC,SAAS,WAAW,IAAI,GAAI,gBAAgB,cAAc,CAAC,GAAG,IAAI,CAAC,IAAI,MAAM,KAAK,KAAK,KAAK,UAA2C,EAAE,GAAI,WAAW,gBAAgB,eAAe,KAAK,KAAK,SAAS,UAAU,WAAW,EAAE,EAAE,OAAO,OAAO;AAClS,WAAK,SAAS,aAAa,MAAM,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,IAAI,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,IAAI,QAAQ,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,IAAI,KAAK,CAAC;AACxJ,WAAK,SAAS,aAAa,SAAS,OAAO,KAAK,KAAK,OAAO,MAAM;AAClE,WAAK,SAAS,aAAa,SAAS,EAAE,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,GAAG,GAAG,CAAC,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ,IAAI,GAAG,GAAG,OAAO,KAAK,KAAK,MAAM,OAAO,CAAC,EAAE,KAAK,CAAC,EAAE;AAAA,IACpd;AAAA,EAkCF;AAjJE,gBADW,0BACY,WAAU;AAIjC,gBALW,0BAKY,SAAQ;;;ACA1B,MAAM,mBAAN,cAA+B,SAA6B;AAAA,IAejE,YAAY,MAAkB,SAAS,KAAK,SAAS,cAAc;AACjE,YAAM,MAAM,MAAM;AAbpB,0BAAO,YAAW,oBAAI,IAAqC;AAC3D,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAU,YAAW,oBAAI,QAAoE;AAC7F,0BAAU,YAAW,oBAAI,QAAuE;AAChG,0BAAU,aAA2B,CAAC;AACtC,0BAAU;AACV,0BAAU;AACV,0BAAU;AAIR,YAAM,MAAM,YAAY,IAAI,wBAAwB;AACpD,UAAI,IAAK,MAAK,YAAY,IAAI,IAAI,KAAK,MAAM,KAAK,OAAO,SAAS;AAAA,IACpE;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,qBAAqB,KAAK,aAAa,SAAS,OAAO,EAAE,WAAW,gEAAgE,GAAG,EAAE,UAAU,IAAI,QAAQ,UAAU,CAAC;AACxL,WAAK,KAAK,IAAI,qBAAqB,KAAK,aAAa,SAAS,OAAO,EAAE,WAAW,iCAAiC,GAAG,EAAE,UAAU,IAAI,QAAQ,MAAM,CAAC;AACrJ,WAAK,KAAK,IAAI,wBAAwB,KAAK,gBAAgB,SAAS,OAAO,EAAE,WAAW,oCAAoC,CAAC;AAC7H,WAAK,SAAS,EAAE,KAAK,CAAC,GAAG,QAAQ,CAAC,GAAG,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE;AACrE,WAAK,OAAO,MAAM,EAAE,MAAM,KAAK,WAAW,MAAM,GAAG,QAAQ,KAAK,WAAW,QAAQ,GAAG,OAAO,KAAK,WAAW,OAAO,EAAE;AACtH,WAAK,OAAO,SAAS,EAAE,MAAM,KAAK,YAAY,OAAO,SAAS,OAAO,EAAE,WAAW,uCAAuC,CAAC,EAAE;AAC5H,iBAAW,KAAK,SAAU,MAAK,OAAO,OAAO,CAAC,IAAI,EAAE,MAAM,KAAK,WAAW,MAAM,GAAG,QAAQ,KAAK,WAAW,QAAQ,GAAG,OAAO,KAAK,WAAW,OAAO,EAAE;AACtJ,WAAK,QAAQ,EAAE,KAAK,CAAC,GAAG,QAAQ,KAAK,OAAO,QAAQ,QAAQ,EAAE,GAAG,CAAC,GAAG,GAAG,CAAC,GAAG,GAAG,CAAC,EAAE,EAAE;AACpF,WAAK,UAAU,CAAC,GAAG,OAAO,OAAO,KAAK,OAAO,GAAG,GAAG,GAAG,OAAO,OAAO,KAAK,OAAO,MAAM,EAAE,IAAI,CAAC,MAAM,OAAO,OAAO,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC,MAAM,EAAE,IAAI;AAE9I,WAAK,OAAO,OAAO,MAAM,OAAO,KAAK,OAAO,OAAO,IAAI;AACvD,iBAAW,KAAK,SAAU,MAAK,cAAc,OAAO,SAAS,OAAO,EAAE,WAAW,0DAA0D,CAAC,uDAAuD,GAAG,EAAE,UAAU,IAAI,QAAQ,UAAU,CAAC,CAAC;AAC1O,WAAK,KAAK,IAAI,mBAAmB,OAAO,KAAK,YAAY,KAAK,OAAO,OAAO,OAAO,KAAK,aAAa;AAErG,WAAK,KAAK,OAAO,IAAI,gCAAgC,CAAC,MAAM,oBAAoB,CAAC,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEvH,WAAK,KAAK,OAAO,GAAG,6BAA6B,KAAK,WAAW,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACpG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1G,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1G,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEhH,WAAK,WAAW,QAAQ;AAAA,IAC1B;AAAA,IACgB,UAAgB;AAC9B,iBAAW,KAAK,CAAC,KAAK,YAAY,KAAK,WAAW,eAAe,KAAK,aAAa,EAAG,IAAG,OAAO;AAAA,IAClG;AAAA,IAEgB,OAAa;AAE3B,WAAK,KAAK,OAAO,GAAG,8CAA8C,CAAC,EAAE,MAAM,MAAO,KAAK,MAAM,UAAU,QAAQ,gBAAgB,OAAO,KAAK,GAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAClL,WAAK,KAAK,OAAO,GAAG,kCAAkC,CAAC,GAAG,OAAO,KAAK,KAAK,UAAU,MAAM,QAAQ,OAAO,KAAK,QAAQ,EAAE,cAAc,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AACtK,WAAK,KAAK,OAAO,GAAG,qCAAqC,CAAC,EAAE,MAAM,MAAM,KAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEnL,WAAK,WAAW,KAAK;AAErB,WAAK,oBAAoB,GAAG,MAAM,KAAK;AAAA,IACzC;AAAA,IAEU,UAAU,EAAE,eAAe,EAAE,MAAM,EAAE,GAA0D;AACvG,UAAI,CAAC,SAAS,OAAO,KAAK,EAAG;AAC7B,YAAM,EAAE,MAAM,QAAQ,MAAM,IAAI,mBAAmB,KAAqB;AACxE,WAAK,YAAY,KAAK,YAAY,CAAE,KAAK,MAAM,IAAI,OAAO,KAAK,QAAQ,MAAM,KAAK,OAAO,IAAI,IAAI,GAAK,KAAK,MAAM,IAAI,SAAS,KAAK,QAAQ,QAAQ,KAAK,OAAO,IAAI,MAAM,GAAK,KAAK,MAAM,IAAI,QAAQ,KAAK,QAAQ,OAAO,KAAK,OAAO,IAAI,KAAK,CAAE,CAAC;AACjP,WAAK,SAAS,KAAK,MAAM,IAAI,MAAM,IAAI,GAAG,KAAK,SAAS,KAAK,MAAM,IAAI,QAAQ,MAAM,GAAG,KAAK,SAAS,KAAK,MAAM,IAAI,OAAO,KAAK,GAAG,KAAK,KAAK,QAAQ,SAAS,KAAK,OAAO,aAAa,KAAK,WAAW,kBAAkB,KAAK;AAAA,IACjO;AAAA,IAEU,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,GAA6D;AAC7G,eAAS,CAAC,OAAO,KAAK,KAAK,KAAK,SAAS,KAAK,MAAM,QAAQ,KAAK,GAAG,KAAK,KAAK,QAAQ,SAAS,KAAK,OAAO,aAAa,KAAK,WAAW,kBAAkB,KAAK;AAAA,IACjK;AAAA,IAEU,aAAa,EAAE,eAAe,EAAE,MAAM,EAAE,GAA6D;AAC7G,UAAI,CAAC,SAAS,OAAO,KAAK,EAAG;AAC7B,iBAAW,KAAK,UAAU;AACxB,cAAM,EAAE,MAAM,QAAQ,MAAM,IAAI,mBAAoB,MAAkC,CAAC,CAAC;AACxF,aAAK,YAAY,KAAK,cAAc,SAAS,IAAI,CAAC,GAAkB,CAAE,KAAK,MAAM,OAAO,CAAC,EAAE,OAAO,KAAK,QAAQ,MAAM,KAAK,OAAO,OAAO,CAAC,EAAE,IAAI,GAAK,KAAK,MAAM,OAAO,CAAC,EAAE,SAAS,KAAK,QAAQ,QAAQ,KAAK,OAAO,OAAO,CAAC,EAAE,MAAM,GAAK,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ,KAAK,QAAQ,OAAO,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,CAAE,CAAC;AACvT,aAAK,SAAS,KAAK,MAAM,OAAO,CAAC,EAAE,MAAM,IAAI,GAAG,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,EAAE,QAAQ,MAAM,GAAG,KAAK,SAAS,KAAK,MAAM,OAAO,CAAC,EAAE,OAAO,KAAK;AAAA,MACrJ;AACA,WAAK,KAAK,QAAQ,SAAS,KAAK,OAAO,aAAa,KAAK,WAAW,kBAAkB,KAAK;AAAA,IAC7F;AAAA,IAEU,aAAa,EAAE,MAAM,GAAmE;AAChG,UAAI,SAAS,CAAC,KAAK,SAAS,IAAI,QAAQ,EAAG,MAAK,SAAS,QAAQ;AACjE,WAAK,MAAM,UAAU,QAAQ,SAAS,OAAO,KAAK;AAAA,IACpD;AAAA,IAIO,SAAS,MAAc,OAAO,kBAAkB,KAAK,MAAM,KAAK,MAAO,KAAK,OAAe,IAAI,CAAC,GAAG;AACxG,aAAO,QAAQ,KAAK,SAAS,IAAI,MAAM,IAAI,GAAG,QAAQ;AAAA,IACxD;AAAA,IAIO,KAAK,MAAyC;AACnD,aAAO,KAAK,SAAS,IAAI,IAAI;AAAA,IAC/B;AAAA,IAGO,OAAO,MAAuC;AACnD,aAAO,KAAK,SAAS,IAAI,IAAI,GAAG;AAAA,IAClC;AAAA,IAEO,QAAQ,OAAqB,UAAiC;AACnE,aAAO,MAAM,WAAW,IAAK,MAAM,SAAS,MAAM,KAAK,KAAK,KAAK,MAAM,KAAK,KAAK,SAAS,MAAM,IAAI,WAAW,WAAW,MAAM,SAAS,UAAU,KAAK,KAAK,KAAK,UAAU,KAAK,KAAK,SAAS,UAAU,IAAI,WAAW,WAAW,WAAY;AAAA,IACjP;AAAA,IAEO,SAAS,MAAiB,OAA2B;AAC1D,UAAI,gBAAgB,eAAe,CAAC,KAAK,KAAM;AAC/C,UAAI,SAAS,KAAK,SAAS,IAAI,KAAK,IAAI;AACxC,OAAC,UAAU,KAAK,SAAS,IAAI,KAAK,MAAO,SAAS,mBAAmB,EAAE,WAAW,KAAK,MAAM,QAAQ,CAAC,OAAO,IAAI,YAAY,CAAC,QAAQ,KAAK,KAAK,EAAE,KAAK,KAAK,SAAS,EAAE,IAAI,QAAQ,CAAC,CAAE;AACtL,aAAO,KAAK,GAAG,KAAK,gBAAgB,KAAK,IAAI;AAAA,IAC/C;AAAA,IAEO,YAAY,SAAsB,OAA0B;AACjE,UAAI,SAAS,KAAK,SAAS,IAAI,OAAO;AACtC,OAAC,UAAU,KAAK,SAAS,IAAI,SAAU,SAAS,mBAAmB,EAAE,WAAW,SAAS,QAAQ,CAAC,SAAU,WAAW,OAAO,KAAK,MAAM,QAAQ,UAAW,KAAK,QAAQ,WAAa,YAAY,CAAC,SAAU,gBAAgB,cAAc,OAAO,KAAK,SAAS,KAAK,KAAM,CAAC,CAAE;AAC9Q,aAAO,OAAO,KAAK;AAAA,IACrB;AAAA,IAEO,WAAW,MAA0B;AAC1C,YAAM,OAAO,SAAS,OAAO,EAAE,WAAW,6CAA6C,IAAI,yBAAyB,GAAG,EAAE,UAAU,IAAI,SAAS,MAAM,UAAU,SAAS,UAAU,YAAY,GAAG,CAAC,GACjM,QAAQ,SAAS,OAAO,EAAE,WAAW,mDAAmD,IAAI,+BAA+B,GAAG,EAAE,SAAS,KAAK,CAAC;AACjJ,aAAO,MAAM,OAAO,IAAI,GAAG,EAAE,OAAO,KAAK;AAAA,IAC3C;AAAA,IAEU,sBAA4B;AACpC,iBAAW,MAAM,CAAC,GAAG,KAAK,SAAS,KAAK,OAAO,OAAO,IAAI,GAAG;AAC3D,aAAK,gBAAgB,EAAE;AACvB,aAAK,UAAU,MAAM,iBAAiB,IAAI,EAAE,aAAa,GAAG,QAAQ,WAAW,QAAQ,MAAM,GAAG,CAAC,GAAG,GAAG;AACvG,sBAAc,IAAI,MAAM,KAAK,gBAAgB,EAAE,GAAG,KAAK,MAAM;AAC7D,WAAG,iBAAiB,UAAU,KAAK,mBAAmB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC9F;AAAA,IACF;AAAA,IACO,kBAAkB,GAA2B;AAClD,YAAM,KAAK,EAAE;AACb,UAAI,GAAG,aAAa,EAAG,IAAG,QAAQ,cAAc;AAChD,SAAG,QAAQ,gBAAgB,OAAO,GAAG,gBAAgB,GAAG,QAAQ,aAAa,YAAY,GAAG,cAAc,GAAG,cAAc,EAAE;AAAA,IAC/H;AAAA,IAEO,gBAAgB,GAAsB;AAC3C,UAAI,CAAC,EAAE,YAAa;AACpB,UAAI,QACF,IAAwB,EAAE;AAC5B,SAAG;AACD,WAAG,aAAa,kBAAkB,iBAAiB,CAAC,EAAE,YAAY,SAAS,SAAS,OAAO;AAC3F,WAAG,aAAa,eAAe,OAAO;AACtC,YAAI,GAAG,QAAQ,cAAc,UAAU,CAAC,OAAQ,UAAS;AAAA,MAC3D,SAAU,IAAK,GAAG,sBAAsB;AACxC,WAAK,SAAS,IAAI,0BAA0B,GAAG,KAAK,WAAW,YAAY;AAC3E,WAAK,SAAS,IAAI,6BAA6B,GAAG,KAAK,cAAc,YAAY;AACjF,UAAI,EAAE,QAAQ,aAAa,UAAW;AACtC,cAAQ,aAAa,eAAe,MAAM;AAC1C,UAAI,EAAE,QAAQ,kBAAkB,OAAQ,GAAE,QAAQ,cAAc;AAChE,UAAI,EAAE,QAAQ,gBAAgB,UAAU,EAAE,eAAe,EAAE,eAAe,EAAE,eAAe,EAAE,cAAc,EAAE,YAAa,QAAO,MAAM,EAAE,eAAe,EAAE,gBAAgB,EAAE,QAAQ,cAAc;AAClM,QAAE,iBAAiB,UAAU,MAAO,EAAE,QAAQ,cAAc,SAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzG,QAAE,aAAa,EAAE,cAAc,EAAE;AAAA,IACnC;AAAA,IAEmB,YAAkB;AACnC,iBAAW,YAAY,KAAK,UAAW,oBAAmB,QAAQ;AAClE,WAAK,WAAW,QAAQ;AACxB,iBAAW,WAAW,KAAK,SAAS,OAAO,EAAG,SAAQ,QAAQ;AAC9D,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AArKE,gBADW,kBACY,YAAW;AAClC,gBAFW,kBAEY,SAAQ;;;AChB1B,MAAM,YAAY;AAAA,IACvB,eAAe,CAAC;AAAA,EAClB;;;ACGO,MAAM,UAAN,cAAsB,SAAoB;AAAA,IAA1C;AAAA;AAGL,0BAAO,aAAsB,CAAC,8BAA8B,uBAAuB;AACnF;AAAA,0BAAO,UAA0C,CAAC;AAAA;AAAA,IAElC,OAAa;AAb/B,UAAAC;AAeI,YAAM,UAAU,OAAO,QAAQ,KAAK,MAAM;AAC1C,WAAK,SAAS,IAAI,YAAY,OAAO,OAAO,qBAAqB;AAEjE,WAAK,KAAK,OAAO,IAAI,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAQ;AAlBpE,YAAAA;AAkBwE,gBAAC,KAAK,WAAW,eAAe,KAAK,OAAO,KAAK,IAAI,IAAI,OAAQ,MAAM,KAAK,IAAI,GAAG,IAAKA,MAAA,KAAK,QAAL,SAAAA,IAAA,OAAqB,MAAM;AAAA,SAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrN,WAAK,KAAK,OAAO,MAAM,KAAK,CAAC,KAAK,EAAE,QAAQ,EAAE,KAAK,KAAK,EAAE,MAAW,KAAK,WAAW,eAAe,KAAK,CAAC,OAAO,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,GAAG,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE1K,WAAK,MAAM,MAAM,qBAAqB,KAAK,iBAAiB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC/F,WAAK,MAAM,MAAM,sBAAsB,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEpF,WAAK,KAAK,MAAM,MAAM,8BAA8B,CAAC,MAAO,KAAK,SAAS,IAAI,wBAAwB,GAAG,KAAK,CAAC,MAAO,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzJ,WAAK,KAAK,MAAM,MAAM,+BAA+B,CAAC,MAAO,KAAK,SAAS,IAAI,yBAAyB,GAAG,KAAK,CAAC,MAAO,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE3J,WAAK,MAAM,GAAG,yBAAyB,KAAK,4BAA4B,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE9H,WAAK,KAAK,MAAM,GAAG,6BAA6B,CAAC,EAAE,OAAO,KAAK,MAAO,KAAK,MAAM,UAAU,QAAQ,WAAW,QAAQ,IAAK,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC9J,WAAK,KAAK,MAAM,GAAG,mCAAmC,CAAC,EAAE,OAAO,KAAK,MAAO,KAAK,MAAM,gBAAgB,QAAQ,WAAW,QAAQ,IAAK,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE1K,iBAAW,CAAC,GAAG,CAAC,KAAK,QAAS,OAAM,qBAAqBA,MAAA,KAAK,QAAL,OAAAA,IAAA,KAAmB,KAAK,OAAO,CAAC,IAAI,KAAK,IAAI,GAAG,CAAC;AAC1G,YAAM,KAAK;AAAA,IACb;AAAA,IAEA,MAAgB,2BAA2B,EAAE,MAAM,GAA8D;AAC/G,YAAM,QAAQ,SAAU,MAAM,KAAK,KAAK,KAAK,gBAAgB,GAAG,aAAa;AAC7E,iBAAW,KAAK,OAAO,KAAK,KAAK,SAAS,IAAI,aAAa,EAAE,OAAO,CAACC,OAAM,KAAK,SAAS,IAAI,cAAcA,EAAC,CAAC,EAAG,MAAK,SAAS,IAAI,CAAC,IAAI,QAAQ,QAAQ,QAAQ,SAAS,KAAK,OAAO,CAAC,CAAC;AAAA,IACxL;AAAA,IAEU,YAAY,KAAqB;AACzC,YAAM,SAAS,eAAe,WAAW,KAAK,GAAG,CAAC,IAChD,MAAM,iBAAiB,KAAK,MAAM,SAAS,EAAE,iBAAiB,MAAM;AACtE,aAAO;AAAA,IACT;AAAA,IACU,cAAc,KAAqB;AAC3C,YAAM,SAAS,aAAa,WAAW,KAAK,GAAG,CAAC,IAC9C,MAAM,MAAM,UAAU,KAAK,KAAK,KAAK,MAAM,UAAU,WAAW,CAAC,MAAM,EAAE,WAAW,MAAM,CAAC,GAAG,QAAQ,GAAG,MAAM,KAAK,EAAE;AACxH,aAAO,OAAO;AAAA,IAChB;AAAA,IAEU,eAAe,KAAa,OAAkB;AACtD,YAAM,SAAS,OAAO,KAAK,GACzB,SAAS,eAAe,WAAW,KAAK,GAAG,CAAC;AAC9C,iBAAW,MAAM,CAAC,KAAK,MAAM,WAAW,KAAK,MAAM,eAAe,EAAG,KAAI,MAAM,YAAY,QAAQ,MAAM;AAAA,IAC3G;AAAA,IACU,cAAc,KAAa,OAAkB;AACrD,YAAM,MAAM,aAAa,WAAW,KAAK,GAAG,CAAC;AAC7C,iBAAW,KAAK,KAAK,MAAM,UAAU,UAAW,GAAE,WAAW,GAAG,KAAK,KAAK,MAAM,UAAU,UAAU,OAAO,CAAC;AAC5G,WAAK,MAAM,UAAU,UAAU,IAAI,GAAG,GAAG,IAAI,KAAK,EAAE;AAAA,IACtD;AAAA,IAEU,IAAI,KAA8B;AAC1C,aAAO,KAAK,KAAK,UAAU,SAAS,GAAG,IAAI,kBAAkB,aAAa,EAAE,GAAG;AAAA,IACjF;AAAA,IACU,IAAI,KAAa,OAAkB;AAC3C,WAAK,KAAK,UAAU,SAAS,GAAG,IAAI,kBAAkB,gBAAgB,EAAE,KAAK,KAAK;AAAA,IACpF;AAAA,IAEO,kBAAwB;AAC7B,YAAM,EAAE,YAAY,GAAG,aAAa,EAAE,IAAI,KAAK,MAAM;AACrD,WAAK,SAAS,IAAI,cAAc,KAAK,IAAI,GAAG,CAAC,MAAM,CAAC,KAAK;AAAA,IAC3D;AAAA,EACF;AAlEE,gBADW,SACY,YAAW;AAClC,gBAFW,SAEY,SAAQ;AAkEjC,MAAM,SAAS;;;ACzER,MAAM,cAAc;AAAA,IACzB;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,IACA;AAAA;AAAA,EACF;AAEO,MAAM,eAAsC;AAAA,IACjD,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACL;;;ACRO,MAAM,aAAN,cAAyB,SAAuB;AAAA,IAIrC,OAAa;AAE3B,WAAK,MAAM,GAAG,gBAAgB,KAAK,mBAAmB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE5G,YAAM,KAAK;AAAA,IACb;AAAA,IAEA,MAAgB,kBAAkB,EAAE,MAAM,GAAqD;AAC7F,UAAI,CAAC,MAAO,QAAO,KAAK,KAAK,KAAK,UAAU,GAAG,WAAW;AAC1D,WAAK,KAAK,IAAI,OAAO,OAAO;AAC5B,YAAM,OAAO,KAAK,OAAQ,MAAM,QAAsB,CAAC,GAAG,WAAW,SAAS,KAAK,MAAM,IAAI,KAAK,MAAM,WAAW,sCAAsC,KAAK,MAAM,IAAI;AACxK,UAAI,KAAK,KAAK,MAAM,aAAa,EAAG,QAAO,KAAK,KAAK,KAAK,UAAU,GAAG,WAAW,IAAI;AACtF,UAAI,KAAK,QAAQ,SAAS,GAAG,KAAK,KAAK,OAAO,EAAE,eAAe,EAAG;AAClE,YAAM,MAAM,MAAM,KAAK,QAAQ,MAAM,EAAE,IAAI,GAAG,KAAK,KAAK,OAAO,EAAE,iBAAiB,aAAa,KAAK,KAAK,IAAI,kBAAkB,aAAa,aAAa,YAAY,UAAU,CAAC;AAChL,UAAI,QAAQ,MAAM;AAChB,cAAM,OAAO,KAAK,MAAM,MAAM;AAC9B,oBAAY,OAAO,KAAK,KAAK,cAAc,KAAK,MAAM,QAAQ,KAAK,GAAI,KAAK,MAAM,OAAO,cAAc,MAAQ,KAAK,MAAM,OAAO,SAAS,QAAS,gBAAgB;AAAA,MACrK,WAAW,QAAQ,YAAa,MAAK,KAAK,KAAK,UAAU,GAAG,WAAW,IAAI;AAAA,IAC7E;AAAA,EACF;AAtBE,gBADW,YACY,YAAW;AAClC,gBAFW,YAEY,SAAQ;;;ACN1B,MAAM,kBAA+C;AAAA,IAC1D,cAAc;AAAA,IACd,KAAK;AAAA,IACL,SAAS;AAAA,MACP,MAAM;AAAA,QACJ,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,OAAO,SAAS,MAAM;AAAA,UAC/B,EAAE,OAAO,SAAS,SAAS,QAAQ;AAAA,UACnC,EAAE,OAAO,SAAS,SAAS,QAAQ;AAAA,UACnC,EAAE,OAAO,OAAO,SAAS,MAAM;AAAA,UAC/B,EAAE,OAAO,QAAQ,SAAS,OAAO;AAAA,QACnC;AAAA,MACF;AAAA,MACA,WAAW;AAAA,MACX,OAAO;AAAA,IACT;AAAA,IACA,aAAa;AAAA,IACb,QAAQ;AAAA,EACV;;;ACfO,MAAM,eAAN,cAA2B,SAAwC;AAAA,IAYxE,YAAY,MAAkB,SAAS,KAAK,SAAS,UAAU;AAC7D,YAAM,MAAM,QAAQ,EAAE,aAAa,MAAM,CAAC;AAV5C,0BAAO,cAAa;AACpB,0BAAO,iBAAgB;AACvB,0BAAU,aAAY;AACtB,0BAAU,YAAW;AACrB,0BAAU,cAAa;AACvB,0BAAU,mBAAiC;AAC3C,0BAAU,kBAA2C;AACrD,0BAAU,kBAAgC;AAAA,IAI1C;AAAA,IAEgB,OAAa;AAC3B,YAAM,MAAM,MAAM,KAAK,KAAK,IAAI,mBAAmB,iBAAiB,eAAe,KAAK,wBAAwB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtJ,WAAK,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAElG,YAAM,KAAK;AAAA,IACb;AAAA,IAEO,SAAS,KAAqC;AACnD,UAAI,KAAK,WAAY;AACrB,WAAK,aAAa;AAClB,WAAK,YAAY,KAAK,MAAM,MAAM;AAClC,WAAK,WAAW,KAAK,MAAM,MAAM;AACjC,WAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,kBAAkB,GAAG,OAAO;AACvE,MAAAC,YAAW,QAAQ,eAAe,KAAK,OAAO,SAAS,KAAK,SAAS,KAAK,aAAa,GAAG,KAAK,MAAM;AAAA,IACvG;AAAA,IAEO,YAAY,OAAO,KAAK,OAAO,cAAoB;AACxD,cAAQ,MAAO,KAAK,MAAM,OAAO,eAAe,IAAK;AACrD,WAAK,MAAM,cAAc;AACzB,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,kBAAkB,GAAG,UAAU,OAAO,kBAAkB;AACrG,cAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,KAAM;AAAA,IAClD;AAAA,IAEO,OAAO,OAAO,KAAK,OAAO,cAAoB;AACnD,cAAQ,MAAO,KAAK,MAAM,OAAO,eAAe,CAAE;AAClD,WAAK,aAAa;AAClB,WAAK,MAAM,cAAc;AACzB,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,kBAAkB,GAAG,UAAU,IAAI,kBAAkB;AAClG,WAAK,MAAM,GAAG,gBAAgB,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvE,WAAK,kBAAkB,YAAY,KAAK,aAAa,KAAK,MAAM,MAAO,KAAK,SAAS,MAAM,GAAG,IAAI,IAAI,KAAK,MAAM;AAAA,IACnH;AAAA,IAEU,cAAoB;AAC5B,YAAM,SAAS,KAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,kBAAkB,GAAG;AAC/E,UAAI,OAAQ,QAAO,cAAc,GAAG,KAAK,UAAU;AACnD,UAAI,CAAC,KAAK,MAAM,MAAM,OAAQ,SAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK;AAC7E,cAAQ,MAAO,KAAK,MAAM,OAAO,cAAc,KAAK,MAAM,MAAM,cAAc,KAAK,aAAa,KAAK,SAAS,MAAM,GAAI;AAAA,IAE1H;AAAA,IAEU,cAAoB;AAC5B,UAAI,KAAK,MAAM,MAAM,OAAQ;AAC7B,UAAI,KAAK,iBAAiB;AACxB,aAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,YAAY;AACzD,gBAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK;AAC/C,sBAAc,KAAK,eAAe;AAClC,aAAK,kBAAkB;AAAA,MACzB,MAAO,MAAK,oBAAL,KAAK,kBAAoB,YAAY,KAAK,aAAa,KAAK,MAAM,MAAO,KAAK,SAAS,MAAM,GAAG,IAAI,IAAI,KAAK,MAAM;AAAA,IAC5H;AAAA,IAEO,WAAiB;AACtB,UAAI,CAAC,KAAK,WAAY;AACtB,WAAK,aAAa;AAClB,UAAI,KAAK,gBAAiB,eAAc,KAAK,eAAe;AAC5D,WAAK,MAAM,IAAI,gBAAgB,KAAK,WAAW;AAC/C,cAAQ,MAAO,KAAK,MAAM,OAAO,eAAe,KAAK,QAAS;AAC9D,WAAK,aAAa;AAClB,WAAK,MAAM,cAAc;AACzB,cAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,KAAK,OAAO,cAAc,KAAK,YAAY,KAAM;AAC3F,WAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACzC,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,kBAAkB,GAAG,UAAU,OAAO,4BAA4B,kBAAkB;AAAA,IACnI;AAAA,IAEU,uBAAuB,GAAuB;AACtD,UAAI,CAAC,IAAI,OAAO,OAAO,EAAE,WAAW,EAAE,EAAE,KAAK,KAAK,OAAO,QAAQ,KAAK,KAAK,KAAK,EAAE,WAAW,KAAK,KAAK,IAAI,qBAAqB,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,WAAY;AACvL,iBAAW,OAAO,CAAC,aAAa,WAAW,YAAY,aAAa,EAAG,MAAK,MAAM,WAAW,iBAAiB,KAAK,KAAK,sBAAsB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrK,WAAK,MAAM,WAAW,iBAAiB,cAAc,KAAK,uBAAuB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACxG,mBAAa,KAAK,cAAe;AACjC,WAAK,iBAAiBA;AAAA,QACpB,MAAM;AACJ,eAAK,MAAM,WAAW,oBAAoB,aAAa,KAAK,oBAAoB;AAChF,eAAK,gBAAgB;AACrB,gBAAM,IAAI,EAAE,WAAY,EAA4B,gBAAgB,CAAC,GAAG;AACxE,gBAAM,OAAO,KAAK,MAAM,UAAU,sBAAsB;AACxD,gBAAM,QAAQ,IAAI,KAAK;AACvB,eAAK,iBAAiB,SAAS,KAAK,QAAQ,MAAM,aAAa;AAC/D,cAAI,QAAQ,KAAK,OAAO,QAAQ,SAAS,QAAQ,KAAK,QAAQ,KAAK,OAAO,QAAQ,MAAO;AACzF,cAAI,KAAK,OAAO,OAAQ,YAAW,OAAO,CAAC,aAAa,WAAW,EAAG,MAAK,MAAM,WAAW,iBAAiB,KAAK,KAAK,wBAAwB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACtK,eAAK,SAAS,KAAK,cAAc;AAAA,QACnC;AAAA,QACA,KAAK,OAAO,QAAQ;AAAA,QACpB,KAAK;AAAA,MACP;AAAA,IACF;AAAA,IAEU,uBAAuB,GAA2B;AAC1D,UAAK,EAAiB,SAAS,SAAS,EAAG;AAC3C,WAAK,KAAK;AAAA,QACR;AAAA,QACA,MAAM;AACJ,gBAAM,OAAO,KAAK,MAAM,UAAU,sBAAsB,GACtD,IAAK,EAAiB,WAAY,EAAiB,gBAAgB,CAAC,GAAG,SACvE,UAAU,IAAI,KAAK,QAAQ,KAAK,QAAQ,MAAM,aAAa;AAC7D,cAAI,YAAY,KAAK,eAAgB,CAAC,KAAK,iBAAiB,SAAU,KAAK,SAAS,GAAG,KAAK,SAAS,KAAK,cAAc;AAAA,QAC1H;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEU,uBAA6B;AACrC,mBAAa,KAAK,cAAe;AACjC,WAAK,gBAAgB;AACrB,UAAI,KAAK,eAAe,KAAK,KAAK,KAAK,eAAe,GAAG,kBAAkB,KAAK,EAAG,CAAAA,YAAW,KAAK,UAAU,KAAK,KAAK,MAAM;AAC7H,iBAAW,OAAO,CAAC,aAAa,WAAW,YAAY,aAAa,EAAG,MAAK,MAAM,WAAW,oBAAoB,KAAK,KAAK,oBAAoB;AAC/I,iBAAW,OAAO,CAAC,aAAa,WAAW,EAAG,MAAK,MAAM,WAAW,oBAAoB,KAAK,KAAK,sBAAsB;AACxH,WAAK,MAAM,WAAW,oBAAoB,cAAc,KAAK,qBAAqB;AAAA,IACpF;AAAA,IAEU,wBAA8B;AACtC,OAAC,KAAK,MAAM,WAAW,QAAQ,QAAQ,KAAK,KAAK,qBAAqB;AAAA,IACxE;AAAA,EACF;AA9HE,gBADW,cACY,YAAW;AAClC,gBAFW,cAEY,SAAQ;;;ACP1B,MAAM,cAAoC;AAAA,IAC/C,UAAU;AAAA,IACV,KAAK;AAAA,IACL,kBAAkB;AAAA,EACpB;;;ACEO,WAAS,UAAU,CAAC,GAAG,GAAG,CAAC,GAAgB;AAChD,WAAO,QAAQ,IAAI,QAAQ,IAAI,QAAQ;AAAA,EACzC;AAEO,WAAS,UAAU,CAAC,GAAG,GAAG,CAAC,GAAgB;AAChD,WAAO,KAAK,IAAI,GAAG,GAAG,CAAC,IAAI,KAAK,IAAI,GAAG,GAAG,CAAC;AAAA,EAC7C;AAEO,WAAS,YAAY,CAAC,GAAG,GAAG,CAAC,GAAQ,IAAI,IAAS;AACvD,UAAM,KAAK,UAAU,CAAC,GAAG,GAAG,CAAC,CAAC,GAC5B,IAAI,KAAK,IAAI,IAAI,KAAK,KAAK,MAAM,IAAI,EAAE,MAAM,MAAM,MAAM;AAC3D,WAAO,CAAC,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,EAAE,IAAI,CAAC,MAAM,MAAM,GAAG,KAAK,GAAG,GAAG,CAAC;AAAA,EAC/D;AAMA,iBAAsB,iBAAiB,KAAmH,SAAwB,OAAO,MAAM,OAAqC;AAClO,QAAI,MAAM,GAAG;AACX,YAAM,MAAM,IAAI,QAA0B,CAAC,KAAK,QAAQ;AACtD,cAAM,IAAI,SAAS,OAAO,EAAE,KAAK,OAAO,GAAG,GAAG,aAAa,aAAa,QAAQ,MAAM,IAAI,CAAC,GAAG,SAAS,MAAM,IAAI,IAAI,MAAM,qBAAqB,GAAG,EAAE,CAAC,EAAE,CAAC;AAAA,MAC3J,CAAC;AACH,QAAK,KAAwC,OAAQ,OAAO,IAAsC;AAClG,UAAM,IAAI,KAAK,IAAI,IAAK,IAA6C,OAAQ,IAA6C,MAAM,GAC9H,IAAI,SAAS,UAAU,EAAE,OAAO,GAAG,QAAQ,EAAE,CAAC,GAC9C,IAAI,EAAE,WAAW,MAAM,EAAE,oBAAoB,MAAM,OAAO,MAAM,CAAC;AACnE,UAAM,IAAI,KAAK,SAAS,KAAK,UAAU,GAAG,UAAU,KAA0B,GAAG,GAAG,GAAG,CAAC,GAAG,GAAG,aAAa,GAAG,GAAG,GAAG,CAAC,EAAE,QAA6B,MAClJ,KAA6B,CAAC,GAC9B,KAA0B,CAAC;AAC7B,aAAS,IAAI,GAAG,KAAK,GAAG,UAAU,IAAI,KAAK,GAAG;AAC5C,UAAI,EAAG,IAAI,CAAC,IAAI,IAAK;AACrB,YAAMC,KAAI,EAAG,CAAC,IAAI,KAChBC,KAAI,EAAG,IAAI,CAAC,IAAI,KAChBC,KAAI,EAAG,IAAI,CAAC,IAAI;AAClB,YAAM,IAAKF,MAAK,KAAOC,MAAK,IAAKC;AACjC,SAAG,CAAC,KAAK,GAAG,CAAC,KAAK,KAAK;AACvB,SAAG,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,EAAG,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAG,IAAI,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC,IAAI,EAAG,IAAI,CAAC,CAAC,IAAI,CAAC,EAAG,CAAC,GAAG,EAAG,IAAI,CAAC,GAAG,EAAG,IAAI,CAAC,CAAC;AAAA,IAC/G;AACA,UAAM,OAAO,OAAO,KAAK,EAAE,EACxB,KAAK,CAAC,GAAGA,OAAM,GAAGA,EAAC,IAAI,GAAG,CAAC,CAAC,EAC5B,MAAM,GAAG,CAAC,EACV,IAAI,CAAC,OAAO,EAAE,KAAK,GAAG,KAAK,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,MAAM,IAAI,GAAG,CAAC,CAAC,CAAC,EAAS,EAAE;AAC/E,QAAI,CAAC,KAAK,OAAQ,QAAO;AACzB,UAAM,CAAC,GAAG,GAAG,CAAC,IAAI,YAAY,KAAK,OAAO,CAAC,KAAK,SAAU,UAAU,IAAI,GAAG,IAAI,UAAU,KAAK,GAAG,IAAI,MAAM,MAAO,KAAK,CAAC,CAAC,EAAE,KAAK,EAAE;AAClI,WAAO,WAAW,QAAQ,MAAM,KAAK,OAAO,KAAK,OAAO,KAAK,KAAK,GAAG,SAAS,EAAE,EAAE,MAAM,CAAC,CAAC,KAAK,OAAO,QAAQ,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,GAAG,GAAG,CAAC;AAAA,EAChJ;AAEO,WAAS,oBAAoB,QAA2B,SAAyC;AACtG,UAAM,QAAQ,QAAQ,aAAa,GAAG,GAAG,OAAO,SAAS,GAAG,OAAO,UAAU,CAAC;AAC9E,aAAS,IAAI,GAAG,IAAI,MAAM,KAAK,SAAS,GAAG,KAAK;AAC9C,YAAM,QAAQ,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,MAAM,KAAK,IAAI,IAAI,CAAC,KAAK;AACvF,MAAC,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,MAAQ,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI,MAAQ,MAAM,KAAK,IAAI,IAAI,CAAC,IAAI;AAAA,IAC3F;AACA,YAAQ,aAAa,OAAO,GAAG,CAAC;AAAA,EAClC;;;ACpDO,MAAM,YAAN,cAAwB,SAAsB;AAAA,IAA9C;AAAA;AAGL,0BAAO,gBAAkC,SAAS,QAAQ;AAC1D,0BAAO,iBAA0C,KAAK,aAAa,WAAW,MAAM,EAAE,OAAO,MAAM,CAAC;AAAA;AAAA,IAEpF,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,MAAG;AAnBhC,YAAAC;AAmBoC,gBAAAA,MAAA,KAAK,MAAM,UAAS,iBAApBA,IAAoB,eAAiB,KAAK,KAAK,cAAc,KAAK,MAAM,SAAS,WAAW,CAAC,KAAK,OAAO;AAAA,SAAW,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEvL,WAAK,KAAK,OAAO,GAAG,2BAA2B,CAAC,EAAE,MAAM,MAAO,KAAK,MAAM,SAAS,eAAe,CAAC,OAAQ,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE9I,WAAK,KAAK,eAAe,WAAW,EAAE,IAAI,MAAM,KAAK,QAAQ,EAAE,GAAG,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AAChG,WAAK,KAAK,eAAe,WAAW,EAAE,IAAI,MAAM,KAAK,UAAU,UAAU,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC5G,WAAK,KAAK,eAAe,WAAW,EAAE,IAAI,MAAM,KAAK,UAAU,WAAW,GAAG,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC7G,YAAM,KAAK;AAAA,IACb;AAAA,IAIA,MAAa,QAAQ,UAAkB,IAAI,OAAO,QAAQ,KAAK,MAAM,MAAM,WAAW,GAAG,MAAM,OAAO,MAAM,GAAG,QAAQ,KAAK,MAAM,eAAiD;AA/BrL,UAAAA;AAgCI,UAAI,UAAU,KAAK,MAAM,SAAS;AAChC,YAAI,KAAK,KAAK,MAAM,kBAAmB,OAAM,KAAK,KAAK,MAAM;AAC7D,YAAI,KAAK,IAAI,MAAM,cAAc,IAAI,IAAI,QAAQ,CAAC,MAAM,YAAY;AAClE,WAAAA,MAAA,KAAK,KAAK,OAAM,sBAAhBA,IAAgB,oBAAsB,IAAI,QAAc,CAAC,QAAQ,MAAM,iBAAiB,MAAM,aAAa,eAAe,cAAc,MAAM,IAAI,IAAI,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC,CAAC;AAC7L,gBAAM,cAAc;AAAA,QACtB;AACA,aAAK,KAAK,MAAM,oBAAoB,MAAM,KAAK,KAAK,MAAM;AAAA,MAC5D;AACA,MAAC,KAAK,aAAa,QAAQ,MAAM,cAAc,KAAO,KAAK,aAAa,SAAS,MAAM,eAAe;AACtG,WAAK,cAAc,SAAS,KAAK,SAAS,IAAI;AAC9C,kBAAY,iBAAiB,KAAK,cAAc,SAAS,GAAG,KAAK,cAAc,MAAM;AACrF,WAAK,cAAc,UAAU,OAAO,GAAG,GAAG,KAAK,aAAa,OAAO,KAAK,aAAa,MAAM;AAC3F,WAAK,cAAc,SAAS;AAC5B,UAAI,QAAQ,KAAM,QAAO,EAAE,QAAQ,KAAK,cAAc,SAAS,KAAK,cAAc;AAClF,YAAM,QAAQ,KAAK,aAAa,SAAS,KAAK,aAAa,WAAY,MAAM,IAAI,QAAqB,CAAC,QAAQ,KAAK,aAAa,OAAO,GAAG,CAAC;AAC5I,aAAO,EAAE,MAAM,QAAQ,MAAM,KAAK,OAAO,IAAI,gBAAgB,IAAI,IAAI,GAAG;AAAA,IAC1E;AAAA,IAEA,MAAa,QAAQ,UAA6B,IAAI,OAAO,QAAQ,KAAK,MAAM,MAAM,WAAW,GAAkB;AACjH,UAAI,CAAC,KAAK,MAAM,SAAS,aAAc;AACvC,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,SAAS;AACtD,YAAMC,SAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAC/C,OAAO,gBAAgB,EAAE,MAAM,QAAQ,SAAS,QAAQ,KAAK,CAAC,GAC9D,OAAO,eAAe,YAAY,eAAe,YAAY,EAAE,MAAM,IAAI,IACzE,eAAeA,QAAO,QAAQ,aAAa,IAAI,OAAO,EAAE,OAAO,aAAa,KAAK,SAAS,IAAI,sBAAsB,GAAG,OAAO,OAAO,uBAAuB,KAAK,OAAO,KAAK,MAAM,SAAS,SAAS,SAAS,OAAO,OAAO,IAAI,GAAG,OAAO,GAAG,CAAC,GAC9O,QAAQ,MAAM,KAAK,QAAQ,SAAS,MAAM,OAAO,GAAG,KAAK,MAAM,OAA2B,GAC1F,WAAW,GAAG,KAAK,MAAM,SAAS,SAAS,SAAS,OAAO,IAAI,YAAY,eAAe,iBAAiB,EAAE,MAAM,IAAI,OAAO,QAAQ,mBAAmB,GAAG;AAC9J,YAAM,OAAO,MAAM;AACjB,QAAAA,QAAO,QAAQ,cAAc,EAAE,QAAQ,UAAU,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;AACtE,iBAAS,KAAK,EAAE,MAAM,MAAM,KAAe,UAAU,SAAS,CAAC,GAAG,QAAQ;AAC1E,QAAAA,QAAO,QAAQ,cAAc,EAAE,OAAO,KAAM,QAAQ,SAAS,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;AAAA,MACpF;AACA,YAAM,QAAQ,MAAM;AAClB,QAAAA,QAAO,QAAQ,cAAc,EAAE,QAAQ,WAAW,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;AACvE,kBAAU,QAAQ,EAAE,OAAO,KAAK,MAAM,SAAS,SAAS,SAAS,SAAS,MAAM,YAAY,IAAI,IAAI,OAAO,CAAC,IAAI,KAAK,CAAC,MAAM,IAAY,GAAG,UAAU,EAAE,MAAO,MAAM,KAAc,KAAK,CAAC,CAAC,EAAE,CAAC,EAAE;AAAA,UAC5L,MAAMA,QAAO,QAAQ,cAAc,EAAE,QAAQ,UAAU,IAAI,IAAI,SAAS,CAAC,EAAE,CAAC;AAAA,UAC5E,MAAMA,QAAO,MAAM,cAAc,EAAE,QAAQ,kBAAkB,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;AAAA,QAC1F,KAAKA,QAAO,KAAK,cAAc,EAAE,OAAO,KAAM,QAAQ,kBAAkB,IAAI,IAAI,SAAS,EAAE,KAAK,EAAE,CAAC;AAAA,MACrG;AACA,aAAO,MAAMA,QAAO,QAAQ,cAAc,EAAE,QAAQ,YAAY,IAAI,IAAI,OAAO,MAAM,KAAK,WAAW,KAAK,OAAO,kBAAkB,SAAS,EAAE,MAAM,MAAM,GAAG,SAAS,MAAM,IAAI,gBAAgB,MAAM,GAAG,EAAE,CAAC,IAAIA,QAAO,MAAM,cAAc,EAAE,QAAQ,oBAAoB,IAAI,GAAG,CAAC;AAAA,IACnR;AAAA,IAEA,MAAa,aAAa,EAAE,MAAM,IAAI,QAAQ,KAAK,MAAM,MAAM,WAAW,GAAG,cAAc,IAAI,IAAI,YAAY,MAAM,IAAI,YAAY,MAAM,GAAG,IAAI,CAAC,GAA2B;AAC5K,YAAM,MAAM,MAAM,YAAY,KAAK,KAAK,GAAG,IAAI,GAAG,YAAY,KAAK,KAAK,CAAC;AACzE,aAAO,KAAK,KAAK,KAAK,OAAO;AAC3B,cAAM,MAAM,MAAM,kBAAkB,MAAM,KAAK,QAAQ,IAAI,GAAG,MAAM,CAAC,GAAG,QAAQ,OAAO,IAAI;AAC3F,YAAI,OAAO,UAAU,GAAG,IAAI,OAAO,UAAU,GAAG,IAAI,IAAK,QAAO;AAAA,MAClE;AACA,aAAO;AAAA,IACT;AAAA,IAEA,MAAa,aAAa,MAAe,SAAU,KAAK,MAAM,QAA6B,QAAQ,SAAS,CAAC,GAA2B;AACtI,aAAO,iBAAiB,SAAS,UAAU,MAAM,KAAK,QAAQ,IAAI,OAAO,OAAQ,MAAM,KAAK,aAAa,MAAM,KAAM,QAAW,MAAM,CAAC,GAAG,MAAM;AAAA,IAClJ;AAAA,IAEO,UAAU,MAAgC,YAAkB;AACjE,WAAK,MAAM,MAAM,UAAU,KAAK,KAAK,SAAS,iBAAiB,MAAM,QAAQ,MAAO,KAAK,MAAM,OAAO,cAAc,MAAM,YAAY,KAAK,KAAK,GAAG,KAAK,MAAM,KAAK,MAAM,MAAM,cAAc,KAAK,OAAO,GAAG,KAAK,QAAQ,cAAc,KAAK,IAAI,KAAK,MAAM,YAAY,KAAK,KAAK,IAAI,KAAK,OAAO,GAAG,CAAC,IAAI,KAAK,OAAO,GAAI,GAAG,KAAK,MAAM,MAAO,KAAK,OAAO,GAAG,CAAC;AAAA,IAChW;AAAA,EACF;AA9EE,gBADW,WACY,YAAW;AAClC,gBAFW,WAEY,SAAQ;;;ACT1B,MAAM,sBAAmD;AAAA,IAC9D,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,WAAW;AAAA,IACX,WAAW;AAAA,IACX,OAAO;AAAA,IACP,eAAe;AAAA,IACf,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEO,MAAM,sBAAmD;AAAA,IAC9D,QAAQ;AAAA,IACR,YAAY;AAAA,IACZ,UAAU;AAAA,IACV,SAAS;AAAA,IACT,QAAQ;AAAA,IACR,QAAQ;AAAA,EACV;AAEO,MAAM,gBAA4C;AAAA,IACvD,OAAO,YAAY,QAAQ;AAAA,IAC3B,UAAU,YAAY,WAAW;AAAA;AAAA;AAAA,EAGnC;;;ACxBO,MAAM,iBAAN,cAAqC,QAA6B;AAAA,IAAlE;AAAA;AAEL,0BAAU,YAAW;AAAA;AAAA,IAEX,cAAc,EAAE,SAAS,MAAM,WAAW,GAAgE;AAClH,mBAAa,CAAC,WAAW,QAAQ,CAAC;AAClC,gBAAU,UAAU;AACpB,YAAM,OAAO,QAAQ,KAAK,MAAM,MAAM,WAAW,GAC/C,SAAS,QAAQ,aAAa,KAAK,OAAO,OAAO,CAAC,IAAI,YACtDC,QAAO,QAAQ,SAAS,MAAM,SAAS,CAAC,SACxC,SAAS,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,uBAAuB,GAC7E,SAAS,KAAK,KAAK,KAAK,eAAe,GAAG;AAC5C,WAAK,WAAW,MAAM,YAAY,KAAK,KAAK,GAAGA,OAAM,YAAY,KAAK,KAAK,CAAC;AAC5E,UAAI,OAAQ,QAAO,cAAc,GAAG,IAAI,GAAG,SAAS,KAAK,IAAI,KAAK,WAAW,IAAI,CAAC,CAAC,KAAK,SAAS,KAAK,UAAU,IAAI,CAAC,KAAK,aAAa,IAAI,IAAI,UAAU,KAAK,EAAE;AAAA,IAClK;AAAA,IAEU,WAAW,KAA8B,SAAiB,MAAoB;AACtF,YAAM,QAAQ,KAAK,SAAS,GAAG,GAC7B,QAAQ,SAAS,MAAM,KAAK,MAAM,MAAM,GAAG,IAAI,UAAU,MAAM,MAAM,KAAK,MAAM,MAAM,GAAG,IAAI,UAAU,MAAM;AAC/G,WAAK,KAAK,KAAM,cAAc,GAAyB,GAAG,oBAAoB,MAAM,GAAG,KAAK,MAAM,KAAK,GAAG,MAAM,GAAG,CAAC;AAAA,IACtH;AAAA,EACF;AApBE,gBADW,gBACY,YAAW;;;ACA7B,MAAM,kBAAN,cAA8B,eAAmC;AAAA,IAAjE;AAAA;AAML,0BAAU,SAAQ;AAClB,0BAAU,SAAQ;AAClB,0BAAU,QAA4D;AACtE,0BAAO,UAAS;AAChB,0BAAO,UAAS;AAChB,0BAAU,aAAY;AACtB,0BAAU,mBAAkB;AAC5B,0BAAU,mBAAkB;AAAA;AAAA,IAX5B,WAAkB,OAAO;AACvB,aAAO;AAAA,IACT;AAAA,IAWgB,OAAa;AAE3B,WAAK,KAAK,IAAI,mBAAmB,iBAAiB,cAAc,KAAK,aAAa,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC1H;AAAA,IAEU,UAAU,GAAwB;AAC1C,aAAO,CAAC,KAAK,KAAK,OAAO,YAAY,EAAE,SAAS,WAAW,KAAK,EAAE,WAAW,KAAK,KAAK,IAAI,qBAAqB,CAAC,KAAK,KAAK,KAAK,mBAAmB,GAAG;AAAA,IACxJ;AAAA,IAEU,YAAY,GAAqB;AACzC,UAAI,CAAC,KAAK,UAAU,CAAC,EAAG;AACxB,WAAK,UAAU;AACf,WAAK,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAC1B,WAAK,QAAQ,EAAE,QAAQ,CAAC,EAAE;AAC1B,WAAK,MAAM,UAAU,iBAAiB,aAAa,KAAK,YAAY,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACvG,WAAK,kBAAkBC,YAAW,MAAO,KAAK,YAAY,OAAQ,KAAK,OAAO,WAAW,KAAK,MAAM;AACpG,iBAAW,OAAO,CAAC,YAAY,aAAa,EAAG,MAAK,MAAM,UAAU,iBAAiB,KAAK,KAAK,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACnI;AAAA,IAEU,WAAW,GAAgB;AACnC,YAAM,KAAK;AACX,UAAI,GAAG,SAAS,SAAS,KAAK,KAAK,KAAK,KAAK,mBAAmB,GAAG,WAAY;AAC/E,SAAG,eAAe;AAClB,YAAM,KAAK,KAAK,QACd,OAAO,KAAK,MAAM,UAAU,sBAAsB,GAClD,IAAI,GAAG,QAAQ,CAAC,EAAE,SAClB,IAAI,GAAG,QAAQ,CAAC,EAAE,SAClB,SAAS,KAAK,IAAI,KAAK,QAAQ,CAAC,GAChC,SAAS,KAAK,IAAI,KAAK,QAAQ,CAAC;AAClC,WAAK,OAAO,EAAE,GAAG,IAAI,KAAK,OAAO,KAAK,QAAQ,MAAM,UAAU,QAAQ,GAAG,IAAI,KAAK,MAAM,KAAK,SAAS,MAAM,WAAW,MAAM;AAC7H,YAAM,QAAQ,KAAK,QAAQ,KAAK,MAC9B,OAAO,KAAK,QAAQ,KAAK;AAC3B,UAAI,SAAS,SAAS,GAAG,aAAa,QAAQ,GAAG,SAAS,QAAQ,KAAK,QAAQ,GAAG,OAAO;AACvF,YAAI,GAAG,UAAU;AACf,eAAK,SAAS;AACd,eAAK,MAAM,UAAU,iBAAiB,aAAa,KAAK,aAAa,EAAE,SAAS,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,QAC9G;AAAA,MACF,WAAW,SAAS,SAAS,GAAG,aAAa,OAAO,GAAG,SAAS,OAAO,KAAK,SAAS,GAAG,OAAO;AAC7F,YAAK,GAAG,UAAU,KAAK,MAAM,MAAM,WAAa,GAAG,cAAc,KAAK,MAAM,MAAM,QAAS;AACzF,eAAK,SAAS;AACd,eAAK,MAAM,UAAU,iBAAiB,aAAa,KAAK,aAAa,EAAE,SAAS,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,QAC9G;AAAA,MACF;AAAA,IACF;AAAA,IAEU,YAAY,GAAgB;AACpC,YAAM,KAAK;AACX,UAAI,KAAK,UAAW,QAAO,KAAK,UAAU;AAC1C,SAAG,eAAe;AAClB,WAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,uBAAuB,GAAG,OAAO;AAC5E,WAAK,KAAK;AAAA,QACR;AAAA,QACA,MAAM;AACJ,gBAAM,KAAK,KAAK,QACd,EAAE,aAAa,OAAO,cAAc,OAAO,IAAI,KAAK,MAAM,WAC1D,IAAI,GAAG,QAAQ,CAAC,EAAE,SAClB,IAAI,GAAG,QAAQ,CAAC,EAAE,SAClB,SAAS,IAAI,KAAK,OAClB,SAAS,IAAI,KAAK,OAClB,OAAO,UAAU,IAAI,MAAM,KAC3B,UAAU,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,QAAQ,GAAG,MAAM,KAAK,QAAQ,GAAG,SACtE,KAAK,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,SAAS,GAAG,GACxD,aAAa,IAAI,MAAM,SAAS,GAAG,SAAS;AAC9C,eAAK,cAAc,EAAE,SAAS,MAAM,WAAW,CAAC;AAAA,QAClD;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEU,YAAY,GAAgB;AACpC,YAAM,KAAK;AACX,UAAI,KAAK,aAAa,CAAC,KAAK,KAAK,WAAW,YAAY,EAAG,QAAO,KAAK,UAAU;AACjF,SAAG,eAAe;AAElB,WAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,KAAK,MAAM,MAAM,UAAU,wBAAwB,yBAAyB,GAAG,OAAO;AACjI,WAAK,KAAK;AAAA,QACR;AAAA,QACA,MAAM;AACJ,gBAAM,KAAK,KAAK,QACd,SAAS,KAAK,MAAM,UAAU,cAC9B,IAAI,GAAG,QAAQ,CAAC,EAAE,SAClB,SAAS,IAAI,KAAK,OAClB,OAAO,UAAU,IAAI,MAAM,KAC3B,UAAU,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,MAAM,KAAK,SAAS,GAAG;AAC1E,eAAK,QAAQ;AACb,eAAK,WAAW,KAAK,MAAM,MAAM,UAAU,WAAW,cAAc,SAAS,IAAI;AAAA,QACnF;AAAA,QACA;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEU,YAAkB;AAC1B,UAAI,KAAK,QAAQ;AACf,aAAK,SAAS;AACd,aAAK,MAAM,UAAU,oBAAoB,aAAa,KAAK,WAAW;AACtE,aAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,uBAAuB,GAAG,SAAS;AAC9E,YAAI,CAAC,KAAK,UAAW,MAAK,MAAM,OAAO,cAAc,KAAK;AAAA,MAC5D;AACA,UAAI,KAAK,QAAQ;AACf,aAAK,SAAS;AACd,aAAK,MAAM,UAAU,oBAAoB,aAAa,KAAK,WAAW;AACtE,qBAAa,KAAK,eAAe;AACjC,aAAK,kBAAkBA,YAAW,OAAO,KAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,qBAAqB,GAAG,SAAS,GAAG,KAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,yBAAyB,GAAG,SAAS,IAAI,KAAK,OAAO,eAAe,KAAK,MAAM;AAClP,YAAI,CAAC,KAAK,UAAW,MAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AAAA,MAChE;AACA,mBAAa,KAAK,eAAe;AACjC,WAAK,YAAY;AACjB,WAAK,MAAM,UAAU,oBAAoB,aAAa,KAAK,UAAU;AACrE,iBAAW,OAAO,CAAC,YAAY,aAAa,EAAG,MAAK,MAAM,UAAU,oBAAoB,KAAK,KAAK,SAAS;AAAA,IAC7G;AAAA,EACF;AA9HE,gBADW,iBACY,WAAU;AAIjC,gBALW,iBAKY,SAAQ;;;ACL1B,MAAM,kBAAN,cAA8B,eAAmC;AAAA,IAAjE;AAAA;AAML,0BAAU,aAA2B;AACrC,0BAAU,QAA4D;AACtE,0BAAU,UAAS;AACnB,0BAAU,UAAS;AACnB,0BAAU,eAAc;AACxB,0BAAU,kBAAiB;AAC3B,0BAAU,UAAS;AACnB,0BAAU,YAAW;AAAA;AAAA,IAXrB,WAAkB,OAAO;AACvB,aAAO;AAAA,IACT;AAAA,IAWgB,OAAa;AAE3B,WAAK,MAAM,UAAU,iBAAiB,SAAS,KAAK,aAAa,EAAE,SAAS,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC1G;AAAA,IAEU,UAAU,GAAwB;AAC1C,aAAO,CAAC,KAAK,MAAM,MAAM,UAAU,CAAC,KAAK,KAAK,OAAO,YAAY,EAAE,WAAW,KAAK,KAAK,IAAI,qBAAqB,CAAC,KAAK,MAAM,OAAO,UAAU,CAAC,KAAK,MAAM,OAAO,UAAU,CAAC,KAAK,KAAK,KAAK,mBAAmB,GAAG,eAAe,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,KAAK,WAAW,gBAAgB;AAAA,IAC7S;AAAA,IAEU,YAAY,GAAqB;AACzC,UAAI,CAAC,KAAK,UAAU,CAAC,EAAG;AACxB,QAAE,eAAe;AACjB,WAAK,YAAY,aAAa,KAAK,SAAS,IAAI,KAAK,WAAW,CAAC;AACjE,WAAK,YAAYC,YAAW,KAAK,YAAY,KAAK,OAAO,SAAS,KAAK,MAAM;AAC7E,WAAK,WAAW,CAAC;AAAA,IACnB;AAAA,IAEU,WAAW,EAAE,SAAS,GAAG,SAAS,EAAE,GAAqB;AACjE,YAAM,OAAO,KAAK,MAAM,UAAU,sBAAsB;AACxD,WAAK,OAAO,EAAE,GAAG,IAAI,KAAK,OAAO,KAAK,QAAQ,MAAM,UAAU,QAAQ,GAAG,IAAI,KAAK,MAAM,KAAK,SAAS,MAAM,WAAW,MAAM;AAC7H,WAAK,SAAS,KAAK,cAAc;AACjC,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAEU,WAAW,EAAE,SAAS,GAAG,QAAQ,QAAQ,SAAS,GAAqB;AAC/E,eAAS,WAAW,SAAS;AAC7B,YAAM,KAAK,KAAK,QACd,OAAO,KAAK,MAAM,UAAU,sBAAsB,GAClD,QAAQ,WAAW,KAAK,SAAS,KAAK,OACtC,SAAS,WAAW,KAAK,QAAQ,KAAK;AACxC,UAAI,WAAW,CAAC,UAAU,QAAQ,GAAG;AACrC,iBAAW,KAAK,eAAe;AAC/B,YAAM,QAAQ,YAAY,IAAI,MAAM;AACpC,iBAAW,KAAK,IAAI,QAAQ;AAC5B,UAAI,UAAU,UAAU;AACtB,YAAI,CAAC,GAAG,YAAY,KAAK,OAAQ,QAAO,KAAK,WAAW;AACxD,aAAK,SAAS;AACd,aAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,uBAAuB,GAAG,OAAO;AAC5E,aAAK,cAAc,EAAE,SAAS,UAAU,MAAM,OAAO,YAAY,KAAK,eAAe,CAAC;AACtF,YAAI,SAAU;AAAA,MAChB;AACA,UAAI,QAAQ;AACV,YAAI,KAAK,QAAQ;AACf,gBAAM,KAAK,MAAM,GAAG,KAAK,IAAK,KAAK,UAAU,MAAO,GAAG,SAAS,GAAG,SAAS,GAAG;AAC/E,eAAK,iBAAiB,IAAI,MAAM,SAAS,GAAG,SAAS;AACrD,iBAAO,KAAK,cAAc,EAAE,SAAS,UAAU,MAAM,OAAO,YAAY,KAAK,eAAe,CAAC;AAAA,QAC/F;AACA,cAAM,SAAU,KAAK,MAAM,MAAM,WAAW,CAAC,GAAG,UAAY,KAAK,MAAM,MAAM,UAAU,CAAC,GAAG,YACzF,eAAe,IAAI,KAAK,OAAO,QAAQ,MAAM,UAAU;AACzD,YAAI,UAAU,iBAAiB,KAAK,MAAM,EAAG,QAAO,KAAK,WAAW;AACpE,aAAK,SAAS;AAEd,aAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,KAAK,MAAM,MAAM,UAAU,wBAAwB,yBAAyB,GAAG,OAAO;AACjI,cAAM,QAAQ,CAAC,UAAU,IAAI,MAAM,KACjC,WAAW,MAAM,GAAG,KAAK,IAAI,MAAM,GAAG,SAAS,GAAG,MAAM,KAAK,SAAS,GAAG;AAC3E,aAAK,WAAW,KAAK,MAAM,MAAM,UAAU,WAAW,cAAc,UAAU,KAAK;AAAA,MACrF;AAAA,IACF;AAAA,IAEU,aAAmB;AAC3B,WAAK,YAAY;AACjB,UAAI,KAAK,QAAQ;AACf,aAAK,SAAS;AACd,aAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACzC,aAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,qBAAqB,GAAG,SAAS,GAAG,KAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,yBAAyB,GAAG,SAAS;AAAA,MACjK;AACA,UAAI,KAAK,QAAQ;AACf,aAAK,SAAS;AACd,aAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,uBAAuB,GAAG,SAAS;AAC9E,aAAK,MAAM,OAAO,cAAc,KAAK;AAAA,MACvC;AAAA,IACF;AAAA,EACF;AAtFE,gBADW,iBACY,WAAU;AAIjC,gBALW,iBAKY,SAAQ;;;ACA1B,MAAM,cAAN,cAA0B,SAAsC;AAAA,IAQrE,YAAY,MAAkB,SAAS,KAAK,SAAS,SAAS;AAC5D,YAAM,MAAM,QAAQ,EAAE,aAAa,MAAM,CAAC;AAN5C,0BAAO;AACP,0BAAO;AACP,0BAAO,kBAA0C;AACjD,0BAAU,kBAAiB;AAIzB,YAAM,WAAW,YAAY,IAAI,eAAe,GAC9C,WAAW,YAAY,IAAI,eAAe;AAC5C,mBAAa,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK,IAAI,aAAa,KAAK,QAAQ,IAAI,SAAS,KAAK,MAAM,KAAK,OAAO,KAAK;AAAA,IAC5I;AAAA,IAEgB,OAAa;AAC3B,YAAM,MAAM,MAAM;AAEhB,sBAAc,KAAK,KAAK,IAAI,mBAAmB,KAAK,aAAa,KAAK,gBAAgB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC5H,mBAAW,MAAM,CAAC,KAAK,KAAK,IAAI,mBAAmB,KAAK,KAAK,IAAI,qBAAqB,GAAG;AACvF,cAAI,iBAAiB,SAAS,KAAK,gBAAgB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzF,cAAI,iBAAiB,eAAe,KAAK,kBAAkB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClF,cAAI,iBAAiB,WAAW,KAAK,eAAe,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1F,cAAI,iBAAiB,WAAW,KAAK,kBAAkB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC7F,qBAAW,OAAO,CAAC,eAAe,aAAa,QAAQ,EAAG,KAAI,iBAAiB,KAAK,KAAK,0BAA0B,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzJ,cAAI,iBAAiB,cAAc,KAAK,uBAAuB,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,QACvG;AAEA,aAAK,OAAO,KAAK,GAAG,KAAK,OAAO,KAAK;AAAA,MACvC;AACA,WAAK,KAAK,QAAQ,QAAQ,IAAI,IAAI,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAElG,YAAM,KAAK;AAAA,IACb;AAAA,IAEgB,QAAc;AAC5B,WAAK,OAAO,QAAQ,GAAG,KAAK,OAAO,QAAQ;AAAA,IAC7C;AAAA,IAEU,iBAAuB;AAC/B,WAAK,KAAK,KAAK,kBAAkB,GAAG,MAAM;AAAA,IAE5C;AAAA,IAEU,iBAAiB,GAAqB;AAC9C,QAAE,eAAe;AAAA,IACnB;AAAA,IAEU,YAAY,GAAqB;AACzC,UAAI,EAAE,WAAW,KAAK,KAAK,IAAI,kBAAmB;AAClD,UAAI,KAAK,KAAK,KAAK,mBAAmB,GAAG,eAAe,KAAK,KAAK,KAAK,eAAe,GAAG,kBAAkB,KAAK,EAAG;AACnH,UAAI,aAAa,CAAC,KAAK,KAAK,WAAW,kBAAkB,KAAK,CAAC,KAAK,MAAM,OAAO,WAAW,CAAC,KAAK,MAAM,OAAO,UAAU,CAAC,KAAK,KAAK,KAAK,eAAe,GAAG,gBAAgB,CAAC,KAAK,KAAK,WAAW,SAAS,GAAI,EAAC,oBAAoB,KAAK,KAAK,SAAS,QAAQ,SAAS,KAAK,KAAK,KAAK,MAAM,UAAU,UAAU,OAAO,mBAAmB;AAC1U,UAAI,CAAC,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,OAAO,MAAO,CAAC,KAAK,MAAM,OAAO,KAAK,OAAO,KAAK,IAAI,CAAC,KAAK,MAAM,MAAM,KAAK,OAAO,KAAK,GAAa,KAAK,OAAO,UAAU,YAAY,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK,MAAM,OAAO,SAAS,eAAe,WAAW;AAAA,IAC5R;AAAA,IAEU,eAAe,GAAqB;AAC5C,YAAM,EAAE,SAAS,GAAG,QAAQ,OAAO,IAAI;AACvC,UAAI,WAAW,KAAK,KAAK,IAAI,kBAAmB;AAChD,YAAM,OAAO,KAAK,MAAM,UAAU,sBAAsB,GACtD,MAAM,IAAI,KAAK,OAAO,KAAK,QAAQ,OAAO,UAAU,IAAI,KAAK,OAAO,KAAK,QAAQ,OAAO,SAAS;AACnG,UAAI,KAAK,MAAM,eAAe,QAAQ,KAAK,gBAAgB;AACzD,aAAK,gBAAgB;AACrB,YAAI,WAAW,EAAG;AAAA,MACpB;AACA,UAAI,QAAQ,YAAY,KAAK,OAAO,SAAU,QAAO,MAAO,KAAK,MAAM,OAAO,KAAK,OAAO,QAAQ,IAAI,CAAC,KAAK,MAAM,MAAM,KAAK,OAAO,QAAQ,GAAa,KAAK,OAAO,aAAa,YAAY,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK,MAAM,OAAO,SAAS,eAAe,WAAW;AAChS,UAAI,KAAK,MAAM,eAAe,WAAW,EAAG;AAC5C,UAAI,CAAC,KAAK,MAAM,YAAa,MAAK,iBAAiB,GAAuB;AAC1E,WAAK,KAAK,KAAK,eAAe,GAAG,KAAK,QAAQ,UAAU,KAAK,SAAS,KAAK,OAAO,CAAC,KAAK,SAAS,KAAK,IAAI;AAC1G,oBAAc,GAAG,EAAE,QAAQ,KAAK,KAAK,KAAK,eAAe,GAAG,aAAa,CAAC;AAAA,IAC5E;AAAA,IAEU,cAAc,EAAE,OAAO,GAAe,IAAI,QAA6B;AAC/E,WAAK,iBAAiB,OAAO,CAAC,EAAE,QAAQ,gBAAgB,MAAM,GAAG,SAAS,aAAa,GAAG,eAAe,SAAS,UAAU;AAAA,IAC9H;AAAA,IACU,iBAAiB,EAAE,OAAO,GAAkB,IAAI,QAA6B;AACrF,WAAK,GAAG,SAAS,aAAa,GAAG,eAAe,SAAS,eAAe,KAAK,eAAgB,GAAE,KAAK;AAAA,IACtG;AAAA,IAEU,yBAAyB,GAAgB;AACjD,YAAM,EAAE,QAAQ,YAAY,IAAI,GAC9B,UAAU,KAAK,KAAK,KAAK,kBAAkB;AAC7C,OAAC,CAAC,eAAe,CAAC,cAAc,SAAS,KAAK;AAC9C,qBAAgB,OAAuB,QAAQ,kCAAkC,KAAK,aAAa,SAAS,kBAAkB,EAAE;AAAA,IAClI;AAAA,IACU,wBAA8B;AACtC,MAAAC,YAAW,MAAM,CAAC,aAAa,CAAC,KAAK,MAAM,UAAU,QAAQ,QAAQ,KAAK,KAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK,GAAG,GAAG,KAAK,MAAM;AAAA,IACtI;AAAA,IAEO,iBAAiB,KAA6B;AACnD,UAAI,KAAK,MAAM,YAAa;AAC5B,WAAK,MAAM,UAAU,iBAAiB,SAAS,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC3F,MAAC,KAAK,MAAM,cAAc,MAAQ,KAAK,iBAAiB;AAAA,IAC1D;AAAA,IACO,kBAAwB;AAC7B,UAAI,CAAC,KAAK,MAAM,YAAa;AAC7B,WAAK,MAAM,UAAU,oBAAoB,SAAS,KAAK,cAAc;AACrE,MAAC,KAAK,MAAM,cAAc,OAAS,KAAK,iBAAiB;AAAA,IAC3D;AAAA,IAEmB,YAAkB;AACnC,WAAK,OAAO,QAAQ,GAAG,KAAK,OAAO,QAAQ,GAAG,MAAM,UAAU;AAAA,IAChE;AAAA,EACF;AArGE,gBADW,aACY,YAAW;AAClC,gBAFW,aAEY,SAAQ;;;ACV1B,MAAM,iBAAiB,CAAC,SAAS,SAAS,UAAU,WAAW,aAAa,aAAa,cAAc,QAAQ,OAAO,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,KAAK,GAAG;AAEtK,MAAM,2BAA2B,CAAC,QAAQ,UAAU,cAAc,gBAAgB,kBAAkB;AAEpG,MAAM,aAAsC;AAAA,IACjD,UAAU;AAAA,IACV,eAAe;AAAA,IACf,WAAW,CAAC,SAAS,aAAa,WAAW,aAAa,cAAc,QAAQ,KAAK;AAAA,IACrF,WAAW;AAAA,MACT,MAAM;AAAA,MACN,MAAM;AAAA,MACN,WAAW;AAAA,MACX,MAAM;AAAA,MACN,MAAM;AAAA,MACN,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,SAAS;AAAA,MACT,UAAU;AAAA,MACV,YAAY;AAAA,MACZ,cAAc;AAAA,MACd,gBAAgB;AAAA,MAChB,gBAAgB;AAAA,MAChB,kBAAkB;AAAA,MAClB,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,SAAS;AAAA,MACT,WAAW;AAAA,MACX,kBAAkB;AAAA,MAClB,SAAS;AAAA,MACT,YAAY;AAAA,MACZ,UAAU;AAAA,MACV,oBAAoB,CAAC,KAAK,GAAG;AAAA,MAC7B,sBAAsB,CAAC,KAAK,GAAG;AAAA,MAC/B,oBAAoB;AAAA,MACpB,oBAAoB;AAAA,MACpB,qBAAqB;AAAA,MACrB,qBAAqB;AAAA,MACrB,2BAA2B;AAAA,MAC3B,uBAAuB;AAAA,MACvB,4BAA4B;AAAA,MAC5B,uBAAuB;AAAA,MACvB,UAAU;AAAA,MACV,MAAM;AAAA,MACN,SAAS;AAAA,IACX;AAAA,IACA,QAAQ;AAAA,IACR,WAAW;AAAA,IACX,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,MAAM;AAAA,QACJ,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,QAAQ;AAAA,QACN,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,YAAY;AAAA,QACV,MAAM;AAAA,QACN,OAAO;AAAA,MACT;AAAA,MACA,cAAc;AAAA,QACZ,MAAM;AAAA,MACR;AAAA,MACA,kBAAkB,CAAC;AAAA,IACrB;AAAA,EACF;;;ACpEO,WAAS,uBAAuB,aAA4C,UAAyC;AAC1H,UAAM,OAAO,MAAM,QAAQ,WAAW,IAAI,cAAc,cAAc,CAAC,WAAW,IAAI,CAAC;AACvF,WAAO,CAAC,KAAK,SAAS,gBAAM,KAAK,IAAI,CAAC,MAAM,cAAc,CAAC,EAAE,QAAQ,KAAK,OAAO,CAAC,EAAE,KAAK,MAAM,CAAC,KAAK,IAAI,UAAU,SAAS,oBAAQ,SAAS,CAAC,CAAC,MAAM,EAAE,EAAE,OAAO,OAAO,EAAE,KAAK,QAAK;AAAA,EACrL;AAEO,WAASC,qBAAoB,aAA4C,UAAyC;AACvH,UAAM,WAAW,uBAAuB,aAAa,QAAQ;AAC7D,WAAO,WAAW,MAAM,QAAQ,OAAO;AAAA,EACzC;;;ACFO,MAAM,WAAN,cAAuB,SAAqB;AAAA,IAA5C;AAAA;AAGL,0BAAO,kBAAiB;AACxB,0BAAU,eAAcC,SAAQ,CAAC,SAAmB,MAAM,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,0GAAqG,EAAE,GAAG,aAAa,OAAO,KAAK,YAAY,MAAM,GAAG,KAAK,OAAO,QAAQ,GAAG,EAAE,GAAG,QAAQ,KAAK,OAAO,CAAC,GAAI,EAAE,KAAK,kBAAkB,UAAU,EAAE,EAAE;AAAA;AAAA,IAEzU,OAAa;AAE3B,WAAK,KAAK,MAAM,GAAG,gBAAgB,KAAK,oBAAoB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEnF,WAAK,KAAK,MAAM,GAAG,qBAAqB,KAAK,oBAAoB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExF,WAAK,KAAK,OAAO,GAAG,0BAA0B,KAAK,oBAAoB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC9F,WAAK,KAAK,OAAO,GAAG,YAAY,KAAK,oBAAoB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEhF,WAAK,KAAK,eAAe,aAAa,EAAE,IAAI,KAAK,uBAAuB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACxG,WAAK,KAAK,eAAe,KAAK,EAAE,IAAI,KAAK,uBAAuB,UAAU,EAAE,OAAO,UAAU,GAAG,SAAS,KAAK,CAAC;AAC/G,WAAK,KAAK,eAAe,UAAU,EAAE,IAAI,KAAK,cAAc,UAAU,EAAE,OAAO,UAAU,GAAG,SAAS,KAAK,CAAC;AAC3G,WAAK,KAAK,eAAe,aAAa,EAAE,IAAI,KAAK,iBAAiB,UAAU,EAAE,OAAO,UAAU,GAAG,SAAS,KAAK,CAAC;AACjH,WAAK,KAAK,eAAe,cAAc,EAAE,IAAI,KAAK,kBAAkB,UAAU,EAAE,OAAO,UAAU,GAAG,SAAS,KAAK,CAAC;AACnH,WAAK,KAAK,eAAe,WAAW,EAAE,IAAI,KAAK,eAAe,UAAU,EAAE,OAAO,UAAU,GAAG,SAAS,KAAK,CAAC;AAC7G,WAAK,KAAK,eAAe,aAAa,EAAE,IAAI,KAAK,iBAAiB,UAAU,EAAE,OAAO,UAAU,GAAG,SAAS,KAAK,CAAC;AACjH,WAAK,KAAK,eAAe,QAAQ,EAAE,IAAI,MAAO,KAAK,MAAM,OAAO,cAAc,GAAI,UAAU,EAAE,OAAO,QAAQ,GAAG,SAAS,KAAK,CAAC;AAC/H,WAAK,KAAK,eAAe,KAAK,EAAE,IAAI,MAAO,KAAK,MAAM,OAAO,cAAc,GAAI,UAAU,EAAE,OAAO,QAAQ,GAAG,SAAS,KAAK,CAAC;AAC5H,WAAK,KAAK,eAAe,OAAO,EAAE,IAAI,MAAO,KAAK,MAAM,OAAO,cAAc,KAAK,MAAM,OAAO,UAAW,UAAU,EAAE,OAAO,QAAQ,GAAG,SAAS,KAAK,CAAC;AACvJ,iBAAW,KAAK,YAAY,MAAM,EAAE,EAAG,MAAK,KAAK,eAAe,GAAG,EAAE,IAAI,MAAO,KAAK,MAAM,OAAO,cAAc,aAAa,KAAK,OAAO,CAAC,IAAI,EAAE,GAAI,UAAU,EAAE,OAAO,QAAQ,GAAG,SAAS,KAAK,CAAC;AACjM,WAAK,KAAK,QAAQ,QAAQ,KAAK,mBAAmB,IAAI,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,oBAAoB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC1I,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,QAAQ,OAAiB,QAAoC;AACrE,YAAM,QAAQ,KAAK,KAAK,QAAQ,MAAM;AACtC,UAAI,CAAC,SAAS,CAAC,MAAM,SAAU;AAC/B,YAAM,UAAU,MAAM,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,MAAM,SAAS,KAAK,IAAI,MAAM,SAAS,UAAU;AAC9G,aAAO,UAAU,SAAS;AAAA,IAC5B;AAAA,IACU,cAAc,GAAkB,SAAS,gBAAQ,GAAG,KAAK,SAAS,IAAI,GAAG,MAAM,KAAK,OAAO,CAAC,GAAS;AAC7G,UAAI,WAAW,MAAO;AACtB,gBAAU,KAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACnD,YAAM,OAAO,KAAK,QAAQ,WAAW,MAAgB;AACrD,cAAQ,KAAK,KAAK,SAAS,WAAW,MAAM,KAAK,KAAK,UAAU,MAAM,GAAG,GAAG,GAAG,EAAE;AAAA,IACnF;AAAA,IACU,YAAY,GAAkB,SAAS,gBAAQ,GAAG,KAAK,SAAS,IAAI,GAAG,MAAM,KAAK,OAAO,CAAC,GAAS;AAC3G,UAAI,WAAW,MAAO;AACtB,eAAS,KAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK,IAAI,KAAK,YAAY;AACvE,YAAM,OAAO,KAAK,QAAQ,SAAS,MAAgB;AACnD,cAAQ,KAAK,KAAK,UAAU,MAAM,GAAG,GAAG;AAAA,IAC1C;AAAA,IAEU,sBAAsB,GAAyB;AACvD,UAAI,CAAC,EAAG,QAAQ,KAAK,MAAM,OAAO,SAAS,CAAC,KAAK,MAAM,MAAM,QAAS,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK,MAAM,OAAO,SAAS,eAAe,WAAW;AACxK,WAAK;AACL,WAAK,mBAAmB,KAAM,EAAE,eAAiC,iBAAiB,SAAS,KAAK,qBAAqB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5I,WAAK,mBAAmB,KAAK,KAAK,SAAS,SAAS,OAAO,KAAK,KAAK,KAAK,mBAAmB,GAAG,SAAS,EAAE,WAAW,cAAc,UAAU;AAAA,IAChJ;AAAA,IAEU,oBAAoB,GAAkB,SAAS,gBAAQ,GAAG,KAAK,SAAS,IAAI,GAAS;AAC7F,gBAAU,KAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACnD,UAAI,WAAW,SAAS,CAAC,KAAK,WAAW,EAAE,SAAS,MAAgB,GAAG;AACrE,UAAE,yBAAyB;AAC3B,YAAI,KAAK,mBAAmB,EAAG,MAAK,MAAM,OAAO,SAAS,CAAC,KAAK,MAAM,MAAM;AAC5E,aAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK,MAAM,OAAO,SAAS,eAAe,WAAW;AAAA,MACpG;AACA,YAAM,WAAW,KAAK,KAAK,KAAK,mBAAmB;AACnD,UAAI,UAAU,cAAc,KAAK,iBAAiB,KAAK,CAAC,UAAU,cAAe,UAAS,SAAS;AACnG,WAAK,iBAAiB;AACtB,MAAC,EAAE,eAAiC,oBAAoB,SAAS,KAAK,mBAAmB;AAAA,IAC3F;AAAA,IAEU,eAAqB;AAC7B,WAAK,KAAK,WAAW,YAAY,MAAM,KAAK,MAAM,OAAO,aAAa;AACtE,OAAC,KAAK,KAAK,WAAW,kBAAkB,KAAK,KAAK,KAAK,WAAW,gBAAgB,OAAO,KAAK,MAAM,OAAO,mBAAmB;AAAA,IAChI;AAAA,IAEU,gBAAgB,GAAkB,KAAmB;AAC7D,WAAK,KAAK,KAAK,kBAAkB,GAAG,gBAAgB;AACpD,WAAK,KAAK,KAAK,eAAe,GAAG,KAAK,CAAC,KAAK,UAAU,QAAQ,KAAK,CAAC,CAAC;AACrE,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK;AAAA,IACpD;AAAA,IACU,iBAAiB,GAAkB,KAAmB;AAC9D,WAAK,KAAK,KAAK,kBAAkB,GAAG,gBAAgB;AACpD,WAAK,KAAK,KAAK,eAAe,GAAG,KAAK,KAAK,UAAU,QAAQ,KAAK,CAAC,CAAC;AACpE,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK;AAAA,IACpD;AAAA,IACU,cAAc,GAAkB,KAAmB;AAC3D,WAAK,KAAK,KAAK,iBAAiB,GAAG,eAAe,KAAK,UAAU,UAAU,KAAK,CAAC,CAAC;AAClF,WAAK,MAAM,SAAS,UAAU,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,UAAU;AAAA,IACvF;AAAA,IACU,gBAAgB,GAAkB,KAAmB;AAC7D,WAAK,KAAK,KAAK,iBAAiB,GAAG,eAAe,CAAC,KAAK,UAAU,UAAU,KAAK,CAAC,CAAC;AACnF,WAAK,MAAM,SAAS,UAAU,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,CAAC,KAAK,MAAM,MAAM,SAAS,gBAAgB,YAAY;AAAA,IACpI;AAAA,IAEO,kBAAkB,SAA2B,OAAa;AAC/D,YAAM,KAAK,KAAK,WAAW;AAC3B,iBAAW,KAAK,GAAI,GAAE,oBAAoB,WAAW,KAAK,aAAa,GAAG,EAAE,oBAAoB,SAAS,KAAK,WAAW;AACzH,UAAI,WAAW,YAAY,CAAC,KAAK,aAAa,EAAG;AACjD,iBAAW,KAAK,GAAI,GAAE,iBAAiB,WAAW,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC7F,iBAAW,KAAK,GAAI,GAAE,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC3F;AAAA,IACO,qBAA2B;AAChC,WAAK,kBAAkB,KAAK,aAAa,IAAI,QAAQ,QAAQ;AAAA,IAC/D;AAAA,IACU,eAAwB;AAChC,aAAO,KAAK,KAAK,QAAQ,SAAS,KAAK,KAAK,MAAM,qBAAqB,CAAC,KAAK,KAAK,OAAO,YAAY,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,MAAM,MAAM;AAAA,IAClJ;AAAA,IAEU,aAAuB;AAC/B,YAAM,WAAW,KAAK,KAAK,KAAK,gBAAgB,GAAG,kBAAkB;AACrE,aAAO,WAAW,CAAC,UAAU,MAAM,IAAI,CAAC,MAAM;AAAA,IAChD;AAAA,IACU,OAAO,GAA0B;AACzC,aAAO,KAAK,OAAO,KAAK,WAAW,KAAK,EAAE,UAAU,SAAS,EAAE,SAAS,QAAQ,EAAE,WAAW,UAAU;AAAA,IACzG;AAAA,IACO,UAAU,QAA+B,KAAa,MAAsB;AACjF,aAAO,MAAM,KAAK,OAAO,KAAK,MAAM,IAAI,GAAG,KAAK,OAAO;AAAA,IACzD;AAAA,EACF;AApHE,gBADW,UACY,YAAW;AAClC,gBAFW,UAEY,SAAQ;;;ACR1B,MAAM,eAAsC;AAAA,IACjD,UAAU,CAAC;AAAA,EACb;;;ACQO,MAAM,aAAN,cAAyB,SAAoC;AAAA,IAOlE,YAAY,MAAkB,SAAS,KAAK,SAAS,QAAQ;AAC3D,YAAM,MAAM,QAAQ,EAAE,SAAS,MAAM,CAAC;AALxC,0BAAO,sBAAqB;AAC5B,0BAAO;AACP,0BAAO,WAAmC;AAAA,IAI1C;AAAA,IAEgB,QAAc;AAE5B,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,mCAAmC,WAAW,2CAA2C,CAAC;AACtI,WAAK,UAAU,kBAAkB,KAAK,cAAc,KAAK,IAAI;AAE7D,WAAK,KAAK,IAAI,yBAAyB,OAAO,KAAK,OAAO;AAAA,IAC5D;AAAA,IACgB,UAAgB;AAC9B,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,UAAU,iBAAiB,SAAS,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE9F,WAAK,MAAM,MAAM,QAAQ,MAAG;AAvChC,YAAAC;AAuCoC,gBAAAA,MAAA,KAAK,MAAM,UAAS,WAApBA,IAAoB,SAAW,CAAC,KAAK,OAAO;AAAA,SAAW,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE1H,WAAK,MAAM,GAAG,iBAAiB,KAAK,oBAAoB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE9I,WAAK,KAAK,OAAO,GAAG,4BAA4B,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAExG,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,eAAe,EAAE,MAAM,GAAyD;AACxF,WAAK,MAAM,SAAS,SAAS,CAAC;AAC9B,UAAI,SAAS,KAAK,KAAK,WAAW,QAAQ,EAAG,MAAK,MAAM,OAAO,SAAS;AAAA,IAC1E;AAAA,IAEU,mBAAmB,GAA6C;AACxE,UAAI,EAAE,SAAU;AAChB,YAAM,SAAS,KAAK,KAAK,WAAW,QAAQ;AAC5C,QAAE,SAAS,CAAC,SAAS,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK;AACxD,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,QAAc;AACtB,WAAK,KAAK,KAAK,uBAAuB,GAAG,UAAU;AACnD,MAAAC,YAAW,KAAK,aAAa,GAAG,KAAK,MAAM;AAC3C,WAAK,MAAM,UAAU,UAAU,IAAI,oBAAoB,wBAAwB;AAAA,IAEjF;AAAA;AAAA,IAEA,MAAgB,OAAsB;AACpC,WAAK,cAAc;AACnB,YAAM,UAAU,aAAa,KAAK,SAAS,IAAI,oBAAoB,CAAC;AACpE,WAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B,KAAK,SAAS,aAAa,WAAW;AACtG,WAAK,MAAM,UAAU,UAAU,OAAO,kBAAkB;AAAA,IAE1D;AAAA;AAAA,IAEU,oBAA0B;AAClC,UAAI,CAAC,KAAK,OAAO,SAAU,MAAK,MAAM,UAAU,MAAM,cAAc,IAAI,MAAM,YAAY;AAAA,IAC5F;AAAA,IAEO,cAAoB;AACzB,WAAK,MAAM,UAAU,UAAU,IAAI,0BAA0B;AAC7D,WAAK,MAAM,UAAU;AACrB,WAAK,aAAa;AAAA,IACpB;AAAA,IAEO,gBAAsB;AAC3B,WAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B;AAChE,WAAK,MAAM,UAAU;AAAA,IACvB;AAAA,IAEO,eAAqB;AAC1B,mBAAa,KAAK,kBAAkB;AACpC,WAAK,qBAAqBA,YAAW,KAAK,eAAe,KAAK,SAAS,QAAQ,OAAO,KAAK,MAAM;AAAA,IACnG;AAAA,IAEmB,YAAkB;AACnC,WAAK,SAAS,QAAQ,GAAG,MAAM,UAAU;AAAA,IAC3C;AAAA,EACF;AApFE,gBADW,YACY,YAAW;AAClC,gBAFW,YAEY,SAAQ;;;ACZ1B,MAAM,iBAA8C;AAAA,IACzD,cAAc;AAAA,EAChB;;;ACIO,MAAM,eAAN,cAA2B,SAAyB;AAAA,IAIzC,OAAa;AAE3B,WAAK,MAAM,MAAM,2BAA2B,KAAK,cAAc,EAAE,MAAM,KAAK,KAAK,QAAQ,SAAS,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAC/H,WAAK,MAAM,MAAM,4BAA4B,KAAK,eAAe,EAAE,MAAM,KAAK,KAAK,QAAQ,SAAS,QAAQ,QAAQ,KAAK,OAAO,CAAC;AACjI,WAAK,MAAM,MAAM,6BAA6B,KAAK,gBAAgB,EAAE,MAAM,KAAK,KAAK,QAAQ,SAAS,QAAQ,QAAQ,KAAK,OAAO,CAAC;AAEnI,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC,SAAS,KAAK,YAAY,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClG,WAAK,MAAM,GAAG,gBAAgB,KAAK,cAAc,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACvG,WAAK,MAAM,GAAG,yBAAyB,KAAK,cAAc,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAChH,WAAK,MAAM,GAAG,iCAAiC,KAAK,4BAA4B,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtI,WAAK,MAAM,GAAG,kCAAkC,KAAK,4BAA4B,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACvI,WAAK,MAAM,GAAG,mCAAmC,KAAK,4BAA4B,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACxI,WAAK,MAAM,GAAG,qBAAqB,MAAM,CAAC,KAAK,MAAM,MAAM,UAAU,KAAK,YAAY,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE/I,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,aAAa,OAAqB;AAC1C,WAAK,SAAS,aAAa,QAAQ;AAAA,IACrC;AAAA,IACU,cAAc,OAAqB;AAC3C,WAAK,SAAS,aAAa,SAAS;AAAA,IACtC;AAAA,IACU,eAAe,OAAqB;AAC5C,WAAK,SAAS,aAAa,UAAU;AAAA,IACvC;AAAA,IAEU,2BAA2B,EAAE,QAAQ,EAAE,KAAK,MAAM,EAAE,GAAoI;AAChM,YAAM,KAAK,QAAQ,YAAa,KAAK,KAAK,IAAI,QAAQ,WAAW,GAAG,CAAC,EAAE,IAA2B,KAAK,KAAK,IAAI,cAAmC;AACnJ,UAAI,GAAI,YAAW,CAAC,MAAM,GAAG,KAAK,OAAO,QAAQ,EAAE,MAAM,OAAO,aAAa,QAAQ,MAAM,MAAM,QAAQ,QAAQ,WAAW,MAAM,KAAK,QAAQ,wBAAwB,KAAK,CAAC,EAAG,OAAM,GAAG,aAAa,MAAM,GAAG,IAAI,GAAG,gBAAgB,IAAI;AAAA,IAC5O;AAAA,IAEU,aAAa,EAAE,MAAM,GAA4C;AACzE,UAAI,KAAK,MAAM,SAAS,SAAS,cAAe,MAAK,MAAM,SAAS,SAAS,UAAU,QAAQ,CAAC,EAAE,KAAK,MAAM,CAAC,IAAI,CAAC;AAAA,IACrH;AAAA,IAEO,cAAoB;AACzB,UAAI,CAAC,UAAU,gBAAiB,sBAAsB,KAAK,CAAC,KAAK,KAAK,WAAW,kBAAkB,EAAI;AACvG,gBAAU,aAAa,WAAW,IAAI,cAAc,KAAK,MAAM,SAAS,QAA6B;AACrG,YAAM,MAAM,IAAI,SAAqE,UAAU,aAAa,iBAAiB,GAAG,IAAI,GAClI,CAAC,UAAU,UAAUC,SAAQ,IAAI,CAAC,KAAK,KAAK,KAAK,eAAe,GAAG,KAAK,KAAK,KAAK,UAAU,GAAG,KAAK,KAAK,OAAO,SAAS,OAAO;AAClI,UAAI,QAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,KAAM;AACpD,UAAI,SAAS,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK;AACpD,UAAI,gBAAgB,WAAW,MAAM,SAAS,KAAK,CAAC,KAAK,SAAS,KAAK,IAAI,IAAI,IAAI;AACnF,UAAI,eAAe,WAAW,MAAM,SAAS,KAAK,KAAK,SAAS,KAAK,IAAI,IAAI,IAAI;AACjF,UAAI,iBAAiBA,cAAa,UAAU,MAAM,WAAW,KAAK,KAAK,WAAW,SAAS,WAAW,IAAI;AAC1G,UAAI,aAAaA,cAAa,UAAU,MAAM,WAAW,MAAMA,UAAS,UAAU,KAAK,KAAK,WAAW,SAAS,OAAO,IAAI;AAAA,IAC7H;AAAA,IAEA,MAAa,eAA8B;AACzC,YAAM,MAAM,KAAK,MAAM,MAAM;AAC7B,UAAI,CAAC,KAAK,OAAO,gBAAiB,OAAO,CAAC,IAAI,WAAW,OAAO,EAAI;AACpE,YAAM,QAAQ,MAAM,KAAK,KAAK,KAAK,gBAAgB,GAAG,QAAQ,IAAI,KAAK,KAAK,OAAO,WAAW,QAAQ,IAAI;AAC1G,cAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,OAAO,OAAO,EAAG,GAAG,OAAO,IAAI,gBAAgB,GAAG;AAAA,IAC9F;AAAA,EACF;AA1DE,gBADW,cACY,YAAW;AAClC,gBAFW,cAEY,SAAQ;;;ACN1B,MAAM,sBAAsB,CAAC,QAAQ,aAAa,YAAY,oBAAoB,sBAAsB,qBAAqB,qBAAqB;AAElJ,MAAM,yBAAyD;AAAA,IACpE,UAAU;AAAA,IACV,iBAAiB;AAAA,MACf,OAAO;AAAA,MACP,SAAS,CAAC,EAAE,OAAO,OAAO,SAAS,MAAM,GAAG,GAAG,oBAAoB,IAAI,CAAC,OAAO,EAAE,OAAO,GAAG,SAAS,WAAW,WAAW,CAAC,CAAC,EAAE,EAAE,CAAC;AAAA,IACnI;AAAA,IACA,UAAU;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,OAAO,SAAS,MAAM;AAAA,QAC/B,EAAE,OAAO,GAAG,SAAS,iBAAc;AAAA,QACnC,EAAE,OAAO,IAAI,SAAS,mBAAgB;AAAA,QACtC,EAAE,OAAO,KAAK,SAAS,mBAAgB;AAAA,QACvC,EAAE,OAAO,KAAK,SAAS,oBAAiB;AAAA,MAC1C;AAAA,IACF;AAAA,EACF;AAEO,MAAM,sBAAmD;AAAA,IAC9D,UAAU;AAAA,EACZ;AAEO,MAAM,iCAAuE;AAAA,IAClF,UAAU;AAAA,IACV,gBAAgB;AAAA,MACd,UAAU;AAAA,MACV,OAAO;AAAA,MACP,QAAQ;AAAA,MACR,wBAAwB;AAAA,MACxB,8BAA8B;AAAA,IAChC;AAAA,EACF;AAEO,MAAM,yBAAyD;AAAA,IACpE,UAAU;AAAA,IACV,gBAAgB;AAAA,EAClB;AAEO,MAAM,cAAwC;AAAA;AAAA;AAAA;AAAA;AAAA,EAKrD;;;ACtCO,MAAM,qBAAN,cAAiC,QAA0C;AAAA,IAA3E;AAAA;AAML,0BAAO,gBAAe;AACtB;AAAA,0BAAU,oBAAmB;AAAA;AAAA,IAL7B,WAAkB,OAAO;AACvB,aAAO;AAAA,IACT;AAAA,IAKgB,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,KAAK,MAAM,MAAM,mBAAmB,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACxF,WAAK,KAAK,MAAM,MAAM,qBAAqB,KAAK,qBAAqB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE5F,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtJ,WAAK,MAAM,IAAI,oBAAoB,CAAC,MAAO,MAAM,KAAK,oBAAoB,CAAC,SAAS,aAAa,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE5H,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAElH,WAAK,KAAK,eAAe,cAAc,EAAE,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AAAA,IACzE;AAAA,IAEU,eAAe,EAAE,MAAM,GAAmE;AAClG,WAAK,aAAa;AAClB,UAAI,SAAS,KAAK,KAAK,WAAW,YAAY,EAAG,MAAK,MAAM,OAAO,aAAa;AAAA,IAClF;AAAA,IAEU,uBAAuB,GAAiD;AAChF,UAAI,EAAE,YAAY,OAAQ;AAC1B,UAAI,EAAE,SAAS,CAAC,KAAK,cAAc;AACjC,cAAM,KAAK,KAAK,KAAK,KAAK,gBAAgB,GAAG,kBAAkB;AAC/D,YAAI,KAAK,KAAK,WAAW,gBAAgB,EAAG,QAAO,IAAI,iBAAiB,YAAY,KAAK,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,IAAI,MAAM,GAAG,EAAE,QAAQ,KAAK,IAAI;AAC1J,YAAI,KAAK,KAAK,WAAW,kBAAkB,EAAG,SAAQ,MAAO,KAAK,MAAM,OAAO,mBAAmB,KAAM;AACxG,YAAI,KAAK,KAAK,WAAW,YAAY,EAAG,SAAQ,MAAO,KAAK,MAAM,OAAO,aAAa,KAAM;AAC5F,aAAK,MAAM;AAAA,MACb,WAAW,KAAK,cAAc;AAC5B,uBAAe,KAAK,MAAM,SAAS;AACnC,aAAK,eAAe,KAAK,mBAAmB;AAAA,MAC9C;AACA,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IACA,MAAgB,QAAuB;AACrC,YAAM,gBAAgB,KAAK,MAAM,SAAS;AAC1C,WAAK,eAAe;AAAA,IACtB;AAAA;AAAA,IAEU,kBAAkB,SAAwB;AAClD,YAAM,OAAO,WAAW,kBAAkB,MAAM,KAAK,MAAM;AAC3D,UAAI,MAAM;AACR,aAAK,MAAM,UAAU,UAAU,IAAI,sBAAsB;AACzD,aAAK,MAAM,MAAM,aAAa,KAAK,mBAAmB;AACtD,YAAI,UAAW,MAAK,wBAAwB,KAAK,OAAO,gBAAgB,KAAK;AAAA,MAC/E,WAAW,KAAK,KAAK,WAAW,YAAY,GAAG;AAC7C,aAAK,MAAM,UAAU,UAAU,OAAO,sBAAsB;AAC5D,aAAK,eAAe,KAAK,MAAM,OAAO,SAAS;AAC/C,aAAK,KAAK,KAAK,gBAAgB,GAAG,YAAY,OAAO;AACrD,aAAK,MAAM,MAAM,aAAa,KAAK,mBAAmB;AAAA,MACxD;AAAA,IACF;AAAA,IAEU,oBAAoB,aAAsC;AAClE,UAAI,CAAC,KAAK,KAAK,MAAM,2BAA2B,CAAC,aAAa,KAAK,KAAK,MAAM,aAAa,KAAK,KAAK,OAAO,SAAS,UAAU,SAAS,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,KAAK,WAAW,YAAY,EAAG;AAClN,YAAM,MAAM,OAAO,KAAK,OAAO,SAAS,KAAK,IAAI,KAAK,SAAS,KAAK,OAAO,SAAS,KAA0B;AAC9G,UAAI,YAAY,UAAU,OAAO,YAAY,UAAU,MAAM,IAAK,MAAK,MAAM,OAAO,aAAa,CAAC,KAAK,MAAM,MAAM;AAAA,IACrH;AAAA,IAEA,MAAa,wBAAwB,SAAsC,MAAqB;AAC9F,YAAM,cAAc,OAAO;AAC3B,iBAAW,QAAQ,aAAa,SAAS,IAAI,MAAM,aAAa,OAAO,WAAW,SAAU,KAAK,MAAM,OAAO,cAAc,KAAK,MAAM,OAAO,aAAa,aAAa,cAAe,WAAW,OAAO,SAAS,aAAa,UAAU,IAAI,cAAc,UAAU;AAAA,IACvQ;AAAA,IAEO,eAAqB;AArF9B,UAAAC,KAAAC;AAsFI,UAAI,KAAK,OAAO,SAAU,QAAO,MAAM,KAAK,MAAM,SAAS,aAAa,KAAK,MAAM,SAAS,wBAAwB;AACpH,OAAAD,MAAA,KAAK,MAAM,UAAS,eAApBA,IAAoB,aAAe,mBAAmB;AACtD,OAAAC,MAAA,KAAK,MAAM,UAAS,0BAApBA,IAAoB,wBAA0B,KAAK,MAAM,SAAS,cAAc,aAAa,OAAO,OAAO,aAAa,IAAI;AAAA,IAC9H;AAAA,EACF;AA7EE,gBADW,oBACY,WAAU;AAIjC,gBALW,oBAKY,SAAQ;;;ACT1B,MAAM,kBAAN,cAA8B,QAAuC;AAAA,IAE1E,WAAkB,OAAO;AACvB,aAAO;AAAA,IACT;AAAA,IAGgB,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,MAAM,GAAG,kBAAkB,KAAK,qBAAqB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEhJ,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/G,WAAK,KAAK,eAAe,WAAW,EAAE,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AAAA,IACtE;AAAA,IAEU,eAAe,EAAE,MAAM,GAAgE;AAC/F,WAAK,aAAa;AAClB,UAAI,SAAS,KAAK,KAAK,WAAW,SAAS,EAAG,MAAK,MAAM,OAAO,UAAU;AAAA,IAC5E;AAAA,IAEU,oBAAoB,GAA8C;AAC1E,UAAI,EAAE,YAAa,EAAE,UAAU,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,KAAK,WAAW,gBAAgB,GAAK;AACrJ,WAAK,MAAM,UAAU,UAAU,OAAO,qBAAqB,EAAE,KAAK;AAClE,WAAK,MAAM,MAAM,UAAU,EAAE;AAC7B,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEO,eAAqB;AAtC9B,UAAAC;AAuCI,UAAI,KAAK,OAAO,SAAU,QAAO,MAAM,KAAK,MAAM,SAAS,UAAU;AACrE,OAAAA,MAAA,KAAK,MAAM,UAAS,YAApBA,IAAoB,UAAY;AAAA,IAClC;AAAA,EACF;AAjCE,gBADW,iBACY,WAAU;AAIjC,gBALW,iBAKY,SAAQ;;;ACG1B,MAAM,2BAAN,cAAuC,QAAgD;AAAA,IAAvF;AAAA;AAML,0BAAO,oBAAmB;AAC1B;AAAA,0BAAO,kBAAsD;AAC7D,0BAAU,eAAqC;AAC/C,0BAAU,qBAA2C;AACrD,0BAAO,aAAsB,CAAC;AAC9B,0BAAO,aAAsB,CAAC;AAAA;AAAA,IAT9B,WAAkB,OAAO;AACvB,aAAO;AAAA,IACT;AAAA,IASgB,QAAc;AAE5B,WAAK,cAAc,kBAAkB,KAAK,kBAAkB,KAAK,IAAI;AACrE,UAAK,OAAe,yBAA0B,MAAK,oBAAoB,kBAAkB,KAAK,kBAAkB,KAAK,IAAI;AACzH,WAAK,aAAa,MAAM,GAAG,KAAK,qBAAqB,KAAK,MAAM,gBAAgB,QAAQ,KAAK,kBAAkB,EAAE;AAAA,IACnH;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,MAAM,GAAG,2BAA2B,KAAK,8BAA8B,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAClK,WAAK,MAAM,GAAG,0BAA0B,KAAK,6BAA6B,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAChI,WAAK,MAAM,GAAG,iCAAiC,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEzF,WAAK,KAAK,OAAO,GAAG,4CAA4C,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACxH,WAAK,KAAK,OAAO,GAAG,2DAA2D,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3H,WAAK,KAAK,eAAe,oBAAoB,EAAE,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AAAA,IAC/E;AAAA,IAEU,eAAe,EAAE,MAAM,GAAqI;AACpK,WAAK,aAAa;AAClB,UAAI,UAAU,KAAK,KAAK,WAAW,kBAAkB,KAAK,KAAK,KAAK,WAAW,gBAAgB,GAAI,MAAK,MAAM,OAAO,mBAAmB;AAAA,IAC1I;AAAA,IAEU,6BAA6B,GAAuD;AAC5F,UAAI,EAAE,SAAU;AAChB,YAAM,YAAY,KAAK,KAAK,WAAW,kBAAkB;AACzD,UAAI,CAAC,KAAK,KAAK,cAAc,KAAK,OAAO,eAAe,SAAU,QAAO,EAAE,OAAO,KAAK,IAAI;AAC3F,UAAI,KAAK,KAAK,KAAK,gBAAgB,GAAG,YAAY,aAAc,SAAQ,MAAO,KAAK,MAAM,OAAO,aAAa,KAAM;AACpH,UAAI,CAAC,aAAa,KAAK,MAAM,SAAS,gBAAgB;AACpD,UAAE,SAAS,CAAC,KAAK,mBAAmB,KAAK,mBAAmB,IAAI,KAAK,gBAAgB,MAAM;AAC3F,UAAE,QAAQ,KAAK,IAAI;AAAA,MACrB;AAAA,IACF;AAAA,IAEA,MAAgB,4BAA4B,EAAE,MAAM,GAA+D;AACjH,UAAI,KAAK,eAAgB;AACzB,UAAI,OAAO;AACT,aAAK,MAAM,UAAU,UAAU,IAAI,8BAA8B,GAAG,KAAK,MAAM,gBAAgB,UAAU,IAAI,iCAAiC;AAC9I,aAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACzC,gBAAQ,MAAO,KAAK,MAAM,OAAO,aAAa,KAAM;AACpD,aAAK,KAAK,KAAK,mBAAmB,GAAG,YAAY;AAAA,MACnD,OAAO;AACL,cAAM,UAAU,GAAG;AACnB,aAAK,MAAM,UAAU,UAAU,OAAO,8BAA8B,GAAG,KAAK,MAAM,gBAAgB,UAAU,OAAO,iCAAiC;AACpJ,aAAK,KAAK,KAAK,gBAAgB,GAAG,YAAY,OAAO;AACrD,aAAK,KAAK,KAAK,kBAAkB,GAAG,MAAM;AAAA,MAC5C;AAAA,IACF;AAAA,IAEA,MAAgB,qBAAoC;AAClD,UAAI,KAAK,iBAAkB;AAC3B,MAAC,OAAe,0BAA0B,QAAQ,QAAQ;AAC1D,cAAQ,MAAO,KAAK,MAAM,OAAO,aAAa,KAAM;AACpD,WAAK,iBAAiB,MAAO,OAAe,yBAAyB,cAAc,KAAK,OAAO,cAAc;AAC7G,WAAK,mBAAmB;AACxB,WAAK,eAAgB,SAAS,gBAAgB,MAAM,UAAU,+BAA+B,KAAK,MAAM,SAAS,SAAS,OAAO,kCAAkC,KAAK,MAAM,MAAM,MAAM,cAAc,KAAK,SAAS,IAAI,WAAW;AACrO,YAAM,OAAO,KAAK,cAAe;AACjC,YAAM,WAAW,CAAC,GAChB,QAAQ,CAAC,QAAc,MAAM,GAAG,IAAI,MAAM,MAC1C,YAAY,KAAK,UAAU,OAAO,CAAC,MAAM,OAAO,iBAAiB,GAAG,MAAM,OAAO,kBAAkB,GAAG,MAAM,OAAO,kBAAkB,GAAG,MAAM,OAAO,mBAAmB,CAAC,EAAE,OAAO,OAAO,CAAa;AACxM,iBAAW,SAAS,SAAS,aAAa;AACxC,YAAI;AACF,gBAAM,OAAO,CAAC,QAAgB,UAAU,KAAK,MAAM,IAAI;AACvD,cAAI,CAAC,UAAU,KAAK,IAAI,KAAK,CAAC,KAAK,UAAU,KAAK,IAAI;AAAG,uBAAW,WAAW,MAAM,SAAU,KAAK,QAAyB,cAAc,SAAS,OAAO,KAAK,QAAQ,QAAQ,SAAS,KAAK,KAAK,QAAQ,QAAQ,SAAS,MAAM,EAAG,UAAS,KAAK,QAAQ,OAAO;AAAA;AAAA,QACpQ,QAAQ;AACN;AAAA,QACF;AAAA,MACF;AACA,WAAK,eAAgB,SAAS,KAAK,OAAO,SAAS,SAAS,EAAE,aAAa,SAAS,KAAK,IAAI,EAAE,CAAC,CAAC;AACjG,YAAM,QAAQ,IAAI,UAAU,IAAI,CAAC,SAAS,KAAK,SAAS,MAAM,KAAK,aAAa,MAAM,SAAS,QAAW,KAAK,cAAe,CAAC,CAAC;AAChI,WAAK,KAAK,KAAK,UAAU,GAAG,gBAAgB;AAC5C,WAAK,MAAM,UAAU,UAAU,IAAI,6BAA6B,wBAAwB,GAAG,KAAK,MAAM,gBAAgB,UAAU,IAAI,8BAA8B;AAClK,WAAK,eAAgB,SAAS,KAAK,OAAO,KAAK,MAAM,SAAS;AAC9D,WAAK,eAAgB,SAAS,gBAAgB,KAAK,SAAS,gBAAgB;AAC5E,WAAK,eAAgB,SAAS,gBAAgB,YAAY,SAAS,gBAAgB;AACnF,iBAAW,QAAQ,SAAS,gBAAgB,kBAAkB,EAAG,MAAK,eAAgB,SAAS,gBAAgB,aAAa,MAAM,SAAS,gBAAgB,aAAa,IAAI,CAAE;AAC9K,WAAK,OAAO,iBAAiB,SAAS,gBAAgB,KAAK,eAAgB,SAAS,iBAAiB,mBAAmB,EAAE,WAAW,MAAM,SAAS,KAAK,CAAC,GAAG,EAAE,MAAM,KAAK,CAAC;AAC3K,WAAK,eAAgB,iBAAiB,UAAU,KAAK,4BAA4B,EAAE,QAAQ,KAAK,OAAO,CAAC;AACxG,WAAK,eAAgB,iBAAiB,YAAY,KAAK,2BAA2B,EAAE,QAAQ,KAAK,OAAO,CAAC;AACzG,WAAK,KAAK,KAAK,eAAe,GAAG,kBAAkB;AACnD,WAAK,MAAM,MAAM,mBAAmB;AAAA,IACtC;AAAA;AAAA,IAEU,6BAAmC;AAC3C,UAAI,CAAC,KAAK,OAAO,eAAe,6BAA8B;AAC9D,WAAK,OAAO,eAAe,QAAQ,KAAK,gBAAgB,cAAc,KAAK,OAAO,eAAe;AACjG,WAAK,OAAO,eAAe,SAAS,KAAK,gBAAgB,eAAe,KAAK,OAAO,eAAe;AAAA,IACrG;AAAA,IAEU,4BAAkC;AAC1C,WAAK,mBAAmB;AACxB,WAAK,iBAAiB;AACtB,WAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B,KAAK,SAAS,aAAa,WAAW;AACtG,WAAK,MAAM,UAAU,UAAU,OAAO,2BAA2B,GAAG,KAAK,MAAM,gBAAgB,UAAU,OAAO,8BAA8B;AAC9I,WAAK,KAAK,KAAK,UAAU,GAAG,gBAAgB;AAC5C,WAAK,KAAK,KAAK,gBAAgB,GAAG,YAAY,OAAO;AACrD,WAAK,MAAM,MAAM,mBAAmB;AAAA,IACtC;AAAA,IAEO,eAAqB;AAnI9B,UAAAC,KAAAC;AAoII,UAAI,KAAK,OAAO,SAAU,QAAO,MAAM,KAAK,MAAM,SAAS,mBAAmB,KAAK,MAAM,SAAS,iBAAiB;AACnH,UAAI,CAAC,KAAK,OAAO,eAAe,SAAU,EAAAD,MAAA,KAAK,MAAM,UAAS,mBAApBA,IAAoB,iBAAoB,OAAe,4BAA4B,KAAK,KAAK;AAAA,UAClI,MAAK,MAAM,SAAS,iBAAiB;AAC1C,OAAAC,MAAA,KAAK,MAAM,UAAS,qBAApBA,IAAoB,mBAAqB,KAAK,KAAK,eAAgB,yBAAyB,KAAK,CAAC,KAAK,MAAM,MAAM,2BAA4B,KAAK,MAAM,SAAS;AAAA,IACrK;AAAA,IAEmB,YAAkB;AACnC,WAAK,gBAAgB,MAAM,GAAG,KAAK,aAAa,QAAQ,GAAG,KAAK,mBAAmB,QAAQ,GAAG,MAAM,UAAU;AAAA,IAChH;AAAA,EACF;AA5HE,gBADW,0BACY,WAAU;AAIjC,gBALW,0BAKY,SAAQ;;;ACR1B,MAAM,qBAAN,cAAiC,QAA0C;AAAA,IAA3E;AAAA;AAML,0BAAU,sBAAqB;AAC/B,0BAAU,sBAAqB;AAC/B,0BAAU,sBAAqB;AAC/B,0BAAU,sBAAqB;AAC/B,0BAAU,mBAAkB;AAC5B,0BAAU,mBAAkB;AAC5B,0BAAU,mBAAkB;AAC5B,0BAAU,mBAAkB;AAoG5B,0BAAQ;AACR,0BAAQ;AAAA;AAAA,IAhHR,WAAkB,OAAO;AACvB,aAAO;AAAA,IACT;AAAA,IAWgB,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,KAAK,cAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,KAAK,MAAM,MAAM,2BAA2B,MAAM,CAAC,KAAK,KAAK,WAAW,YAAY,KAAK,KAAK,OAAO,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEpI,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtJ,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC,SAAS,KAAK,OAAO,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE5H,WAAK,KAAK,MAAM,GAAG,2BAA2B,MAAM,KAAK,KAAK,QAAQ,SAAS,KAAK,OAAO,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAErH,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACpH;AAAA,IAEU,eAAe,EAAE,MAAM,GAAmE;AAClG,WAAK,aAAa;AAClB,UAAI,SAAS,KAAK,KAAK,WAAW,YAAY,EAAG,MAAK,MAAM,OAAO,aAAa;AAAA,IAClF;AAAA,IAEU,uBAAuB,GAAiD;AAChF,UAAI,EAAE,SAAU;AAChB,YAAM,SAAS,KAAK,KAAK,WAAW,YAAY;AAChD,QAAE,SAAS,CAAC,SAAS,KAAK,MAAM,IAAI,UAAU,KAAK,KAAK;AACxD,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,QAAc;AACtB,WAAK,KAAK,KAAK,UAAU,GAAG,gBAAgB;AAC5C,WAAK,MAAM,UAAU,UAAU,IAAI,wBAAwB,wBAAwB,GAAG,KAAK,MAAM,gBAAgB,UAAU,IAAI,yBAAyB;AACxJ,iBAAW,QAAQ,CAAC,aAAa,YAAY,EAAG,MAAK,MAAM,UAAU,iBAAiB,MAAM,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACzI,WAAK,MAAM,MAAM,aAAa;AAAA,IAChC;AAAA;AAAA,IAEU,KAAK,UAAiC;AAC9C,UAAI,YAAY,UAAU,KAAK,MAAM,eAAe,EAAG,MAAK,MAAM,gBAAgB,eAAe,EAAE,UAAU,OAAO,UAAU,QAAQ,SAAS,CAAC;AAChJ,WAAK,KAAK,KAAK,UAAU,GAAG,gBAAgB;AAC5C,WAAK,MAAM,UAAU,UAAU,OAAO,sBAAsB,GAAG,KAAK,MAAM,gBAAgB,UAAU,OAAO,yBAAyB;AACpI,WAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B,KAAK,SAAS,aAAa,WAAW;AACtG,iBAAW,QAAQ,CAAC,aAAa,YAAY,EAAG,MAAK,MAAM,UAAU,oBAAoB,MAAM,KAAK,eAAe;AACnH,WAAK,MAAM,MAAM,aAAa;AAAA,IAChC;AAAA;AAAA,IACO,SAAe;AACpB,WAAK,MAAM,UAAU,UAAU,SAAS,sBAAsB,KAAK,KAAK,KAAK,QAAQ;AAAA,IACvF;AAAA,IACO,SAAe;AACpB,cAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK,GAAG,KAAK,KAAK;AAAA,IAC9D;AAAA,IAEO,OAAO,MAAsB;AAClC,YAAM,SAAS,KAAK,KAAK,WAAW,YAAY;AAChD,UAAI,CAAC,WAAW,SAAS,QAAQ,KAAK,YAAY,GAAI,MAAK,MAAM,OAAO,aAAa;AAAA,eAC5E,WAAW,SAAS,SAAS,KAAK,WAAW,GAAI,MAAK,MAAM,OAAO,aAAa;AAAA,IAC3F;AAAA,IACO,cAAuB;AAC5B,YAAM,QAAQ,KAAK,KAAK,KAAK,gBAAgB;AAC7C,aAAO,CAAC,KAAK,KAAK,WAAW,kBAAkB,KAAK,CAAC,OAAO,kBAAkB,oBAAoB,CAAC,OAAO,YAAY,gBAAgB,CAAC,KAAK,KAAK,MAAM,2BAA2B,UAAU,KAAK,MAAM,SAAS,EAAE,cAAc,KAAK,OAAO,kBAAkB,CAAC,KAAK,MAAM,MAAM;AAAA,IAClR;AAAA,IACO,aAAsB;AAC3B,aAAO,KAAK,KAAK,MAAM,2BAA2B,UAAU,KAAK,MAAM,SAAS,EAAE,aAAa,KAAK,OAAO;AAAA,IAC7G;AAAA,IAEU,gBAAgB,GAA2B;AACnD,YAAM,SAAS,EAAE,QACf,UAAW,EAAiB,WAAY,EAAiB,gBAAgB,CAAC,GAAG,WAAW,GACxF,UAAW,EAAiB,WAAY,EAAiB,gBAAgB,CAAC,GAAG,WAAW;AAC1F,UAAI,CAAC,KAAK,KAAK,WAAW,YAAY,KAAK,OAAO,eAAe,OAAO,cAAc,KAAK,CAAC,KAAK,KAAK,IAAI,oBAAoB,KAAK,KAAK,IAAI,uBAAuB,KAAK,KAAK,IAAI,iBAAiB,EAAE,KAAK,CAAC,MAAM,GAAG,SAAS,MAAM,CAAC,KAAK,OAAO,QAAQ,OAAO,oBAAoB,8BAA8B,EAAG;AACnT,YAAM,EAAE,MAAM,OAAO,IAAI,iBAAiB,KAAK,MAAM,SAAS;AAC9D,MAAC,KAAK,qBAAqB,WAAW,IAAI,GAAK,KAAK,qBAAqB,WAAW,MAAM;AAC1F,MAAC,KAAK,qBAAqB,SAAW,KAAK,qBAAqB;AAChE,MAAC,KAAK,kBAAkB,KAAK,SAAS,IAAI,oBAAgC,KAAK,kBAAkB,KAAK,SAAS,IAAI;AACnH,MAAC,KAAK,kBAAkB,KAAK,iBAAmB,KAAK,kBAAkB,KAAK;AAC5E,eAAS,iBAAiB,aAAa,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACnF,eAAS,iBAAiB,aAAa,KAAK,gBAAgB,EAAE,SAAS,OAAO,QAAQ,KAAK,OAAO,CAAC;AACnG,iBAAW,QAAQ,CAAC,WAAW,cAAc,YAAY,aAAa,EAAG,UAAS,iBAAiB,MAAM,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AACpJ,WAAK,MAAM,UAAU,MAAM,YAAY,cAAc,QAAQ,WAAW;AAAA,IAC1E;AAAA,IAEU,eAAe,GAA2B;AAClD,UAAK,EAAiB,SAAS,SAAS,EAAG;AAC3C,QAAE,eAAe;AACjB,WAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK,OAAO;AAChD,WAAK,MAAM,UAAU,UAAU,IAAI,2BAA2B;AAC9D,WAAK,KAAK,QAAQ,sBAAsB,MAAM;AAC5C,cAAM,IAAK,EAAiB,WAAY,EAAiB,iBAAiB,CAAC,GAAG,WAAW,GACvF,IAAK,EAAiB,WAAY,EAAiB,iBAAiB,CAAC,GAAG,WAAW;AACrF,YAAI,KAAK,WAAW,KAAK,KAAK,WAAW,EAAG;AAC5C,QAAC,KAAK,SAAS,GAAK,KAAK,SAAS;AAClC,cAAM,EAAE,YAAY,IAAI,aAAa,GAAG,IAAI,QAC1C,EAAE,aAAa,GAAG,cAAc,EAAE,IAAI,KAAK,MAAM,WACjD,OAAO,KAAK,sBAAsB,IAAI,KAAK,qBAC3C,OAAO,KAAK,sBAAsB,IAAI,KAAK,qBAC3C,OAAO,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC,GACpC,OAAO,MAAM,IAAI,GAAG,MAAM,KAAK,IAAI,CAAC;AACtC,aAAK,MAAM,UAAU,MAAM,YAAY,aAAa,aAAa,IAAI,KAAK,kBAAkB,OAAO,IAAI,KAAK,kBAAkB,OAAO,WAAW;AAChJ,QAAC,KAAK,kBAAkB,GAAI,OAAO,KAAM,GAAG,KAAO,KAAK,kBAAkB,GAAI,OAAO,KAAM,GAAG;AAC9F,QAAC,KAAK,kBAAkB,GAAI,OAAO,KAAM,GAAG,KAAO,KAAK,kBAAkB,GAAI,OAAO,KAAM,GAAG;AAAA,MAChG,CAAC;AAAA,IACH;AAAA,IAIU,gBAAsB;AAC9B,WAAK,KAAK,cAAc,oBAAoB;AAC5C,WAAK,MAAM,UAAU,UAAU,OAAO,2BAA2B;AACjE,WAAK,MAAM,UAAU,MAAM,YAAY,QAAQ,KAAK,iBAAiB,WAAW;AAChF,WAAK,MAAM,UAAU,MAAM,YAAY,UAAU,KAAK,iBAAiB,WAAW;AAClF,WAAK,MAAM,UAAU,MAAM,eAAe,WAAW;AACrD,MAAAC,YAAW,OAAQ,KAAK,SAAS,IAAI,qBAAqB,KAAK,iBAAmB,KAAK,SAAS,IAAI,qBAAqB,KAAK,iBAAkB,CAAC,cAAc,QAAQ,QAAQ,EAAE,QAAQ,CAAC,SAAS,KAAK,MAAM,UAAU,MAAM,eAAe,IAAI,CAAC,IAAI,GAAG,KAAK,MAAM;AACpQ,eAAS,oBAAoB,aAAa,KAAK,cAAc;AAC7D,eAAS,oBAAoB,aAAa,KAAK,cAAc;AAC7D,iBAAW,QAAQ,CAAC,WAAW,cAAc,YAAY,aAAa,EAAG,UAAS,oBAAoB,MAAM,KAAK,aAAa;AAAA,IAChI;AAAA,IAEO,eAAqB;AA7I9B,UAAAC;AA8II,UAAI,KAAK,OAAO,SAAU,QAAO,MAAM,KAAK,MAAM,SAAS,aAAa;AACxE,OAAAA,MAAA,KAAK,MAAM,UAAS,eAApBA,IAAoB,aAAe,KAAK,KAAK;AAAA,IAC/C;AAAA,IAEmB,YAAkB;AACnC,eAAS,oBAAoB,aAAa,KAAK,cAAc;AAC7D,eAAS,oBAAoB,aAAa,KAAK,cAAc;AAC7D,iBAAW,QAAQ,CAAC,WAAW,cAAc,YAAY,aAAa,EAAG,UAAS,oBAAoB,MAAM,KAAK,aAAa;AAC9H,iBAAW,QAAQ,CAAC,aAAa,YAAY,EAAG,MAAK,MAAM,UAAU,oBAAoB,MAAM,KAAK,eAAe;AACnH,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AA3IE,gBADW,oBACY,WAAU;AAIjC,gBALW,oBAKY,SAAQ;;;ACR1B,MAAM,YAAN,cAAwB,SAAsB;AAAA,IAQnD,YAAY,MAAkB,SAAS,KAAK,SAAS,OAAO;AAC1D,YAAM,MAAM,MAAM;AANpB,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AAIL,YAAM,gBAAgB,YAAY,IAAI,kBAAkB,GACtD,aAAa,YAAY,IAAI,eAAe,GAC5C,sBAAsB,YAAY,IAAI,wBAAwB,GAC9D,gBAAgB,YAAY,IAAI,kBAAkB;AACpD,wBAAkB,KAAK,aAAa,IAAI,cAAc,KAAK,MAAM,KAAK,OAAO,UAAU,IAAI,eAAe,KAAK,UAAU,IAAI,WAAW,KAAK,MAAM,KAAK,OAAO,OAAO,IAAI,wBAAwB,KAAK,mBAAmB,IAAI,oBAAoB,KAAK,MAAM,KAAK,OAAO,gBAAgB,IAAI,kBAAkB,KAAK,aAAa,IAAI,cAAc,KAAK,MAAM,KAAK,OAAO,UAAU;AAAA,IACtX;AAAA,IAEgB,QAAc;AAE5B,WAAK,YAAY,QAAQ,GAAG,KAAK,SAAS,QAAQ,GAAG,KAAK,kBAAkB,QAAQ,GAAG,KAAK,YAAY,QAAQ;AAAA,IAClH;AAAA,IAEgB,OAAa;AAE3B,WAAK,YAAY,KAAK,GAAG,KAAK,SAAS,KAAK,GAAG,KAAK,kBAAkB,KAAK,GAAG,KAAK,YAAY,KAAK;AAEpG,YAAM,KAAK;AAAA,IACb;AAAA,IAEmB,YAAkB;AACnC,WAAK,YAAY,QAAQ,GAAG,KAAK,SAAS,QAAQ,GAAG,KAAK,kBAAkB,QAAQ,GAAG,KAAK,YAAY,QAAQ,GAAG,MAAM,UAAU;AAAA,IACrI;AAAA,EACF;AA/BE,gBADW,WACY,YAAW;AAClC,gBAFW,WAEY,SAAQ;;;ACV1B,MAAM,kBAA4C;AAAA,IACvD,UAAU;AAAA,IACV,MAAM,CAAC,qBAAqB,oBAAoB,oBAAoB,mBAAmB,wBAAwB,oBAAoB,kBAAkB,sBAAsB,qBAAqB,kBAAkB,iBAAiB,uBAAuB,uBAAuB,2BAA2B,yBAAyB,mBAAmB,gBAAgB,mBAAmB,eAAe;AAAA,EAC5Y;;;ACMO,MAAM,gBAAN,cAA4B,SAA0C;AAAA,IAM3E,YAAY,MAAkB,SAAS,KAAK,SAAS,WAAW;AAC9D,YAAM,MAAM,QAAQ,EAAE,QAAQ,CAAC,EAAE,CAAC;AAJpC,0BAAO,cAAa,oBAAI,IAA0B;AAClD,0BAAO;AAAA,IAIP;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,qBAAqB,KAAK,YAAY,SAAS,OAAO,EAAE,WAAW,gCAAgC,GAAG,EAAE,QAAQ,GAAG,CAAC;AAElI,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,SAAS;AAEvD,WAAK,KAAK,OAAO,GAAG,2BAA2B,KAAK,YAAY,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACrG;AAAA,IACgB,UAAgB;AAC9B,WAAK,UAAU,OAAO;AAAA,IACxB;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,UAAU,KAAK,mBAAmB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEnF,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,kBAAkB,EAAE,eAAe,EAAE,OAAO,SAAS,CAAC,EAAE,EAAE,GAA2C;AAC7G,iBAAW,MAAM,OAAQ,MAAK,UAAU,iBAAiB,IAAI,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACxG;AAAA,IAEU,WAAW,EAAE,OAAO,OAAO,CAAC,EAAE,GAAwD;AAC9F,iBAAW,MAAM,KAAM,EAAC,KAAK,WAAW,IAAI,EAAE,KAAK,KAAK,SAAS,EAAE;AAAA,IACrE;AAAA,IAIO,SAAS,MAAc,OAAO,kBAAkB,KAAK,MAAM,KAAK,IAAI,GAAG;AAC5E,aAAO,QAAQ,KAAK,WAAW,IAAI,MAAM,IAAoB,GAAG,QAAQ;AAAA,IAC1E;AAAA,IAIO,KAAK,MAAwC;AAClD,aAAO,KAAK,WAAW,IAAI,IAAI;AAAA,IACjC;AAAA,IAGO,OAAO,MAAuC;AACnD,aAAO,KAAK,WAAW,IAAI,IAAI,GAAG;AAAA,IACpC;AAAA,IAEO,YAAY,EAAE,MAAM,GAAG,GAAgB;AAC5C,WAAK,MAAM,GAAG,KAAK,KAAK,QAAQ,aAAa,MAAM,KAAK,MAAM,EAAE,GAAG,KAAK,MAAM;AAAA,IAChF;AAAA,IAEO,MAAM,QAAQ,IAAI,QAAQ,OAAa;AAC5C,eAAS,KAAK,KAAK,cAAc,WAAW;AAC5C,WAAK,UAAU,aAAa,eAAe,KAAK;AAAA,IAClD;AAAA,IAEO,OAAO,KAAmB;AAC/B,UAAI,CAAC,KAAK,OAAO,SAAU,MAAK,KAAK,KAAK,KAAK,MAAM,KAAK,SAAS;AAAA,IACrE;AAAA,IAEmB,YAAkB;AACnC,WAAK,MAAM,IAAI,IAAI;AACnB,iBAAW,QAAQ,KAAK,WAAW,OAAO,EAAG,MAAK,QAAQ;AAC1D,WAAK,WAAW,MAAM;AACtB,WAAK,KAAK,IAAI,qBAAqB;AACnC,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AAzEE,gBADW,eACY,YAAW;AAClC,gBAFW,eAEY,SAAQ;;;ACV1B,MAAM,aAAa,CAAC,WAAW,SAAS,MAAM;AAE9C,MAAM,mBAAiD;AAAA,IAC5D,SAAS;AAAA,MACP,EAAE,OAAO,WAAW,SAAS,cAAc;AAAA,MAC3C,EAAE,OAAO,SAAS,SAAS,gBAAgB;AAAA,MAC3C,EAAE,OAAO,QAAQ,SAAS,UAAU;AAAA,IACtC;AAAA,EACF;;;ACFO,MAAM,gBAAN,cAA4B,SAA0B;AAAA,IAI3C,OAAa;AAE3B,WAAK,MAAM,MAAM,QAAQ,MAAG;AAfhC,YAAAC;AAeoC,gBAAAA,MAAA,KAAK,MAAM,UAAS,cAApBA,IAAoB,YAAc;AAAA,SAAO,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE5G,WAAK,MAAM,GAAG,oBAAoB,KAAK,uBAAuB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AACpJ,WAAK,MAAM,GAAG,mBAAmB,KAAK,sBAAsB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAElH,WAAK,KAAK,MAAM,GAAG,8BAA8B,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzG,WAAK,KAAK,MAAM,GAAG,+BAA+B,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE9F,WAAK,KAAK,OAAO,GAAG,0BAA0B,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC1F,WAAK,KAAK,OAAO,GAAG,+BAA+B,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE/F,WAAK,KAAK,eAAe,aAAa,EAAE,IAAI,KAAK,WAAW,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC,GAAG,MAAM,KAAK;AAAA,IAC5G;AAAA,IAEU,sBAAsB,GAAgD;AAC9E,UAAI,EAAE,SAAU;AAChB,WAAK,MAAM,MAAM,YAAY,EAAE,SAAS;AACxC,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,qBAAqB,EAAE,OAAO,IAAI,GAA+C;AACzF,WAAK,SAAS,IAAI,YAAY,KAAK,MAAM,UAAU,QAAQ,YAAY;AACvE,WAAK,SAAS,IAAI,cAAc,QAAQ,SAAS,cAAc;AAAA,IACjE;AAAA,IAEA,IAAW,UAAqB;AAC9B,aAAQ,EAAE,SAAS,SAAS,OAAO,QAAQ,MAAM,UAAU,EAAY,KAAK,MAAM,MAAM,SAAS;AAAA,IACnG;AAAA,IACO,YAAkB;AACvB,WAAK,MAAM,OAAO,YAAY,UAAU,KAAK,MAAM,MAAM,WAAW,YAAY,KAAK,OAAO,OAAQ,CAAgB;AACpH,WAAK,MAAM,SAAS,aAAa,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,YAAY,KAAK,MAAM,OAAO,SAAS,EAAE;AAAA,IACzH;AAAA,IAEO,QAAQ,MAAM,KAAK,MAAM,MAAM,WAAmB;AACvD,aAAO,SAAS,KAAK,OAAO,SAAS,GAAG;AAAA,IAC1C;AAAA,IAEO,iBAAuB;AAC5B,YAAM,EAAE,QAAQ,KAAK,KAAK,MAAM,WAAW,UAAU,OAAO,SAAS,KAAK,KAAK,MAAM,WAAW,UAAU,QAAQ,MAAM,IAAI,IAAI,eAAe,KAAK,MAAM,QAAQ,KAAK,KAAK,MAAM,WAAW,WAAW,KAAK,SAAS,GAAU;AAChO,MAAC,KAAK,SAAS,IAAI,sBAAsB,SAAS,MAAQ,KAAK,SAAS,IAAI,qBAAqB,QAAQ,MAAQ,KAAK,SAAS,IAAI,mBAAmB,MAAM,MAAQ,KAAK,SAAS,IAAI,oBAAoB,OAAO;AAAA,IACnN;AAAA,EACF;AA9CE,gBADW,eACY,YAAW;AAClC,gBAFW,eAEY,SAAQ;;;ACR1B,MAAM,gBAA4C;AAAA,IACvD,OAAO;AAAA,IACP,UAAU;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,QACrC,EAAE,OAAO,QAAQ,SAAS,OAAO;AAAA,QACjC,EAAE,OAAO,cAAc,SAAS,aAAa;AAAA,QAC7C,EAAE,OAAO,UAAU,SAAS,SAAS;AAAA,MACvC;AAAA,IACF;AAAA,IACA,SAAS;AAAA,MACP,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,SAAS,SAAS,QAAQ;AAAA,QACnC,EAAE,OAAO,SAAS,SAAS,QAAQ;AAAA,QACnC,EAAE,OAAO,QAAQ,SAAS,OAAO;AAAA,MACnC;AAAA,IACF;AAAA,EACF;;;ACZO,MAAM,cAAN,cAA0B,SAAsC;AAAA;AAAA,IAMrE,YAAY,MAAkB,SAAS,KAAK,SAAS,SAAS;AAC5D,YAAM,MAAM,QAAQ,EAAE,SAAS,MAAM,CAAC;AAJxC,0BAAO,kBAAiB;AACxB,0BAAO,aAAsB,CAAC,oBAAoB,YAAY,gBAAgB,iBAAiB;AAAA,IAI/F;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAO,QAAQ,KAAK,KAAK,IAAI,KAAK,MAAM,GAAI,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACzI,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAO,QAAQ,KAAK,KAAK,OAAO,IAAI,KAAK,KAAK,GAAI,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE/I,WAAK,KAAK,OAAO,GAAG,kCAAkC,KAAK,eAAe,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC7G,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/G,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,cAAc,EAAE,MAAM,GAA+D;AAC7F,WAAK,MAAM,UAAU,QAAQ,UAAU;AAAA,IACzC;AAAA,IAEU,eAAe,EAAE,MAAM,GAAgE;AAC/F,WAAK,KAAK,GAAG,UAAU,YAAY,KAAK,KAAK,OAAO;AAAA,IACtD;AAAA,IAEO,OAAa;AAClB,UAAI,CAAC,KAAK,QAAQ,EAAG;AACrB,WAAK,MAAM,UAAU,UAAU,IAAI,mBAAmB;AACtD,WAAK,MAAM,UAAU;AACrB,WAAK,MAAM;AAAA,IACb;AAAA,IAEO,QAAc;AACnB,mBAAa,KAAK,cAAc;AAChC,UAAI,KAAK,QAAQ,EAAG,MAAK,iBAAiBC,YAAW,KAAK,MAAM,KAAK,OAAO,OAAO,KAAK,MAAM;AAAA,IAChG;AAAA,IAEO,KAAK,QAAwB;AAClC,UAAI,CAAC,KAAK,QAAQ,MAAM,EAAG;AAC3B,WAAK,MAAM,UAAU,UAAU,OAAO,mBAAmB;AACzD,WAAK,MAAM,UAAU;AAAA,IACvB;AAAA,IAEO,UAAmB;AACxB,aAAO,KAAK,OAAO,SAAS,UAAU,YAAY,CAAC,KAAK,MAAM,MAAM,UAAU,CAAC,KAAK,KAAK,WAAW,gBAAgB;AAAA,IACtH;AAAA,IACO,QAAQ,QAA2B;AACxC,aAAO,KAAK,OAAO,SAAS,UAAU,iBAAiB,WAAW,WAAY,CAAC,KAAK,UAAU,KAAK,KAAK,KAAK,UAAU,MAAM,YAAY,CAAC,KAAK,MAAM,OAAO,WAAW,CAAC,KAAK,MAAM,MAAM,SAAS,KAAK,OAAO,SAAS,UAAU,YAAY,CAAC,KAAK,MAAM,MAAM;AAAA,IACjQ;AAAA,EACF;AApDE,gBADW,aACY,YAAW;AAClC,gBAFW,aAEY,SAAQ;;;ACT1B,MAAM,gBAAwC;AAAA,IACnD,QAAQ,CAAC,IAAI;AAAA,IACb,WAAW;AAAA,MACT,QAAQ,CAAC,cAAc,YAAY,SAAS;AAAA,MAC5C,OAAO,CAAC,SAAS,UAAU;AAAA,IAC7B;AAAA,IACA,WAAW;AAAA,MACT,OAAO,CAAC,iBAAiB,gBAAgB,gBAAgB,oBAAoB,0BAA0B,oBAAoB;AAAA;AAAA,IAC7H;AAAA,IACA,aAAa;AAAA,IACb,cAAc;AAAA,IACd,cAAc;AAAA,EAChB;;;ACTO,MAAM,cAAN,cAA0B,SAAwB;AAAA,IAAlD;AAAA;AAGL,0BAAO;AAAA;AAAA,IAES,QAAc;AAE5B,WAAK,SAAS,IAAI,cAAc,EAAE,KAAK,GAAG,KAAK,KAAK,OAAO,EAAE,UAAU,GAAI,KAAK,OAAkC,CAAC;AAEnH,WAAK,OAAO,OAAO,KAAK,OAAO,OAAO,EAAE,MAAM,KAAK,KAAK,QAAQ,QAAQ;AAAA,IAC1E;AAAA,IAEgB,OAAa;AAE3B,WAAK,KAAK,OAAO,GAAG,oBAAoB,CAAC,MAAM,OAAsB,KAAK,OAAO,QAAQ,EAAE,cAAc,KAAK,GAAG,EAAE,OAAO,GAAG,QAAQ,KAAK,QAAQ,MAAM,MAAM,CAAC;AAE/J,WAAK,OAAO,WAAW,GAAG,MAAM,KAAK;AAAA,IACvC;AAAA,IAEmB,YAAkB;AACnC,WAAK,OAAO,QAAQ,GAAG,MAAM,UAAU;AAAA,IACzC;AAAA,EACF;AArBE,gBADW,aACY,YAAW;AAClC,gBAFW,aAEY,SAAQ;;;ACN1B,MAAM,sBAAmD;AAAA,IAC9D,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,IACN,SAAS,CAAC,GAAG,MAAM,KAAK,GAAG,CAAC;AAAA,EAC9B;;;ACCO,MAAM,mBAAN,cAA+B,SAA6B;AAAA,IAA5D;AAAA;AA8BL,0BAAU,mBAAkB,MAAY;AACtC,aAAK,YAAY,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,gBAAgB,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI;AAAA,MACvH;AACA,0BAAU,qBAAoB,MAAY;AACxC,aAAK,YAAY,EAAE,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,gBAAgB,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK;AAAA,MAC1H;AAAA;AAAA,IA/BgB,OAAa;AAE3B,WAAK,MAAM,IAAI,uBAAuB,CAAC,UAAU,MAAM,KAAK,OAAO,KAAK,OAAQ,KAAK,OAAO,GAAG,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEzH,WAAK,MAAM,GAAG,sBAAsB,KAAK,yBAAyB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAExH,WAAK,KAAK,OAAO,GAAG,6BAA6B,KAAK,WAAW,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACpG,WAAK,KAAK,OAAO,GAAG,6BAA6B,KAAK,WAAW,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEpG,WAAK,KAAK,eAAe,kBAAkB,EAAE,IAAI,KAAK,iBAAiB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACvG,WAAK,KAAK,eAAe,oBAAoB,EAAE,IAAI,KAAK,mBAAmB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AAC3G,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,UAAU,EAAE,OAAO,IAAI,GAA0D;AACzF,UAAI,KAAK,MAAM,MAAM,eAAe,IAAK,MAAK,MAAM,OAAO,eAAe;AAAA,IAC5E;AAAA,IAEU,UAAU,EAAE,OAAO,IAAI,GAA0D;AACzF,UAAI,KAAK,MAAM,MAAM,eAAe,IAAK,MAAK,MAAM,OAAO,eAAe;AAAA,IAC5E;AAAA,IAEU,wBAAwB,EAAE,MAAM,GAAkD;AAC1F,WAAK,MAAM,SAAS,sBAAsB;AAAA,IAC5C;AAAA,IASO,WAAW,MAAgC,YAAkB;AAClE,WAAK,MAAM,OAAO,eAAe,UAAU,KAAK,MAAM,MAAM,cAAc,EAAE,KAAK,KAAK,OAAO,KAAK,KAAK,KAAK,OAAO,KAAK,MAAM,KAAK,OAAO,KAAK,GAAG,GAAG;AAAA,IACvJ;AAAA,IAEO,YAAY,OAAqB;AACtC,YAAM,OAAO,SAAS,IAAI,MAAM;AAChC,cAAQ,KAAK,IAAI,KAAK,MAAM,QAAQ,GAAG,CAAC;AACxC,UAAI,OAAO,KAAK,MAAM,KAAK,MAAM,MAAM,eAAe,GAAG;AACzD,UAAI,SAAS,KAAK;AAChB,YAAI,OAAO,KAAK,OAAO,MAAM,IAAK,SAAQ,OAAO,SAAS;AAC1D,aAAK,MAAM,SAAS,gBAAgB,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,kBAAkB;AAAA,MACrG,OAAO;AACL,YAAI,OAAO,KAAK,OAAO,MAAM,IAAK,SAAQ,OAAO,QAAQ,QAAS,OAAO,QAAS;AAClF,aAAK,MAAM,SAAS,gBAAgB,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,gBAAgB;AAAA,MACnG;AACA,WAAK,MAAM,OAAO,eAAe,MAAM,KAAK,OAAO,KAAK,EAAE,OAAO,KAAK,QAAQ,CAAC,GAAG,KAAK,OAAO,GAAG;AAAA,IACnG;AAAA,EACF;AArDE,gBADW,kBACY,YAAW;AAClC,gBAFW,kBAEY,SAAQ;;;ACR1B,MAAM,eAAsC;AAAA,IACjD,QAAQ;AAAA,EACV;;;ACIO,MAAM,aAAN,cAAyB,SAAoC;AAAA,IAKlE,YAAY,MAAkB,QAAc;AAC1C,YAAM,MAAM,QAAQ,EAAE,SAAS,KAAK,CAAC;AAHvC,0BAAO;AAAA,IAIP;AAAA,IAEgB,QAAc;AAE5B,WAAK,UAAU,KAAK,KAAK,iBAAiB,SAAS,OAAO,EAAE,WAAW,wDAAwD,KAAK,eAAe,CAAC,CAAC;AAErJ,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,OAAO;AAAA,IACvD;AAAA,IACgB,UAAgB;AAC9B,WAAK,QAAQ,OAAO;AAAA,IACtB;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,WAAW,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE/D,WAAK,MAAM,MAAM,QAAQ,MAAG;AA/BhC,YAAAC;AA+BqC,gBAAAA,MAAA,KAAK,MAAM,UAAS,WAApBA,IAAoB,SAAW,OAAO,KAAK,SAAS;AAAA,SAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE5H,WAAK,MAAM,GAAG,iBAAiB,KAAK,oBAAoB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC9I,WAAK,MAAM,GAAG,cAAc,CAAC,MAAM,EAAE,aAAa,KAAK,MAAM,UAAU,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrG,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC,SAAS,CAAC,KAAK,OAAO,WAAW,KAAK,MAAM,UAAU,QAAQ,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAClK,WAAK,MAAM,GAAG,qBAAqB,OAAO,KAAK,OAAO,UAAU,KAAK,MAAM,MAAM,iBAAiB,KAAK,MAAM,UAAU,QAAQ,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACrL,WAAK,MAAM,GAAG,gBAAgB,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AACpE,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAO,QAAS,KAAK,QAAQ,MAAM,QAAS,KAAK,QAAQ,gBAAgB,KAAK,GAAI,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE/K,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,mBAAmB,GAA6C;AACxE,UAAI,EAAE,SAAU;AAChB,UAAI,EAAE,MAAO,CAAC,KAAK,QAAQ,QAAQ,SAAS,SAAW,KAAK,QAAQ,MAAM,EAAE;AAC5E,WAAK,MAAM,MAAM,SAAS,EAAE;AAC5B,QAAE,QAAQ,KAAK,IAAI;AAAA,IACrB;AAAA,IAEU,WAAiB;AACzB,WAAK,MAAM,UAAU,UAAU,OAAO,0BAA0B,KAAK,MAAM,SAAS,WAAW,KAAK,MAAM,WAAY,CAAC,KAAK,OAAO,UAAU,KAAK,MAAM,OAAO,KAAM;AAAA,IACvK;AAAA,EACF;AA5CE,gBADW,YACY,YAAW;AAClC,gBAFW,YAEY,SAAQ;;;ACP1B,MAAM,iBAAkD;AAAA,IAC7D,WAAW;AAAA,IACX,MAAM;AAAA,MACJ,UAAU;AAAA,MACV,UAAU;AAAA,MACV,WAAW;AAAA,MACX,eAAe;AAAA,IACjB;AAAA,EACF;;;ACJO,MAAe,gBAAf,cAA6H,aAA4B;AAAA,IAW9J,YAAY,MAAkB,QAAgBC,QAAe;AAC3D,YAAM,MAAM,QAAQ,EAAE,OAAO,IAAI,KAAK,IAAI,QAAQ,OAAO,UAAU,OAAO,QAAQ,OAAO,GAAGA,OAAM,CAAU;AAN9G,0BAAO;AAAA,IAOP;AAAA,IAVA,IAAW,OAAO;AAChB,aAAQ,KAAK,YAAqC;AAAA,IACpD;AAAA,IAEA,IAAW,KAAK;AACd,aAAO,KAAK;AAAA,IACd;AAAA,IAKmB,UAAgB;AACjC,WAAK,QAAQ;AACb,WAAK,KAAK,MAAM,aAAa,KAAK,OAAO,IAAI,KAAK,QAAQ,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,MAAM,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClI;AAAA,IACmB,YAAkB;AACnC,WAAK,QAAQ;AAAA,IACf;AAAA;AAAA,IAGO,QAAe;AAAA,IAAC;AAAA,IAChB,UAAgB;AACrB,WAAK,GAAG,OAAO;AAAA,IACjB;AAAA,IACO,OAAc;AAAA,IAAC;AAAA;AAAA,IAEf,SAAS;AACd,WAAK,GAAG,UAAU,OAAO,4BAA6B,KAAK,MAAM,SAAS,IAAK;AAAA,IACjF;AAAA,IACO,WAAW;AAChB,WAAK,GAAG,UAAU,OAAO,4BAA6B,KAAK,MAAM,SAAS,KAAM;AAAA,IAClF;AAAA,IACO,UAAgB;AACrB,WAAK,GAAG,UAAU,OAAO,8BAA+B,KAAK,MAAM,WAAW,IAAK;AAAA,IACrF;AAAA,IACO,SAAe;AACpB,WAAK,GAAG,UAAU,OAAO,8BAA+B,KAAK,MAAM,WAAW,KAAM;AAAA,IACtF;AAAA,IACO,OAAa;AAClB,WAAK,GAAG,UAAU,OAAO,4BAA6B,KAAK,MAAM,SAAS,IAAK;AAAA,IACjF;AAAA,IACO,OAAa;AAClB,WAAK,GAAG,UAAU,OAAO,4BAA6B,KAAK,MAAM,SAAS,KAAM;AAAA,IAClF;AAAA,IACU,KAAK,GAA+D;AAC5E,OAAC,EAAE,QAAQ,KAAK,KAAK,IAAI,KAAK,WAAW,KAAK,KAAK;AAAA,IACrD;AAAA,IACA,IAAc,UAAmB;AAC/B,aAAO;AAAA,IACT;AAAA;AAAA,IAEU,WAAW,WAAoB,SAAsB,KAAK,IAAU;AAC5E,WAAK,MAAM,SAAS,OAAO,aAAa,cAAc,KAAK,MAAM,KAAK;AACtE,WAAK,MAAM,OAAO,OAAO,aAAa,qBAAqB,eAAe,KAAK,MAAM,GAAG,CAAC;AACzF,UAAI,UAAW,QAAO,aAAa,oBAAoB,mBAAmB,SAAS,EAAE;AAAA,eAC5E,OAAO,aAAa,kBAAkB,EAAG,QAAO,gBAAgB,kBAAkB;AAAA,IAC7F;AAAA,EACF;AA3DE,gBADoB,eACG;AACvB,gBAFoB,eAEG,aAAqB;;;ACHvC,MAAe,gBAAf,cAAqC,aAAa;AAAA,IAIvD,YAAY,MAAkB,QAAa,WAAmB;AAC5D,YAAM,MAAM,MAAM;AAJpB,0BAAgB;AAChB,0BAAmB;AAIjB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,yBAAyB,SAAS,GAAG,CAAC;AAClF,WAAK,QAAQ,OAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,gCAAgC,CAAC,CAAE;AAAA,IACtG;AAAA,IAEO,MAAM,MAAgB,WAAiB;AAC5C,WAAK,QAAQ,UAAU,OAAO,8BAA8B,8BAA8B;AAC1F,MAAC,KAAK,QAAQ,QAAQ,MAAM,KAAM,KAAK,QAAQ,MAAM,eAAe,SAAS,GAAG,KAAK,QAAQ,gBAAgB,OAAO;AACpH,WAAK,KAAK,QAAQ,aAAa,KAAK,QAAQ,UAAU,IAAI,8BAA8B;AAAA,IAC1F;AAAA,IACO,KAAK,MAAgB,YAAkB;AAC5C,MAAC,KAAK,QAAQ,QAAQ,MAAM,KAAM,KAAK,QAAQ,aAAa,SAAS,EAAE;AACvE,WAAK,QAAQ,UAAU,OAAO,gCAAgC,4BAA4B;AAC1F,WAAK,QAAQ,MAAM,UAAU;AAAA,IAC/B;AAAA,IAEA,IAAW,WAAoB;AAC7B,aAAO,KAAK,QAAQ,UAAU,SAAS,8BAA8B;AAAA,IACvE;AAAA,IAEA,IAAW,gBAAwB;AAEjC,aAAO,MAAM,UAAU,OAAO,KAAK,KAAK,QAAQ,WAAW,CAAC,KAAa,OAAoB;AAC3F,cAAM,YAAY,GAAG,MAAM;AAC3B,WAAG,MAAM,SAAS;AAClB,cAAM,IAAI,GAAG;AACb,eAAQ,YAAa,GAAG,MAAM,SAAS,YAAa,GAAG,MAAM,eAAe,QAAQ,GAAG,MAAM;AAAA,MAC/F,IAAW,CAAC;AAAA,IACd;AAAA,EACF;;;ACnCO,MAAe,aAAf,cAA+C,aAAa;AAAA,IAIjE,YAAY,MAA2B,MAAkB;AACvD,YAAM,MAAM,MAAS;AAJvB,0BAAU;AACV,0BAAO;AAIL,WAAK,OAAO;AAAA,IACd;AAAA,IAImB,UAAgB;AACjC,WAAK,KAAK,YAAY,QAAQ,CAAC,SAAS,KAAK,MAAM,GAAG,MAAM,KAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC;AACjG,WAAK,KAAK,aAAa,QAAQ,CAAC,SAAS,KAAK,KAAK,OAAO,GAAG,MAAM,KAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC,CAAC;AACxG,WAAK,KAAK,SAAS,KAAK,QAAQ,KAAK,MAAM;AAAA,IAC7C;AAAA,IACmB,YAAkB;AAAA,IAAC;AAAA,EACxC;AAIO,MAAM,kBAAN,MAAM,wBAAuB,aAAgC;AAAA,IAGlE,OAAc,SAAS,MAAc,MAA+B;AAClE,WAAK,SAAS,SAAS,MAAM,IAAI;AAAA,IACnC;AAAA,IACA,OAAc,OAAO,MAAwB,MAAqC;AAChF,YAAM,OAAO,KAAK,SAAS,IAAI,KAAK,MAAM;AAC1C,UAAI,CAAC,KAAM,QAAO;AAClB,YAAM,SAAS,IAAI,KAAK,MAAM,IAAI;AAClC,aAAO,OAAO,MAAM,GAAG;AAAA,IACzB;AAAA,EACF;AAXE,gBADW,iBACI,YAAW,IAAI,gBAAe;AADxC,MAAM,iBAAN;;;AC1BP;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,+BAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,mBAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,iCAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,sBAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,eAAAC;AAAA,IAAA;AAAA;;;ACMO,MAAM,cAAN,cAA0B,WAAW;AAAA,IAArC;AAAA;AACL,0BAAQ;AACR,0BAAO;AAAA;AAAA,IAES,SAAsB;AACpC,WAAK,UAAU,SAAS,MAAM,EAAE,WAAW,6BAA6B,CAAC;AACzE,WAAK,aAAa,mBAAqC;AAAA,QACrD,WAAW,KAAK;AAAA,QAChB,QAAQ,CAAC,QAAQ,IAAI;AAAA,QACrB,YAAY,CAAC,SAAS,KAAK,SAAS,IAAI;AAAA,QACxC,aAAa,CAAC,UAAW,KAAa,KAAK,MAAM,GAAI,KAA4B,QAAQ,QAAQ,GAAG,KAAK,OAAO;AAAA,MAClH,CAAC;AACD,aAAO,KAAK,OAAO,GAAG,KAAK;AAAA,IAC7B;AAAA,IAEgB,SAAe;AAC7B,YAAM,UAAU,KAAK,KAAK,SAAS,CAAC,GAAG,OAAO,CAAC,QAAQ;AACrD,YAAI,OAAO,IAAI,MAAM,IAAI,IAAI,OAAO,IAAI,IAAI,OAAQ,QAAO;AAC3D,eAAO,CAAC,IAAI,WAAW,QAAQ,KAAK,MAAM,SAAS,IAAI,OAAO,CAAC;AAAA,MACjE,CAAC;AACD,WAAK,WAAW,MAAM;AACtB,aAAO,QAAQ,CAAC,QAAQ;AACtB,cAAM,KAAK,KAAK,QAAQ,cAAkC,2CAA2C,IAAI,EAAE,IAAI;AAC/G,YAAI,IAAI;AACN,gBAAM,UAAU,GAAG,cAA2B,8BAA8B;AAC5E,oBAAW,QAAQ,cAAc,IAAI,WAAW,KAAK,KAAM,GAAG,QAAQ,OAAO;AAAA,QAC/E;AAAA,MACF,CAAC;AAAA,IACH;AAAA,IAEQ,SAAS,KAAoC;AACnD,YAAM,WAAW,IAAI,WAAW,YAAY,IAAI,QAC9C,WAAW,IAAI,cAAc,MAAM,CAAC,UAAU,aAAa,EAAE,SAAS,IAAI,MAAgB,KAAK,IAAI,aAAa,GAAG,WAAW,IAC9H,KAAK,SAAS,MAAM,EAAE,WAAW,+BAA+B,WAAW,gCAAgC,KAAK,UAAU,GAAG,OAAO,YAAY,OAAU,GAAG,EAAE,OAAO,IAAI,GAAG,CAAC,GAC9K,MAAM,SAAS,QAAQ,EAAE,WAAW,+BAA+B,aAAa,IAAI,MAAM,CAAC;AAC7F,UAAI,IAAI,MAAO,IAAG,QAAQ,OAAO,IAAI,KAAK,IAAI,IAAI,MAAM,IAAI,IAAI;AAChE,UAAI,IAAI,MAAM;AACZ,cAAM,UAAU,aAAa,IAAI,IAAI,MAAM,IAAI;AAC/C,YAAI,QAAS,IAAG,OAAO,SAAS,QAAQ,EAAE,WAAW,8BAA8B,WAAW,QAAQ,CAAC,CAAC;AAAA,MAC1G;AACA,UAAI,UAAU;AACZ,cAAM,SAAS,eAAe,OAAO,KAAK,KAAK,IAAI;AACnD,YAAI,QAAQ;AACV,cAAI,UAAU,IAAI,WAAW,YAAY,GAAG,gBAAgB,UAAU,GAAG,GAAG,UAAU,QAAQ,6BAA6B,gCAAgC,GAAG,GAAG,OAAO,OAAO,OAAO,CAAC,GAAG,IAAI,WAAW,WAAW,GAAG,UAAU,IAAI,kCAAkC,MAAM,GAAG,OAAO,KAAK,OAAO,OAAO,CAAC,GAAG,GAAG,UAAU,IAAI,4BAA4B;AAC3V,aAAG,SAAS;AACZ,aAAG,iBAAiB,SAAS,CAAC,MAAM,CAAC,aAAa,EAAE,WAAW,MAAM,EAAE,WAAW,QAAQ,GAAG,cAA2B,eAAe,GAAG,MAAM,CAAC;AAAA,QACnJ,MAAO,IAAG,OAAO,GAAG;AAAA,MACtB,OAAO;AACL,cAAM,MAAM,SAAS,QAAQ,EAAE,WAAW,+BAA+B,aAAa,IAAI,SAAS,KAAK,GAAG,CAAC;AAC5G,YAAI,WAAW,WAAW,GAAG,OAAO,KAAK,KAAK,SAAS,QAAQ,EAAE,WAAW,+BAA+B,YAAY,QAAQ,WAAW,UAAU,CAAC,CAAC,IAAI,GAAG,OAAO,GAAG;AACvK,WAAG,iBAAiB,SAAS,MAAM,CAAC,aAAa,IAAI,WAAW,WAAW,IAAI,WAAW,IAAI,IAAI,KAAK,iBAAiB,GAAG,EAAE;AAC7H,YAAI,IAAI,cAAc,IAAI,eAAe,IAAI,QAAQ;AACnD,gBAAM,KAAK,IAAI,gBAAgB,GAC7B,SAAS,MAAM;AACb,kBAAM,UAAU,GAAG,cAA2B,8BAA8B;AAC5E,sBAAW,QAAQ,cAAc,IAAI,SAAS,KAAK,KAAO,GAA0B,QAAQ,OAAO;AACnG,kBAAMC,MAAK,IAAI,cAAc,MAAM,CAAC,UAAU,aAAa,EAAE,SAAS,IAAI,MAAgB,KAAK,IAAI,aAAa,GAAG,WAAW;AAC9H,YAAC,GAAG,QAAQ,CAAC,CAACA,KAAK,GAAG,UAAU,OAAO,8BAA8B,CAAC,CAACA,GAAE;AAAA,UAC3E;AACF,cAAI,YAAY,QAAQ,CAAC,SAAS,KAAK,MAAM,GAAG,MAAM,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AACpF,cAAI,aAAa,QAAQ,CAAC,SAAS,KAAK,KAAK,OAAO,GAAG,MAAM,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AAC3F,cAAI,SAAS,QAAQ,GAAG,MAAM;AAC9B,UAAC,GAAW,MAAM;AAAA,QACpB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;AAEA,iBAAe,SAAS,SAAS,WAAW;;;AClErC,MAAM,gBAAN,cAA4B,cAAc;AAAA,IAM/C,YAAY,MAAmC,YAAgC;AAC7E,YAAM,MAAM,QAAW,4BAA4B;AADN;AAL/C,0BAAQ;AACR,0BAAQ;AACR,0BAAO;AACP,0BAAO;AAAA,IAIP;AAAA,IAEmB,UAAU;AAAA,IAAC;AAAA,IAEvB,QAAc;AACnB,YAAM,OAAO,SAAS,MAAM,EAAE,WAAW,6BAA6B,MAAM,OAAO,CAAC;AACpF,WAAK,aAAa,mBAAqC;AAAA,QACrD,WAAW;AAAA,QACX,QAAQ,CAAC,SAAS,KAAK;AAAA,QACvB,YAAY,CAAC,SAAS,KAAK,SAAS,IAAI;AAAA,QACxC,aAAa,CAAC,UAAW,KAAa,KAAK,MAAM,GAAI,KAA4B,QAAQ,QAAQ,GAAG,KAAK,OAAO;AAAA,MAClH,CAAC;AACD,WAAK,QAAQ,OAAO,IAAI;AACxB,UAAI,KAAK,WAAW,UAAU;AAC5B,aAAK,UAAU,SAAS,UAAU,EAAE,MAAM,UAAU,WAAW,4BAA4B,WAAW,0CAA0C,aAAa,IAAI,YAAY,CAAC,mDAAmD,KAAK,WAAW,SAAS,UAAU,CAAC;AACrQ,aAAK,QAAQ,iBAAiB,SAAS,MAAM,KAAK,cAAc,CAAC,GAAG,KAAK,QAAQ,OAAO,SAAS,OAAO,EAAE,WAAW,0BAA0B,CAAC,GAAG,KAAK,OAAO;AAAA,MACjK;AAAA,IACF;AAAA,IAEO,KAAK,OAAiC;AAC3C,WAAK,WAAW,KAAK,GAAG,KAAK,YAAY,KAAK,WAAW;AAAA,IAC3D;AAAA,IACgB,MAAM,KAA6C;AACjE,YAAM,MAAM,GAAG,GAAG,KAAK,WAAW;AAAA,IACpC;AAAA,IACQ,aAAmB;AACzB,MAAAC,uBAAsB,MAAM,KAAK,QAAQ,cAA2B,oCAAoC,GAAG,MAAM,GAAG,KAAK,KAAK,MAAM;AAAA,IACtI;AAAA,IAEQ,SAAS,MAAqC;AACpD,YAAM,WAAW,KAAK,WAAW,YAAY,KAAK,WAAW,YAAY,KAAK,QAC5E,KAAK,SAAS,MAAM,EAAE,WAAW,yBAAyB,KAAK,cAAc,IAAI,gCAAgC,KAAK,MAAM,YAAY,UAAU,GAAG,OAAO,KAAK,cAAc,KAAK,OAAU,GAAG,EAAE,QAAQ,KAAK,GAAG,CAAC,GACpN,MAAM,SAAS,QAAQ,EAAE,WAAW,6BAA6B,aAAa,KAAK,MAAM,CAAC;AAC5F,UAAI,KAAK,MAAO,IAAG,QAAQ,OAAO,KAAK,KAAK,IAAI,KAAK,MAAM,IAAI,KAAK;AACpE,UAAI,KAAK,MAAM;AACb,cAAM,UAAU,aAAa,IAAI,KAAK,MAAM,IAAI;AAChD,YAAI,QAAS,IAAG,OAAO,SAAS,QAAQ,EAAE,WAAW,4BAA4B,WAAW,QAAQ,CAAC,CAAC;AAAA,MACxG;AACA,UAAI,UAAU;AACZ,cAAM,SAAS,eAAe,OAAO,MAAM,KAAK,IAAI;AACpD,YAAI,QAAQ;AACV,eAAK,UAAU,KAAK,WAAW,YAAY,GAAG,gBAAgB,UAAU,GAAG,GAAG,UAAU,QAAQ,uBAAuB,gCAAgC,GAAG,GAAG,OAAO,OAAO,OAAO,CAAC,GAAG,KAAK,WAAW,WAAW,GAAG,UAAU,IAAI,kCAAkC,MAAM,GAAG,OAAO,KAAK,OAAO,OAAO,CAAC,GAAG,GAAG,UAAU,IAAI,4BAA4B;AACxV,aAAG,SAAS;AACZ,aAAG,iBAAiB,SAAS,CAAC,MAAM,CAAC,KAAK,cAAc,MAAM,EAAE,WAAW,MAAM,EAAE,WAAW,QAAQ,GAAG,cAA2B,eAAe,GAAG,MAAM,CAAC;AAAA,QAC/J,MAAO,IAAG,OAAO,GAAG;AAAA,MACtB,OAAO;AACL,cAAM,MAAM,SAAS,QAAQ,EAAE,WAAW,6BAA6B,aAAa,KAAK,SAAS,KAAK,GAAG,CAAC;AAC3G,YAAI,KAAK,UAAU;AACjB,gBAAM,OAAO,SAAS,QAAQ,EAAE,WAAW,4BAA4B,aAAa,OAAO,KAAK,QAAQ,IAAI,KAAK,SAAS,IAAI,KAAK,SAAS,CAAC;AAC7I,aAAG,OAAO,KAAK,MAAM,KAAK,SAAS,QAAQ,EAAE,WAAW,6BAA6B,YAAY,QAAQ,WAAW,UAAU,CAAC,CAAC;AAAA,QAClI,MAAO,IAAG,OAAO,KAAK,KAAK,SAAS,QAAQ,EAAE,WAAW,6BAA6B,YAAY,QAAQ,WAAW,UAAU,CAAC,CAAC;AACjI,WAAG,iBAAiB,SAAS,MAAM,CAAC,KAAK,cAAc,KAAK,KAAK,cAAc,IAAI,CAAC;AACpF,YAAI,KAAK,cAAc,KAAK,eAAe,KAAK,QAAQ;AACtD,gBAAM,KAAK,IAAI,gBAAgB,GAC7B,SAAS,MAAM;AACb,kBAAM,UAAU,GAAG,cAA2B,4BAA4B;AAC1E,sBAAW,QAAQ,cAAc,KAAK,SAAS,KAAK,KAAO,GAA0B,QAAQ,OAAO;AACpG,YAAC,GAAG,QAAQ,CAAC,CAAC,KAAK,cAAc,GAAI,GAAG,UAAU,OAAO,8BAA8B,CAAC,CAAC,KAAK,cAAc,CAAC;AAAA,UAC/G;AACF,eAAK,YAAY,QAAQ,CAAC,SAAS,KAAK,MAAM,GAAG,MAAM,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AACrF,eAAK,aAAa,QAAQ,CAAC,SAAS,KAAK,KAAK,OAAO,GAAG,MAAM,QAAQ,EAAE,QAAQ,GAAG,OAAO,CAAC,CAAC;AAC5F,eAAK,SAAS,QAAQ,GAAG,MAAM;AAC/B,UAAC,GAAW,MAAM;AAAA,QACpB;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,EACF;;;AC1EO,MAAM,eAAN,cAA2B,cAAc;AAAA,IAW9C,YAAY,MAAkB;AAC5B,YAAM,MAAM,QAAW,2BAA2B;AAXpD,0BAAQ;AACR,0BAAQ;AACR,0BAAQ;AACR,0BAAQ,UAA4B;AACpC,0BAAQ,QAAgC;AACxC,0BAAQ;AACR,0BAAQ;AACR,0BAAO;AACP,0BAAO;AAAA,IAIP;AAAA,IAEmB,UAAgB;AACjC,WAAK,WAAW;AAAA,IAClB;AAAA,IAEQ,aAAmB;AACzB,YAAM,SAAS,SAAS,OAAO,EAAE,WAAW,6BAA6B,CAAC;AAC1E,WAAK,UAAU,SAAS,UAAU,EAAE,MAAM,UAAU,WAAW,4BAA4B,WAAW,QAAQ,WAAW,2DAA2D,UAAU,EAAE,CAAC;AACjM,WAAK,cAAc,SAAS,QAAQ,EAAE,WAAW,6BAA6B,UAAU,GAAG,CAAC;AAC5F,WAAK,QAAQ,iBAAiB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,KAAK,SAAS,EAAE;AACpF,aAAO,iBAAiB,SAAS,MAAM,KAAK,SAAS,CAAC;AACtD,WAAK,gBAAgB,SAAS,OAAO,EAAE,WAAW,8BAA8B,CAAC;AACjF,aAAO,OAAO,KAAK,SAAS,KAAK,aAAa,KAAK,aAAa;AAChE,WAAK,aAAa,SAAS,OAAO,EAAE,WAAW,8BAA8B,CAAC;AAC9E,WAAK,aAAa,SAAS,OAAO,EAAE,WAAW,6BAA6B,CAAC;AAC7E,WAAK,QAAQ,OAAO,QAAQ,KAAK,YAAY,KAAK,UAAU;AAAA,IAC9D;AAAA,IAEgB,MAAM,KAAuC;AAC3D,YAAM,MAAM,GAAG,GAAGC,uBAAsB,MAAM,KAAK,QAAQ,cAA2B,kKAAkK,GAAG,MAAM,GAAG,KAAK,KAAK,MAAM;AAAA,IACtR;AAAA,IAEO,KAAK,MAA8B;AACxC,WAAK,YAAY,cAAc,KAAK;AACpC,UAAI,KAAK,MAAM,OAAO,KAAK,GAAI,QAAO,KAAK,KAAK,QAAQ,OAAO;AAC/D,UAAI,KAAK,OAAQ,MAAK,OAAO,SAAS,OAAO,GAAG,KAAK,OAAO,QAAQ;AACpE,WAAK,OAAO;AACZ,YAAM,SAAS,eAAe,OAAO,MAAM,KAAK,IAAI;AACpD,UAAI,CAAC,OAAQ;AACb,UAAI,kBAAkB,YAAa,QAAO,iBAAiB,CAAC,QAAQ,KAAK,iBAAiB,GAAG;AAC7F,WAAK,SAAS;AACd,WAAK,WAAW,OAAO,OAAO,OAAO,CAAC;AAEtC,WAAK,cAAc,YAAY;AAC/B,UAAI,KAAK,SAAS;AAChB,mBAAW,UAAU,KAAK,SAAS;AACjC,gBAAM,QAAQ,OAAO,SAAS,GAC5B,MAAM,SAAS,UAAU,EAAE,WAAW,oCAAoC,CAAC,OAAO,OAAO,2DAA2D,KAAK,MAAM,UAAU,WAAW,OAAO,OAAO,MAAM,CAAC;AAC3M,cAAI,OAAO,OAAO,YAAY,OAAO,SAAS,SAAU,KAAI,UAAU,IAAI,4BAA4B;AACtG,iBAAO,OAAQ,IAAI,YAAY,aAAa,IAAI,OAAO,MAAM,IAAI,KAAK,QAAU,IAAI,cAAc;AAClG,cAAI,iBAAiB,SAAS,CAAC,OAAO,EAAE,gBAAgB,GAAG,OAAO,QAAQ,EAAE;AAC5E,eAAK,cAAc,OAAO,GAAG;AAAA,QAC/B;AAAA,MACF;AAEA,WAAK,WAAW,YAAY;AAC5B,UAAI,KAAK,QAAS,MAAK,WAAW,YAAY,OAAO,KAAK,OAAO,IAAI,KAAK,QAAQ,IAAI,KAAK;AAC3F,UAAI,KAAK,eAAe,QAAQ;AAC9B,cAAM,cAAc,SAAS,OAAO,EAAE,WAAW,iCAAiC,CAAC;AACnF,mBAAW,UAAU,KAAK,eAAe;AACvC,gBAAM,MAAM,SAAS,UAAU,EAAE,WAAW,6BAA6B,MAAM,UAAU,aAAa,OAAO,SAAS,EAAE,CAAC;AACzH,cAAI,iBAAiB,SAAS,MAAM,OAAO,QAAQ,CAAC,GAAG,YAAY,OAAO,GAAG;AAAA,QAC/E;AACA,aAAK,WAAW,OAAO,WAAW;AAAA,MACpC;AAAA,IACF;AAAA,IAEO,SAAe;AACpB,WAAK,QAAQ,OAAO;AACpB,UAAI,KAAK,MAAM,eAAe,QAAQ;AACpC,cAAM,OAAO,KAAK,WAAW,iBAAiB,QAAQ;AACtD,aAAK,KAAK,cAAc,QAAQ,CAAC,QAAQ,MAAM,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,cAAc,OAAO,SAAS,EAAE;AAAA,MACrG;AACA,UAAI,KAAK,MAAM,SAAS,QAAQ;AAC9B,cAAM,OAAO,KAAK,cAAc,iBAAiB,QAAQ;AACzD,aAAK,KAAK,QAAQ,QAAQ,CAAC,QAAQ,MAAM;AACvC,cAAI,CAAC,KAAK,CAAC,EAAG;AACd,gBAAM,MAAM,OAAO,SAAS;AAC5B,eAAK,CAAC,EAAE,YAAY,OAAO,OAAO,aAAa,IAAI,OAAO,MAAM,IAAI,KAAK,MAAM;AAAA,QACjF,CAAC;AAAA,MACH;AAAA,IACF;AAAA,IAEA,IAAW,WAA0B;AACnC,aAAO,KAAK,MAAM,MAAM;AAAA,IAC1B;AAAA,EACF;;;AClFO,MAAM,eAAN,cAA2B,cAA+D;AAAA,IAA1F;AAAA;AAEL,0BAAQ,YAAW,IAAI,gBAAkC;AACzD,0BAAQ;AACR,0BAAQ,aAA4B,CAAC;AACrC,0BAAO,YAAqB,CAAC;AAC7B,0BAAQ,YAAW;AACnB,0BAAQ;AA6ER,0BAAQ,kBAAiB;AAAA;AAAA,IA3ET,SAAsB;AACpC,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,2BAA2B,OAAO,KAAK,CAAC;AACpF,WAAK,GAAG,iBAAiB,WAAW,CAAC,GAAkB,SAAS,YAAY,KAAK,GAAG,aAAa,MAAqB;AACpH,aAAK,EAAE,QAAQ,WAAW,EAAE,QAAQ,QAAQ,UAAU,CAAC,OAAO,QAAQ,kCAAkC,KAAK,OAAO,YAAY,YAAY,OAAO,QAAQ,+BAA+B,EAAG,GAAE,eAAe,GAAG,OAAO,MAAM;AAAA,iBACrN,EAAE,QAAQ,gBAAgB,QAAQ,cAAc,0DAA0D,EAAG,GAAE,yBAAyB,GAAG,OAAO,MAAM;AAAA,iBACxJ,EAAE,QAAQ,eAAe,CAAC,QAAQ,QAAQ,kCAAkC,EAAG,GAAE,yBAAyB,GAAG,KAAK,OAAO;AAAA,MACpI,CAAC;AACD,aAAO,KAAK;AAAA,IACd;AAAA,IAEgB,MAAM,aAAgC;AACpD,UAAI,CAAC,KAAK,QAAS,MAAK,OAAO;AAC/B,WAAK,YAAY,IAAI,cAAc,KAAK,MAAM,KAAK,MAAM;AACzD,WAAK,UAAU,MAAM,GAAG,KAAK,UAAU,MAAM;AAC7C,WAAK,UAAU,cAAc,CAAC,SAAS,KAAK,KAAK,KAAK,EAAE;AACxD,WAAK,UAAU,cAAc;AAC7B,WAAK,GAAG,OAAO,KAAK,UAAU,OAAO;AACrC,WAAK,MAAM,UAAU,OAAO,KAAK,OAAO;AAAA,IAC1C;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC,SAAS,KAAK,MAAM,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5F,WAAK,MAAM,GAAG,YAAY,MAAM,KAAK,aAAa,KAAK,SAAS,GAAG,KAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEtI,WAAK,KAAK,MAAM,GAAG,8BAA8B,MAAM,KAAK,YAAY,KAAK,WAAW,KAAK,QAAQ,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/H,WAAK,KAAK,MAAM,GAAG,+BAA+B,MAAM,KAAK,YAAY,KAAK,WAAW,KAAK,QAAQ,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClI;AAAA,IAEgB,UAAgB;AAC9B,yBAAmB,KAAK,OAAO,GAAG,sBAAsB,KAAK,OAAO,GAAG,gBAAgB,KAAK,OAAO,GAAG,MAAM,QAAQ;AAAA,IACtH;AAAA,IAEQ,UAAU,MAA0C;AAC1D,YAAM,WAAW,KAAK,QAAQ,KAAK,EAAE;AACrC,UAAI,UAAU;AACZ,YAAI,KAAK,MAAO,UAAS,QAAQ,CAAC,GAAI,SAAS,SAAS,CAAC,GAAI,GAAG,KAAK,KAAK;AAC1E,YAAI,KAAK,QAAS,UAAS,UAAU,CAAC,GAAI,SAAS,WAAW,CAAC,GAAI,GAAG,KAAK,OAAO;AAClF,YAAI,KAAK,cAAe,UAAS,gBAAgB,CAAC,GAAI,SAAS,iBAAiB,CAAC,GAAI,GAAG,KAAK,aAAa;AAC1G,YAAI,KAAK,WAAW,CAAC,SAAS,QAAS,UAAS,UAAU,KAAK;AAC/D,eAAO;AAAA,MACT;AACA,aAAO;AAAA,IACT;AAAA,IACO,SAAS,OAAqD;AACnE,UAAI,MAAO,OAAM,QAAQ,KAAK,IAAI,MAAM,QAAQ,CAAC,UAAW,OAAO,KAAK,UAAU,IAAI,GAAI,KAAK,SAAS,SAAS,KAAK,IAAI,IAAI,EAAE,KAAM,QAAQ,KAAK,UAAU,KAAK,GAAI,KAAK,SAAS,SAAS,MAAM,IAAI,KAAK,IAAI,KAAK,YAAY,KAAK,SAAS;AAAA,IACjP;AAAA,IACO,cAAc,MAA+B;AAClD,UAAI,KAAM,CAAC,OAAO,KAAK,UAAU,IAAI,GAAI,KAAK,SAAS,cAAc,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,KAAK,SAAS;AAAA,IACtH;AAAA,IACO,eAAe,KAAa,MAA+B;AAChE,UAAI,KAAM,CAAC,OAAO,KAAK,UAAU,IAAI,GAAI,KAAK,SAAS,eAAe,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,KAAK,SAAS;AAAA,IAC5H;AAAA,IACO,cAAc,KAAa,MAA+B;AAC/D,UAAI,KAAM,CAAC,OAAO,KAAK,UAAU,IAAI,GAAI,KAAK,SAAS,cAAc,KAAK,KAAK,IAAI,IAAI,GAAG,KAAK,YAAY,KAAK,SAAS;AAAA,IAC3H;AAAA,IACO,WAAW,IAAkB;AAClC,WAAK,SAAS,WAAW,EAAE,GAAG,KAAK,YAAY,KAAK,SAAS;AAAA,IAC/D;AAAA,IAEO,QAAQ,IAAY,QAAQ,KAAK,SAAS,OAAO,GAAiC;AACvF,iBAAW,QAAQ;AACjB,YAAI,KAAK,OAAO,GAAI,QAAO;AAAA,iBAClB,KAAK,OAAO;AACnB,gBAAM,QAAQ,KAAK,QAAQ,IAAI,KAAK,KAAK;AACzC,cAAI,MAAO,QAAO;AAAA,QACpB;AACF,aAAO;AAAA,IACT;AAAA,IAEO,OAAO,IAAmB;AAC/B,UAAI,GAAI,MAAK,UAAU,KAAK,SAAS,QAAQ,EAAE,CAAC,GAAG,OAAO,GAAG,KAAK,SAAS;AAAA,UACtE,MAAK,SAAS,GAAG,KAAK,UAAU,QAAQ,CAAC,MAAM,EAAE,OAAO,CAAC;AAAA,IAChE;AAAA,IAGO,OAAO,UAA6B;AACzC,WAAK,WAAW,KAAK,MAAM,IAAI,KAAK,KAAK,QAAQ;AAAA,IACnD;AAAA,IAEO,KAAK,UAA6B;AACvC,UAAI,KAAK,YAAY,YAAY,IAAI,IAAI,KAAK,iBAAiB,GAAI;AACnE,WAAK,WAAW;AAChB,WAAK,WAAW;AAChB,UAAI,CAAC,KAAK,OAAO,cAAe,MAAK,WAAW,CAAC;AACjD,UAAI,KAAK,SAAS,WAAW,EAAG,MAAK,SAAS,GAAG,KAAK,UAAU,KAAK,WAAW,MAAM,GAAG,KAAK,UAAU,QAAQ,CAAC,MAAM,KAAK,UAAU,CAAC,CAAC;AAAA,UACnI,MAAK,OAAO,KAAK,SAAS,KAAK,SAAS,SAAS,CAAC,CAAC,GAAG,KAAK,UAAU,KAAK,UAAU,KAAK,SAAS,SAAS,CAAC,GAAG,MAAM,GAAG,KAAK,UAAU,KAAK,SAAS,GAAG,KAAK,UAAU,QAAQ,CAAC,GAAG,QAAQ,QAAQ,KAAK,SAAS,SAAS,KAAK,KAAK,UAAU,CAAC,CAAC;AACrP,WAAK,WAAW,QAAQ,GAAG,KAAK,GAAG,gBAAgB,OAAO,GAAG,KAAK,GAAG,UAAU,IAAI,8BAA8B,GAAG,KAAK,GAAG,UAAU,OAAO,gCAAgC;AAC7K,WAAK,MAAM,UAAU,UAAU,IAAI,yBAAyB;AAC5D,uBAAiB,KAAK,SAAS,EAAE,SAAS,MAAM,WAAW,CAAC,MAAM,CAAC,KAAK,UAAU,SAAS,GAAG,MAAc,KAAK,KAAK,MAAM,GAAG,eAAe,CAAC,IAAI,SAAS,CAAC,GAAG,cAAc,KAAK,SAAS,EAAE,SAAS,KAAK,CAAC;AAC7M,0BAAoB,KAAK,SAAS,EAAE,SAAS,MAAM,WAAW,OAAO,cAAc,OAAO,MAAM,EAAE,GAAG,EAAE,GAAG,UAAU,0LAA0L,CAAC;AAAA,IACjT;AAAA,IACO,QAAc;AACnB,UAAI,CAAC,KAAK,SAAU;AACpB,WAAK,WAAW;AAChB,WAAK,iBAAiB,YAAY,IAAI;AACtC,WAAK,GAAG,aAAa,SAAS,EAAE,GAAG,KAAK,GAAG,UAAU,OAAO,gCAAgC,2BAA2B,GAAG,KAAK,MAAM,UAAU,UAAU,OAAO,yBAAyB;AACzL,yBAAmB,KAAK,OAAO,GAAG,sBAAsB,KAAK,OAAO,GAAG,gBAAgB,KAAK,OAAO;AACnG,WAAK,UAAU,MAAM,GAAI,KAAK,WAAW;AAAA,IAC3C;AAAA,IACA,IAAW,SAAkB;AAC3B,aAAO,KAAK;AAAA,IACd;AAAA,IAEQ,YAAY,OAA6B;AAC/C,UAAI,CAAC,KAAK,UAAU,KAAK,GAAG;AAC1B,cAAM,IAAI,IAAI,aAAa,KAAK,IAAI;AACpC,UAAE,MAAM;AACR,UAAE,SAAS,KAAK;AAChB,UAAE,iBAAiB,CAAC,SAAS,KAAK,KAAK,KAAK,EAAE;AAC9C,aAAK,QAAQ,OAAO,EAAE,OAAO,GAAG,cAAc,KAAK,OAAO;AAC1D,aAAK,UAAU,KAAK,IAAI;AAAA,MAC1B;AACA,aAAO,KAAK,UAAU,KAAK;AAAA,IAC7B;AAAA,IAEO,KAAK,IAAkB;AAC5B,YAAM,OAAO,KAAK,QAAQ,EAAE;AAC5B,UAAI,CAAC,QAAS,CAAC,KAAK,SAAS,CAAC,KAAK,UAAW,KAAK,WAAW,YAAY,KAAK,WAAW,SAAU;AACpG,YAAM,cAAc,KAAK,SAAS,WAAW,IAAI,KAAK,YAAY,KAAK,UAAU,KAAK,SAAS,SAAS,CAAC;AACzG,WAAK,SAAS,KAAK,EAAE;AACrB,YAAM,YAAY,KAAK,YAAY,KAAK,SAAS,SAAS,CAAC;AAC3D,gBAAU,KAAK,IAAI;AACnB,WAAK,UAAU,WAAW,SAAS,GAAG,KAAK,UAAU,aAAa,UAAU;AAAA,IAC9E;AAAA,IACO,SAAe;AACpB,UAAI,KAAK,SAAS,WAAW,EAAG;AAChC,YAAM,cAAc,KAAK,UAAU,KAAK,SAAS,SAAS,CAAC;AAC3D,WAAK,SAAS,IAAI;AAClB,WAAK,UAAU,KAAK,SAAS,WAAW,IAAI,KAAK,YAAY,KAAK,UAAU,KAAK,SAAS,SAAS,CAAC,GAAG,UAAU;AACjH,WAAK,UAAU,aAAa,SAAS;AAAA,IACvC;AAAA,IAEQ,UAAU,OAAsB,MAAgB,WAAiB;AACvE,YAAM,MAAM,GAAG,GAAG,KAAK,WAAW,KAAK,GAAG,oBAAoB,KAAK,OAAO;AAAA,IAC5E;AAAA,IACQ,UAAU,OAAsB,MAAgB,YAAkB;AACxE,YAAM,KAAK,GAAG;AAAA,IAChB;AAAA,IAEQ,WAAiB;AACvB,WAAK,UAAU,KAAK,KAAK,SAAS,OAAO,EAAE,OAAO,CAAC,UAAW,OAAO,KAAK,MAAM,IAAI,KAAK,OAAO,IAAI,KAAK,UAAU,QAAQ,CAAC,KAAK,WAAW,QAAQ,KAAK,MAAM,SAAS,KAAK,OAAO,CAAC,CAAE,CAAC;AAAA,IAC1L;AAAA,IACQ,WAAW,OAAsB,SAAS,MAAM,eAAqB;AAC3E,MAAAC,uBAAsB,MAAM,KAAK,YAAY,WAAW,KAAK,GAAG,MAAM,SAAS,GAAG,MAAM,OAAO,KAAK,MAAM;AAAA,IAC5G;AAAA,IAEQ,WAAW,UAA8B;AAC/C,YAAM,YAAY,KAAK,MAAM,WAC3B,QAAQ,UAAU,sBAAsB,GACxC,QAAQ,WAAW,SAAS,sBAAsB,IAAI,KAAK,GAAG,sBAAsB;AACtF,UAAI,CAAC,YAAY,CAAC,KAAK,SAAU;AAEjC,YAAM,IAAI,MAAM,MAAM,MAAM;AAC5B,YAAM,YAAY,KAAK,GAAG,eAAe;AAGzC,UAAI,OAAO,MAAM,QAAQ,MAAM,OAAO,YAAY;AAClD,YAAM,SAAS;AACf,UAAI,OAAO,OAAQ,QAAO;AAC1B,UAAI,OAAO,YAAY,MAAM,QAAQ,OAAQ,QAAO,MAAM,QAAQ,YAAY;AAE9E,WAAK,GAAG,MAAM,YAAY,wBAAwB,GAAG,IAAI,IAAI;AAC7D,WAAK,GAAG,MAAM,YAAY,wBAAwB,GAAG,CAAC,IAAI;AAC1D,WAAK,GAAG,UAAU,OAAO,6BAA6B,IAAI,MAAM,SAAS,CAAC;AAAA,IAC5E;AAAA,EACF;AA9KE,gBADW,cACY,iBAAgB;;;ACRlC,MAAM,mBAAN,cAA+B,SAA6B;AAAA,IAQjE,YAAY,MAAkB,QAA6BC,QAAa;AACtE,YAAM,MAAM,QAAQA,MAAK;AAN3B,0BAAO;AACP,0BAAO;AACP,0BAAU,aAAY;AACtB,0BAAQ,aAAY;AAIlB,WAAK,OAAO,IAAI,aAAa,KAAK,MAAM,KAAK,OAAO,IAAI;AAAA,IAC1D;AAAA,IAEgB,QAAc;AAC5B,WAAK,WAAW,KAAK,KAAK,SAAS,+BAA+B;AAClE,OAAC,KAAK,OAAO,KAAK,YAAY,KAAK,KAAK,MAAM,KAAK,SAAS;AAAA,IAC9D;AAAA,IACgB,UAAgB;AAC9B,WAAK,MAAM,UAAU,UAAU,OAAO,yBAAyB;AAC/D,WAAK,KAAK,SAAS,8BAA8B,GAAG,OAAO,GAAG,KAAK,KAAK,SAAS,mCAAmC,GAAG,OAAO,GAAG,KAAK,KAAK,SAAS,mCAAmC,GAAG,OAAO;AAAA,IACnM;AAAA,IAEgB,OAAa;AAE3B,WAAK,UAAU,iBAAiB,SAAS,KAAK,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEhF,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAM,CAAC,SAAS,KAAK,UAAU,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEhG,WAAK,KAAK,eAAe,YAAY,EAAE,IAAI,KAAK,YAAY,UAAU,EAAE,OAAO,QAAQ,GAAG,KAAK,KAAK,CAAC;AACrG,OAAC,KAAK,OAAO,KAAK,YAAY,KAAK,KAAK,KAAK,GAAG,MAAM,KAAK;AAAA,IAC7D;AAAA,IAEA,MAAa,YAA2B;AACtC,UAAI,KAAK,KAAK,WAAW,UAAU,EAAG;AACtC,UAAI,CAAC,KAAK,UAAW,MAAK,SAAS,GAAI,KAAK,YAAY;AACxD,WAAK,KAAK,MAAM;AAChB,WAAK,YAAY,KAAK,MAAM,MAAM;AAClC,UAAI,KAAK,OAAO,UAAW,SAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK;AAC1E,WAAK,MAAM,UAAU,UAAU,IAAI,yBAAyB;AAC5D,YAAM,UAAU,aAAa,KAAK,SAAS,IAAI,0BAA0B,CAAC;AAC1E,WAAK,KAAK,KAAK,kBAAkB,GAAG,KAAK;AACzC,WAAK,KAAK,IAAI,UAAU,gBAAgB,OAAO,GAAG,KAAK,KAAK,IAAI,kBAAkB,aAAa,SAAS,EAAE;AAC1G,WAAK,UAAU,MAAM;AAAA,IACvB;AAAA;AAAA,IAEA,MAAa,YAA2B;AACtC,UAAI,CAAC,KAAK,KAAK,WAAW,UAAU,EAAG;AACvC,WAAK,MAAM,UAAU,UAAU,OAAO,yBAAyB;AAC/D,YAAM,UAAU,aAAa,KAAK,SAAS,IAAI,0BAA0B,CAAC;AAC1E,UAAI,KAAK,OAAO,UAAW,SAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,KAAK,SAAU;AACpF,WAAK,KAAK,IAAI,UAAU,aAAa,SAAS,EAAE,GAAG,KAAK,KAAK,IAAI,kBAAkB,gBAAgB,OAAO;AAAA,IAC5G;AAAA;AAAA,IAEA,MAAa,aAA4B;AACvC,WAAK,KAAK,WAAW,UAAU,IAAI,MAAM,KAAK,UAAU,IAAI,MAAM,KAAK,UAAU;AAAA,IACnF;AAAA,IAEQ,WAAW;AAGjB,YAAM,UAAU,CAAC,EAAE,QAAQ,cAAc,OAAO,UAAU,GAAG,EAAE,QAAQ,YAAY,OAAO,UAAU,GAAG,EAAE,QAAQ,aAAa,OAAO,UAAU,GAAG,EAAE,QAAQ,kBAAkB,OAAO,UAAU,GAAG,EAAE,QAAQ,cAAc,OAAO,SAAS,GAAG,EAAE,QAAQ,iBAAiB,OAAO,OAAO,CAAC,GACrR,UAAU,QAAQ,MAAM,GAAG,EAAE,EAAE,IAAI,CAAC,QAAQ,IAAI,KAAK,GACrD,OAAO,EAAE,OAAO,KAAK,SAAS,IAAI,cAAwB,WAAW,OAAO,KAAK,SAAS,IAAI,cAAwB,WAAW,SAAS,CAAC,WAAW,GAAG,OAAO,GAAG,SAAS,CAAC,WAAW,GAAG,OAAO,EAAE,GACpM,SAAS,KAAK,MAAM,EAAE,MAAM,UAAU,OAAO,eAAe,YAAY,EAAE,MAAM,6CAA6C,GAAG,SAAS,CAAC,EAAE,QAAQ,iBAAiB,OAAO,UAAU,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,QAAQ,SAAS,KAAK,KAAe,IAAK,CAAC,KAAK,SAAS,IAAI,cAAc,aAAa,WAAW,SAAU,KAAK,MAAM,CAAC,GAC5U,UAAU,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC,GACtC,SAAS,KAAK,MAAM,EAAE,MAAM,UAAU,OAAO,eAAe,YAAY,EAAE,MAAM,6CAA6C,GAAG,SAAS,CAAC,EAAE,QAAQ,cAAc,OAAO,UAAU,GAAG,GAAG,OAAO,GAAG,OAAO,CAAC,KAAK,QAAQ,SAAS,KAAK,KAAe,IAAK,CAAC,KAAK,SAAS,IAAI,cAAc,aAAa,WAAW,SAAU,KAAK,MAAM,CAAC,GACzU,UAAU,KAAK,MAAM,EAAE,MAAM,QAAQ,CAAC,GACtC,WAAW,SAAS,OAAO,EAAE,WAAW,mCAAmC,CAAC,GAC5E,WAAW,SAAS,OAAO,EAAE,WAAW,mCAAmC,CAAC;AAC9E,WAAK,KAAK,OAAO,MAAM,2BAA2B,CAAC,IAAI,KAAK,WAAY,IAAK,EAAa,YAAY,GAAK,QAAQ,QAAQ,QAAQ,GAAI,QAAQ,MAAM,YAAY,iBAAiB,CAAC,GAAI,OAAO,QAAQ,QAAQ,CAAC,KAAK,QAAQ,SAAS,CAAC,IAAK,CAAC,KAAK,SAAS,IAAI,cAAc,aAAa,WAAW,SAAU,IAAK,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtV,WAAK,KAAK,OAAO,MAAM,2BAA2B,CAAC,IAAI,KAAK,WAAY,IAAK,EAAa,YAAY,GAAK,QAAQ,QAAQ,QAAQ,GAAI,QAAQ,MAAM,YAAY,iBAAiB,CAAC,GAAI,OAAO,QAAQ,QAAQ,CAAC,KAAK,QAAQ,SAAS,CAAC,IAAK,CAAC,KAAK,SAAS,IAAI,cAAc,aAAa,WAAW,SAAU,IAAK,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtV,WAAK,KAAK,IAAI,qBAAqB,QAAQ,SAAS,OAAO,QAAQ,OAAO,GAAG,YAAY,SAAS,OAAO,QAAQ,OAAO,GAAG,SAAS;AACpI,YAAM,KAAK,EAAE,OAAO,IAAI,OAAO,GAAG,GAChC,OAAO,CAAC,IAAS,MAAM,MAAM,OAAO,aAAc,KAAK,SAAS,IAAI,cAAc,GAAG,IAAI,OAAO,IAAI,KAAM,GAAG,GAAG,IAChH,SAAS,CAAC,MAAW,OAA0B,YAAY,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,OAAO,GAAG,IAAI,GAAG,EAAE,QAAQ,uDAAuD,IAAI,IAAI,GAAG,KAAK,CAAC,GACxM,iBAAiB,CAAC,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,MACzC,KAAK,KAAK;AAAA,QACR;AAAA,QACA,YAAY;AACV,aAAG,SAAS,KAAK,OAAO,QAAQ,GAAG,KAAK;AACxC,cAAI;AACJ,cAAI,QAAQ,SAAU,QAAO,QAAQ,QAAQ,MAAM;AACnD,cAAI,QAAQ,OAAQ,OAAM,KAAK,SAAS,IAAI,aAAa;AAAA,cACpD,OAAM,KAAK,SAAS,IAAI,cAAc,KAAK,MAAM,OAAO,aAAa,MAAM,KAAK,KAAK,KAAK,gBAAgB,GAAG,aAAa,KAAK,MAAM,MAAM,WAAW,IAAI,SAAS,KAAK,KAAK,KAAK,cAAc,GAAG,OAAO;AAC/M,gBAAM,KAAK,CAAC,MAAY,OAAO,QAAQ,QAAQ,KAAK,QAAQ,SAAS,GAAa,IAAK,MAAiB,IAAI,SAAS,UACnH,KAAK,OAAO,KAAK,IAAI,KAAK,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,IACxD,MAAM,OAAO,KAAK,IAAI,IAAI,GAAG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,CAAC;AACzD,eAAK,IAAI,QAAQ,MAAM;AACvB,kBAAQ,WAAW,GAAG,QAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,wDAAwD,EAAE,MAAM,aAAM,WAAW,MAAO,iBAAiB,OAAO,SAAS,EAAE,KAAK,GAAG,GAAG,SAAS,MAAO,GAAG,QAAQ,IAAK,QAAQ,KAAK,OAAO,CAAC,KAAK;AAAA,QAC3Q;AAAA,QACA;AAAA,MACF,GACF,iBAAiB,CAAC,EAAE,QAAQ,EAAE,OAAO,IAAI,EAAE,MACzC,KAAK,KAAK;AAAA,QACR;AAAA,QACA,YAAY;AACV,aAAG,SAAS,KAAK,OAAO,QAAQ,GAAG,KAAK;AACxC,cAAI;AACJ,cAAI,QAAQ,SAAU,QAAO,QAAQ,QAAQ,MAAM;AACnD,cAAI,QAAQ,OAAQ,OAAM,KAAK,SAAS,IAAI,aAAa;AAAA,cACpD,OAAM,KAAK,SAAS,IAAI,cAAc,KAAK,MAAM,OAAO,aAAa,MAAM,KAAK,KAAK,KAAK,gBAAgB,GAAG,aAAa,KAAK,MAAM,MAAM,WAAW,IAAI,SAAS,KAAK,KAAK,KAAK,cAAc,GAAG,OAAO;AAC/M,gBAAM,KAAK,CAAC,MAAY,OAAO,QAAQ,QAAQ,KAAK,QAAQ,SAAS,GAAa,IAAK,MAAiB,IAAI,SAAS,UACnH,KAAK,OAAO,KAAK,IAAI,OAAO,OAAO,GAAG,OAAO,EAAE,SAAS,EAAE,IAAI,EAAE,GAAG,OAAO,IAC1E,MAAM,OAAO,KAAK,IAAI,MAAM,OAAO,GAAG,OAAO,EAAE,SAAS,EAAE,GAAG,EAAE,GAAG,OAAO;AAC3E,eAAK,IAAI,QAAQ,QAAQ,OAAO;AAChC,kBAAQ,WAAW,GAAG,QAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,wDAAwD,EAAE,MAAM,aAAM,WAAW,MAAO,iBAAiB,OAAO,SAAS,EAAE,KAAK,GAAG,GAAG,SAAS,MAAO,GAAG,QAAQ,IAAK,QAAQ,KAAK,OAAO,CAAC,KAAK;AAAA,QAC3Q;AAAA,QACA;AAAA,MACF;AACJ,aAAO,QAAQ,iBAAiB,SAAS,cAAc,GAAG,QAAQ,QAAQ,iBAAiB,SAAS,cAAc;AAClH,aAAO,QAAQ,iBAAiB,SAAS,cAAc,GAAG,QAAQ,QAAQ,iBAAiB,SAAS,cAAc;AAElH,YAAM,UAAU,SAAS,UAAU,EAAE,WAAW,+BAA+B,WAAW,uCAAgC,CAAC;AAC3H,WAAK,UAAU,sBAAsB,YAAY,OAAO;AACxD,cAAQ,iBAAiB,SAAS,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAChF;AAAA,IAEQ,cAAc;AACpB,aAAO;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IA2CT;AAAA,IAEA,MAAc,iBAAiB;AAC7B,YAAM,KAAK,UAAU;AACrB,WAAK,MAAM,KAAK,YAAY,GAAG,EAAE,IAAI,GAAG,KAAK,KAAK,OAAO,EAAE,gBAAgB,aAAa,KAAK,KAAK,IAAI,kBAAkB,aAAa,UAAU,CAAC;AAAA,IAClJ;AAAA,IAEmB,YAAkB;AACnC,WAAK,KAAK,QAAQ,GAAG,MAAM,UAAU;AAAA,IACvC;AAAA,EACF;AA1KE,gBADW,kBACY,YAAW;AAClC,gBAFW,kBAEY,SAAQ;;;ACX1B,MAAM,oBAAsC;AAAA,IACjD,UAAU;AAAA,EACZ;;;ACIO,MAAM,iBAAN,cAA6B,SAA4C;AAAA,IAM9E,YAAY,MAAkB,SAAS,KAAK,SAAS,YAAY;AAC/D,YAAM,MAAM,QAAQ,EAAE,IAAI,EAAE,CAAC;AAJ/B,0BAAQ,cAAa;AACrB,0BAAQ;AAAA,IAIR;AAAA,IAEgB,OAAa;AAC3B,WAAK,MAAM,GAAG,qBAAqB,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,YAAM,KAAK;AAAA,IACb;AAAA,IAEO,SAAS,IAAkB;AAChC,WAAK,MAAM,KAAK;AAChB,mBAAa,KAAK,SAAS;AAC3B,WAAK,aAAa;AAClB,UAAI,OAAO,GAAG;AACZ,aAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,0BAA0B,EAAE,MAAM,aAAa,IAAI,SAAS,IAAI,GAAG,KAAK,YAAY,QAAQ,KAAK,OAAO,CAAC;AAAA,MACtJ,WAAW,OAAO,IAAI;AACpB,aAAK,aAAa;AAClB,aAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,mCAAmC,EAAE,MAAM,aAAa,IAAI,SAAS,IAAI,GAAG,KAAK,YAAY,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC/J,OAAO;AACL,aAAK,YAAYC,YAAW,KAAK,cAAc,IAAI,KAAK,MAAM;AAC9D,aAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,uBAAuB,gBAAgB,EAAE,MAAM,KAAK,KAAM,QAAQ,aAAa,CAAC,CAAC,IAAI,EAAE,MAAM,aAAa,IAAI,SAAS,IAAI,GAAG,KAAK,YAAY,QAAQ,KAAK,OAAO,CAAC;AAAA,MACjN;AAAA,IACF;AAAA,IAEQ,aAAmB;AACzB,UAAI,KAAK,eAAe,MAAM,KAAK,MAAM,OAAO,WAAW,KAAK,KAAK,MAAM,MAAM,eAAe,KAAK,MAAM,OAAO,WAAW,IAAK,MAAK,aAAa;AAAA,IACtJ;AAAA,IAEQ,eAAqB;AAC3B,WAAK,MAAM,OAAO,SAAS;AAC3B,WAAK,SAAS,CAAC,GAAG,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,OAAO;AAAA,IACxE;AAAA,EACF;AAtCE,gBADW,gBACY,YAAW;AAClC,gBAFW,gBAEY,SAAQ;;;ACR1B,MAAM,aAAkC;AAAA,IAC7C,KAAK;AAAA,IACL,MAAM;AAAA,IACN,MAAM;AAAA,IACN,QAAQ;AAAA,EACV;;;ACOO,MAAM,WAAN,cAAuB,SAAgC;AAAA,IAS5D,YAAY,MAAkB,SAAS,KAAK,SAAS,MAAM;AACzD,YAAM,MAAM,QAAQ;AAAA,QAClB,WAAW,CAAC,2BAA2B,qBAAqB,qBAAqB,uBAAuB,qBAAqB,iCAAiC;AAAA;AAAA,MAChK,CAAC;AATH,0BAAO,aAAY;AACnB,0BAAO,eAAc;AACrB,0BAAO,gBAAe;AACtB,0BAAO,gBAAoC;AAC3C,0BAAQ,kBAAiB;AAAA,IAMzB;AAAA,IAEgB,OAAa;AAE3B,WAAK,YAAY,KAAK,cAAc,KAAK,OAAO,SAAS;AAEzD,WAAK,MAAM,IAAI,sBAAsB,CAAC,MAAM,MAAM,KAAK,OAAO,KAAK,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE/G,WAAK,KAAK,OAAO,MAAM,uBAAuB,CAAC,MAAM,MAAM,KAAK,gBAAgB,KAAK,YAAY,CAAC,IAAK,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE9H,WAAK,MAAM,GAAG,aAAa,KAAK,sBAAsB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEzF,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvF,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtH,WAAK,MAAM,GAAG,kBAAkB,KAAK,qBAAqB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEjF,WAAK,KAAK,eAAe,WAAW,EAAE,IAAI,KAAK,kBAAkB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACjG,WAAK,KAAK,eAAe,WAAW,EAAE,IAAI,KAAK,kBAAkB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACjG,WAAK,KAAK,eAAe,YAAY,EAAE,IAAI,KAAK,YAAY,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AAC1F,WAAK,KAAK,eAAe,cAAc,EAAE,IAAI,KAAK,cAAc,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AAC9F,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,qBAAqB,EAAE,OAAO,QAAQ,CAAC,EAAE,GAAyC;AAC1F,iBAAW,QAAQ,MAAO,MAAK,KAAK,OAAO,IAAI,MAAM,KAAK,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC9F;AAAA,IAEU,uBAAuB,EAAE,MAAM,GAAiD;AACxF,UAAI,SAAS,KAAK,OAAO,SAAS,QAAQ,KAAK,MAAM,MAAM,gBAAgB,KAAK,UAAW,MAAK,MAAM,OAAO,cAAc,KAAK;AAAA,IAClI;AAAA,IAEU,uBAAuB,EAAE,OAAO,KAAK,GAAiD;AAC9F,aAAO,QAAQ,IAAI;AACnB,OAAC,OAAO,KAAK,OAAO,OAAO,OAAO,KAAK,OAAO,QAAQ,QAAQ,OAAQ,KAAK,MAAM,OAAO,cAAc,KAAK,OAAO,OAAO,KAAK,OAAO,MAAM,MAAO,CAAC,KAAK,OAAO,SAAS,KAAK,MAAM,OAAO,SAAS,MAAM;AACzM,UAAI,KAAK,MAAM,OAAO,cAAc,QAAQ,KAAK,KAAK,QAAQ,MAAO,MAAK,OAAO,QAAQ,KAAK,cAAc,OAAO,KAAK,QAAQ,KAAK,OAAO,OAAO,KAAK,MAAM,OAAO,YAAY,IAAI,OAAO,KAAK;AAAA,IACnM;AAAA,IAEU,oBAAoB,EAAE,MAAM,GAA8C;AAClF,eAAS,aAAa,KAAK,MAAM,KAAK,kBAAkB,MAAM,KAAK,KAAK,KAAK,kBAAkB,IAAI,KAAK,eAAe,SAAS,OAAO,EAAE,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACrK;AAAA,IAEO,UAAU,OAAqB;AACpC,aAAO,eAAe,OAAO,KAAK,MAAM,OAAO,QAAQ;AAAA,IACzD;AAAA,IACO,WAAW,OAAO,KAAK,MAAM,MAAM,aAAa,UAAU,OAAO,SAAS,OAAe;AAC9F,UAAI,CAAC,WAAW,KAAK,OAAO,SAAS,YAAa,QAAO,gBAAgB,EAAE,MAAM,QAAQ,KAAK,OAAO,QAAQ,SAAS,MAAM,OAAO,CAAC;AACpI,aAAO,gBAAgB,EAAE,MAAM,KAAK,MAAM,OAAO,WAAW,MAAM,QAAQ,KAAK,OAAO,QAAQ,SAAS,OAAO,OAAO,CAAC;AAAA,IACxH;AAAA,IAEA,IAAW,WAA+B;AACxC,aAAO,KAAK,OAAO,SAAS,YAAY,cAAc;AAAA,IACxD;AAAA,IACO,aAAmB;AACxB,WAAK,OAAO,OAAO,KAAK;AAAA,IAC1B;AAAA,IAEA,IAAW,aAAmC;AAC5C,aAAO,KAAK,OAAO,WAAW,YAAY,UAAU,KAAK,OAAO,WAAW,UAAU,eAAe;AAAA,IACtG;AAAA,IACO,eAAqB;AAC1B,WAAK,OAAO,SAAS,KAAK;AAAA,IAC5B;AAAA,IAEO,KAAK,UAAwB;AAClC,YAAM,UAAU,KAAK,KAAK,KAAK,kBAAkB,GAC/C,WAAW,KAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,gBAAgB,IAAI,WAAW,IAAI,WAAW,QAAQ,GAC5G,CAAC,KAAK,KAAK,IAAI,IAAI,CAAC,YAAY,KAAK,KAAK,GAAG,YAAY,KAAK,KAAK,GAAG,KAAK,MAAM,MAAM,WAAW;AACpG,iBAAW,OAAO,MAAM,IAAI,QAAQ,WAAW,IAAK,MAAM,OAAO,WAAW,WAAW,MAAM,OAAQ,WAAW,IAAK,OAAO,MAAM,KAAK,IAAI,QAAQ,IAAI,WAAW,EAAE,OAAO,OAAQ,CAAC;AACpL,UAAI,MAAM,IAAK,MAAK,MAAM,OAAO,cAAc,OAAO;AAEtD,YAAM,OAAO,KAAK,KAAK,KAAK,kBAAkB;AAC9C,UAAI,MAAM,MAAM,aAAa;AAC3B,YAAI,KAAK,gBAAgB,aAAa,KAAK,cAAc;AACvD,eAAK,eAAe;AACpB,eAAK,aAAa,UAAU,OAAO,2BAA2B;AAAA,QAChE;AACA,iBAAS,KAAK;AACd,aAAK,eAAe;AACpB,kBAAU,UAAU,IAAI,2BAA2B;AACnD,aAAK,gBAAgB;AACrB,qBAAa,KAAK,cAAc;AAChC,aAAK,iBAAiBC;AAAA,UACpB,MAAM;AACJ,iBAAK,gBAAgB;AACrB,sBAAU,UAAU,OAAO,2BAA2B;AACtD,iBAAK,eAAe;AACpB,iBAAK,eAAe;AACpB,aAAC,KAAK,MAAM,MAAM,SAAS,SAAS,KAAK,IAAI,SAAS,KAAK;AAAA,UAC7D;AAAA,UACA,aAAa,KAAK,SAAS,IAAI,sBAAsB;AAAA,UACrD,KAAK;AAAA,QACP;AACA,eAAO,KAAK,UAAU,aAAa,aAAa,OAAO,KAAK,MAAM,KAAK,YAAY,CAAC,CAAC;AAAA,MACvF,MAAO,MAAK,cAAc,UAAU,OAAO,2BAA2B;AACtE,gBAAU,aAAa,aAAa,OAAO,KAAK,MAAM,KAAK,IAAI,QAAQ,CAAC,CAAC,CAAC;AAAA,IAC5E;AAAA,IAEU,mBAAyB;AACjC,WAAK,KAAK,KAAK,kBAAkB,GAAG,gBAAgB;AACpD,WAAK,KAAK,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,QAAQ,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI;AACtG,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK;AAAA,IACpD;AAAA,IAEU,mBAAyB;AACjC,WAAK,KAAK,KAAK,kBAAkB,GAAG,gBAAgB;AACpD,WAAK,KAAK,EAAE,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,QAAQ,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK;AACzG,WAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,KAAK;AAAA,IACpD;AAAA,EACF;AAxHE,gBADW,UACY,YAAW;AAClC,gBAFW,UAEY,SAAQ;;;ACb1B,MAAM,oBAAmD;AAAA,IAC9D,QAAQ;AAAA,MACN,WAAW,CAAC,QAAQ;AAAA;AAAA,MACpB,aAAa;AAAA,MACb,cAAc;AAAA,IAChB;AAAA,IACA,SAAS,CAAC;AAAA,IACV,SAAS;AAAA,EACX;;;ACWA,MAAI,cAAc,MAAM;AAAA;AAAA,IAWtB,YAAY,KAAK;AAVjB;AACA,kCAAuB,oBAAI,IAAI;AAC/B,wCAAa;AACb;AAEA;AAAA;AACA,mCAAQ,CAAC;AACT;AACA,wCAA6B,oBAAI,QAAQ;AAGvC,WAAK,UAAU,KAAK,MAAM;AAAA,IAC5B;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAUA,QAAQ,QAAQ;AACd,aAAO,KAAK,QAAQ,GAAG,KAAK,QAAQ,KAAK,QAAQ,QAAQ,EAAE;AAAA,IAC7D;AAAA,IACA,QAAQ,KAAK,MAAM;AACjB,UAAI,CAAC,KAAK,OAAO,CAAC,OAAO,aAAa,OAAO,IAAK,QAAO;AACzD,YAAM,SAAS,KAAK,WAAW,IAAI,GAAG;AACtC,UAAI,OAAQ,QAAO;AACnB,UAAI,CAAC,UAAU,KAAK,KAAK,IAAI,QAAQ,KAAK,EAAG,QAAO;AACpD,YAAM,QAAQ,IAAI,MAAM,KAAK;AAAA;AAAA,QAE3B,KAAK,CAAC,QAAQ,KAAK,aAAa;AAC9B,cAAI,QAAQ,IAAK,QAAO,KAAK,IAAI,IAAI,kDAAkD,MAAM,EAAE,GAAG;AAClG,gBAAM,SAAS,OAAO,GAAG,GAAG,WAAW,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK;AACpE,iBAAO,KAAK,IAAI,IAAI,uDAAuD,MAAM,SAAS,IAAI,GAAG,GAAG,KAAK,MAAM,QAAQ,GAAG,KAAK,QAAQ,CAAC,KAAK,IAAI,OAAO,kBAAkB,OAAO,GAAG,IAAI,QAAQ,IAAI,QAAQ,KAAK,QAAQ,GAAG,QAAQ;AAAA,QACtO;AAAA,QACA,KAAK,CAAC,QAAQ,QAAQ;AACpB,gBAAM,SAAS,OAAO,GAAG,GAAG,WAAW,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK;AACpE,iBAAO,KAAK,IAAI,IAAI,oDAAoD,MAAM,SAAS,IAAI,GAAG,GAAG,KAAK,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,OAAO,kBAAkB,OAAO,SAAS,QAAQ,IAAI,QAAQ,GAAG;AAAA,QACnM;AAAA,QACA,0BAA0B,CAAC,QAAQ,QAAQ;AACzC,gBAAM,SAAS,OAAO,GAAG,GAAG,WAAW,OAAO,GAAG,IAAI,IAAI,MAAM,KAAK;AACpE,iBAAO,KAAK,IAAI,IAAI,4EAA4E,MAAM,SAAS,IAAI,GAAG,GAAG,KAAK,MAAM,QAAQ,GAAG,CAAC,KAAK,IAAI,OAAO,kBAAkB,OAAO,yBAAyB,QAAQ,GAAG,IAAI,QAAQ,yBAAyB,QAAQ,GAAG;AAAA,QAC/Q;AAAA,QACA,SAAS,CAAC,WAAW;AACnB,gBAAM,WAAW,QAAQ;AACzB,iBAAO,KAAK,IAAI,IAAI,0DAA0D,QAAQ,GAAG,GAAG,KAAK,MAAM,QAAQ,GAAG,QAAQ,QAAQ,MAAM;AAAA,QAC1I;AAAA,QACA,KAAK,CAAC,GAAG,QAAQ;AACf,gBAAM,IAAI,MAAM,2DAA2D,OAAO,GAAG,CAAC,SAAS,IAAI,GAAG;AAAA,QACxG;AAAA,QACA,gBAAgB,CAAC,GAAG,QAAQ;AAC1B,gBAAM,IAAI,MAAM,sEAAsE,OAAO,GAAG,CAAC,SAAS,IAAI,GAAG;AAAA,QACnH;AAAA,QACA,gBAAgB,CAAC,GAAG,QAAQ;AAC1B,gBAAM,IAAI,MAAM,sEAAsE,OAAO,GAAG,CAAC,SAAS,IAAI,GAAG;AAAA,QACnH;AAAA,QACA,gBAAgB,CAAC,GAAG,QAAQ;AAC1B,gBAAM,IAAI,MAAM,sEAAsE,OAAO,GAAG,CAAC,SAAS,IAAI,GAAG;AAAA,QACnH;AAAA,MACF,CAAC;AACD,aAAO,KAAK,WAAW,IAAI,KAAK,KAAK,GAAG;AAAA,IAC1C;AAAA;AAAA,IAEA,MAAM,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,SAAS,OAAO;AACzD,UAAI,CAAC,KAAK,cAAc,CAAC,QAAQ,KAAK,WAAW,KAAK,YAAY,IAAK,QAAO;AAC9E,UAAI,QAAQ,KAAK,KAAK,IAAI,GAAG;AAC7B,UAAI,CAAC,SAAS,CAAC,MAAO,UAAS,KAAK,KAAK,IAAI,KAAK,QAAwB,oBAAI,IAAI,CAAC,GAAG;AACtF,UAAI,KAAK,WAAW,KAAK,WAAW,GAAG,GAAG;AACxC,cAAM,QAAQ,KAAK,MAAM,KAAK,SAAS,SAAS,CAAC;AACjD,SAAC,UAAU,CAAC,MAAM,SAAS,SAAS,KAAK,UAAU,YAAY,CAAC,QAAQ,KAAK,KAAK,MAAM,MAAM,OAAO,KAAK,QAAQ;AAAA,MACpH;AACA,aAAO,CAAC,SAAS,MAAM,IAAI,KAAK,WAAW,IAAI,GAAG;AAAA,IACpD;AAAA;AAAA,IAEA,QAAQ,MAAM,MAAM,KAAK,KAAK;AAC5B,WAAK,KAAK,IAAI,GAAG,GAAG,OAAO,IAAI;AAAA,IACjC;AAAA;AAAA,IAEA,QAAQ,MAAM,KAAK,KAAK;AACtB,WAAK,KAAK,MAAM;AAChB,WAAK,UAAU;AACf,WAAK,aAAa;AAClB,WAAK,WAAW;AAAA,IAClB;AAAA;AAAA,IAEA,QAAQ;AACN,WAAK,UAAU;AACf,WAAK,aAAa;AAAA,IACpB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAwBA,SAAS,IAAI,UAAU,KAAK;AAC1B,WAAK,QAAQ;AACb,YAAM,SAAS,QAAQ,OAAO,UAAU;AACxC,iBAAW,CAAC,KAAK,KAAK,KAAK,KAAK,MAAM;AACpC,YAAI,CAAC,MAAM,QAAQ,MAAM,IAAI,GAAG,EAAG,QAAO,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,KAAK,IAAI,OAAO,CAAC;AAAA,YAClF,YAAW,QAAQ,MAAO,MAAK,MAAM,KAAK,IAAI,MAAM,EAAE,MAAM,IAAI,OAAO,CAAC;AAAA,MAC/E;AACA,aAAO,MAAM,KAAK,QAAQ;AAAA,IAC5B;AAAA;AAAA,IAEA,UAAU;AACR,WAAK,MAAM;AACX,eAAS,IAAI,GAAG,MAAM,KAAK,MAAM,QAAQ,IAAI,KAAK,IAAK,MAAK,MAAM,CAAC,EAAE;AACrE,WAAK,MAAM,SAAS;AAAA,IACtB;AAAA,IACA,UAAU;AACR,WAAK,KAAK,MAAM,GAAG,KAAK,QAAQ,GAAG,KAAK,IAAI;AAAA,IAC9C;AAAA,EACF;AACA,WAAS,YAAY,SAAS,UAAU,KAAK;AAC3C,UAAMC,QAAO,IAAI;AACjB,QAAI,cAAc;AAClB,QAAI;AACF,aAAO,QAAQ,QAAQ,GAAG,GAAG,SAAS;AAAA,IACxC,UAAE;AACA,UAAI,cAAcA;AAAA,IACpB;AAAA,EACF;AAGA,WAAS,OAAO,UAAU,UAAU,KAAK;AACvC,UAAM,QAAQ,IAAI,YAAY;AAC9B,QAAI,YAAY;AAChB,UAAM,UAAU,OAAO,YAAY,MAAM,MAAM,QAAQ;AACvD,KAAC,SAAS,UAAU;AAClB,UAAI,UAAW;AACf,kBAAY,OAAO,QAAQ;AAC3B,cAAQ,OAAO,QAAQ,IAAI,MAAM,SAAS,SAAS,OAAO;AAAA,IAC5D,GAAG;AACH,WAAO;AAAA,EACT;AAGA,MAAI,OAAO;AAAA,IACT,QAAQ;AAAA,IACR,WAAW,CAAC,UAAU,SAAS,UAAU,SAAS,gBAAgB,eAAe,QAAQ,OAAO,aAAa,cAAc,SAAS,aAAa,UAAU,QAAQ;AAAA,IACnK,WAAW,EAAE,MAAM,CAAC,UAAU,OAAO,GAAG,MAAM,CAAC,UAAU,SAAS,gBAAgB,aAAa,GAAG,SAAS,QAAQ,cAAc,KAAK,QAAQ,OAAO,WAAW,KAAK,WAAW,KAAK,SAAS,aAAa,SAAS,cAAc,WAAW,SAAS,QAAQ,aAAa,cAAc,UAAU,YAAY,UAAU,QAAQ,KAAK,QAAQ,KAAK,OAAO,IAAI;AAAA,EAChW;AAxLA,MAAAC;AAyLA,MAAI,qBAAoBA,MAAA,MAAyB;AAAA;AAAA;AAAA;AAAA;AAAA,IAc/C,YAAY,MAAM,QAAQ,EAAE,SAAS,KAAK,GAAG;AAZ7C,mCAAQA,IAAmB;AAC3B;AACA,mCAAQ,SAAS,EAAE,MAAM,OAAO,QAAQ,IAAI,QAAQ,EAAE,CAAC;AACvD;AACA;AACA,mCAAQ,CAAC;AACT;AACA;AAME,WAAK,OAAO;AACZ,WAAK,SAAS,SAAS,EAAE,OAAO,uBAAuB,KAAK,QAAQ,EAAEA,IAAmB,KAAK,IAAI,GAAG,MAAM,CAAC;AAC5G,WAAK,MAAM,OAAO,CAAC,CAAC,KAAK,OAAO;AAChC,UAAI,SAAS,OAAO,SAAS;AAC7B,YAAM,IAAI,KAAK,KAAK,OAAO,OAAO,KAAK,OAAO,SAAS,OAAO,EAAE,WAAW,kBAAkB,CAAC,GAAG,SAAS,SAAS,UAAU,EAAE,WAAW,qBAAqB,MAAM,UAAU,SAAS,MAAM,KAAK,MAAM,OAAO,CAAC,KAAK,MAAM,KAAK,CAAC,GAAG,QAAQ,SAAS,SAAS,EAAE,WAAW,cAAc,WAAW,sBAAsB,CAAC,GAAG,QAAQ,SAAS,OAAO,EAAE,WAAW,QAAQ,CAAC,GAAG,QAAQ,SAAS,QAAQ,EAAE,WAAW,QAAQ,CAAC,GAAG,aAAa,SAAS,UAAU,EAAE,aAAa,gBAAgB,oBAAoB,KAAK,UAAU,UAAU,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,YAAY,KAAK,GAAG,SAAS,OAAO,KAAK,KAAK,MAAM,GAAG,KAAK,MAAM,SAAS,IAAI,CAAC,GAAG,OAAO,SAAS,UAAU,EAAE,aAAa,OAAO,oBAAoB,KAAK,UAAU,KAAK,CAAC,CAAC,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,MAAM,KAAK,GAAG,SAAS,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,GAAG,OAAO,SAAS,UAAU,EAAE,aAAa,OAAO,oBAAoB,KAAK,UAAU,KAAK,CAAC,CAAC,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,MAAM,KAAK,GAAG,SAAS,MAAM,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,EAAE,CAAC,GAAG,UAAU,SAAS,UAAU,EAAE,aAAa,UAAU,oBAAoB,KAAK,UAAU,OAAO,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,SAAS,KAAK,GAAG,SAAS,MAAM,KAAK,KAAK,OAAO,CAAC,EAAE,CAAC,GAAG,YAAY,SAAS,UAAU,EAAE,SAAS,MAAM,KAAK,KAAK,EAAE,SAAS,SAAS,OAAO,EAAE,GAAG,kBAAkB,eAAe,KAAK,UAAU,WAAW,KAAK,EAAE,CAAC,GAAG,SAAS,SAAS,UAAU,EAAE,aAAa,SAAS,oBAAoB,KAAK,UAAU,MAAM,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,QAAQ,KAAK,GAAG,SAAS,KAAK,KAAK,OAAO,CAAC,GAAG,eAAe,SAAS,UAAU,EAAE,SAAS,MAAM,KAAK,KAAK,EAAE,WAAW,YAAY,OAAO,EAAE,GAAG,kBAAkB,eAAe,KAAK,UAAU,cAAc,KAAK,EAAE,CAAC,GAAG,QAAQ,SAAS,SAAS,EAAE,MAAM,SAAS,KAAK,KAAK,OAAO,qBAAqB,WAAW,qBAAqB,SAAS,MAAM,KAAK,KAAK,OAAO,OAAO,MAAM,KAAK,CAAC,EAAE,CAAC,GAAG,MAAM,SAAS,UAAU,EAAE,aAAa,SAAS,oBAAoB,KAAK,UAAU,MAAM,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,QAAQ,KAAK,GAAG,SAAS,MAAM,KAAK,MAAM,SAAS,KAAK,KAAK,OAAO,MAAM,CAAC,EAAE,CAAC,GAAG,MAAM,SAAS,UAAU,EAAE,aAAa,SAAS,oBAAoB,KAAK,UAAU,MAAM,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,QAAQ,KAAK,GAAG,SAAS,MAAM,KAAK,MAAM,OAAO,KAAK,EAAE,UAAU,KAAK,KAAK,OAAO,KAAK,MAAM,MAAM,EAAE,CAAC,GAAG,MAAM,SAAS,UAAU,EAAE,aAAa,QAAQ,oBAAoB,KAAK,UAAU,KAAK,CAAC,IAAI,kBAAkB,eAAe,KAAK,UAAU,OAAO,KAAK,GAAG,SAAS,MAAM,KAAK,MAAM,SAAS,GAAG,CAAC,GAAG,UAAU,SAAS,YAAY,EAAE,WAAW,SAAS,UAAU,MAAM,aAAa,wBAAwB,OAAO,wBAAwB,CAAC,GAAG,KAAK,SAAS,YAAY,EAAE,WAAW,SAAS,aAAa,yBAAyB,OAAO,gBAAgB,SAAS,MAAM,KAAK,MAAM,SAAS,GAAG,MAAM,CAAC,GAAG,OAAO,SAAS,KAAK,EAAE,WAAW,eAAe,WAAW,uCAAuC,CAAC,GAAG,OAAO,SAAS,KAAK,EAAE,QAAQ,UAAU,KAAK,uBAAuB,aAAa,eAAe,MAAM,4CAA4C,CAAC,GAAG,MAAM,SAAS,OAAO,EAAE,WAAW,gBAAgB,CAAC,GAAG,SAAS,SAAS,OAAO,EAAE,WAAW,gBAAgB,CAAC,GAAG,UAAU,SAAS,OAAO,EAAE,WAAW,gBAAgB,CAAC,GAAG,YAAY,SAAS,OAAO,EAAE,WAAW,gBAAgB,CAAC,GAAG,iBAAiB,SAAS,QAAQ,EAAE,WAAW,SAAS,aAAa,aAAa,CAAC,GAAG,iBAAiB,SAAS,QAAQ,EAAE,WAAW,SAAS,aAAa,aAAa,CAAC,GAAG,YAAY,SAAS,SAAS,EAAE,WAAW,yBAAyB,aAAa,6BAA6B,OAAO,mBAAmB,SAAS,MAAM,SAAS,MAAM,QAAQ,OAAO,SAAS,OAAO,UAAU,QAAQ,YAAY,KAAK,KAAK,OAAO,WAAW,GAAG,IAAI,SAAS,CAAC,GAAG,SAAS,WAAW,UAAU,KAAK,MAAM,WAAW,SAAS,KAAK,KAAK,OAAO,YAAY,QAAQ,CAAC,GAAG,YAAY,SAAS,SAAS,EAAE,WAAW,yBAAyB,aAAa,6BAA6B,OAAO,mBAAmB,SAAS,MAAM,SAAS,MAAM,QAAQ,OAAO,SAAS,OAAO,UAAU,QAAQ,YAAY,KAAK,KAAK,OAAO,WAAW,EAAE,IAAI,SAAS,CAAC,GAAG,SAAS,WAAW,UAAU,OAAO,IAAI,MAAM,WAAW,SAAS,KAAK,KAAK,OAAO,YAAY,QAAQ,CAAC,GAAG,QAAQ,SAAS,UAAU,EAAE,WAAW,YAAY,OAAO,kBAAkB,UAAU,MAAM,KAAK,KAAK,OAAO,eAAe,OAAO,MAAM,KAAK,EAAE,CAAC,GAAG,SAAS,SAAS,SAAS,EAAE,WAAW,qCAAqC,MAAM,UAAU,KAAK,KAAK,OAAO,qDAAqD,SAAS,MAAM,KAAK,MAAM,SAAS,KAAK,IAAI,GAAG,OAAO,OAAO,KAAK,KAAK,CAAC,EAAE,CAAC,GAAG,QAAQ,SAAS,QAAQ,EAAE,WAAW,WAAW,CAAC,GAAG,QAAQ,SAAS,SAAS,EAAE,WAAW,oCAAoC,MAAM,UAAU,KAAK,KAAK,OAAO,wFAAwF,SAAS,MAAM,KAAK,KAAK,OAAO,QAAQ,KAAK,IAAI,GAAG,OAAO,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC,GAAG,QAAQ,SAAS,SAAS,EAAE,WAAW,oCAAoC,MAAM,UAAU,KAAK,KAAK,MAAM,MAAM,OAAO,mEAAmE,SAAS,MAAM,KAAK,KAAK,OAAO,mBAAmB,KAAK,IAAI,GAAG,OAAO,MAAM,KAAK,KAAK,CAAC,EAAE,CAAC,GAAG,OAAO,SAAS,SAAS,EAAE,WAAW,YAAY,OAAO,iLAAiL,CAAC,GAAG,UAAU,SAAS,SAAS,EAAE,MAAM,YAAY,SAAS,CAAC,CAAC,KAAK,KAAK,OAAO,aAAa,UAAU,MAAM,KAAK,KAAK,OAAO,cAAc,QAAQ,QAAQ,CAAC,GAAG,QAAQ,SAAS,SAAS,EAAE,WAAW,YAAY,OAAO,+KAA+K,CAAC,GAAG,WAAW,SAAS,SAAS,EAAE,MAAM,YAAY,SAAS,CAAC,CAAC,KAAK,KAAK,OAAO,cAAc,UAAU,MAAM,KAAK,KAAK,OAAO,eAAe,SAAS,QAAQ,CAAC,GAAG,aAAa,SAAS,OAAO,EAAE,WAAW,gBAAgB,CAAC,GAAG,aAAa,SAAS,OAAO,EAAE,WAAW,gBAAgB,CAAC,GAAG,OAAO,SAAS,OAAO,EAAE,WAAW,SAAS,CAAC,GAAG,OAAO,SAAS,OAAO,EAAE,WAAW,SAAS,CAAC,GAAG,OAAO,SAAS,OAAO,EAAE,WAAW,SAAS,CAAC,GAAG,OAAO,SAAS,OAAO,EAAE,WAAW,SAAS,CAAC,GAAG,OAAO,SAAS,OAAO,EAAE,WAAW,uBAAuB,CAAC;AAC34M,YAAM,OAAO,GAAG,CAAC,MAAM,KAAK,MAAM,GAAG,MAAM,KAAK,GAAG,GAAG,GAAG,IAAI,EAAE,EAAE,IAAI,CAAC,MAAM,SAAS,UAAU,EAAE,OAAO,OAAO,CAAC,GAAG,aAAa,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;AAC3I,aAAO,QAAQ,IAAI,OAAO,KAAK,GAAG,MAAM,UAAU;AAClD,cAAQ,QAAQ,UAAU,QAAQ,WAAW,OAAO,gBAAgB,SAAS,GAAG,cAAc,WAAW,OAAO,gBAAgB,SAAS,GAAG,WAAW,GAAG,UAAU;AACpK,YAAM,OAAO,OAAO,SAAS,KAAK,OAAO,WAAW,QAAQ,OAAO,GAAG,QAAQ,KAAK,OAAO,MAAM,MAAM,cAAc,MAAM,GAAG,OAAO,UAAU,KAAK,OAAO,OAAO,KAAK,GAAG,OAAO,UAAU,KAAK,OAAO,KAAK,KAAK,GAAG,GAAG,OAAO,KAAK,KAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,SAAS,cAAc,GAAG,QAAQ,MAAM,OAAO,UAAU,eAAe,GAAG,MAAM,GAAG,QAAQ,KAAK,QAAQ,KAAK,GAAG,KAAK,OAAO,IAAI,GAAG,KAAK;AAClZ,WAAK,KAAK,OAAO,QAAQ,KAAK;AAC9B,WAAK,UAAU,CAAC,GAAG,MAAM,KAAK,MAAM,SAAS,KAAK,OAAO,UAAU,IAAI,WAAW,OAAO,IAAI,OAAO,gBAAgB,GAAG,IAAI,OAAO,KAAK,EAAE,yBAAyB,GAAG,MAAM,SAAS,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,IAAI,MAAM,SAAS,KAAK,KAAK,KAAK,KAAK,MAAM,MAAM,IAAI,MAAM,YAAY,KAAK,KAAK,OAAO,CAAC,IAAI,MAAM,iBAAiB,KAAK,KAAK,EAAE,WAAW,YAAY,OAAO,EAAE,IAAI,MAAM,WAAW,KAAK,KAAK,OAAO,EAAE,QAAQ,MAAM,IAAI,MAAM,cAAc,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ,KAAK,IAAI,MAAM,cAAc,KAAK,KAAK,KAAK,KAAK,MAAM,QAAQ,IAAI,IAAI,MAAM,YAAY,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,KAAK,IAAI,MAAM,YAAY,KAAK,KAAK,KAAK,IAAI,KAAK,MAAM,QAAQ,IAAI,IAAI,MAAM,WAAW,KAAK,KAAK,OAAO,IAAI,MAAM,cAAc,KAAK,KAAK,EAAE,SAAS,SAAS,OAAO,EAAE,IAAI,MAAM,eAAe,KAAK,KAAK,MAAM,IAAI,MAAM,iBAAiB,KAAK,MAAM,OAAO,QAAQ,MAAM,WAAW,KAAK,MAAM,SAAS,KAAK,KAAK,OAAO,IAAI,MAAM,WAAW,KAAK,MAAM,OAAO,KAAK,EAAE,UAAU,KAAK,KAAK,OAAO,KAAK,MAAM,MAAM,IAAI,MAAM,YAAY,KAAK,MAAM,SAAS;AACviC,WAAK,QAAQ,CAAC,GAAG,MAAM,KAAK,MAAM,SAAS,KAAK,OAAO,UAAU,IAAI,WAAW,OAAO,IAAI,OAAO,gBAAgB,GAAG,IAAI,MAAM,KAAK,EAAE,yBAAyB;AAC/J,aAAO,iBAAiB,WAAW,KAAK,OAAO,GAAG,OAAO,iBAAiB,SAAS,KAAK,KAAK;AAC7F,YAAM,OAAO;AAAA,QACX,OAAO,MAAM,KAAK,OAAO,QAAQ,KAAK,MAAM,YAAY,kBAAkB,KAAK,OAAO,KAAK,IAAI,KAAK,MAAM,eAAe,gBAAgB,CAAC;AAAA,QAC1I,OAAO,MAAM;AACX,cAAI,KAAK,OAAO,WAAW,CAAC,IAAI,SAAU,QAAO,KAAK,KAAK,OAAO;AAClE,gBAAM,OAAO,QAAQ,KAAK,OAAO,SAAS;AAC1C,cAAI,KAAK,eAAe,KAAM,MAAK,YAAY,IAAI;AAAA,QACrD,CAAC;AAAA,QACD,OAAO,MAAM,OAAO,cAAc,IAAI,MAAM,SAAS,CAAC,KAAK,MAAM,QAAQ,SAAS,MAAM,IAAI,MAAM,cAAc,KAAK,OAAO,SAAS,EAAE,EAAE;AAAA,QACzI,OAAO,MAAM,UAAU,cAAc,GAAG,EAAE,SAAS,SAAS,OAAO,GAAG,oBAAoB,KAAK,UAAU,SAAS,CAAC,EAAE;AAAA,QACrH,OAAO,MAAM,aAAa,cAAc,GAAG,EAAE,WAAW,YAAY,OAAO,GAAG,oBAAoB,KAAK,UAAU,YAAY,CAAC,EAAE;AAAA,QAChI,OAAO,CAAC,OAAO,GAAG,MAAM,MAAM;AAC5B,gBAAM,MAAM,OAAO,EAAE,QAAQ,MAAM;AACnC,gBAAM,WAAW,WAAW,WAAW,CAAC,EAAE,QAAQ;AAClD,mBAAS,IAAI,GAAG,MAAM,EAAE,QAAQ,QAAQ,IAAI,KAAK,KAAK;AACpD,kBAAM,SAAS,EAAE,QAAQ,CAAC;AAC1B,uBAAW,SAAS,QAAQ,OAAO,SAAS,SAAS;AAAA,UACvD;AACA,gBAAM,cAAc,SAAS,IAAI,eAAe,EAAE,QAAQ,SAAS,OAAO,GAAG,WAAW,GAAG;AAAA,QAC7F,CAAC;AAAA,QACD,OAAO,MAAM;AACX,gBAAM,cAAc,UAAU,EAAE,YAAY,MAAM,EAAE,QAAQ,MAAM;AAClE,kBAAQ,WAAW,KAAK,WAAW,CAAC,KAAK,KAAK;AAC9C,iBAAO,WAAW,CAAC,EAAE,UAAU,CAAC,EAAE;AAClC,oBAAU,WAAW,KAAK,WAAW,CAAC,KAAK,KAAK;AAChD,gBAAM,QAAQ,OAAO,KAAK,IAAI,EAAE,cAAc,EAAE,QAAQ,MAAM,CAAC;AAC/D,kBAAQ,QAAQ,KAAK,UAAU,EAAE,eAAe,EAAE,QAAQ,EAAE,eAAe,CAAC,IAAI,EAAE,SAAS,MAAM,OAAO,EAAE,aAAa,GAAG,MAAM,CAAC;AAAA,QACnI,CAAC;AAAA,QACD,OAAO,MAAM;AACX,cAAI,WAAW,IAAI,WAAW,CAAC,KAAK,MAAM,OAAO,KAAK,EAAE;AACxD,aAAG,UAAU,KAAK,MAAM,WAAW,GAAG,QAAQ,KAAK,MAAM;AAAA,QAC3D,CAAC;AAAA,QACD,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,OAAO,YAAY,MAAM,MAAM,MAAM,UAAU,MAAM,QAAQ,EAAE;AAAA,QAC5F,OAAO,CAAC,IAAI,OAAO,KAAK,MAAM,MAAM,MAAM,MAAM,OAAO,UAAU,OAAO,QAAQ,EAAE;AAAA,QAClF,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,OAAO,KAAK,MAAM,MAAM,MAAM,UAAU,MAAM,QAAQ,EAAE;AAAA,QACrF,OAAO,CAAC,IAAI,OAAO,KAAK,KAAK,OAAO,gBAAgB,MAAM,MAAM,MAAM,UAAU,MAAM,QAAQ,EAAE;AAAA,QAChG,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,gBAAgB,MAAM,QAAQ,YAAY,QAAQ,UAAU,EAAE;AAAA,QAC7F,OAAO,CAAC,IAAI,CAAC,CAAC,KAAK,KAAK,OAAO,iBAAiB,MAAM,SAAS,YAAY,SAAS,UAAU,EAAE;AAAA,QAChG,OAAO,OAAO,CAAC,WAAW,UAAU,QAAQ,YAAY,KAAK,KAAK,OAAO,WAAW,GAAG,IAAI,CAAC,WAAW,UAAU,QAAQ,YAAY,KAAK,KAAK,OAAO,WAAW,EAAE,GAAG;AAAA,MACxK;AACA,WAAK,MAAM,KAAK,GAAG,IAAI;AAAA,IACzB;AAAA,IACA,UAAU;AACR,iBAAW,QAAQ,KAAK,MAAO,MAAK;AACpC,aAAO,oBAAoB,WAAW,KAAK,OAAO,GAAG,OAAO,oBAAoB,SAAS,KAAK,KAAK;AACnG,WAAK,KAAK,OAAO,GAAG,KAAK,IAAI,GAAG,EAAEA,IAAmB;AAAA,IACvD;AAAA,EACF,GAzEE,cADsBA,KACf,SAAQ,IADOA;AA2ExB,WAAS,QAAQ,WAAW;AAC1B,UAAM,OAAO,aAAa,cAAc,SAAS,kBAAkB,YAAY,SAAS;AACxF,QAAI,SAAS,SAAS,QAAQ,iBAAiB,IAAI,EAAE,aAAa,SAAU,MAAK,MAAM,WAAW;AAClG,UAAM,QAAQ,KAAK,cAAc,4BAA4B,KAAK,SAAS,OAAO,EAAE,WAAW,mBAAmB,GAAG,QAAQ,EAAE,UAAU,SAAS,SAAS,OAAO,UAAU,WAAW,CAAC;AACxL,QAAI,MAAM,kBAAkB,KAAM,MAAK,YAAY,KAAK;AACxD,UAAM,OAAO,MAAM,cAAc,2BAA2B,KAAK,SAAS,OAAO,EAAE,WAAW,kBAAkB,CAAC;AACjH,WAAO,KAAK,kBAAkB,SAAS,MAAM,YAAY,IAAI,GAAG;AAAA,EAClE;AACA,WAAS,YAAY,OAAO,WAAW;AACrC,WAAO,CAAC,QAAQ,YAAY,MAAM,QAAQ,KAAK,IAAI,MAAM,SAAS,MAAM,KAAK,IAAI,IAAI,YAAY,aAAa,OAAO,QAAQ,KAAK,UAAU,KAAK,IAAI,OAAO,KAAK;AAAA,EACnK;AACA,WAAS,WAAW,KAAK,aAAa,OAAO;AAC3C,UAAM,OAAO,IAAI,KAAK;AACtB,QAAI,CAAC,KAAM,QAAO,aAAa,SAAS;AACxC,QAAI,KAAK,CAAC,MAAM;AACd,UAAI;AACF,cAAM,SAAS,KAAK,MAAM,IAAI;AAC9B,YAAI,UAAU,aAAa,OAAO,OAAQ,QAAO;AAAA,MACnD,QAAQ;AACN,eAAO;AAAA,MACT;AACF,UAAM,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,CAAC,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO,OAAO;AAChE,WAAO,KAAK,SAAS,OAAO,aAAa,SAAS;AAAA,EACpD;;;ACnRO,MAAM,iBAAN,cAA6B,SAA2B;AAAA,IAAxD;AAAA;AAGL,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,QAAc;AAE5B,WAAK,SAAS,IAAI,iBAAiB,EAAE,aAAa,mBAAmB,GAAG,GAAG,KAAK,OAAO,OAAO,CAAC;AAC/F,YAAM,QAAQ,KAAK,KAAK,KAAK,kBAAkB,GAAG;AAElD,aAAO,OAAO,KAAK,OAAO,OAAO,kBAAkB;AACnD,WAAK,MAAM,IAAI,KAAK,MAAM,GAAG,SAAS,CAAC,MAAM,MAAM,aAAa,KAAK,OAAO,QAAQ,GAAG,MAAM,MAAM,KAAK,YAAY,KAAK,OAAO,OAAO,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAChK;AAAA,IAEgB,OAAa;AAE3B,WAAK,UAAU,IAAI,kBAAkB,KAAK,QAAQ,EAAE,OAAO,kBAAkB,WAAW,KAAK,IAAI,IAAI,CAAC,SAAS,GAAI,KAAK,OAAO,QAAiD,CAAC;AAEjL,WAAK,KAAK,OAAO,MAAM,2BAA2B,CAAC,MAAO,KAAK,QAAQ,OAAO,QAAQ,GAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEvI,WAAK,KAAK,OAAO;AAAA,QACf;AAAA,QACA,CAAC,MAAM;AACL,gBAAM,QAAQ,KAAK,KAAK,KAAK,kBAAkB,GAAG;AAClD,cAAI,CAAC,MAAO;AACZ,gBAAM,QAAQ,MAAM,OAAO,SAAS,IAAK,MAAM,OAAO,YAAY,EAAE,KAAK,MAAM,OAAO,UAAU,IAAY,CAAC,MAAM,OAAO,cAAc,MAAM,OAAO,YAAY,CAAC;AAClK,UAAC,MAAM,OAAO,UAAuC,kBAAkB,IAAI,EAAE,QAAQ,CAAC,GAAG,IAAI,CAAC;AAAA,QAChG;AAAA,QACA,EAAE,QAAQ,KAAK,QAAQ,MAAM,KAAK;AAAA,MACpC;AACA,WAAK,KAAK,OAAO,GAAG,8BAA8B,CAAC,MAAM,OAAO,KAAK,OAAO,QAAQ,EAAE,cAAc,KAAK,GAAG,EAAE,QAAQ,KAAK,QAAQ,MAAM,MAAM,CAAC;AAChJ,WAAK,KAAK,OAAO,GAAG,+BAA+B,CAAC,MAAM,OAAO,KAAK,QAAQ,QAAQ,EAAE,cAAc,KAAK,GAAG,EAAE,QAAQ,KAAK,QAAQ,MAAM,MAAM,CAAC;AAElJ,WAAK,KAAK,eAAe,kBAAkB,EAAE,IAAI,KAAK,OAAO,MAAM,KAAK,KAAK,CAAC;AAC9E,WAAK,KAAK,eAAe,kBAAkB,EAAE,IAAI,KAAK,OAAO,MAAM,KAAK,KAAK,CAAC;AAC9E,YAAM,KAAK;AAAA,IACb;AAAA,IAEmB,YAAkB;AACnC,WAAK,QAAQ,QAAQ,GAAG,KAAK,OAAO,QAAQ,GAAG,MAAM,UAAU;AAAA,IACjE;AAAA,EACF;AAzCE,gBADW,gBACY,YAAW;AAClC,gBAFW,gBAEY,SAAQ;;;ACVjC,sHAAAC;AAEA,MAAI,cAAaA,MAAA,MAAM;AAAA,IAWrB,YAAY,SAAS;AAVrB,uCAAe;AAEf;AAAA;AACA;AACA,uCAAe;AACf,oCAAY;AACZ;AACA,mCAAQ,CAAC;AACT,sCAAW;AACX,2CAAmB,MAAM,mBAAK,gBAAiB,SAAS,oBAAoB;AA0B5E,kCAAO,MAAMC,YAAW,MAAM,mBAAK,WAAY,QAAO,GAAG,KAAK,KAAK,MAAM;AACzE,mCAAQ,MAAM,mBAAK,WAAY;AAmO/B,mCAAQ,MAAM,KAAK,OAAO,WAAW,KAAK;AA1Q5C,UAAAD,KAAAE;AAcI,qBAAe,IAAI,GAAG,oBAAoB,KAAK,OAAO,QAAQ,MAAM;AACpE,WAAK,OAAO;AACZ,WAAK,OAAO,KAAIA,MAAA,KAAK,MAAK,OAAVA,IAAU,KAAO,KAAIF,MAAA,KAAK,MAAK,YAAVA,IAAU,UAAY,cAAa,IAAG,IAAI;AAC/E,OAAC,MAAM,KAAK,KAAK,KAAK,IAAI,KAAK,SAAS,IAAI,KAAK,MAAM,KAAKC,YAAW,KAAK,UAAU,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM,CAAC;AACxH,WAAK,OAAO,KAAK,IAAI;AAAA,IACvB;AAAA,IACA,WAAW;AACT,WAAK,eAAe,SAAS,OAAO,EAAE,WAAW,aAAa,KAAK,SAAS,uBAAuB,EAAE,IAAI,IAAI,KAAK,KAAK,IAAI,YAAY,OAAO,GAAG,EAAE,SAAS,KAAK,KAAK,QAAQ,CAAC;AAC/K,4BAAsB,MAAM,KAAK,aAAa,UAAU,IAAI,iBAAiB,CAAC;AAC9E,WAAK,WAAW;AAAA,IAClB;AAAA,IACA,OAAO,SAAS,cAAc,mBAAK,eAAc;AAC/C,UAAI,CAAC,WAAW,CAAC,MAAM,OAAO,KAAK,eAAe,KAAK,SAAU,QAAO,KAAK,KAAK;AAClF,UAAI;AACF,YAAI,YAAa,SAAQ,WAAW,KAAK,KAAK,WAAW,KAAK,KAAK,OAAO,oBAAoB,SAAS,KAAK,KAAK,GAAG,oBAAoB,KAAK,OAAO,KAAK,KAAK,MAAM;AACpK,aAAK,OAAO,EAAE,GAAG,KAAK,MAAM,GAAG,QAAQ;AACvC,cAAM,MAAM,OAAO,OAAO,KAAK,OAAO,EAAE,QAAQ,CAAC,QAAQ,KAAK,GAAG,IAAI,QAAQ,GAAG,CAAC,GAAG,mBAAK,cAAe,OAAM,CAAC,gBAAgB,KAAK,WAAW,KAAK,KAAK;AACzJ,SAAC,MAAM,KAAK,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,MAAM,KAAKA,YAAW,KAAK,KAAK,KAAK,OAAO,KAAK,KAAK,MAAM,CAAC;AACpG,aAAK,KAAK,QAAQ;AAAA,MACpB,SAAS,KAAK;AACZ,gBAAQ,MAAM,6BAA6B,GAAG;AAAA,MAChD;AACA,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IAGA,IAAI,cAAc;AAChB,aAAO,KAAK,KAAK,eAAe,SAAS;AAAA,IAC3C;AAAA,IACA,IAAI,YAAY,OAAO;AACrB,UAAI,mBAAK,cAAc,MAAK,WAAW,KAAK,KAAK;AAAA,IACnD;AAAA,IACA,IAAI,SAAS;AACX,aAAO,KAAK,gBAAgB,SAAS;AAAA,IACvC;AAAA,IACA,IAAI,KAAK,OAAO;AACd,WAAK,aAAa,UAAU,OAAO,QAAQ,WAAW,SAAS,SAAS;AACxE,eAAS,KAAK,aAAa,UAAU,IAAI,KAAK;AAC9C,WAAK,aAAa,OAAO,UAAU,WAAW,UAAU,YAAY,UAAU;AAC9E,WAAK,aAAa,WAAW,UAAU,WAAW,UAAU,YAAY,cAAc;AACtF,UAAI,SAAS,mBAAK,cAAc,MAAK,OAAO,KAAK,KAAK;AAAA,IACxD;AAAA,IACA,IAAI,SAAS,OAAO;AAClB,iBAAW,MAAM,KAAK,aAAa,iBAAiB,2CAA2C,EAAG,IAAG,OAAO;AAC5G,WAAK,aAAa,mBAAmB,cAAc,GAAG,QAAQ,OAAO,KAAK,IAAI,MAAM,IAAI,QAAQ,EAAE,EAAE;AAAA,IACtG;AAAA,IACA,IAAI,OAAO,OAAO;AAChB,YAAM,WAAW,MAAM,KAAK,aAAa,cAAc,uBAAuB;AAC9E,UAAI,OAAO;AACT,aAAK,eAAe;AACpB,aAAK,aAAa,cAAc,kBAAkB,EAAE,QAAQ,SAAS,KAAK,SAAS,KAAK,EAAE,WAAW,uBAAuB,CAAC,CAAC;AAC9H,cAAM,OAAO,SAAS;AACtB,aAAK,YAAY,KAAK,QAAQ,SAAS,OAAO,KAAK,IAAI,MAAM,IAAI;AAAA,MACnE,MAAO,UAAS,GAAG,OAAO;AAAA,IAC5B;AAAA,IACA,IAAI,QAAQ,OAAO;AACjB,YAAM,iBAAiB,MAAM,KAAK,aAAa,cAAc,6BAA6B,GAAG,SAAS,QAAQ,OAAO,QAAQ,KAAK,IAAI,CAAC;AACvI,UAAI,OAAO,QAAQ;AACjB,aAAK,eAAe;AACpB,aAAK,aAAa,cAAc,kBAAkB,EAAE,sBAAsB,YAAY,eAAe,KAAK,SAAS,OAAO,EAAE,WAAW,6BAA6B,CAAC,CAAC;AACtK,cAAM,UAAU,eAAe;AAC/B,gBAAQ,YAAY,OAAO,IAAI,CAAC,CAAC,KAAK,MAAM,QAAQ,yDAAyD,KAAK,KAAK,KAAK,cAAc,EAAE,EAAE,KAAK,EAAE;AACrJ,gBAAQ,iBAAiB,2BAA2B,EAAE,QAAQ,CAAC,KAAK,MAAM,IAAI,UAAU,CAAC,MAAM,OAAO,CAAC,EAAE,CAAC,IAAI,GAAG,IAAI,CAAC;AAAA,MACxH,MAAO,gBAAe,GAAG,OAAO;AAAA,IAClC;AAAA,IACA,IAAI,MAAM,OAAO;AACf,YAAM,QAAQ,MAAM,KAAK,aAAa,cAAc,mBAAmB;AACvE,UAAI,OAAO;AACT,aAAK,eAAe;AACpB,aAAK,aAAa,cAAc,2BAA2B,EAAE,QAAQ,MAAM,KAAK,SAAS,OAAO,EAAE,WAAW,oBAAoB,KAAK,cAAc,CAAC,CAAC;AACtJ,cAAM,MAAM,MAAM;AAClB,YAAI,MAAM;AACV,YAAI,SAAS,IAAI,UAAU,MAAM,IAAI,QAAQ,SAAS,IAAI,YAAY,IAAI,eAAe;AAAA,MAC3F,MAAO,OAAM,GAAG,OAAO;AAAA,IACzB;AAAA,IACA,IAAI,OAAO;AACT,aAAO,KAAK,KAAK,SAAS,OAAO,KAAK,YAAY,KAAK,KAAK,IAAI,KAAK,KAAK,KAAK,KAAK,QAAQ;AAAA,IAC9F;AAAA,IACA,IAAI,KAAK,OAAO;AACd,UAAI,KAAK,KAAK,UAAW;AACzB,YAAM,OAAO,MAAM,KAAK,aAAa,cAAc,0CAA0C;AAC7F,UAAI,OAAO;AACT,aAAK,eAAe;AACpB,aAAK,aAAa,cAAc,2BAA2B,EAAE,OAAO,KAAK,KAAK,SAAS,QAAQ,EAAE,WAAW,kBAAkB,CAAC,CAAC;AAChI,cAAM,MAAM,KAAK;AACjB,YAAI,YAAY,IAAI,QAAQ,OAAO,KAAK;AAAA,MAC1C,MAAO,MAAK,GAAG,OAAO;AAAA,IACxB;AAAA,IACA,IAAI,UAAU,OAAO;AACnB,YAAM,SAAS,MAAM,KAAK,aAAa,cAAc,oBAAoB;AACzE,UAAI,OAAO;AACT,aAAK,eAAe;AACpB,mBAAW,KAAK,KAAK,aAAa,iBAAiB,0CAA0C,EAAG,GAAE,OAAO;AACzG,aAAK,aAAa,cAAc,2BAA2B,EAAE,OAAO,OAAO,KAAK,SAAS,QAAQ,EAAE,WAAW,oCAAoC,CAAC,CAAC;AACpJ,eAAO,EAAE,YAAY,MAAM,KAAK,IAAI,QAAQ,KAAK,YAAY;AAAA,MAC/D,OAAO;AACL,eAAO,GAAG,OAAO;AACjB,YAAI,mBAAK,cAAc,MAAK,OAAO,KAAK,KAAK;AAAA,MAC/C;AAAA,IACF;AAAA,IACA,IAAI,YAAY,OAAO;AACrB,YAAM,MAAM,KAAK,aAAa,cAAc,2BAA2B;AACvE,UAAI,MAAO,MAAK,aAAa,OAAO,OAAO,SAAS,UAAU,EAAE,OAAO,SAAS,WAAW,sBAAsB,WAAW,4BAA4B,WAAW,WAAW,SAAS,KAAK,OAAO,CAAC,CAAC;AAAA,UAChM,MAAK,OAAO;AAAA,IACnB;AAAA,IACA,IAAI,YAAY;AACd,YAAM,IAAI,KAAK,KAAK;AACpB,UAAI,KAAK,KAAK,cAAc,QAAQ,KAAK,KAAK,cAAc;AAC1D,YAAI,MAAM,eAAe,MAAM,kBAAkB,MAAM,eAAgB,QAAO;AAAA,iBACrE,MAAM,gBAAgB,MAAM,mBAAmB,MAAM,gBAAiB,QAAO,MAAM,eAAe,eAAe;AAAA,YACrH,QAAO;AACd,aAAO,KAAK,KAAK;AAAA,IACnB;AAAA,IACA,IAAI,UAAU,OAAO;AACnB,WAAK,aAAa,QAAQ,YAAY,KAAK;AAAA,IAC7C;AAAA,IACA,IAAI,YAAY;AACd,aAAO,KAAK,KAAK,cAAc,OAAO,KAAK,gBAAgB,KAAK,KAAK,IAAI,KAAK,KAAK,gBAAgB,OAAO,KAAK,KAAK;AAAA,IACtH;AAAA,IACA,IAAI,UAAU,OAAO;AACnB,2BAAqB,mBAAK,mBAAkB;AAC5C,yBAAK,cAAe;AACpB,WAAK,YAAY;AACjB,UAAI;AACJ,YAAME,QAAO,CAAC,SAAS;AACrB,YAAI,mBAAK,iBAAgB;AACvB,qBAAW;AACX,6BAAK,gBAAiB;AAAA,QACxB;AACA,YAAI,YAAY,MAAM;AACpB,qBAAW;AACX,iBAAO,mBAAK,oBAAqB,sBAAsBA,KAAI;AAAA,QAC7D;AACA,YAAI,CAAC,mBAAK,YAAW;AACnB,6BAAK,cAAL,mBAAK,iBAAgB,OAAO;AAC5B,eAAK,eAAe,mBAAK,aAAY;AACrC,cAAI,MAAM,KAAK,SAAS,KAAK,mBAAK,iBAAgB,KAAK,UAAW,QAAO,KAAK,OAAO,UAAU,IAAI;AAAA,QACrG;AACA,mBAAW;AACX,2BAAK,oBAAqB,sBAAsBA,KAAI;AAAA,MACtD;AACA,UAAI,MAAO,oBAAK,oBAAqB,sBAAsBA,KAAI;AAAA,IACjE;AAAA,IACA,IAAI,SAAS,OAAO;AAClB,UAAI,CAAC,mBAAK,cAAc;AACxB,YAAM,gBAAgB,KAAK,aAAa,eAAe,YAAY,KAAK,YAAY,cAAc,iDAAiD,KAAK,IAAI,KAAK,KAAK,iBAAiB,KAAK;AAC5L,OAAC,UAAU,SAAS,KAAK,YAAY,KAAK,UAAU,KAAK,KAAK,cAAc,YAAY,QAAQ,EAAE,KAAK,YAAY;AACnH,WAAK,aAAa,UAAU,OAAO,qBAAqB,KAAK,MAAM;AACnE,UAAI,EAAE,iBAAiB,QAAQ,cAAc,cAAc,GAAI,eAAc,OAAO;AAAA,IACtF;AAAA,IACA,IAAI,aAAa,OAAO;AACtB,WAAK,aAAa,UAAU,QAAQ,MAAM,KAAK,OAAO,IAAI;AAAA,IAC5D;AAAA,IACA,IAAI,gBAAgB,OAAO;AACzB,WAAK,aAAa,UAAU,OAAO,YAAY,CAAC,KAAK;AACrD,WAAK,YAAY;AACjB,2BAAqB,mBAAK,kBAAiB;AAC3C,YAAMA,QAAO,MAAM;AACjB,YAAI,MAAM,KAAK,SAAS,KAAK,CAAC,mBAAK,WAAW,MAAK,YAAY;AAC/D,2BAAK,mBAAoB,sBAAsBA,KAAI;AAAA,MACrD;AACA,UAAI,CAAC,MAAO,oBAAK,mBAAoB,sBAAsBA,KAAI;AAAA,IACjE;AAAA,IACA,IAAI,YAAY;AACd,aAAO,OAAO,KAAK,aAAa,MAAM,YAAY,YAAY,CAAC;AAAA,IACjE;AAAA,IACA,IAAI,UAAU,QAAQ,IAAI,mBAAK,gBAAe,KAAK,WAAW;AAC5D,WAAK,aAAa,MAAM,YAAY,cAAc,KAAK;AAAA,IACzD;AAAA,IACA,IAAI,aAAa,OAAO;AACtB,WAAK,aAAa,cAAc,QAAQ,KAAK,QAAQ;AACrD,WAAK,aAAa,eAAe,QAAQ,KAAK,OAAO;AACrD,WAAK,aAAa,QAAQ,qBAAqB,qBAAqB,EAAE,YAAY,KAAK,IAAI;AAAA,IAC7F;AAAA,IACA,IAAI,iBAAiB,OAAO;AAC1B,cAAQ,SAAS,iBAAiB,oBAAoB,mBAAK,iBAAgB,IAAI,SAAS,oBAAoB,oBAAoB,mBAAK,iBAAgB;AAAA,IACvJ;AAAA,IACA,IAAI,IAAI,OAAO;AACb,WAAK,aAAa,QAAQ,MAAM;AAAA,IAClC;AAAA,IACA,IAAI,SAAS,OAAO;AAClB,UAAI,SAAS,KAAK,KAAK,KAAK;AAC1B,mBAAW,UAAU,KAAK,OAAO,OAAO,EAAG,KAAI,OAAO,KAAK,QAAQ,KAAK,KAAK,OAAO,OAAO,KAAK,OAAO,KAAK,KAAK,GAAI,QAAO,MAAM;AAAA,MACpI;AAAA,IACF;AAAA,IACA,IAAI,UAAU;AACZ,aAAO,KAAK,KAAK,YAAY,OAAO,KAAK,iBAAiB,KAAK,KAAK,IAAI,KAAK,KAAK,iBAAiB,OAAO,KAAK,KAAK;AAAA,IACtH;AAAA,IACA,IAAI,QAAQ,OAAO;AACjB,eAAS,WAAW,UAAU,KAAK,OAAO;AAAA,IAC5C;AAAA,IACA,IAAI,MAAM,OAAO;AACf,YAAM,oBAAoB,CAAC,GAAG,KAAK,cAAc,eAAe,YAAY,CAAC,CAAC;AAC9E,UAAI,CAAC,kBAAkB,OAAQ;AAC/B,eAAS,IAAI,GAAG,IAAI,kBAAkB,SAAS,OAAO,IAAK,EAAC,GAAG,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,MAAM,EAAE,kBAAkB,KAAK,KAAK,cAAc,kBAAkB,kBAAkB,SAAS,IAAI,CAAC,IAAI,kBAAkB,CAAC,EAAE,GAAG,MAAM;AAAA,IACnO;AAAA,IACA,IAAI,YAAY,OAAO;AACrB,WAAK,cAAc,gBAAgB,QAAQ,YAAY,QAAQ,EAAE,KAAK,YAAY;AAAA,IACpF;AAAA,IACA,IAAI,YAAY,OAAO;AACrB,WAAK,aAAa,QAAQ,cAAc,KAAK,WAAW;AACxD,WAAK,aAAa,gBAAgB,QAAQ,KAAK,2BAA2B;AAC1E,WAAK,aAAa,cAAc,QAAQ,KAAK,wBAAwB;AAAA,IACvE;AAAA,IACA,yBAAyB,GAAG;AAC1B,UAAI,MAAM,KAAK,QAAQ,KAAK,EAAE,gBAAgB,KAAK,SAAU;AAC7D,UAAI,EAAE,SAAS,SAAS,EAAG;AAC3B,OAAC,cAAc,EAAE,MAAM,KAAK,KAAK,aAAa,kBAAkB,EAAE,SAAS;AAC3E,yBAAK,WAAY;AACjB,WAAK,aAAa,KAAK,aAAa,KAAK,UAAU;AACnD,WAAK,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG;AACnD,WAAK,aAAa,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG;AACnD,WAAK,aAAa,iBAAiB,eAAe,KAAK,yBAAyB,EAAE,SAAS,MAAM,CAAC;AAClG,WAAK,aAAa,MAAM,YAAY,cAAc,QAAQ,WAAW;AAAA,IACvE;AAAA,IACA,wBAAwB,GAAG;AACzB,QAAE,eAAe;AACjB,UAAI,KAAK,WAAY;AACrB,WAAK,UAAU,sBAAsB,MAAM;AACzC,cAAM,YAAY,OAAO,aAAa;AACtC,YAAI,WAAW,SAAS,EAAE,UAAU,KAAK,aAAa,SAAS,UAAU,UAAU,EAAG,QAAO,KAAK,sBAAsB,CAAC;AACzH,cAAM,MAAM,CAAC,QAAQ,KAAK,KAAK,eAAe,SAAS,GAAG,GAAG,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG,SAAS,IAAI,EAAE,WAAW,EAAE,cAAc,CAAC,GAAG;AAChJ,aAAK,YAAL,KAAK,UAAY,KAAK,IAAI,IAAI,KAAK,UAAU,KAAK,KAAK,IAAI,IAAI,KAAK,UAAU,IAAI,MAAM;AACxF,aAAK,cAAc,IAAI,GAAG,IAAI,KAAK,WAAW,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,aAAa,IAAI,MAAM,GAAG,IAAI,IAAI,KAAK,aAAa;AACnI,aAAK,cAAc,IAAI,GAAG,IAAI,KAAK,WAAW,MAAM,IAAI,GAAG,MAAM,CAAC,IAAI,IAAI,KAAK,aAAa,IAAI,MAAM,GAAG,IAAI,IAAI,KAAK,aAAa;AACnI,aAAK,aAAa,MAAM,YAAY,aAAa,aAAa,KAAK,UAAU,OAAO,KAAK,UAAU,OAAO,WAAW;AACrH,cAAM,KAAK,KAAK,IAAI,KAAK,UAAU,IAAI,KAAK,aAAa,aAAa,KAAK,KAAK,IAAI,KAAK,UAAU,IAAI,KAAK,aAAa;AACzH,aAAK,aAAa,MAAM,YAAY,WAAW,MAAM,GAAG,KAAK,KAAK,MAAM,KAAK,KAAK,CAAC,GAAG,WAAW;AACjG,YAAI,CAAC,KAAK,cAAc,CAAC,MAAM,CAAC,GAAI,MAAK,UAAU;AACnD,YAAI,KAAK,QAAS,MAAK,aAAa,IAAI,IAAI;AAC5C,aAAK,aAAa;AAAA,MACpB,CAAC;AACD,WAAK,aAAa;AAAA,IACpB;AAAA,IACA,sBAAsB,GAAG;AACvB,UAAI,MAAM,KAAK,QAAQ,KAAK,EAAE,gBAAgB,KAAK,SAAU;AAC7D,2BAAqB,KAAK,OAAO;AACjC,UAAI,KAAK,IAAI,KAAK,UAAU,IAAI,KAAK,aAAa,gBAAgB,KAAK,KAAK,mBAAmB,KAAK,KAAK,KAAK,sBAAsB,QAAQ,KAAK,IAAI,KAAK,UAAU,IAAI,KAAK,aAAa,iBAAiB,KAAK,KAAK,mBAAmB,KAAK,KAAK,KAAK,sBAAsB,KAAM,QAAO,KAAK,MAAM;AACrS,yBAAK,WAAY,KAAK,aAAa,KAAK,aAAa,KAAK,UAAU;AACpE,WAAK,aAAa,oBAAoB,eAAe,KAAK,yBAAyB,EAAE,SAAS,MAAM,CAAC;AACrG,iBAAW,QAAQ,CAAC,cAAc,aAAa,SAAS,EAAG,MAAK,aAAa,MAAM,eAAe,IAAI;AAAA,IACxG;AAAA,IACA,OAAO,SAAS,UAAU,cAAc,OAAO;AAC7C,UAAI,CAAC,KAAK,KAAK,UAAW,MAAK,OAAO,OAAO,KAAK,KAAK,EAAE;AACzD,iBAAW,OAAO,KAAK,MAAO,cAAa,GAAG;AAC9C,eAAS,oBAAoB,oBAAoB,mBAAK,iBAAgB;AACtE,2BAAqB,mBAAK,mBAAkB,GAAG,qBAAqB,mBAAK,kBAAiB;AAC1F,UAAI,KAAK,YAAY,WAAW,aAAa,CAAC,KAAK,UAAW,MAAK,cAAc;AAAA,UAC5E,MAAK,aAAa,iBAAiB,KAAK;AAC7C,WAAK,aAAa,UAAU,OAAO,iBAAiB;AACpD,WAAK,UAAU,WAAW;AAAA,IAC5B;AAAA,IAEA,iBAAiB,UAAU;AACzB,YAAM,YAAY,SAAS,OAAO,EAAE,WAAW,uBAAuB,GAAG,EAAE,SAAS,CAAC;AACrF,gBAAU,MAAM,YAAY,mCAAmC,CAAC,KAAK,SAAS,UAAU,UAAU;AAClG,aAAO,KAAK,YAAY,YAAY,SAAS;AAAA,IAC/C;AAAA,IACA,iBAAiB;AACf,yBAAK,iBAAgB,KAAK,aAAa,iBAAiB,qHAAqH,EAAE,QAAQ,CAAC,OAAO,GAAG,OAAO,CAAC;AAC1M,YAAM,eAAe,MAAM,KAAK,aAAa,cAAc,2BAA2B;AACtF,UAAI,CAAC,aAAa,EAAG,MAAK,aAAa,QAAQ,SAAS,OAAO,EAAE,WAAW,2BAA2B,CAAC,CAAC;AACzG,UAAI,CAAC,KAAK,aAAa,cAAc,kBAAkB,EAAG,cAAa,EAAE,sBAAsB,YAAY,SAAS,OAAO,EAAE,WAAW,kBAAkB,CAAC,CAAC;AAAA,IAC9J;AAAA,IACA,gBAAgB;AACd,YAAM,YAAY,KAAK,cAAc;AACrC,WAAK,cAAc,OAAO;AAC1B,UAAI,CAAC,WAAW,cAAc,EAAG,YAAW,OAAO;AACnD,WAAK,WAAW;AAAA,IAClB;AAAA,EACF,GAzRE,8BAEA,oCACA,mCACA,8BACA,2BACA,gCAGA,kCAVeH;AA2RjB,MAAI,WAAW;AAAA,IACb,SAAS,GAAG,IAAI,SAAS,KAAK,OAAO,IAAI,EAAE,GAAG;AAC5C,aAAO,MAAM,EAAE,IAAI,CAAC,CAAC,UAAU,CAAC,OAAO,WAAW,KAAK,OAAO,OAAO,KAAK,CAAC,GAAG,KAAK,OAAO,OAAO,CAAC,EAAE,KAAK,CAAC,WAAW,CAAC,OAAO,QAAQ;AAAA,IACvI;AAAA,IACA,OAAO,MAAM,IAAI,SAAS,QAAQ;AAChC,YAAM,SAAS,UAAU,KAAK,OAAO,IAAI,EAAE;AAC3C,UAAI,QAAQ,MAAO,YAAW,OAAO,OAAO,MAAO,cAAa,GAAG;AACnE,UAAI,UAAU,OAAO,SAAU,QAAO,KAAK,OAAO,OAAO,EAAE,GAAG,KAAK,QAAQ,QAAQ,EAAE,GAAG,OAAO,MAAM,IAAI,GAAG,QAAQ,CAAC;AACrH,aAAO,UAAU,OAAO,OAAO,OAAO;AAAA,IACxC;AAAA,IACA,SAAS,CAAC,MAAM,aAAa,QAAQ,YAAY,UAAU,CAAC,MAAM;AAChE,gBAAU,EAAE,GAAG,SAAS,MAAM,WAAW,SAAS,YAAY,OAAO;AACrE,YAAM,KAAK,QAAQ,MAAM,YAAY,SAAS,KAAK,OAAO,IAAI,EAAE;AAChE,UAAI,CAAC,OAAQ,QAAO,KAAK,YAAY,OAAO;AAC5C,YAAM,EAAE,WAAW,aAAa,cAAc,YAAY,IAAI,YAAY;AAC1E,aAAO,KAAK,OAAO,IAAI,EAAE,GAAG,OAAO,KAAK,YAAY,EAAE,aAAa,cAAc,YAAY,IAAI,MAAM,GAAG,QAAQ,KAAK,EAAE,QAAQ,WAAW,IAAI,MAAM,WAAW,GAAG,SAAS,WAAW,MAAM,GAAG,MAAM;AAAA,IACzM;AAAA,IACA,SAAS,CAAC,MAAM,YAAY,UAAU,CAAC,MAAM;AAC3C,YAAM,KAAK,QAAQ,MAAM,YAAY,SAAS,KAAK,OAAO,IAAI,EAAE;AAChE,cAAQ,SAAS,KAAK,SAAS,MAAM,IAAI,EAAE,aAAa,OAAO,cAAc,OAAO,aAAa,OAAO,GAAG,QAAQ,KAAK,EAAE,QAAQ,WAAW,IAAI,MAAM,WAAW,OAAO,GAAG,SAAS,WAAW,QAAQ,aAAa,MAAM,MAAM,GAAG,GAAG,UAAU,MAAM;AAAA,IACzP;AAAA,IACA,QAAQ,MAAM,UAAU,IAAI,QAAQ,CAAC,KAAK,QAAQC,YAAW,KAAK,MAAM,KAAK,OAAO,CAAC,IAAI,MAAM,KAAK,GAAG,CAAC,GAAG,EAAE,SAAS,SAAS,MAAM,IAAI,CAAC,GAAG;AAC3I,UAAI,CAAC,WAAW,CAAC,OAAO,QAAQ,IAAI,EAAG,QAAO,QAAQ,MAAM,0CAA0C;AACtG,YAAM,MAAM,CAAC,OAAO,SAAS,MAAM,KAAK,IAAI,EAAE,QAAQ,OAAO,KAAK,IAAI,MAAM,KAAK,IAAI,EAAE,GAAG,OAAO,KAAK,IAAI,EAAE,KAAK;AACjH,YAAM,aAAa,IAAI,OAAO;AAC9B,YAAM,YAAY,KAAK,QAAQ,WAAW,UAAU,sBAAsB,EAAE,GAAG,WAAW,CAAC;AAC3F,cAAQ;AAAA,QACN,CAAC,aAAa;AACZ,gBAAM,gBAAgB,IAAI,WAAW,oBAAoB,SAAS;AAClE,gBAAM,EAAE,QAAQ,SAAS,IAAI;AAC7B,cAAI,OAAO,MAAM,EAAG,eAAc,SAAS,CAAC,MAAM,aAAa,OAAO,GAAG;AACzE,cAAI,OAAO,QAAQ,EAAG,eAAc,WAAW,CAAC,MAAM,aAAa,SAAS,GAAG;AAC/E,eAAK,QAAQ,WAAW,aAAa;AACrC,iBAAO;AAAA,QACT;AAAA,QACA,CAAC,QAAQ;AACP,gBAAM,cAAc,IAAI,SAAS,oBAAoB,OAAO;AAC5D,gBAAM,EAAE,QAAQ,SAAS,IAAI;AAC7B,cAAI,OAAO,MAAM,EAAG,aAAY,SAAS,CAAC,MAAM,QAAQ,OAAO,GAAG;AAClE,cAAI,OAAO,QAAQ,EAAG,aAAY,WAAW,CAAC,MAAM,QAAQ,SAAS,GAAG;AACxE,eAAK,MAAM,WAAW,WAAW;AACjC,iBAAO,QAAQ,OAAO,GAAG;AAAA,QAC3B;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAAA,IACA,QAAQ,MAAM,IAAI,QAAQ,aAAa;AACrC,aAAO,CAAC,MAAM,EAAE,IAAI,KAAK,WAAW,IAAI,KAAK,OAAO,IAAI,EAAE,GAAG,OAAO,QAAQ,WAAW;AAAA,IACzF;AAAA,IACA,WAAW,MAAM,SAAS;AACxB,iBAAW,UAAU,KAAK,OAAO,OAAO,EAAG,EAAC,CAAC,MAAM,OAAO,IAAI,OAAO,OAAO,KAAK,YAAY,YAAY,OAAO,OAAO;AAAA,IACzH;AAAA,IACA,SAAS,MAAM,QAAQ,SAAS,SAAS;AACvC,iBAAW,UAAU,KAAK,OAAO,OAAO,EAAG,EAAC,CAAC,MAAM,OAAO,IAAI,OAAO,OAAO,KAAK,YAAY,YAAY,KAAK,MAAM,IAAI,OAAO,KAAK,IAAI,OAAO;AAAA,IACjJ;AAAA,IACA,OAAO,MAAM,SAAS;AACpB,aAAO,KAAK,OAAO,OAAO,EAAE,OAAO,CAAC,WAAW,CAAC,MAAM,OAAO,IAAI,OAAO,OAAO,KAAK,YAAY,OAAO;AAAA,IACzG;AAAA,EACF;AACA,MAAI,UAAU,CAAC,aAAa,CAAC,GAAG,UAAU,kBAAkB;AAC1D,UAAM,cAAc,OAAO,EAAE,GAAG,KAAK,uBAAuB,GAAG,WAAW,IAAI,OAAO,CAAC,YAAY,UAAU,CAAC,GAAG,UAAU,YAAY,aAAa,OAAO,GAAG,SAAS,UAAU,QAAQ,SAAS,YAAY,KAAK,UAAU,aAAa,QAAQ,IAAI,SAAS,KAAK,OAAO,IAAI,EAAE,MAAM,SAAS,SAAS,OAAO,MAAM,IAAI,EAAE,GAAG,SAAS,OAAO,GAAG,MAAM,IAAI,IAAI,WAAW,EAAE,GAAG,YAAY,GAAG,GAAG,SAAS,IAAI,QAAQ,QAAQ,CAAC,EAAE,KAAK;AACta,SAAK,WAAW,CAAC,OAAO,SAAS,SAAS,MAAM,EAAE;AAClD,SAAK,SAAS,CAAC,IAAI,SAAS,WAAW,SAAS,OAAO,MAAM,IAAI,SAAS,MAAM;AAChF,eAAW,UAAU,CAAC,QAAQ,WAAW,QAAQ,OAAO,EAAG,MAAK,MAAM,IAAI,CAAC,YAAY,YAAY,SAAS,QAAQ,MAAM,aAAa,QAAQ,YAAY,OAAO;AAClK,SAAK,UAAU,CAAC,YAAY,YAAY,SAAS,QAAQ,MAAM,YAAY,OAAO;AAClF,SAAK,UAAU,CAAC,SAAS,WAAW,SAAS,QAAQ,MAAM,SAAS,MAAM;AAC1E,SAAK,UAAU,CAAC,IAAI,QAAQ,gBAAgB,SAAS,QAAQ,MAAM,IAAI,QAAQ,WAAW;AAC1F,SAAK,aAAa,CAAC,aAAa,SAAS,WAAW,MAAM,QAAQ;AAClE,SAAK,WAAW,CAAC,QAAQ,SAAS,aAAa,SAAS,SAAS,MAAM,QAAQ,SAAS,QAAQ;AAChG,SAAK,SAAS,CAAC,aAAa,SAAS,OAAO,MAAM,QAAQ;AAC1D,WAAO;AAAA,EACT;AACA,MAAI,QAAQ,QAAQ;AAEpB,MAAI,qBAAqB,CAAC,EAAE,OAAO,YAAY,SAAS,WAAW,GAAG,EAAE,OAAO,cAAc,SAAS,aAAa,GAAG,EAAE,OAAO,aAAa,SAAS,YAAY,GAAG,EAAE,OAAO,eAAe,SAAS,cAAc,GAAG,EAAE,OAAO,iBAAiB,SAAS,gBAAgB,GAAG,EAAE,OAAO,gBAAgB,SAAS,eAAe,GAAG,EAAE,OAAO,eAAe,SAAS,cAAc,GAAG,EAAE,OAAO,iBAAiB,SAAS,gBAAgB,GAAG,EAAE,OAAO,gBAAgB,SAAS,eAAe,CAAC;AAC1d,MAAI,sBAAsB,CAAC,EAAE,OAAO,QAAQ,SAAS,OAAO,GAAG,EAAE,OAAO,QAAQ,SAAS,OAAO,GAAG,EAAE,OAAO,SAAS,SAAS,QAAQ,GAAG,EAAE,OAAO,cAAc,SAAS,aAAa,GAAG,EAAE,OAAO,eAAe,SAAS,cAAc,GAAG,EAAE,OAAO,YAAY,SAAS,WAAW,GAAG,EAAE,OAAO,cAAc,SAAS,aAAa,CAAC;AACrU,MAAI,iBAAiB,CAAC,EAAE,OAAO,QAAQ,SAAS,OAAO,GAAG,EAAE,OAAO,QAAQ,SAAS,OAAO,GAAG,EAAE,OAAO,WAAW,SAAS,UAAU,GAAG,EAAE,OAAO,WAAW,SAAS,UAAU,GAAG,EAAE,OAAO,SAAS,SAAS,QAAQ,CAAC;AACtN,MAAI,wBAAwB,CAAC,EAAE,OAAO,MAAM,SAAS,KAAK,GAAG,EAAE,OAAO,SAAS,SAAS,QAAQ,GAAG,EAAE,OAAO,SAAS,SAAS,QAAQ,GAAG,EAAE,OAAO,OAAO,SAAS,MAAM,GAAG,EAAE,OAAO,OAAO,SAAS,MAAM,CAAC;AAC3M,MAAI,2BAA2B,CAAC,EAAE,OAAO,KAAK,SAAS,aAAa,GAAG,EAAE,OAAO,KAAK,SAAS,WAAW,GAAG,EAAE,OAAO,MAAM,SAAS,0BAA0B,GAAG,EAAE,OAAO,OAAO,SAAS,yBAAyB,GAAG,EAAE,OAAO,QAAQ,SAAS,kCAAkC,GAAG,EAAE,OAAO,MAAM,SAAS,QAAQ,GAAG,EAAE,OAAO,MAAM,SAAS,OAAO,GAAG,EAAE,OAAO,MAAM,SAAS,OAAO,GAAG,EAAE,OAAO,MAAM,SAAS,KAAK,GAAG,EAAE,OAAO,OAAO,SAAS,iBAAiB,GAAG,EAAE,OAAO,OAAO,SAAS,cAAc,GAAG,EAAE,OAAO,QAAQ,SAAS,gBAAgB,GAAG,EAAE,OAAO,QAAQ,SAAS,aAAa,GAAG,EAAE,OAAO,SAAS,SAAS,yBAAyB,GAAG,EAAE,OAAO,SAAS,SAAS,sBAAsB,CAAC;AA3WnrB,MAAAG,KAAA;AA4WA,MAAI,gBAAgB,OAAO,QAAQ;AACjC,SAAK,QAAQ,OAAO,KAAK,WAAW,UAAU,KAAK,UAAU;AAC7D,SAAK,SAAyB,oBAAI,IAAI;AACtC,SAAK,0BAAL,KAAK,wBAA0B,CAAC,IAAG,KAAK,oBAAL,KAAK,kBAAoB,CAAC,IAAG,KAAK,qBAAL,KAAK,mBAAqB,CAAC,IAAG,KAAK,gBAAL,KAAK,cAAgB,CAAC,IAAG,KAAK,qBAAqB,oBAAoB,KAAK,sBAAsB,qBAAqB,KAAK,iBAAiB,gBAAgB,KAAK,wBAAwB,uBAAuB,KAAK,2BAA2B;AAC/U,KAAAA,MAAA,KAAK,uBAAsB,WAA3BA,IAA2B,SAAW;AACtC,eAAK,uBAAsB,SAA3B,GAA2B,OAAS;AACpC,eAAK,uBAAsB,SAA3B,GAA2B,OAAS;AACpC,eAAK,uBAAsB,UAA3B,GAA2B,QAAU;AACrC,eAAK,uBAAsB,cAA3B,GAA2B,YAAc;AACzC,eAAK,uBAAsB,aAA3B,GAA2B,WAAa;AACxC,eAAK,uBAAsB,cAA3B,GAA2B,YAAc;AACzC,eAAK,uBAAsB,gBAA3B,GAA2B,cAAgB,CAAC,4CAA4C,KAAK,UAAU,SAAS;AAChH,eAAK,uBAAsB,iBAA3B,GAA2B,eAAiB;AAC5C,eAAK,uBAAsB,oBAA3B,GAA2B,kBAAoB;AAC/C,eAAK,uBAAsB,iBAA3B,GAA2B,eAAiB;AAC5C,eAAK,uBAAsB,qBAA3B,GAA2B,mBAAqB;AAChD,eAAK,uBAAsB,gBAA3B,GAA2B,cAAgB;AAC3C,eAAK,uBAAsB,uBAA3B,GAA2B,qBAAuB;AAClD,eAAK,uBAAsB,mBAA3B,GAA2B,iBAAmB;AAC9C,eAAK,uBAAsB,aAA3B,GAA2B,WAAa;AACxC,eAAK,uBAAsB,YAA3B,GAA2B,UAAY;AACvC,eAAK,uBAAsB,cAA3B,GAA2B,YAAc;AACzC,eAAK,uBAAsB,gBAA3B,GAA2B,cAAgB;AAC3C,eAAK,uBAAsB,UAA3B,GAA2B,QAAU;AACrC,eAAK,iBAAgB,YAArB,GAAqB,UAAY,QAAM,UAAK,iBAAgB,UAArB,GAAqB,QAAU,QAAM,UAAK,iBAAgB,YAArB,GAAqB,UAAY,QAAM,UAAK,iBAAgB,SAArB,GAAqB,OAAS;AACjJ,eAAK,kBAAiB,YAAtB,GAAsB,UAAY,CAAC,KAAK,IAAI,GAAG,KAAG,UAAK,kBAAiB,YAAtB,GAAsB,UAAY,CAAC,KAAK,KAAK,GAAG,KAAG,UAAK,kBAAiB,UAAtB,GAAsB,QAAU,CAAC,KAAK,KAAK,GAAG,KAAG,UAAK,kBAAiB,SAAtB,GAAsB,OAAS,CAAC,GAAG;AACzL,eAAK,aAAY,YAAjB,GAAiB,UAAY;AAC7B,eAAK,aAAY,UAAjB,GAAiB,QAAU;AAC3B,eAAK,aAAY,YAAjB,GAAiB,UAAY;AAC7B,eAAK,aAAY,SAAjB,GAAiB,OAAS;AAC1B,eAAK,aAAY,YAAjB,GAAiB,UAAY;AAC7B,iBAAa,kBAAkB;AAC/B,WAAO,UAAP,OAAO,QAAU,KAAK;AACtB,YAAQ,IAAI,qCAAqC,sBAAsB;AAAA,EACzE;;;AC3YO,MAAM,cAA2B;AAAA,IACtC,QAAQ;AAAA,MACN,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,MAAM,SAAS,KAAK;AAAA,QAC7B,EAAE,OAAO,OAAO,SAAS,MAAM;AAAA,QAC/B,EAAE,OAAO,WAAW,SAAS,UAAU;AAAA,MACzC;AAAA,IACF;AAAA,IACA,UAAU;AAAA,IACV,UAAU;AAAA,MACR,OAAO;AAAA,MACP,SAAS;AAAA,QACP,EAAE,OAAO,cAAc,SAAS,aAAa;AAAA,QAC7C,EAAE,OAAO,QAAQ,SAAS,wBAAwB;AAAA,QAClD,EAAE,OAAO,UAAU,SAAS,2BAA2B;AAAA,MACzD;AAAA,IACF;AAAA,IACA,SAAS;AAAA,IACT,QAAQ;AAAA,MACN,QAAQ;AAAA,MACR,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,UACP,EAAE,OAAO,MAAM,SAAS,KAAK;AAAA,UAC7B,EAAE,OAAO,OAAO,SAAS,MAAM;AAAA,UAC/B,EAAE,OAAO,QAAQ,SAAS,qBAAqB;AAAA,QACjD;AAAA,MACF;AAAA,MACA,UAAU;AAAA,IACZ;AAAA,IACA,aAAa;AAAA,IACb,kBAAkB;AAAA,IAClB,UAAU;AAAA,MACR,WAAW,CAAC,UAAU,QAAQ,MAAM;AAAA,MACpC,YAAY,CAAC,OAAO;AAAA,MACpB,aAAa,CAAC,UAAU,SAAS,SAAS;AAAA,MAC1C,mBAAmB,CAAC,SAAS,SAAS,MAAM;AAAA,MAC5C,kBAAkB,CAAC,UAAU,QAAQ,UAAU;AAAA,MAC/C,kBAAkB,CAAC,WAAW,SAAS,aAAa,WAAW,MAAM;AAAA,MACrE,kBAAkB,CAAC,OAAO,QAAQ,MAAM;AAAA,MACxC,mBAAmB,CAAC,SAAS,OAAO;AAAA,MACpC,eAAe,CAAC,MAAM,OAAO,QAAQ,UAAU,OAAO;AAAA,MACtD,gBAAgB,CAAC,OAAO,MAAM,SAAS,WAAW,MAAM;AAAA,IAC1D;AAAA,IACA,aAAa;AAAA,MACX,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,IACA,cAAc;AAAA,MACZ,OAAO;AAAA,MACP,SAAS;AAAA,IACX;AAAA,EACF;;;AC5CO,MAAM,YAAN,cAAwB,SAAkC;AAAA,IAU/D,YAAY,MAAkB,SAAS,KAAK,SAAS,OAAO;AAC1D,YAAM,MAAM,QAAQ,EAAE,SAAS,KAAK,WAAW,OAAO,OAAO,MAAM,CAAC;AARtE,0BAAU;AACV,0BAAU,eAAcC,SAAQ,CAAC,SAAmB,MAAM,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,sCAAsC,WAAW,KAAK,OAAO,aAAa,OAAO,GAAG,CAAC,+BAA0B,EAAE,GAAG,aAAa,OAAO,KAAK,YAAY,MAAM,GAAG,KAAK,OAAO,QAAQ,GAAG,EAAE,GAAG,QAAQ,KAAK,OAAO,CAAC,GAAI,EAAE,KAAK,mBAAmB,UAAU,EAAE,EAAE;AACpW,0BAAmB,OAAM,EAAE,UAAU,6BAA6B,KAAK,KAAK,OAAO,IAAI,WAAW,8BAA8B,KAAK,KAAK,OAAO,GAAG;AAgOpJ,0BAAU,WAAoB,CAAC,GAAG;AAClC,0BAAU,cAAqB;AAAA,IA1N/B;AAAA,IANA,IAAc,OAAO;AACnB,aAAO,EAAE,OAAO,KAAK,KAAK,OAAO,UAAU,KAAK,KAAK,SAAS;AAAA,IAChE;AAAA,IAMgB,QAAc;AAE5B,YAAM,oBAAqB,OAAe,qBAAsB,OAAe;AAC/E,UAAI,CAAC,kBAAmB;AACxB,WAAK,cAAc,IAAI,kBAAkB;AACzC,aAAO,OAAO,KAAK,aAAa,EAAE,YAAY,MAAM,gBAAgB,MAAM,UAAU,KAAK,cAAc,OAAO,KAAK,WAAW,SAAS,KAAK,YAAY,CAAC;AAAA,IAC3J;AAAA,IAEgB,OAAa;AAE3B,YAAM,YAAY,KAAK,KAAK,KAAK,iBAAiB,GAAG;AAErD,iBAAW,iBAAiB,SAAS,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClF,iBAAW,iBAAiB,SAAS,KAAK,kBAAkB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACnF,iBAAW,iBAAiB,WAAW,KAAK,kBAAkB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrF,iBAAW,iBAAiB,SAAS,KAAK,UAAU,EAAE,QAAQ,KAAK,QAAQ,SAAS,KAAK,CAAC;AAC1F,iBAAW,iBAAiB,aAAa,KAAK,UAAU,EAAE,QAAQ,KAAK,QAAQ,SAAS,KAAK,CAAC;AAE9F,WAAK,MAAM,MAAM,WAAW,KAAK,WAAW,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEnE,WAAK,MAAM,GAAG,aAAa,CAAC,EAAE,MAAM,MAAM,KAAK,MAAM,UAAU,UAAU,OAAO,6BAA6B,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5I,WAAK,MAAM,GAAG,SAAS,MAAM,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,OAAO,KAAK,IAAI,UAAU,EAAE,SAAS,KAAK,mBAAmB,EAAE,QAAQ,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEzK,WAAK,MAAM,MAAM,QAAQ,MAAG;AAjDhC,YAAAC;AAiDoC,gBAAAA,MAAA,KAAK,MAAM,UAAS,UAApBA,IAAoB,QAAU,CAAC,KAAK;AAAA,SAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAErH,WAAK,KAAK,MAAM,GAAG,qBAAqB,MAAM,KAAK,KAAK,SAAS,qCAAqC,KAAK,eAAe,KAAK,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE9J,WAAK,KAAK,OAAO,GAAG,yBAAyB,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvF,WAAK,KAAK,OAAO,GAAG,2BAA2B,CAAC,EAAE,MAAM,MAAO,QAAQ,KAAK,OAAO,OAAO,SAAS,CAAC,KAAK,MAAM,aAAa,KAAK,MAAM,IAAI,CAAC,KAAK,MAAM,aAAa,KAAK,KAAK,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AACzM,WAAK,KAAK,OAAO,GAAG,oCAAoC,CAAC,EAAE,MAAM,MAAM,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,OAAO,KAAK,IAAI,UAAU,EAAE,UAAU,MAAM,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AACxL,WAAK,KAAK,OAAO,GAAG,qCAAqC,CAAC,EAAE,MAAM,MAAM,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,OAAO,KAAK,IAAI,WAAW,EAAE,UAAU,MAAM,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC1L,WAAK,KAAK,OAAO,GAAG,YAAY,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,KAAK,eAAe,aAAa,EAAE,IAAI,MAAO,KAAK,OAAO,OAAO,QAAQ,MAAO,CAAC;AACtF,WAAK,KAAK,eAAe,cAAc,EAAE,IAAI,KAAK,MAAM,CAAC;AACzD,WAAK,KAAK,eAAe,eAAe,EAAE,IAAI,KAAK,OAAO,CAAC;AAC3D,WAAK,KAAK,eAAe,qBAAqB,EAAE,IAAI,MAAM,KAAK,KAAK,GAAG,EAAE,CAAC;AAC1E,WAAK,KAAK,eAAe,oBAAoB,EAAE,IAAI,KAAK,OAAO,CAAC;AAChE,WAAK,KAAK,eAAe,oBAAoB,EAAE,IAAI,KAAK,UAAU,CAAC;AACnE,WAAK,KAAK,eAAe,oBAAoB,EAAE,IAAI,MAAM,KAAK,KAAK,KAAK,MAAM,OAAO,EAAE,CAAC;AACxF,WAAK,KAAK,eAAe,qBAAqB,EAAE,IAAI,MAAM,KAAK,aAAa,KAAK,EAAE,CAAC;AACpF,WAAK,KAAK,QAAQ,QAAQ,KAAK,cAAc,IAAI,KAAK,KAAK,MAAM,MAAM,cAAc,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AAChI,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,aAAa,GAAc;AACnC,UAAI,aAAa;AACjB,UAAI,CAAC,KAAK,MAAM,MAAO,UAAS,IAAI,EAAE,aAAa,IAAI,EAAE,QAAQ,QAAQ,EAAE,EAAG,eAAc,EAAE,QAAQ,CAAC,EAAE,CAAC,EAAE;AAC5G,mBAAa,WAAW,KAAK,EAAE,YAAY;AAE3C,UAAI,cAAc,CAAC,KAAK,MAAM,WAAW;AACvC,cAAM,QAAQ,WAAM,CAAC,KAAK,OAAO,SAAS,YAAY,CAAC,GAAG,YAAY,KAAK,OAAO,OAAO,QAAQ;AACjG,YAAI,OAAO;AACT,eAAK,OAAO;AACZ,gBAAM,MAAM,WAAW,QAAQ,KAAK;AACpC,uBAAa,QAAQ,KAAK,WAAW,UAAU,MAAM,MAAM,MAAM,EAAE,KAAK,IAAI;AAAA,QAC9E;AACA,aAAK,CAAC,SAAS,CAAC,eAAe,KAAK,OAAO,SAAS,UAAU,SAAU;AAAA,MAC1E;AAEA,UAAI,CAAC,KAAK,MAAM,MAAO,MAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,aAAa,GAAG,UAAU,GAAG,CAAC,KAAK,MAAM,YAAY,YAAY,KAAK,OAAO,KAAK,OAAO,QAAQ,CAAC,OAAO,EAAE,KAAK,KAAK,kBAAkB,MAAM,KAAK,MAAM,YAAY,yBAAyB,MAAS,GAAG,KAAK,mBAAmB,IAAI,CAAC;AACxS,WAAK,KAAK,SAAS,iBAAiB,KAAK,OAAO,KAAK,OAAO,SAAS,KAAK;AAE1E,oBAAc,KAAK,QAAQ,UAAU;AAAA,IACvC;AAAA,IAEU,YAAkB;AAC1B,UAAI,KAAK,OAAQ,MAAK,OAAO,OAAO,UAAU,SAAS,KAAK,MAAM;AAAA,IACpE;AAAA,IACU,YAAY,GAAc;AAClC,UAAI,EAAE,UAAU,iBAAiB,EAAE,UAAU,sBAAuB,CAAC,KAAK,OAAO,OAAO,QAAQ,OAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,MAAM,wDAAwD;AAAA,IAClN;AAAA,IACU,aAAa,EAAE,MAAM,GAAsD;AACnF,UAAI,UAAU,OAAO;AACnB,aAAK,MAAM,YAAY;AACvB,aAAK,aAAa,MAAM,GAAG,KAAK,OAAO,QAAQ,KAAK,IAAI,SAAS,GAAG,KAAK,OAAO,QAAQ,KAAK,IAAI,QAAQ;AAAA,MAC3G,WAAW,KAAK,aAAa,EAAG,WAAU,aAAa,KAAK,MAAM,GAAG,KAAK,MAAM,MAAM,KAAK,OAAO,GAAG,KAAK,MAAM;AAAA,IAClH;AAAA,IAEO,gBAAsB;AAC3B,UAAI,CAAC,KAAK,aAAa,EAAG,CAAC,KAAK,MAAM,YAAY,OAAQ,KAAK,aAAa,MAAM,GAAG,KAAK,OAAO,QAAQ,KAAK,IAAI,SAAS,GAAG,KAAK,OAAO,QAAQ,KAAK,IAAI,QAAQ;AAAA,UAC9J,MAAK,OAAO,OAAO,UAAU,QAAQ,KAAK,OAAO,GAAG,KAAK,MAAM,KAAK,KAAK,OAAO,OAAO,UAAU,aAAa,KAAK,MAAM;AAAA,IAChI;AAAA,IACU,eAAwB;AAChC,aAAO,KAAK,KAAK,QAAQ,SAAS,KAAK,KAAK,MAAM,qBAAqB,CAAC,KAAK,KAAK,OAAO;AAAA,IAC3F;AAAA,IAEA,MAAgB,gBAAkC;AAChD,YAAMC,UAAS,MAAM,UAAU,aAAa,MAAM,EAAE,MAAM,aAAoB,CAAC,EAAE,MAAM,MAAM,IAAI,IAAI,SAAS;AAC9G,UAAIA,WAAU,aAAaA,WAAU,SAAU,QAAOA,WAAU;AAEhE,aAAO,IAAI,QAAQ,CAAC,KAAK,GAAG,KAAkB,IAAI,OAAQ,MAAM,MAAM,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,KAAK,2CAA2C,EAAE,IAAI,KAAK,IAAI,UAAU,WAAW,OAAO,SAAS,EAAE,IAAI,MAAM,UAAU,aAAa,aAAa,EAAE,OAAO,KAAK,CAAC,EAAE,KAAK,CAAC,OAAO,EAAE,UAAU,EAAE,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC,GAAG,IAAI,IAAI,EAAE,EAAE,MAAM,OAAO,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,KAAK,0CAA0C,EAAE,IAAI,KAAK,IAAI,UAAU,WAAW,OAAO,SAAS,EAAE,OAAO,KAAM,QAAQ,MAAM,IAAI,KAAK,EAAE,EAAE,CAAC,GAAG,EAAE,IAAI,KAAK,IAAI,KAAK,EAAE,GAAG,QAAQ,MAAM,IAAI,KAAK,EAAG,EAAG,CAAC,GAAG,CAAE;AAAA,IAC5lB;AAAA,IACA,MAAa,QAAuB;AAClC,YAAM,UAAU,MAAM,KAAK,cAAc;AACzC,iBAAW,CAAC,KAAK,MAAM,aAAa,KAAK,OAAO,SAAS,UAAU,gBAAgB,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,KAAK,kBAAkB,GAAG,KAAK,mBAAmB,CAAC;AACjL,UAAI;AACF,aAAK,aAAa,MAAM;AAAA,MAC1B,SAAS,GAAG;AAAA,MAAC;AAAA,IACf;AAAA,IACO,OAAa;AAClB,WAAK,MAAM,GAAG,KAAK,aAAa,MAAM;AAAA,IACxC;AAAA,IACO,SAAe;AACpB,UAAI,KAAK,OAAO,OAAO,UAAU,KAAM,QAAO,MAAM,KAAK,OAAO,OAAO,QAAQ;AAC/E,UAAI,KAAK,MAAM,UAAW;AAC1B,WAAK,MAAM,YAAY;AACvB,WAAK,aAAa;AAClB,WAAK,YAAY,GAAG,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,KAAK,kBAAkB,KAAK,GAAG,KAAK,mBAAmB,CAAC;AACvH,WAAK,KAAK,SAAS,iBAAiB,KAAK,OAAO,KAAK,OAAO,SAAS,KAAK;AAAA,IAC5E;AAAA,IACO,QAAc;AACnB,UAAI,KAAK,OAAO,OAAO,UAAU,MAAO;AACxC,UAAI,KAAK,OAAO,OAAO,UAAU,UAAW,QAAO,MAAM,KAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,WAAW,YAAY;AACvH,WAAK,MAAM,YAAY;AACvB,WAAK,aAAa;AAClB,WAAK,OAAO,QAAQ,KAAK,IAAI,SAAS,GAAG,CAAC,KAAK,OAAO,OAAO,SAAS,KAAK,OAAO,SAAS,UAAU,eAAe,KAAK,OAAO,QAAQ,KAAK,IAAI,QAAQ,IAAI,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,KAAK,kBAAkB,GAAG,KAAK,mBAAmB,IAAI,CAAC;AAAA,IACjQ;AAAA,IAEU,gBAAgB,OAAmB,SAA0B;AACrE,YAAM,MAAM,KAAK,OAAO,OAAO;AAC/B,iBAAW,UAAU,OAAO,OAAO,KAAK,KAAK,OAAO,GAAG;AACrD,cAAM,WAAW,KAAK,OAAO,SAAS,OAAO,EAAE;AAC/C,YAAI,OAAO,OAAO,mBAAmB,OAAO,OAAO,qBAAqB,OAAO,OAAO,SAAS,kBAAkB,SAAS,UAAU,UAAU,WAAM,UAAU,SAAS,GAAG,EAAG,QAAO,KAAK,KAAK,UAAU,OAAO,EAAE,GAAG,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,QAAQ,eAAe,OAAO,SAAS,OAAO,EAAE,QAAQ,EAAE,IAAI,KAAK,IAAI,UAAU,WAAW,KAAK,OAAO,SAAS,UAAU,aAAa,CAAC,GAAG;AAAA,MAC5Y;AACA,aAAO;AAAA,IACT;AAAA,IACU,QAAQ,YAAoB,UAAU,WAAW,QAAQ,UAAU,EAAE,GAAG,WAAW,OAAO,UAAU,CAAC,KAAK,MAAM,WAAiB;AACzI,UAAK,CAAC,KAAK,OAAO,oBAAoB,KAAK,gBAAgB,WAAW,OAAO,KAAM,QAAS;AAE5F,UAAI,CAAC,KAAK,OAAO,oBAAoB,KAAK,gBAAgB,aAAa,OAAO,EAAG;AAEjF,UAAI,KAAK,OAAO,KAAK,MAAM,OAAO,EAAG,QAAO,KAAK,QAAQ,KAAK,MAAM,SAAS,YAAY,SAAS,KAAK;AAEvG,YAAM,QAAQ,KAAK,cAAc;AACjC,UAAI,UAAyB,MAC3B,UAAU;AACZ,UAAI,MAAM;AACR,iBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,gBAAM,OAAO,MAAM,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,EAAG,YAAY;AACpD,cAAI,YAAY,MAAM;AACpB,sBAAU,MAAM,CAAC;AACjB;AAAA,UACF;AACA,gBAAM,QAAQ,cAAc,MAAM,OAAO;AACzC,cAAI,QAAQ,KAAK,OAAO,OAAO,YAAY,QAAQ,QAAS,CAAC,UAAU,OAAS,UAAU,MAAM,CAAC;AAAA,QACnG;AACF,UAAI,QAAS,QAAO,MAAO,KAAK,MAAM,UAAU,SAAU,KAAK,OAAO,OAAO,KAAK,KAAK,QAAQ,SAAS,YAAY,SAAS,IAAI;AAAA,eACxH,UAAU;AACjB,cAAM,OAAO,KAAK,MAAM,YAAY,MAAM,aAAa,GAAG,KAAK,MAAM,OAAO,IAAI,UAAU,IACxF,MAAM,KAAK,KAAK,YAAY,IAAI,IAAI,QAAQ,KAAK,MAAa,IAAI,IAAI;AACxE,YAAI,QAAQ,OAAW,QAAO,MAAO,KAAK,MAAM,UAAU,MAAO,KAAK,OAAO,MAAM,GAAG,KAAK,KAAK,QAAQ,MAAM,YAAY,SAAS,IAAI;AAAA,MACzI;AACA,UAAI,MAAM,QAAQ;AAChB,cAAM,YAAY,KAAK,KAAK,KAAK,iBAAiB,GAAG,WAAW,cAAgC,6BAA6B;AAC7H,YAAI,UAAW,WAAU,QAAQ,WAAW,KAAK;AAAA,MACnD;AAEA,UAAI,CAAC,KAAK,OAAO,iBAAkB,MAAK,gBAAgB,cAAc,OAAO;AAAA,IAC/E;AAAA,IACU,UAAgB;AACxB,YAAM,YAAY,KAAK,QAAQ,SAAS,IAAI,KAAK,+CAA+C,KAAK,QAAQ,IAAI,CAAC,GAAG,KAAK,GAAG,SAAS,QAAQ,KAAK,eAAe,oBAAoB,SAAS,uBAAuB,eAAe,KAAK,KAAK,OAAO,MAAM,MAAM,SAAS,WAAW,EAAE,MAAM,GAAG,EAAE,IAAI,CAAE,GAAG,GAAG,IAAI,CAAC,cAAc,EAAE,KAAK,uDAAuD,IAAI,UAClY,UAAsC,CAAC;AACzC,UAAI,KAAK,QAAQ,SAAS,EAAG,SAAQ,QAAG,IAAI,MAAM,KAAK,aAAa,KAAK;AACzE,UAAI,KAAK,aAAa,EAAG,SAAQ,QAAG,IAAI,KAAK;AAC7C,UAAI,KAAK,aAAa,KAAK,QAAQ,SAAS,EAAG,SAAQ,QAAG,IAAI,KAAK;AACnE,UAAI,KAAK,OAAO,KAAK,MAAM,OAAO,GAAG;AACnC,cAAM,QAAQ,QAAQ,KAAK,MAAa,KAAK,MAAM,OAAc,GAC/D,UAAU,MAAM,QAAQ,KAAK,GAC7B,OAAO,UAAU,UAAU,OAAO,OAClC,YAAY,KAAK,OAAO,OAAO,OAAO,UAAU,QAAS,KAAK,OAAO,OAAO,OAAO,UAAU,UAAU,SAAS,WAChH,aAAa,KAAK,OAAO,OAAO,OAAO,UAAU,QAAS,KAAK,OAAO,OAAO,OAAO,UAAU,UAAU,SAAS,UACjH,UAAU,UAAU,MAAM,KAAK,IAAI,IAAI,SAAS,IAChDC,aAAY,YAAY,yDAAyD,SAAS,WAAW,WAAW,MAAM,uDAAuD,WAAW,eAAe,YAAY,OAAO,MAAM,aAAa,gFAA2E,EAAE,WAAW,IAErU,QAAQ,SAAS,YAAY,GAAG,KAAK,OAAO,SAAS,eAAe,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,OAAO,KAAK,OAAO,SAAS,gBAAgB,MAAM,GAAG,CAAC,EAAE,IAAI,CAAC,MAAM,KAAK,OAAO,CAAC,CAAC,EAAE,KAAK,IAAI,CAAC,IAAIA,UAAS,KAAK,SAAS,WAAW,kBAAkB,KAAK,OAAO,GAAG,CAAC,KAAK,KAAK,OAAO,IAAI,CAAC,KAAKA,UAAS,KAAK,UAAU,0BAA0BA,UAAS,KAAK,kBAAkBA,UAAS;AAClZ,eAAO,KAAK,KAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,GAAG,SAAS,cAAc,KAAK,IAAI,KAAK,oBAAoB,OAAO,CAAC;AAAA,MAC7H;AACA,YAAM,QAAQ,KAAK,cAAc;AACjC,UAAI,CAAC,MAAM,OAAQ;AACnB,YAAM,YAAY;AAClB,WAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,GAAG,SAAS,iBAAiB,SAAS,WAAM,MAAM,IAAI,CAAC,MAAM,KAAK,OAAO,EAAE,MAAM,GAAG,EAAE,IAAI,CAAE,CAAC,EAAE,KAAK,UAAK,CAAC,IAAI,KAAK,oBAAoB,OAAO,CAAC;AAAA,IAC5L;AAAA,IACU,QAAQ,MAAc,YAAoB,UAAU,WAAW,QAAQ,UAAU,EAAE,GAAG,QAAQ,OAAO,WAAW,OAAa;AACrI,YAAM,QAAQ,KAAK,MAAM,YAAY,SAAS,MAAM,KAAK;AACzD,UAAI,UAAU,KAAM;AACpB,YAAM,SAAS,KAAK,OAAO,OAAO,OAAO,UAAU,QAAS,KAAK,OAAO,OAAO,OAAO,UAAU,UAAU,OAAO,UAAU;AAC3H,UAAI,UAAU,CAAC,UAAU;AACvB,cAAM,QAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,WAAW,cAAgC,MAAM,aAAa,CAAC;AAChH,YAAI,MAAO,OAAM,QAAQ,MAAM,QAAQ,KAAK,IAAI,MAAM,KAAK,IAAI,IAAI,OAAO,KAAK;AAC/E,eAAO,KAAK,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,OAAO,KAAK,IAAI,UAAU,EAAE,QAAQ,cAAc,OAAO,KAAK,EAAE,CAAC;AAAA,MACzH;AACA,cAAQ,KAAK,MAAa,MAAa,KAAK,GAAG,KAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,QAAQ,UAAU,KAAK,MAAM,GAAG,EAAE,KAAK,KAAK,CAAC,WAAW,MAAM,QAAQ,KAAK,IAAI,IAAI,MAAM,KAAK,IAAI,CAAC,MAAM,KAAK,IAAI,EAAE,IAAI,KAAK,IAAI,UAAU,WAAW,KAAK,OAAO,SAAS,UAAU,aAAa,CAAC,GAAG,KAAK,OAAO;AAAA,IAC7S;AAAA,IACU,MAAM,YAAoB,UAAU,WAAW,QAAQ,UAAU,EAAE,GAAG,MAAc,QAAQ,OAAY;AAChH,YAAM,MAAM,QAAQ,KAAK,MAAa,IAAW,GAC/C,OAAO,OAAO;AAChB,UAAI,SAAS,WAAW;AACtB,YAAI,SAAS,KAAK,OAAO,YAAa,QAAO,CAAC;AAC9C,eAAO,WAAM,KAAK,OAAO,SAAS,eAAe,YAAY,KAAK,OAAO,OAAO,QAAQ,IAAI,OAAO,WAAM,KAAK,OAAO,SAAS,gBAAgB,YAAY,KAAK,OAAO,OAAO,QAAQ,IAAI,QAAQ;AAAA,MACnM;AACA,UAAI,SAAS,UAAU;AACrB,cAAM,QAAQ,WAAW,MAAM,eAAe;AAC9C,eAAO,QAAQ,OAAO,MAAM,CAAC,CAAC,IAAI;AAAA,MACpC;AACA,UAAI,MAAM,QAAQ,GAAG,KAAK,SAAS,UAAU;AAC3C,cAAM,OAAO,KAAK,MAAM,GAAG,EAAE,IAAI,EAAG,YAAY,GAC9C,MAAM,IAAI,OAAO,oBAAoB,IAAI,cAAc,GAAG,GAC1DC,OAAM,WAAW,QAAQ,KAAK,EAAE,EAAE,KAAK;AACzC,YAAI,SAAS,CAAC,IAAI,KAAK,UAAU;AAAG,cAAI,YAAY,QAAQ,cAAc,MAAM,OAAO,IAAI,KAAK,OAAO,OAAO,SAAU,QAAO;AAAA;AAC/H,eAAOA,OAAO,SAAS,WAAWA,OAAMA,KAAI,MAAM,kBAAkB,EAAE,OAAO,OAAO,IAAK;AAAA,MAC3F;AACA,aAAO;AAAA,IACT;AAAA,IAIU,aAAa,SAAS,KAAK,OAAO,OAAO,QAAc;AAC/D,UAAI,OAAQ,CAAC,KAAK,UAAU,CAAC,KAAK,SAAS,cAAc,GAAK,KAAK,aAAa,GAAI,MAAM,MAAO,KAAK,MAAM,UAAU,cAAe;AAAA,UAChI,CAAC,KAAK,UAAU,CAAC,GAAG,GAAK,KAAK,aAAa,GAAI,MAAM,MAAO,KAAK,MAAM,UAAU,GAAI;AAAA,IAC5F;AAAA,IACU,UAAU,OAAqB;AACvC,UAAI,KAAK,QAAQ,KAAK,UAAU,MAAM,KAAK,MAAM,SAAS;AACxD,cAAM,MAAM,KAAK,QAAQ,QAAQ,KAAK,MAAM,OAAO;AACnD,YAAI,QAAQ,GAAI,MAAK,aAAa;AAAA,YAC7B,CAAC,KAAK,UAAU,KAAK,QAAQ,MAAM,GAAG,KAAK,aAAa,CAAC,GAAI,KAAK,QAAQ,KAAK,KAAK,GAAI,KAAK,aAAa,KAAK,QAAQ,SAAS;AAAA,MACvI;AACA,WAAK,MAAM,aAAa,KAAK,QAAQ;AAAA,IACvC;AAAA,IACU,SAAe;AACvB,UAAI,KAAK,aAAa,EAAG,MAAK,MAAM,UAAU,KAAK,QAAQ,EAAE,KAAK,UAAU;AAAA,IAC9E;AAAA,IACU,YAAkB;AAC1B,UAAI,KAAK,aAAa,KAAK,QAAQ,SAAS,EAAG,MAAK,MAAM,UAAU,KAAK,QAAQ,EAAE,KAAK,UAAU;AAAA,IACpG;AAAA,IACU,KAAK,MAAoB;AACjC,WAAK,MAAM,UAAU;AAAA,IACvB;AAAA,IAEU,OAAO,MAAc,QAAQ,KAAK,YAAY,GAAG,SAAS,OAAe;AACjF,aAAO,mCAAmC,SAAS,cAAc,UAAU,KAAK,KAAK,+EAA+E,IAAI;AAAA,IAC1K;AAAA,IACU,gBAAgB,GAAe,SAAS,EAAE,QAA6B;AAC/E,UAAI,CAAC,OAAO,QAAQ,MAAM,MAAM,CAAC,EAAG;AACpC,QAAE,eAAe,GAAG,EAAE,gBAAgB;AACtC,UAAI,OAAO,QAAQ,KAAM,QAAO,KAAK,KAAK,OAAO,QAAQ,IAAI;AAC7D,YAAM,MAAM,OAAO,QAAQ;AAC3B,WAAK,KAAK,KAAK,iBAAiB,GAAG,QAAQ,KAAK,EAAE,IAAI,KAAK,IAAI,SAAS,CAAC;AACzE,cAAQ,KAAK,OAAO,SAAS,YAAY,IAAI,KAAK,OAAO,IAAI,KAAK,QAAQ,GAAG;AAAA,IAC/E;AAAA,IACU,iBAAiB,GAAU,SAAS,EAAE,QAAuB,UAAU,EAAE,SAAS,aAAc,EAAoB,QAAQ,SAAS,UAAU,EAAE,SAAS,SAAe;AACjL,WAAK,SAAS,CAAC;AACf,UAAK,WAAW,OAAO,QAAQ,MAAM,aAAa,CAAC,KAAO,WAAW,OAAO,QAAQ,MAAM,cAAc,CAAC,EAAI,GAAE,eAAe,GAAG,EAAE,gBAAgB,GAAG,KAAK,OAAO,OAAO,QAAQ,MAAM,YAAY,CAAC,GAAG,cAAgC,MAAM,aAAa,CAAC,CAAC;AAAA,eACnP,WAAW,OAAO,QAAQ,MAAM,YAAY,CAAC,EAAG,GAAE,eAAe,GAAG,EAAE,gBAAgB,GAAG,KAAK,OAAO,QAA4B,QAAW,IAAI;AAAA,IAC3J;AAAA,IACU,OAAO,QAAQ,KAAK,KAAK,KAAK,iBAAiB,GAAG,WAAW,cAAgC,MAAM,aAAa,CAAC,GAAG,SAAS,OAAO,MAAM,KAAK,GAAGC,WAAU,OAAa;AACjL,UAAI,SAAS,OAAQ,MAAK,KAAK,KAAK,iBAAiB,GAAG,OAAO,OAAO,KAAK,IAAI,UAAU,EAAE,QAAgB,MAAM,OAAU,CAAC,GAAG,CAACA,WAAU,KAAK,QAAQ,KAAK,MAAM,SAAS,QAAQ,QAAW,OAAO,IAAI,IAAI,KAAK,QAAQ,QAAQ,QAAW,IAAI;AAAA,IACnP;AAAA,IACU,SAAS,GAAgB;AACjC,WAAK,MAAM,aAAc,EAAE,OAAuB,QAAQ,YAAY,KAAK,IAAI,SAAS,WAAW,KAAK,IAAI,QAAQ,KAAK,KAAK,KAAK,KAAK,SAAS,iBAAiB,KAAK,OAAO,KAAK,OAAO,SAAS,KAAK;AAAA,IAC1M;AAAA,IAEU,OAAO,MAAc,MAAM,SAAS,OAAO,QAAQ,KAAK,MAAa,IAAW,GAAY;AACpG,aAAQ,OAAO,MAAM,QAAQ,GAAG,KAAM,WAAW,KAAK,MAAa,MAAa,QAAW,GAAG;AAAA,IAChG;AAAA,IACU,gBAA0B;AAClC,aAAO,SAAS,KAAK,MAAa,KAAK,MAAM,SAAgB,EAAE,OAAO,EAAE,CAAC,EACtE,OAAO,KAAK,KAAK,WAAW,EAC5B,KAAK,CAAC,GAAG,MAAM,EAAE,cAAc,CAAC,CAAC;AAAA,IACtC;AAAA,IACU,mBAAmB,YAAY,OAAqB;AAC5D,YAAM,UAAsC,EAAE,CAAC,KAAK,MAAM,QAAQ,WAAM,QAAG,GAAG,MAAO,KAAK,MAAM,QAAQ,CAAC,KAAK,MAAM,MAAO;AAC3H,aAAO,EAAE,IAAI,KAAK,IAAI,UAAU,MAAM,mBAAO,UAAU,KAAK,MAAM,YAAY,KAAK,OAAO,YAAY,QAAQ,KAAK,OAAO,aAAa,OAAO,WAAW,YAAY,KAAK,OAAO,SAAS,UAAU,eAAe,OAAO,aAAa,MAAM,aAAa,OAAO,SAAS,SAAS,CAAC,YAAsB,CAAC,YAAY,KAAK,OAAO,OAAO,QAAQ,QAAQ,MAAM,QAAW,QAAQ,KAAK,OAAO;AAAA,IACjY;AAAA,IACU,oBAAoB,SAAgD;AAC5E,aAAO,EAAE,IAAI,KAAK,IAAI,WAAW,MAAM,UAAK,UAAU,KAAK,OAAO,aAAa,OAAO,WAAW,OAAO,aAAa,MAAM,aAAa,OAAO,WAAW,QAAQ,SAAS,SAAS,CAAC,YAAY,CAAC,WAAW,KAAK,MAAM,GAAG,QAAQ,KAAK,OAAO;AAAA,IACjP;AAAA,IACU,kBAAkB,OAAO,MAAM,YAAY,gBAAgB,aAAa,QAAQ,KAAK,OAAO,KAAK,OAAO,QAAQ,CAAC,oBAAoB,QAAQ,MAAc;AACnK,aAAO,OAAO,GAAG,SAAS,IAAI,UAAU,KAAK,QAAQ,YAAY;AAAA,IACnE;AAAA,IAEgB,YAAkB;AAChC,WAAK,KAAK,GAAG,MAAM,UAAU;AAAA,IAC/B;AAAA,EACF;AAzSE,gBADW,WACY,YAAW;AAClC,gBAFW,WAEY,SAAQ;AAySjC,MAAM,QAAQ,CAAC,WAAmB,oBAAoB,MAAM;;;ACrTrD,MAAM,eAAsC;AAAA,IACjD,KAAK;AAAA,IACL,KAAK;AAAA,IACL,MAAM;AAAA,EACR;;;ACGO,MAAM,aAAN,cAAyB,eAA0C;AAAA,IAaxE,YAAY,MAAkB,SAAS,KAAK,SAAS,QAAQ;AAC3D,YAAM,MAAM,QAAQ,EAAE,UAAU,EAAE,CAAC;AAXrC,0BAAU;AACV,0BAAU,cAAa;AACvB,0BAAU;AA+DV,0BAAU,iBAAgB,MAAY;AACpC,aAAK,OAAO,MAAM;AAClB,aAAK,MAAM,SAAS,UAAU,KAAK,MAAM,MAAM,gBAAgB,CAAC,MAAM,KAAK,KAAK,KAAK,oBAAoB,GAAG,OAAO,CAAC,IAAI,gBAAgB,UAAU,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,MAC9K;AACA,0BAAU,qBAAoB,MAAY;AACxC,aAAK,eAAe,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,UAAU,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,IAAI;AAAA,MACpH;AACA,0BAAU,uBAAsB,MAAY;AAC1C,aAAK,eAAe,EAAE,KAAK,KAAK,KAAK,eAAe,GAAG,UAAU,UAAU,IAAI,KAAK,OAAO,IAAI,KAAK,KAAK,OAAO,KAAK;AAAA,MACvH;AAEA,0BAAU,4BAA2B,MAAY;AAC/C,QAAC,KAAK,MAAM,QAAQ,SAAS,GAAI,KAAK,KAAK,cAAc,KAAK,MAAM,MAAM,UAAU,KAAK,MAAM,QAAQ,SAAS,KAAK,OAAO;AAAA,MAC9H;AAlEE,WAAK,iBAAiB;AAAA,IACxB;AAAA,IAVA,IAAc,QAAgB;AAC5B,aAAO,eAAe,eAAe;AAAA,IACvC;AAAA,IACA,IAAc,YAAY;AACxB,aAAO;AAAA,IACT;AAAA,IAOgB,QAAc;AAC5B,WAAK,KAAK,MAAM,oBAAoB,KAAK,aAAa,IAAI,KAAK,KAAK,MAAM,KAAK,qBAAqB,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAChJ;AAAA,IAEgB,OAAa;AAE3B,YAAM,SAAS,KAAK,MAAM,OAAO,UAAU,KAAK,MAAM,MAAM;AAC5D,WAAK,MAAM,WAAW,MAAM,KAAK,OAAO,KAAK,QAAQ,KAAK,OAAO,GAAG;AACpE,WAAK,eAAe,KAAK,oBAAoB,KAAK,MAAM,MAAM,SAAS;AACvE,WAAK,MAAM,OAAO,SAAS,KAAK,eAAe,IAAI,KAAK,MAAM;AAE9D,WAAK,MAAM,QAAQ,iBAAiB,gBAAgB,KAAK,0BAA0B,EAAE,SAAS,MAAM,QAAQ,KAAK,OAAO,CAAC,GAAG,KAAK,yBAAyB;AAE1J,WAAK,MAAM,IAAI,iBAAiB,CAAC,MAAM,MAAM,KAAK,eAAe,IAAI,KAAK,OAAO,KAAK,GAAG,KAAK,OAAO,GAAG,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClI,WAAK,MAAM,IAAI,gBAAgB,CAAC,MAAO,KAAK,KAAK,cAAc,MAAM,KAAK,eAAe,aAAa,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEjI,WAAK,MAAM,MAAM,QAAQ,MAAG;AA3ChC,YAAAC,KAAAC,KAAAC;AA2CqC,gBAAAF,MAAA,KAAK,MAAM,UAAS,WAApBA,IAAoB,SAAW,KAAK,KAAK,cAAcC,MAAA,KAAK,MAAM,UAAS,UAApBA,IAAoB,QAAU,KAAK,KAAK,cAAcC,MAAA,KAAK,MAAM,UAAS,gBAApBA,IAAoB,cAAgB,KAAK,KAAK;AAAA,SAAc,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE7O,WAAK,MAAM,GAAG,iBAAiB,KAAK,oBAAoB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC9I,WAAK,MAAM,GAAG,gBAAgB,KAAK,mBAAmB,EAAE,SAAS,MAAM,MAAM,KAAK,KAAK,QAAQ,OAAO,UAAU,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC5I,WAAK,MAAM,GAAG,gBAAgB,CAAC,MAAM,KAAK,kBAAkB,EAAE,KAAK,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE5H,WAAK,KAAK,OAAO,GAAG,uBAAuB,CAAC,MAAM,KAAK,UAAU,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC9G,WAAK,KAAK,OAAO,GAAG,uBAAuB,CAAC,MAAM,KAAK,UAAU,EAAE,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE9G,WAAK,KAAK,eAAe,QAAQ,EAAE,IAAI,KAAK,eAAe,UAAU,EAAE,OAAO,QAAQ,EAAE,CAAC;AACzF,WAAK,KAAK,eAAe,YAAY,EAAE,IAAI,KAAK,mBAAmB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACnG,WAAK,KAAK,eAAe,cAAc,EAAE,IAAI,KAAK,qBAAqB,UAAU,EAAE,OAAO,UAAU,EAAE,CAAC;AACvG,YAAM,KAAK;AAAA,IACb;AAAA,IAEU,mBAAmB,GAAuC,SAAS,KAAK,cAAc,EAAE,OAAa;AAC7G,UAAI,EAAE,SAAU;AAChB,UAAI,OAAQ,MAAK,YAAY;AAC7B,WAAK,cAAc,EAAE,OAAO,MAAM;AAClC,WAAK,KAAK,cAAc,KAAK,UAAU,KAAK,gBAAiB,EAAE,QAAQ,MAAO,GAAG,KAAK,OAAO,IAAI;AACjG,UAAI,CAAC,UAAU,EAAE,QAAQ,EAAG,MAAK,MAAM,SAAS,eAAe;AAC/D,UAAI,KAAK,KAAK,WAAY,MAAK,MAAM,MAAM,SAAS,KAAK,eAAe,EAAE;AAAA,IAE5E;AAAA,IAEU,kBAAkB,GAAsC,SAAS,KAAK,eAAe,EAAE,OAAa;AAC5G,UAAI,EAAE,SAAU;AAChB,UAAI,OAAQ,MAAK,aAAa;AAAA,eACrB,KAAK,MAAM,MAAM,UAAU,EAAE,SAAS,CAAC,CAAC,KAAK,MAAM,MAAM,OAAQ,QAAO,EAAE,QAAQ,KAAK,IAAI;AACpG,WAAK,eAAe,EAAE,OAAO,MAAM;AACnC,WAAK,MAAM,MAAM,QAAQ,EAAE;AAAA,IAE7B;AAAA,IAiBU,eAAqB;AAC7B,UAAI,KAAK,cAAc,2BAA2B,KAAK,MAAM,OAAO,MAAM,cAAe;AACzF,WAAK,WAAW,KAAK,MAAM,QAAQ;AACnC,YAAM,MAAM,KAAK,MAAM,QAAQ;AAC/B,UAAI,IAAK,CAAC,IAAI,UAAU,QAAQ,KAAO,IAAI,KAAK,QAAQ,IAAM,IAAI,MAAM,QAAQ,IAAM,IAAI,OAAO,QAAQ,MAAS,IAAI,QAAQ,QAAQ;AACtI,WAAK,aAAa;AAClB,UAAI,KAAK,KAAK,WAAY,MAAK,UAAU,KAAK,gBAAiB,KAAK,MAAM,MAAM,SAAS,MAAO,GAAG,KAAK,OAAO,IAAI;AAAA,IACrH;AAAA,IACU,kBAAwB;AAChC,WAAK,MAAM,QAAQ,SAAS,MAAM,IAAK,KAAK,UAAU,MAAM,SAAS,KAAK,IAAK,KAAK,CAAC;AACrF,WAAK,MAAM,QAAQ,wBAAwB,WAAW,GAAG,KAAK,UAAU,WAAW;AACnF,WAAK,aAAa;AAAA,IACpB;AAAA,IAEmB,YAAkB;AACnC,WAAK,gBAAgB,GAAG,MAAM,UAAU;AAAA,IAC1C;AAAA,EACF;AAnGE,gBADW,YACY,YAAW;AAClC,gBAFW,YAEY,SAAQ;;;ACXjC;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,kBAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,gBAAAC;AAAA,IAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACEO,MAAM,oBAAsC;AAAA,IACjD,OAAO;AAAA,IACP,KAAK;AAAA,IACL,KAAK;AAAA,IACL,OAAO;AAAA,IACP,cAAc;AAAA,IACd,MAAM;AAAA,IACN,OAAO;AAAA,MACL,MAAM;AAAA,MACN,UAAU;AAAA,MACV,QAAQ;AAAA,QACN,OAAO;AAAA,QACP,SAAS;AAAA,MACX;AAAA,IACF;AAAA,IACA,OAAO;AAAA,MACL,UAAU;AAAA,MACV,WAAW;AAAA,IACb;AAAA,IACA,SAAS;AAAA,IACT,SAAS;AAAA,IACT,UAAU;AAAA,IACV,UAAU;AAAA,IACV,MAAM,CAAC;AAAA,IACP,OAAO,CAAC;AAAA,EACV;;;AChBO,MAAM,aAAN,cAAoH,cAAuD;AAAA,IAkBhL,YAAY,MAAkB,QAA0BC,QAAwB;AAC9E,YAAM,MAAM,SAAS,UAAU,gBAAgB,iBAAiB,GAAG,MAAM,GAAkC,EAAE,WAAW,OAAO,YAAY,OAAO,aAAa,OAAO,GAAGA,OAAM,CAAQ,CAAC;AAhB1L,0BAAO;AACP,0BAAO;AACP,0BAAO,UAA4B,CAAC;AACpC,0BAAO;AACP,0BAAO;AACP,0BAAO,cAAa;AACpB,0BAAO,SAAQ;AACf,0BAAU;AACV,0BAAU,cAAa;AACvB,0BAAU,gBAAe;AACzB,0BAAU,mBAAkB;AAC5B,0BAAU,oBAAmB;AAC7B,0BAAU,wBAAsC;AAChD,0BAAU,MAAyB;AAwHnC,0BAAQ;AACR,0BAAQ;AAAA,IArHR;AAAA,IAEgB,SAAS;AAEvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,6BAA6B,UAAU,GAAG,MAAM,SAAS,CAAC;AACtG,WAAK,cAAc,SAAS,OAAO,EAAE,WAAW,+BAA+B,CAAC;AAChF,WAAK,eAAe,SAAS,OAAO,EAAE,WAAW,gCAAgC,CAAC;AAClF,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,wBAAwB,CAAC;AACrE,WAAK,YAAY,SAAS,OAAO,EAAE,WAAW,0BAA0B,CAAC;AAEzE,aAAO,KAAK,GAAG,OAAO,KAAK,aAAa,KAAK,cAAc,KAAK,SAAS,KAAK,SAAS,GAAG,KAAK;AAAA,IACjG;AAAA,IAEgB,OAAa;AAE3B,WAAK,OAAO,KAAK,GAAG,sBAAsB;AAE1C,WAAK,GAAG,iBAAiB,eAAe,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvF,WAAK,GAAG,iBAAiB,WAAW,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/E,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,SAAS,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC3F,WAAK,GAAG,iBAAiB,aAAa,MAAO,KAAK,OAAO,KAAK,GAAG,sBAAsB,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAClH,WAAK,GAAG,iBAAiB,aAAa,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/E,iBAAW,KAAK,CAAC,cAAc,YAAY,aAAa,EAAG,MAAK,GAAG,iBAAiB,GAAG,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEnI,WAAK,MAAM,MAAM,aAAa,CAAC,UAAW,QAAS,KAAK,KAAK,QAAQ,GAAG,KAAK,OAAO,KAAK,QAAQ,IAAK,KAAK,MAAM,KAAK,OAAO,MAAM,OAAO,MAAM,KAAK,EAAG,GAAI,KAAK,KAAK,KAAM,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEvM,WAAK,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,MAAM,KAAK,GAAG,UAAU,OAAO,gCAAgC,CAAC,CAAC,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrI,WAAK,MAAM,GAAG,aAAa,CAAC,EAAE,MAAM,MAAM,KAAK,GAAG,UAAU,OAAO,+BAA+B,CAAC,CAAC,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AACnI,WAAK,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,MAAM,KAAK,GAAG,UAAU,OAAO,kCAAkC,CAAC,CAAC,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExI,WAAK,OAAO,IAAI,SAAS,CAAC,UAAU,QAAQ,OAAO,KAAK,MAAM,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExF,WAAK,OAAO,GAAG,SAAS,CAAC,EAAE,MAAM,MAAO,KAAK,GAAG,YAAY,OAAS,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACxG,WAAK,OAAO,GAAG,OAAO,CAAC,EAAE,MAAM,MAAO,KAAK,GAAG,eAAe,OAAO,KAAM,GAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACjH,WAAK,OAAO,GAAG,OAAO,CAAC,EAAE,MAAM,MAAO,KAAK,GAAG,eAAe,OAAO,KAAM,GAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACjH,WAAK,OAAO,MAAM,SAAS,KAAK,SAAS,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC5E,WAAK,OAAO,MAAM,gBAAgB,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1F,WAAK,OAAO,GAAG,WAAW,CAAC,EAAE,MAAM,MAAM,KAAK,GAAG,gBAAgB,gBAAgB,CAAC,CAAC,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC9H,WAAK,OAAO,GAAG,YAAY,CAAC,EAAE,MAAM,MAAM,KAAK,GAAG,gBAAgB,YAAY,CAAC,CAAC,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC3H,WAAK,OAAO,GAAG,YAAY,CAAC,EAAE,MAAM,MAAM,KAAK,GAAG,gBAAgB,YAAY,CAAC,CAAC,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC3H,WAAK,OAAO,GAAG,QAAQ,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,SAAS,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAClH,WAAK,OAAO,GAAG,SAAS,CAAC,EAAE,eAAe,EAAE,MAAM,EAAE,MAAM,KAAK,UAAU,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEpH,oBAAc,KAAK,IAAI,MAAM,KAAK,KAAK,SAAS,GAAG,KAAK,OAAO,KAAK,YAAY,KAAK,cAAc,IAAI,KAAK,GAAG,KAAK,MAAM;AAAA,IAC5H;AAAA,IACU,MAAM,OAAe,SAAS,OAAgB;AACtD,aAAO,KAAK,YAAY,CAAC,SAAU,KAAK,OAAO,QAAQ,QAAS,KAAK,QAAQ,KAAK,GAAG,QAAQ;AAAA,IAC/F;AAAA,IACA,IAAW,WAAoB;AAC7B,aAAO,CAAC,KAAK,OAAO,YAAY,CAAC,KAAK,OAAO;AAAA,IAC/C;AAAA,IAEU,QAAQ,OAAqB;AACrC,WAAK,UAAU,KAAK,SAAS,KAAK,YAAY,KAAK,GAAG,OAAO,MAAM,GAAG,KAAK,WAAW,SAAS,KAAK;AACpG,UAAI,CAAC,KAAK,MAAM,UAAW,MAAK,GAAG,eAAe,OAAO,KAAK;AAAA,IAChE;AAAA,IACU,eAAe,OAAqB;AAC5C,WAAK,WAAW,WAAW,KAAK,GAAG,KAAK,OAAO,YAAY,KAAK,UAAU,KAAK,WAAW,KAAK,YAAY,KAAK,GAAG,OAAO,EAAE,KAAK,MAAM,cAAc,CAAC,KAAK,MAAM,aAAa,SAAS,OAAO,KAAK,OAAO,GAAI,KAAK,UAAU,aAAa,KAAK,OAAO,gBAAgB,OAAO,KAAK,OAAO,cAAc,KAAK,CAAC,IAAI,GAAG,KAAK,MAAM,KAAK,CAAC,MAAM,IAAI,KAAK,cAAc,KAAK,GAAG,SAAS,EAAE,GAAG,KAAK;AAAA,IAC/X;AAAA,IAEU,kBAAkB,GAAuB;AACjD,UAAI,KAAK,MAAM,aAAa,KAAK,OAAO,YAAY,KAAK,OAAO,SAAU;AAC1E,WAAK,MAAM,YAAY;AACvB,WAAK,GAAG,kBAAkB,EAAE,SAAS;AACrC,YAAM,IAAI,UAAU,KAAK,EAAE,EAAE,iBAAiB,KAAK,EAAE;AACrD,MAAC,KAAK,aAAa,EAAE,YAAY,SAAS,UAAU,GAAK,KAAK,QAAQ,EAAE,cAAc;AACtF,MAAC,KAAK,OAAO,KAAK,GAAG,sBAAsB,GAAK,KAAK,aAAa,KAAK,OAAO,CAAC,GAAK,KAAK,eAAe,KAAK,kBAAkB,KAAK,YAAY;AAChJ,gBAAU,KAAK,EAAE,EAAE,iBAAiB,eAAe,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,KAAK,YAAY,CAAC;AACjH,gBAAU,KAAK,EAAE,EAAE,iBAAiB,aAAa,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC,GAAG,UAAU,KAAK,EAAE,EAAE,iBAAiB,iBAAiB,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACjM;AAAA,IAEU,gBAAsB;AAC9B,UAAI,CAAC,KAAK,MAAM,UAAW;AAC3B,WAAK,MAAM,YAAY,KAAK,MAAM,aAAa;AAC/C,WAAK,KAAK,cAAc,GAAG,KAAK,OAAO,KAAK,UAAU;AACtD,WAAK,MAAM,KAAK,YAAY,KAAK,MAAM,cAAc,KAAK,eAAe,KAAK,eAAe,GAAG,KAAK,MAAM,WAAW;AACtH,WAAK,eAAe,GAAG,KAAK,eAAe;AAC3C,WAAK,mBAAmB;AACxB,gBAAU,KAAK,EAAE,EAAE,oBAAoB,eAAe,KAAK,WAAW;AACtE,gBAAU,KAAK,EAAE,EAAE,oBAAoB,aAAa,KAAK,aAAa,GAAG,UAAU,KAAK,EAAE,EAAE,oBAAoB,iBAAiB,KAAK,aAAa;AAAA,IACrJ;AAAA,IACU,iBAAuB;AAC/B,UAAI,CAAC,KAAK,MAAM,WAAY;AAC5B,WAAK,MAAM,aAAa;AACxB,OAAC,KAAK,MAAM,aAAa,KAAK,KAAK,cAAc,GAAG,KAAK,OAAO,KAAK,UAAU;AAAA,IACjF;AAAA,IAEU,kBAAwB;AAChC,UAAI,KAAK,oBAAoB,KAAK,MAAM,eAAe,KAAK,qBAAsB;AAClF,WAAK,MAAM,cAAc;AACzB,WAAK,uBAAuBC,YAAW,MAAM,KAAK,eAAe,KAAK,GAAG,KAAK,OAAO,MAAM,OAAO,SAAS,KAAK,MAAM;AAAA,IACxH;AAAA,IACU,eAAe,QAAQ,MAAY;AAC3C,WAAK,mBAAmB,KAAK,MAAM,cAAc;AACjD,mBAAa,KAAK,oBAAqB;AACvC,UAAI,MAAO,MAAK,uBAAuB;AAAA,IACzC;AAAA,IAEU,YAAY,GAAoC;AACxD,UAAI,KAAK,OAAO,YAAY,KAAK,OAAO,SAAU;AAClD,WAAK,KAAK,QAAQ,GAAG,KAAK,OAAO,KAAK,YAAY,MAAM;AAnI5D,YAAAC;AAoIM,YAAI,KAAK,WAAW,EAAE,WAAW,KAAK,WAAW,EAAE,QAAS;AAC5D,QAAC,KAAK,SAAS,EAAE,SAAW,KAAK,SAAS,EAAE;AAC5C,SAAAA,MAAA,KAAK,OAAM,eAAXA,IAAW,aAAe;AAC1B,cAAM,YAAY,KAAK,aAAa,KAAK,KAAK,SAAS,KAAK,KAAK,OAC/D,WAAW,KAAK,OAAO,CAAC,GACxB,MAAO,KAAK,kBAAkB,MAAM,GAAG,CAAC,KAAK,MAAM,aAAa,KAAK,OAAO,MAAM,WAAW,WAAW,KAAK,eAAe,WAAW,KAAK,YAAY,CAAC,GACzJ,QAAQ,KAAK,YAAY,GAAG;AAC9B,aAAK,OAAO,eAAe;AAC3B,YAAI,KAAK,MAAM,WAAW;AACxB,WAAC,KAAK,OAAO,MAAM,OAAO,KAAK,UAAU,KAAK,SAAS,KAAK,OAAO,MAAM,IAAI,KAAK,MAAM,KAAK;AAC7F,eAAK,IAAI,MAAM,KAAK,YAAY,IAAI,KAAK,OAAO,MAAM,OAAO,QAAQ,YAAY,KAAK,gBAAgB,IAAI,KAAK,eAAe;AAAA,QAChI;AACA,aAAK,QAAQ,GAAG,GAAG;AAAA,MACrB,CAAC;AAAA,IACH;AAAA,IAGU,QAAQC,KAA+B,MAAoB;AAAA,IAAC;AAAA;AAAA,IAE5D,YAAY,GAAqB;AACzC,UAAI,KAAK,OAAO,MAAM,SAAU;AAChC,QAAE,eAAe,GAAG,EAAE,yBAAyB;AAC/C,YAAM,YAAY,KAAK,aAAa,UAAU,KAAK,EAAE,EAAE,cAAc,UAAU,KAAK,EAAE,EAAE,YACtF,MAAM,MAAM,GAAG,KAAK,IAAI,CAAC,EAAE,MAAM,GAAG,YAAY,KAAK,OAAO,MAAM,SAAS,KAAK,YAAY,KAAK,OAAO,MAAM,YAC9G,QAAQ,KAAK,OAAO,SAAS,CAAC,EAAE,UAAU,IAAI,MAAM,CAAC,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO;AAC7F,WAAK,MAAM,KAAK;AAAA,IAClB;AAAA,IACU,cAAc,GAAwB;AAC9C,YAAM,MAAM,EAAE,KAAK,YAAY;AAC/B,UAAI,CAAC,aAAa,aAAa,cAAc,SAAS,EAAE,SAAS,GAAG,GAAG;AACrE,UAAE,eAAe,GAAG,EAAE,yBAAyB;AAC/C,cAAM,QAAQ,EAAE,WAAW,IAAI,GAC7B,YAAY,CAAC,aAAa,WAAW,EAAE,SAAS,GAAG,IAAI,KAAK;AAC9D,aAAK,MAAM,KAAK,OAAO,QAAQ,YAAY,QAAQ,KAAK,OAAO,IAAI;AAAA,MACrE;AAAA,IACF;AAAA,IAEU,eAAqB;AAC7B,WAAK,OAAO,KAAK,GAAG,sBAAsB;AAC1C,YAAM,MAAM,KAAK,YAAY;AAC7B,WAAK,UAAU,KAAK,SAAS,KAAK,OAAO,MAAM,GAAG,KAAK,WAAW,SAAS,KAAK,OAAO,KAAK,GAAG,KAAK,OAAO,WAAW,KAAK,UAAU,KAAK,WAAW,KAAK,OAAO,QAAQ,KAAK,OAAO;AAAA,IACvL;AAAA,IAEU,YAAY,QAAQ,KAAK,OAAO,OAAO,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,KAAa;AAClG,aAAO,SAAS,QAAQ,KAAK,OAAO,OAAO,QAAQ;AAAA,IACrD;AAAA,IACU,YAAY,KAAqB;AACzC,aAAO,OAAO,KAAK,OAAO,MAAM,KAAK,OAAO,OAAO,KAAK,OAAO;AAAA,IACjE;AAAA,IACU,cAAc,QAAQ,KAAK,OAAO,OAAoC;AAC9E,eAAS,IAAI,GAAG,MAAM,KAAK,OAAO,QAAQ,IAAI,KAAK,KAAK;AACtD,cAAM,IAAI,KAAK,OAAO,CAAC;AACvB,YAAI,SAAS,EAAE,SAAS,SAAS,EAAE,IAAK,QAAO;AAAA,MACjD;AAAA,IACF;AAAA,IACU,OAAO,GAAsC;AACrD,YAAM,IAAI,KAAK,cAAc,EAAE,UAAU,KAAK,KAAK,OAAO,KAAK,KAAK,UAAU,EAAE,UAAU,KAAK,KAAK,QAAQ,KAAK,KAAK;AACtH,aAAO,MAAM,GAAG,KAAK,QAAQ,IAAI,IAAI,GAAG,CAAC;AAAA,IAC3C;AAAA,IAEO,UAAU,IAAiB,KAAa,SAAS,OAAO,WAA6B,OAAO,SAAS,IAAU;AACpH,YAAM,MAAM,KAAK,aAAa,KAAK,MAAM,SAAS,KAAK,MAAM,OAC3D,MAAM,YAAY,OAAO,KAAK,aAAa,OAAO,eAAe,OAAO,eAAe,IAAI,MAAM;AACnG,YAAM,aAAa,SAAS,MAAM,OAAO,IAAI,MAAM,KAAK;AACxD,YAAM,QAAQ,OAAQ,CAAC,UAAU,QAAQ,IAAK,GAAG,MAAM,KAAK,KAAK,IAAI,GAAG,IAAI,GAAG,MAAM;AACrF,UAAI,OAAQ,MAAK,cAAe,GAAG,MAAM,YAAY,OAAS,GAAG,MAAM,aAAa,OAAS,GAAG,MAAM,aAAa,OAAS,GAAG,MAAM,YAAY;AAAA,UAC5I,MAAK,cAAe,GAAG,MAAM,gBAAgB,OAAS,GAAG,MAAM,mBAAmB,OAAS,GAAG,MAAM,mBAAmB,OAAS,GAAG,MAAM,gBAAgB;AAAA,IAEhK;AAAA,IACU,WAAW,KAA6E,OAAqB;AACrH,eAAS,IAAI,GAAG,MAAM,KAAK,OAAO,QAAQ,IAAI,KAAK,KAAK;AACtD,cAAM,IAAI,KAAK,OAAO,CAAC;AACvB,aAAK,UAAU,EAAE,GAAG,GAAI,MAAM,IAAI,QAAQ,EAAE,SAAS,EAAE,MAAM,CAAC,KAAK,GAAG,IAAI,GAAG,EAAE,GAAG,EAAG,MAAM,YAAY,iCAAiC,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC;AACvK,UAAE,GAAG,UAAU,OAAO,mBAAmB,GAAG,WAAW,SAAS,EAAE,SAAS,SAAS,EAAE,GAAG;AAAA,MAC3F;AAAA,IACF;AAAA,IACU,SAAS,OAAO,KAAK,OAAO,MAAY;AAChD,WAAK,YAAY,YAAY;AAC7B,WAAK,SAAS,CAAC;AACf,YAAM,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO,KAC1C,QAAQ,KAAK,SAAS,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AACnD,UAAI,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,KAAK,OAAO,OAAO,MAAM,CAAC,EAAE,SAAS,KAAK,OAAO,MAAM,KAAK,IAAI,OAAO,OAAO,QAAQ,IAAI,EAAG,OAAM,CAAC,EAAE,QAAQ,KAAK,OAAO;AAAA,eACtJ,CAAC,MAAM,UAAU,MAAM,CAAC,EAAE,QAAQ,KAAK,OAAO,IAAK,OAAM,QAAQ,EAAE,OAAO,KAAK,OAAO,KAAK,OAAO,GAAG,CAAC;AAC/G,UAAI,MAAM,MAAM,SAAS,CAAC,EAAE,QAAQ,KAAK,OAAO,IAAK,OAAM,KAAK,EAAE,OAAO,KAAK,OAAO,KAAK,OAAO,GAAG,CAAC;AACrG,YAAM,WAAW,SAAS,uBAAuB;AACjD,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,MAAM,GAAG,KAAK;AAEpD,cAAM,QAAQ,MAAM,CAAC,GAAG,MAAM,MAAM,IAAI,CAAC,GAAG,OAAO,IAAI,QAAQ,MAAM;AACrE,YAAI,QAAQ,EAAG;AACf,cAAM,KAAK,SAAS,OAAO,EAAE,WAAW,wBAAwB,GAAG,QAAW,EAAE,SAAS,kCAAkC,MAAM,QAAQ,KAAK,OAAO,OAAO,KAAK,IAAI,CAAC,GACpK,QAAQ,EAAE,MAAM,SAAS,OAAO,EAAE,WAAW,+CAA+C,CAAC,GAAG,SAAS,SAAS,OAAO,EAAE,WAAW,kDAAkD,CAAC,GAAG,OAAO,SAAS,OAAO,EAAE,WAAW,gDAAgD,CAAC,EAAE;AACrR,aAAK,UAAU,IAAI,OAAO,OAAO,IAAI,GAAG,SAAS,QAAQ,GAAG,OAAO,MAAM,MAAM,MAAM,SAAS,MAAM,KAAK,GAAG,GAAG,GAAG,KAAK,OAAO,KAAK,EAAE,OAAO,MAAM,OAAO,KAAK,IAAI,OAAO,OAAO,MAAM,OAAO,MAAM,IAAI,GAAG,MAAM,CAAC;AAAA,MACnN;AACA,WAAK,YAAY,OAAO,QAAQ,GAAG,KAAK,QAAQ,KAAK,OAAO,KAAK,GAAG,KAAK,eAAe,KAAK,OAAO,YAAY;AAAA,IAClH;AAAA,IACU,UAAU,QAAQ,KAAK,OAAO,OAAa;AACnD,WAAK,aAAa,YAAY;AAC9B,YAAM,MAAqB,CAAC,GAC1B,QAAQ,KAAK,OAAO,MAAM,KAAK,OAAO;AACxC,UAAI,SAAS,EAAG;AAChB,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,KAAK;AAChD,cAAM,IAAI,MAAM,CAAC,GACf,KAAK,SAAS,OAAO,EAAE,WAAW,wCAAwC,MAAM,CAAC,EAAE,QAAQ,MAAM,SAAS,OAAO,MAAM,CAAC,EAAE,SAAS,GAAG,EAAE,KAAK,GAAG,EAAE,OAAO,EAAE,MAAM,EAAE,QAAQ,IAAI,MAAM,EAAE,GAAG,KAAK,EAAE,SAAS,GAAG,MAAS;AACxN,aAAK,UAAU,KAAK,EAAE,QAAQ,KAAK,OAAO,OAAO,OAAO,KAAK,GAAG,KAAK,UAAU,IAAI,EAAE,OAAO,EAAE,MAAM,EAAE,SAAS,QAAQ,GAAG,IAAI,GAAG,IAAI,KAAK,EAAE;AAAA,MAC9I;AACA,WAAK,aAAa,OAAO,GAAG,GAAG;AAAA,IACjC;AAAA,EACF;AAlOE,gBAFW,YAEY,iBAAwB;;;ACR1C,MAAMC,UAAN,cAAqB,cAA4D;AAAA,IAGtE,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,oBAAoB,WAAW,mQAAmQ,CAAC;AAAA,IACzV;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,OAAO;AAAA,IACvD;AAAA,EACF;AAVE,gBADWA,SACK,iBAAgB;;;ACM3B,MAAM,eAAN,cAA2B,cAAkE;AAAA,IAA7F;AAAA;AAEL,0BAAO,UAAS;AAChB,0BAAU,WAA0B;AACpC,0BAAU,gBAAqC;AAC/C,0BAAU,eAAc;AACxB,0BAAU,aAAY;AACtB,0BAAU,SAAQ;AAClB,0BAAU,WAAU;AACpB,0BAAU,YAAW;AACrB,0BAAU,YAAW;AACrB,0BAAU,YAAW;AACrB,0BAAU,YAAW;AACrB,0BAAU;AACV,0BAAU;AA+HV,0BAAQ;AACR,0BAAQ;AAAA;AAAA,IA9HQ,SAAyB;AACvC,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,+BAA+B,GAAG,EAAE,MAAM,SAAS,CAAC;AAAA,IAC1G;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,OAAO;AAAA,IACvD;AAAA,IAEgB,OAAa;AAE3B,UAAI,EAAE,KAAK,SAAS,KAAK,YAAY,KAAK,KAAK,IAAI,mBAAoB,MAAK,QAAQ,8DAA8D,KAAK,OAAO,kBAAkB,CAAC;AAEjL,WAAK,GAAG,iBAAiB,eAAe,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAErF,WAAK,KAAK,MAAM,MAAM,8BAA8B,OAAO,KAAK,SAAS,GAAG,KAAK,QAAQ,EAAE,IAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACpI;AAAA,IAEO,WAAiB;AACtB,WAAK,GAAG,MAAM,YAAY,WAAW,SAAS,WAAW;AACzD,YAAM,WAAW,SAAS,QAAQ,EAAE,WAAW,2BAA2B,WAAW,6BAA6B,OAAO,CAAC,EAAE,GAAG,CAAC,GAAG,EAAE,YAAY,SAAS,CAAC;AAC3J,WAAK,GAAG,OAAO,QAAQ;AACvB,WAAK,QAAQ,SAAS,cAAc;AACpC,YAAM,EAAE,YAAY,SAAS,IAAI,iBAAiB,QAAQ;AAC1D,WAAK,UAAU,CAAC,QAAQ,WAAW,UAAU,GAAG,CAAC,IAAI,QAAQ,WAAW,QAAQ,GAAG,EAAE,IAAI,MAAM,WAAW,UAAU;AACpH,eAAS,OAAO,GAAG,KAAK,GAAG,MAAM,eAAe,SAAS;AAAA,IAC3D;AAAA,IAEO,QAAQ,MAAwB,GAAG,WAAW,KAAK,MAAM,UAAU,QAAQ,aAAa,UAAU,CAAC,mBAAmB,QAAQ,KAAK,aAAa,GAAS;AAC9J,YAAM,OAAO,MAAM,GAAG,IAAI,MAAM,IAAI,QAAQ,IAC1C,SAAS,SAAS,CAAC,KAAK,KAAK,WAAW,UAAU,KAAK,CAAC,KAAK,GAAG;AAClE,gBAAU,KAAK,MAAM,UAAU,UAAU,IAAI,4BAA4B;AACzE,WAAK,OAAO,SAAU,MAAM,GAAG,IAAI,MAAM,EAAE,MAAM,IAAI,IAAK,KAAK,OAAO;AACtE,mBAAa,KAAK,SAAS;AAC3B,WAAK,YAAYC,YAAW,CAACC,SAAQ,KAAK,aAAa,IAAI,OAAO,KAAK,MAAM,UAAU,UAAU,OAAO,4BAA4B,GAAGA,WAAU,KAAK,GAAG,YAAY,MAAM,KAAK,SAAS,SAAS,gBAAgB,KAAK,MAAM;AAC7N,WAAK,cAAc;AAAA,IACrB;AAAA,IACO,aAAa,OAAO,KAAK,aAAsB;AACpD,aAAO,CAAC,CAAC,KAAK,GAAG,aAAa,KAAK,GAAG,YAAY,QAAQ,OAAO,EAAE,MAAM,MAAM,QAAQ,OAAO,EAAE;AAAA,IAClG;AAAA,IAEO,OAAO,KAA2B;AACvC,YAAM,WAAW,KAAK,GAAG,cAA2B,6BAA6B;AACjF,UAAI,CAAC,IAAK,QAAO,UAAU,OAAO;AAClC,YAAM,UAAU,YAAY,SAAS,OAAO,EAAE,WAAW,8BAA8B,UAAU,OAAO,YAAY,OAAO,GAAG,EAAE,MAAM,cAAc,CAAC,GACnJ,EAAE,aAAa,SAAS,cAAc,SAAS,IAAI,KAAK,MAAM,WAC9D,gBAAgB,KAAK,SAAS,SAAS,iBAAiB,CAAC,KAAK;AAChE,iBAAW,QAAQ,CAAC,SAAS,eAAe,aAAa,EAAG,MAAK,GAAG,gBAAgB,IAAI;AACxF,UAAI,CAAC,KAAK,OAAQ,MAAK,SAAS,KAAK,GAAG,MAAM,YAAY,kCAAkC,KAAK,KAAK,GAAG,KAAK,SAAS,KAAK,GAAG,MAAM,YAAY,kCAAkC,KAAK,KAAK;AAC7L,MAAC,QAAQ,YAAY,IAAM,IAAI,SAAJ,IAAI,OAAS,KAAM,KAAK,UAAU;AAC7D,YAAM,QAAQ,IAAI,KAAK,QAAQ,qBAAqB,IAAI,EAAE,MAAM,IAAI;AACpE,iBAAW,KAAK,MAAO,YAAW,KAAK,cAAc,GAAG,KAAK,MAAM,UAAU,KAAK,KAAK,CAAC,EAAG,SAAQ,OAAO,SAAS,OAAO,EAAE,WAAW,0BAA0B,GAAG,IAAI,KAAK,EAAE,MAAM,OAAO,IAAI,IAAI,GAAG,IAAI,EAAE,MAAM,MAAM,GAAG,iBAAiB,IAAI,QAAQ,EAAE,WAAW,IAAI,MAAM,IAAI,MAAS,EAAG,YAAY,SAAS,QAAQ,EAAE,WAAW,2BAA2B,WAAW,aAAa,CAAC,EAAE,CAAC,CAAE,EAAE,aAAc;AACnZ,OAAC,YAAY,KAAK,GAAG,OAAO,OAAO;AACnC,YAAM,EAAE,aAAa,QAAQ,cAAc,QAAQ,IAAI,KAAK;AAC5D,WAAK,SAAU,KAAK,SAAS,IAAI,iCAAiC,GAAG,OAAO,OAAQ,KAAK,GAAG,MAAM,YAAY,iDAAiD,GAAG,OAAO,IAAI;AAC7K,WAAK,SAAU,KAAK,SAAS,IAAI,gCAAgC,GAAG,MAAM,OAAQ,KAAK,GAAG,MAAM,YAAY,gDAAgD,GAAG,MAAM,IAAI;AACzK,UAAI,eAAe;AACjB,YAAI,IAAI,QAAQ;AACd,eAAK,GAAG,aAAa,eAAe,EAAE;AACtC,gBAAM,EAAE,OAAO,OAAO,aAAa,iBAAiB,OAAO,iBAAiB,OAAO,OAAO,IAAI,IAAI;AAClG,cAAI,MAAM,KAAK,EAAG,MAAK,GAAG,MAAM,YAAY,kCAAkC,GAAG,KAAK,GAAG;AACzF,cAAI,MAAM,KAAK,EAAG,MAAK,GAAG,MAAM,YAAY,kCAAkC,GAAG,MAAM,OAAO,KAAK,CAAC,GAAG;AACvG,cAAI,MAAM,KAAK,EAAG,MAAK,GAAG,MAAM,WAAW,GAAG,KAAK;AACnD,cAAI,MAAM,WAAW,EAAG,MAAK,GAAG,MAAM,YAAY,GAAG,OAAO,WAAW,KAAM,KAAK,UAAU,WAAY,IAAI;AAC5G,cAAI,WAAW,MAAM;AACnB,iBAAK,GAAG,MAAM,YAAY,GAAG,eAAiB,KAAK,UAAU,WAAY,IAAI;AAC7E,iBAAK,GAAG,QAAQ,SAAS;AACzB,iBAAK,KAAK,OAAO,MAAM,MAAO,KAAK,GAAG,YAAY,QAAQ,YAAa;AAAA,UACzE;AAAA,QACF,OAAO;AACL,cAAI,MAAM,IAAI,QAAQ,KAAK,IAAI,aAAa,QAAQ;AAClD,kBAAM,aAAe,SAAS,UAAW,MAAO,GAC9C,YAAY,IAAI,kBAAkB,cAAc,IAAI,IAAI,kBAAkB,eAAe,KAAK,aAAa,CAAC;AAC9G,iBAAK,GAAG,MAAM,YAAY,kCAAkC,QAAQ,IAAI,QAAQ,OAAO,SAAS,OAAO,UAAU,IAAI;AAAA,UACvH;AACA,cAAI,MAAM,IAAI,IAAI,KAAK,IAAI,SAAS,QAAQ;AAC1C,kBAAM,OAAO,eAAe,IAAI,MAAM,GAAG,GACvC,QAAS,KAAK,UAAU,WAAY,KACpC,aAAe,UAAU,WAAY,MAAO,GAC5C,SAAS,IAAI,aAAa,IAAI,cAAc,SAAS,IAAI,YAAY,OAAO,IAAI,QAAQ,SACxF,aAAa,WAAW,UAAU,KAAK,aAAa,WAAW,QAAQ,IAAI,CAAC,YAC5E,YAAY,IAAI,cAAe,OAAO,KAAK,KAAK,IAAI,IAAI,IAAI,KAAK,QAAQ,MAAM,OAAO,QAAS,MAAM;AACvG,iBAAK,GAAG,MAAM,YAAY,kCAAkC,QAAQ,SAAS,OAAO,UAAU,OAAO,UAAU,IAAI;AAAA,UACrH;AACA,cAAI,MAAM,IAAI,IAAI,KAAK,IAAI,SAAS,IAAK,MAAK,GAAG,MAAM,WAAW,GAAG,IAAI,IAAI;AAAA,QAC/E;AACA,YAAI,IAAI,SAAU,MAAK,GAAG,MAAM,cAAc,IAAI,aAAa,OAAO,gBAAgB;AAAA,MACxF;AACA,WAAK,eAAe,MAAM,KAAK,QAAQ,iBAA8B,qBAAqB,CAAC,EAAE,IAAI,CAAC,OAAO;AACvG,cAAM,CAAC,EAAE,GAAG,GAAG,EAAE,KAAK,GAAG,QAAQ,QAAQ,IAAI,MAAM,oBAAoB,KAAK,CAAC;AAC7E,eAAO,EAAE,IAAI,MAAM,IAAI,CAAC,IAAI,KAAK,CAAC,IAAI,CAAC,KAAK,MAAO,EAAE;AAAA,MACvD,CAAC;AACD,WAAK,YAAY;AAAA,IACnB;AAAA,IAEO,cAAoB;AACzB,UAAI,CAAC,KAAK,aAAc;AACxB,iBAAW,EAAE,IAAI,KAAK,KAAK,KAAK,cAAc;AAC5C,cAAM,SAAS,QAAQ,KAAK,MAAM,MAAM,WAAW,IAAI;AACvD,WAAG,gBAAgB,aAAa,MAAM,GAAG,GAAG,gBAAgB,eAAe,CAAC,MAAM;AAAA,MACpF;AAAA,IACF;AAAA,IAEU,gBAAgB,GAAuB;AAC/C,WAAK,GAAG,kBAAkB,EAAE,SAAS;AACrC,YAAM,EAAE,MAAM,OAAO,IAAI,iBAAiB,KAAK,OAAO;AACtD,MAAC,KAAK,WAAW,WAAW,IAAI,GAAK,KAAK,WAAW,WAAW,MAAM;AACtE,MAAC,KAAK,WAAW,EAAE,SAAW,KAAK,WAAW,EAAE;AAChD,WAAK,GAAG,iBAAiB,eAAe,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACpF,WAAK,GAAG,iBAAiB,aAAa,KAAK,eAAe,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACnF;AAAA,IAEU,eAAe,GAAuB;AAC9C,WAAK,MAAM,UAAU,UAAU,IAAI,6BAA6B;AAChE,WAAK,KAAK,QAAQ,oBAAoB,MAAM;AAC1C,YAAI,EAAE,YAAY,KAAK,UAAU,EAAE,YAAY,KAAK,OAAQ;AAC5D,QAAC,KAAK,SAAS,EAAE,SAAW,KAAK,SAAS,EAAE;AAC5C,cAAM,EAAE,aAAa,IAAI,cAAc,GAAG,IAAI,KAAK,MAAM,WACvD,EAAE,aAAa,GAAG,cAAc,EAAE,IAAI,KAAK,SAC3C,OAAO,MAAM,IAAI,GAAG,KAAK,YAAY,EAAE,UAAU,KAAK,WAAW,KAAK,IAAI,CAAC,GAC3E,OAAO,MAAM,IAAI,GAAG,KAAK,YAAY,EAAE,UAAU,KAAK,WAAW,KAAK,IAAI,CAAC;AAC7E,YAAI,KAAK,OAAQ,CAAC,KAAK,SAAS,IAAI,mBAAmB,GAAI,OAAO,KAAM,GAAG,KAAO,KAAK,SAAS,IAAI,mBAAmB,GAAI,OAAO,KAAM,GAAG;AAAA,YACtI,MAAK,GAAG,MAAM,YAAY,kCAAmC,KAAK,QAAQ,GAAI,OAAO,KAAM,GAAG,GAAI,GAAG,KAAK,GAAG,MAAM,YAAY,kCAAmC,KAAK,QAAQ,GAAI,OAAO,KAAM,GAAG,GAAI;AAAA,MAC9M,CAAC;AAAA,IACH;AAAA,IAIU,gBAAsB;AAC9B,WAAK,KAAK,cAAc,kBAAkB;AAC1C,WAAK,MAAM,UAAU,UAAU,OAAO,6BAA6B;AACnE,WAAK,GAAG,oBAAoB,eAAe,KAAK,cAAc;AAC9D,WAAK,GAAG,oBAAoB,aAAa,KAAK,aAAa;AAAA,IAC7D;AAAA,EACF;AArJE,gBADW,cACY,iBAAwB;;;ACP1C,MAAM,mBAAN,cAA+B,cAAmE;AAAA,IAEvG,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,iBAAiB;AAAA,IACzC;AAAA,IAEgB,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,MAAM,UAAU,WAAW,+BAA+B,UAAU,IAAI,WAAW,GAAG,aAAa,IAAI,MAAM,CAAC,GAAG,aAAa,IAAI,QAAQ,CAAC,0BAA0B,CAAC;AAAA,IACpN;AAAA,IAEgB,QAAc;AAE5B,WAAK,MAAM,QAAQ,QAAQ,KAAK,EAAE;AAAA,IACpC;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,MAAM,GAAG,WAAW,KAAK,QAAQ,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,YAAY,GAAqB;AACzC,QAAE,gBAAgB;AAClB,WAAK,MAAM,aAAa;AACxB,UAAI,KAAK,GAAG,UAAU,SAAS,0BAA0B,EAAG,MAAK,MAAM,OAAO,SAAS;AAAA,UAClF,MAAK,GAAG,UAAU,IAAI,0BAA0B;AAAA,IACvD;AAAA,IAEO,SAAe;AACpB,OAAC,KAAK,MAAM,MAAM,WAAW,KAAK,GAAG,UAAU,OAAO,0BAA0B;AAAA,IAClF;AAAA,IACO,WAAiB;AACtB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ;AACnC,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AArCE,gBADW,kBACY,iBAAwB;;;ACC1C,MAAM,mBAAN,cAA+B,WAAyC;AAAA,IAC7E,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,qBAAqB;AAAA,IAC7C;AAAA,IAEA,YAAY,MAAkB,QAAiC;AAC7D,YAAM,MAAM,EAAE,OAAO,qBAAqB,GAAG,OAAO,CAAC;AAAA,IACvD;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,KAAK,MAAM,eAAe,IAAI,KAAK,SAAS,WAAW,KAAK,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAChI,WAAK,OAAO,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,KAAK,MAAM,eAAe,IAAI,KAAK,SAAS,WAAW,KAAK,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEvI,WAAK,MAAM,GAAG,oBAAoB,KAAK,uBAAuB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEpH,WAAK,KAAK,OAAO,GAAG,2BAA2B,KAAK,qBAAqB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC9G;AAAA,IACmB,MAAM,OAAe,QAA2B;AACjE,aAAO,MAAM,MAAM,OAAO,MAAM,KAAK,KAAK,MAAM,kBAAkB,KAAK,GAAG,QAAQ;AAAA,IACpF;AAAA,IAEU,sBAAsB,EAAE,MAAM,GAAgD;AACtF,UAAI,CAAC,KAAK,MAAM,UAAW,MAAK,OAAO,eAAe,KAAK,OAAO,QAAQ;AAAA,IAC5E;AAAA,IAEU,oBAAoB,EAAE,MAAM,GAAwD;AAC5F,WAAK,OAAO,MAAM;AAElB,WAAK,OAAO,OAAO,QAAQ,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,GAAG,EAAE,OAAO,KAAK,OAAO,4GAAuG,CAAE,IAAI,CAAC;AAAA,IAChM;AAAA,EACF;;;AC/BO,MAAM,oBAAN,cAAgC,cAAgD;AAAA,IAAhF;AAAA;AAGL,0BAAO;AACP,0BAAU;AACV,0BAAU;AACV,0BAAU;AAkDV,0BAAU,cAAa,MAAY;AACjC,YAAI,KAAK,OAAO,GAAG,QAAQ,SAAS,EAAG,QAAO,KAAK,YAAY;AAC/D,qBAAa,KAAK,aAAa,GAAG,KAAK,OAAO,SAAS;AACvD,aAAK,OAAO,OAAO,eAAe,KAAK,OAAO,OAAO;AAAA,MACvD;AAAA;AAAA,IArDA,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,qBAAqB;AAAA,IAC7C;AAAA,IAEgB,SAAsB;AAEpC,WAAK,SAAS,IAAI,iBAAiB,KAAK,MAAM,KAAK,MAAM;AACzD,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,wDAAwD,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AACrJ,WAAK,SAAS,SAAS,UAAU,EAAE,WAAW,uCAAuC,MAAM,UAAU,WAAW,aAAa,IAAI,gBAAgB,IAAI,aAAa,IAAI,eAAe,IAAI,aAAa,IAAI,gBAAgB,EAAE,CAAC;AAC7N,WAAK,gBAAgB,SAAS,QAAQ,EAAE,WAAW,kEAAkE,CAAC;AACtH,YAAM,WAAW,KAAK,OAAO,OAAO;AAEpC,eAAS,UAAU,IAAI,uBAAuB,6BAA6B;AAC3E,WAAK,cAAc,OAAO,QAAQ;AAClC,aAAO,KAAK,GAAG,OAAO,KAAK,QAAQ,KAAK,aAAa,GAAG,KAAK;AAAA,IAC/D;AAAA,IAEgB,QAAc;AAC5B,WAAK,OAAO,MAAM;AAAA,IACpB;AAAA,IAEgB,OAAa;AAE3B,WAAK,OAAO,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/E,WAAK,GAAG,iBAAiB,aAAa,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/E,WAAK,GAAG,iBAAiB,cAAc,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,OAAO,OAAO,GAAG,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExE,WAAK,MAAM,GAAG,oBAAoB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACvG,WAAK,MAAM,GAAG,cAAc,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAElE,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE1F,WAAK,MAAM,GAAG,uBAAuB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IACxG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,MAAM;AAAA,IAC1B;AAAA,IAEU,cAAoB;AAC5B,WAAK,OAAO,OAAO,GAAG,KAAK,YAAY;AAAA,IACzC;AAAA,IACU,cAAoB;AAC5B,WAAK,KAAK,KAAK,kBAAkB,GAAG,MAAM;AAC1C,mBAAa,KAAK,aAAa;AAC/B,WAAK,gBAAgBC,YAAW,MAAM,KAAK,WAAW,GAAG,KAAK,SAAS,QAAQ,OAAO,KAAK,MAAM;AAAA,IACnG;AAAA,IAOO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,QAAQ,KAAK,MAAM,MAAM,eAAe,IAAI,aAAa;AAC7F,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,SAAS,IAAI;AACzG,WAAK,OAAO,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAClD,WAAK,WAAW,QAAW,KAAK,MAAM;AAAA,IACxC;AAAA,IAEmB,YAAkB;AACnC,WAAK,OAAO,QAAQ,GAAG,MAAM,UAAU;AAAA,IACzC;AAAA,EACF;AAvEE,gBADW,mBACY,iBAAwB;AAC/C,gBAFW,mBAEY,aAAqB;;;ACGvC,MAAM,WAAN,cAAuB,WAA2B;AAAA,IAuBvD,YAAY,MAAkB,QAAkC;AAC9D,YAAM,MAAM,MAAM;AArBpB,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO,kBAAkD;AACzD,0BAAO,oBAAoD;AAC3D,0BAAU,aAAY;AACtB,0BAAU,eAAc;AAAA,IAaxB;AAAA,IAZA,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,eAAe;AAAA,IACvC;AAAA,IACU,YAAY,MAAc;AAClC,aAAO,iBAAiB,KAAK,OAAO,IAAI;AAAA,IAC1C;AAAA,IACU,QAAQ,SAAiB;AACjC,aAAO,aAAa,KAAK,OAAO,OAAO;AAAA,IACzC;AAAA,IAMgB,SAAS;AAEvB,WAAK,UAAU,MAAM,OAAO;AAC5B,WAAK,GAAG,QAAQ,YAAY,KAAK;AACjC,WAAK,mBAAmB,SAAS,OAAO,EAAE,WAAW,8BAA8B,CAAC;AACpF,WAAK,aAAa,SAAS,OAAO,EAAE,WAAW,oBAAoB,CAAC;AACpE,WAAK,gBAAgB,SAAS,UAAU,EAAE,WAAW,oBAAoB,CAAC;AAC1E,WAAK,iBAAiB,KAAK,cAAc,WAAW,MAAM,EAAE,OAAO,MAAM,CAAC;AAC1E,WAAK,eAAe,SAAS,OAAO,EAAE,WAAW,0DAA0D,CAAC;AAC5G,WAAK,kBAAkB,SAAS,UAAU,EAAE,WAAW,0DAA0D,CAAC;AAClH,WAAK,mBAAmB,KAAK,gBAAgB,WAAW,MAAM,EAAE,OAAO,MAAM,CAAC;AAE9E,WAAK,GAAG,UAAU,IAAI,8BAA8B,GAAG,KAAK,YAAY,UAAU,IAAI,mCAAmC,oBAAoB,GAAG,KAAK,QAAQ,UAAU,IAAI,0BAA0B;AACrM,WAAK,iBAAiB,OAAO,KAAK,YAAY,KAAK,aAAa;AAChE,aAAO,KAAK,GAAG,OAAO,KAAK,gBAAgB,GAAG,KAAK;AAAA,IACrD;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,cAAc,KAAK,eAAe;AAAA,IAClF;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,MAAM,cAAc,iBAAiB,cAAc,KAAK,oBAAoB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExG,WAAK,MAAM,GAAG,aAAa,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACxE,WAAK,MAAM,GAAG,cAAc,CAAC,EAAE,MAAM,MAAO,SAAS,KAAK,MAAM,UAAU,UAAU,IAAI,sBAAsB,GAAG,KAAK,oBAAoB,KAAKC,YAAW,MAAM,KAAK,MAAM,UAAU,UAAU,OAAO,sBAAsB,GAAG,GAAG,KAAK,MAAM,GAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AACxQ,WAAK,MAAM,GAAG,eAAe,CAAC,EAAE,MAAM,MAAM,KAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,qBAAqB,GAAG,GAAG,UAAU,OAAO,4BAA4B,KAAK,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE9L,WAAK,OAAO,GAAG,gBAAgB,KAAK,iBAAiB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACxF,WAAK,OAAO,GAAG,YAAY,KAAK,gBAAgB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACnF,WAAK,OAAO,GAAG,aAAa,CAAC,EAAE,MAAM,MAAM,CAAC,KAAK,iBAAiB,KAAK,YAAY,EAAE,QAAQ,CAAC,OAAO,GAAG,UAAU,OAAO,4BAA4B,CAAC,KAAK,CAAC,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAClM,WAAK,OAAO,GAAG,WAAW,CAAC,EAAE,MAAM,MAAM,KAAK,GAAG,UAAU,OAAO,6BAA6B,KAAK,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1I,WAAK,OAAO,GAAG,eAAe,MAAM,KAAK,UAAU,KAAK,OAAO,OAAO,IAAI,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAChH,WAAK,OAAO,GAAG,eAAe,MAAM,KAAK,UAAU,KAAK,OAAO,OAAO,IAAI,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEhH,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAO,CAAC,QAAQ,KAAK,KAAK,QAAQ,GAAG,KAAK,OAAO,KAAK,YAAY,KAAK,WAAW,KAAK,MAAM,IAAI,KAAK,KAAK,cAAc,GAAG,KAAK,OAAO,KAAK,UAAU,GAAI,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACxP,WAAK,MAAM,GAAG,qBAAqB,KAAK,mBAAmB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACjH,WAAK,MAAM,GAAG,sBAAsB,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACnF,WAAK,MAAM,GAAG,mBAAmB,KAAK,sBAAsB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAClH,WAAK,MAAM,GAAG,iBAAiB,MAAM,KAAK,OAAO,eAAe,KAAK,UAAU,KAAK,OAAO,OAAO,IAAI,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC/J,WAAK,MAAM,GAAG,mBAAmB,CAAC,EAAE,MAAM,MAAO,KAAK,GAAG,eAAe,OAAO,KAAK,MAAM,KAAK,CAAC,GAAI,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC1J,WAAK,MAAM,GAAG,gBAAgB,CAAC,EAAE,MAAM,MAAM,SAAS,KAAK,WAAW,UAAU,CAAC,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC1I,WAAK,MAAM,GAAG,iBAAiB,CAAC,EAAE,MAAM,MAAO,KAAK,OAAO,WAAW,SAAS,CAAC,KAAK,MAAM,OAAO,aAAc,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtK,WAAK,MAAM,GAAG,sBAAsB,CAAC,EAAE,MAAM,MAAO,KAAK,OAAO,WAAW,CAAC,SAAS,CAAC,CAAC,KAAK,MAAM,OAAO,QAAS,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACxK,WAAK,MAAM,GAAG,iCAAiC,KAAK,kCAAkC,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE5I,WAAK,KAAK,OAAO,GAAG,wBAAwB,KAAK,iBAAiB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACrG,WAAK,KAAK,OAAO,GAAG,sBAAsB,KAAK,iBAAiB,EAAE,QAAQ,KAAK,OAAO,CAAC;AACvF,WAAK,KAAK,OAAO,GAAG,mCAAmC,CAAC,EAAE,MAAM,MAAO,KAAK,gBAAgB,QAAQ,SAAS,KAAe,GAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACnK,WAAK,KAAK,OAAO,GAAG,oCAAoC,CAAC,EAAE,MAAM,MAAO,KAAK,gBAAgB,SAAS,SAAS,KAAe,GAAI,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACvK;AAAA,IACmB,MAAM,OAAe,QAA2B;AACjE,aAAO,MAAM,MAAM,OAAO,MAAM,KAAK,CAAC,WAAW,KAAK,MAAM,OAAO,cAAc,QAAQ,KAAK,QAAQ,QAAQ,GAAG,CAAC,IAAI,QAAQ;AAAA,IAChI;AAAA,IAEU,kBAAkB,EAAE,QAAQ,YAAY,SAAS,GAAwE;AACjI,UAAI,KAAK,MAAM,aAAc,cAAc,CAAC,SAAW;AACvD,UAAI,KAAK,MAAM,MAAM,OAAQ,MAAK,UAAU,OAAO,OAAO,KAAK;AAC/D,WAAK,GAAG,gBAAgB,GAAG,gBAAgB,EAAE,MAAM,OAAO,OAAO,QAAQ,aAAa,CAAC,CAAC,OAAO,gBAAgB,EAAE,MAAM,KAAK,MAAM,OAAO,UAAU,QAAQ,aAAa,CAAC,CAAC;AAAA,IAC5K;AAAA;AAAA,IAEU,qBAAqB,EAAE,MAAM,GAA+C;AACpF,WAAK,OAAO,eAAe,KAAK,UAAU,KAAK,OAAO,OAAO,IAAI;AACjE,eAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,IAAK,KAAI,MAAM,MAAM,MAAM,SAAS,IAAI,CAAC,IAAI,KAAK,MAAM,MAAM,YAAa,QAAO,KAAK,KAAK,WAAW,UAAU,KAAK,YAAY,QAAQ,MAAM,IAAI,MAAM,SAAS,IAAI,CAAC,IAAI,YAAY,KAAK,KAAK,CAAC,CAAC,CAAC;AAAA,IACzO;AAAA,IAEO,UAAU,OAAO,MAAM,QAAQ,KAAK,MAAM,MAAM,aAAmB;AACxE,UAAI,QAAQ,CAAC,KAAK,KAAK,MAAM,kBAAmB;AAChD,UAAI,CAAC,KAAK,MAAM,UAAW,MAAK,OAAO,QAAQ,QAAQ,KAAK,YAAY,KAAK,CAAC,IAAI;AAAA,IACpF;AAAA,IAEU,gBAAgB,EAAE,MAAM,GAA0C;AAC1E,WAAK,MAAM,UAAU,UAAU,OAAO,uBAAuB,KAAK;AAClE,UAAI,CAAC,OAAO;AACV,aAAK,OAAO,aAAa,QAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,KAAK,SAAU;AAClF,6BAAqB,KAAK,WAAW;AACrC,aAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,eAAe,GAAG,SAAS;AAAA,MACxE,OAAO;AACL,aAAK,YAAY,KAAK,MAAM,MAAM;AAClC,aAAK,cAAcC,uBAAsB,MAAM;AAC7C,eAAK,OAAO,aAAa,QAAQ,MAAO,KAAK,MAAM,OAAO,SAAS,IAAK;AACxE,uBAAa,KAAK,KAAK,KAAK,oBAAoB,GAAG,KAAK,eAAe,GAAG,OAAO;AAAA,QACnF,GAAG,KAAK,MAAM;AACd,aAAK,oBAAoB;AAAA,MAC3B;AAAA,IACF;AAAA,IACU,eAAe,EAAE,OAAO,GAA6C;AAC7E,YAAM,QAAQ,OAAO,UAAU,OAAO,CAAC,IAAI,OAAO;AAClD,WAAK,MAAM,UAAU,UAAU,OAAO,yBAAyB,CAAC,SAAS,KAAK,MAAM,SAAS,OAAO;AACpG,UAAI,CAAC,SAAS,KAAK,MAAM,SAAS,QAAS,QAAO,MAAM,KAAK,MAAM,UAAU,QAAQ,cAAc;AACnG,YAAM,SAAS,MAAM,YAAY,MAAM,OAAQ,MAAM,QAAQ,MAAM,OACjE,OAAO,SAAU,MAAM,QAAQ,MAAM,OAAO,WAAW,UAAW;AACpE,WAAK,MAAM,UAAU,QAAQ,cAAc;AAC3C,UAAI,SAAS,YAAY,MAAM,QAAS,MAAK,SAAS,IAAI,oBAAoB,KAAK,SAAS,IAAI,sBAAsB,OAAO,MAAM,OAAO;AAAA,UACrI,MAAK,SAAS,IAAI,yBAAyB,KAAK,SAAS,IAAI,2BAA2B;AAAA,IAC/F;AAAA,IAEU,iCAAiC,EAAE,MAAM,GAA6D;AAC9G,UAAI,CAAC,SAAS,MAAM,SAAS,EAAG,QAAO,MAAM,KAAK,OAAO,OAAO,CAAC;AACjE,YAAM,OAAwB,CAAC;AAC/B,eAAS,IAAI,GAAG,MAAM,MAAM,QAAQ,IAAI,KAAK,IAAK,MAAK,KAAK,EAAE,OAAQ,MAAM,CAAC,EAAE,YAAY,YAAY,KAAK,KAAK,IAAK,KAAK,OAAO,MAAM,CAAC,EAAE,MAAM,CAAC;AAClJ,WAAK,OAAO,OAAO;AAAA,IACrB;AAAA,IAEgB,gBAAsB;AACpC,UAAI,CAAC,KAAK,MAAM,UAAW;AAC3B,UAAI,CAAC,KAAK,MAAM,YAAa,MAAK,MAAM,OAAO,cAAc,KAAK,QAAQ,KAAK,OAAO,QAAQ,GAAG;AACjG,YAAM,cAAc;AAAA,IACtB;AAAA,IAEU,QAAQC,KAA+B,KAAmB;AAClE,WAAK,KAAK;AAAA,QACR,GAAG,KAAK,OAAO,KAAK;AAAA,QACpB,MAAM;AACJ,eAAK,UAAU,KAAK,kBAAkB,CAAC,KAAK,OAAO,UAAU,MAAM,KAAK,OAAO,IAAI;AACnF,gBAAM,WAAW,KAAK,OAAO,UAC3B,OAAO,KAAK,MAAM,UAAU,QAAQ;AACtC,cAAI,SAAS,YAAY,YAAY,CAAC,OAAO,QAAQ,KAAK,SAAS,QAAQ,SAAS,MAAM;AACxF,kBAAM,aAAa,KAAK,MAAO,MAAM,YAAY,KAAK,KAAK,KAAM,SAAS,OAAO,EAAE,KAAK,GACtF,EAAE,MAAM,KAAK,IAAI,UACjB,WAAW,KAAK,IAAI,YAAY,OAAO,OAAO,CAAC,GAC/C,WAAa,WAAW,OAAQ,OAAQ,OAAO,KAAK,IACpD,WAAY,KAAK,MAAM,WAAW,IAAI,IAAI,OAAQ,OAAO,KAAK;AAChE,gBAAI,CAAC,KAAK,OAAO,QAAS,MAAK,SAAS,IAAI,yBAAyB,GAAG,QAAQ,KAAK,QAAQ;AAC7F,gBAAI,KAAK,MAAM,aAAa,KAAK,OAAO,UAAW,MAAK,SAAS,IAAI,2BAA2B,GAAG,QAAQ,KAAK,QAAQ;AAAA,UAC1H,WAAW,SAAS,WAAW,YAAY,CAAC,OAAO,QAAQ,KAAK,SAAS,SAAS;AAChF,kBAAM,aAAa,KAAK,MAAO,MAAM,YAAY,KAAK,KAAK,KAAM,SAAS,OAAO,EAAE,KAAK,GACtF,MAAM,OAAO,SAAS,QAAQ,QAAQ,KAAK,OAAO,UAAU,CAAC,CAAC;AAChE,gBAAI,CAAC,KAAK,OAAO,QAAS,MAAK,SAAS,IAAI,oBAAoB;AAChE,gBAAI,KAAK,MAAM,aAAa,KAAK,OAAO,UAAW,MAAK,SAAS,IAAI,sBAAsB;AAAA,UAC7F,WAAW,YAAY,CAAC,KAAK,KAAK,MAAM,kBAAmB,MAAK,MAAM,cAAc,cAAc,QAAQ,KAAK,QAAQ,GAAG,CAAC;AAAA,QAC7H;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IAEO,kBAAwB;AAC7B,UAAI,KAAK,KAAM,MAAK,iBAAiB,QAAQ,cAAc,GAAG,KAAK,KAAK,WAAW,KAAK,QAAQ,KAAK,OAAO,eAAe,GAAG,GAAG,IAAI,CAAC,KAAK,KAAK,cAAc,KAAK,OAAO,YAAY,GAAG,SAAS,EAAE,GAAG,KAAK;AAAA,IAC9M;AAAA,IACO,qBAA2B;AAChC,UAAI,CAAC,KAAK,kBAAkB,CAAC,KAAK,oBAAoB,CAAC,KAAK,MAAM,OAAO,cAAc,KAAK,KAAK,MAAM,qBAAqB,KAAK,MAAM,cAAc,aAAa,EAAG;AACrK,WAAK,KAAK;AAAA,QACR;AAAA,QACA,MAAM;AACJ,eAAK,cAAc,QAAQ,KAAK,cAAc,eAAe,KAAK,cAAc;AAChF,eAAK,cAAc,SAAS,KAAK,cAAc,gBAAgB,KAAK,cAAc;AAClF,cAAI,CAAC,KAAK,OAAO,QAAS,MAAK,eAAgB,UAAU,KAAK,MAAM,eAAmC,GAAG,GAAG,KAAK,cAAc,OAAO,KAAK,cAAc,MAAM;AAChK,cAAI,KAAK,MAAM,aAAa,KAAK,OAAO,UAAW,MAAK,iBAAkB,UAAU,KAAK,MAAM,eAAmC,GAAG,GAAG,KAAK,gBAAgB,OAAO,KAAK,gBAAgB,MAAM;AAAA,QACjM;AAAA,QACA;AAAA,MACF;AAAA,IACF;AAAA,IACO,oBAAoB,OAAO,KAAK,MAAM,UAAU,QAAQ,gBAAgB,YAAY,KAAK,MAAM,cAAc,aAAa,GAAS;AACxI,eAAS,KAAK,KAAK,kBAAkB,KAAK,eAAe,KAAK,cAAc,GAAG,KAAK,KAAK,kBAAkB,KAAK,iBAAiB,KAAK,gBAAgB;AAAA,IACxJ;AAAA,IAEmB,SAAS,OAAO,KAAK,OAAO,MAAY;AACzD,YAAM,SAAS,IAAI;AACnB,eAAS,IAAI,GAAG,MAAM,KAAK,OAAO,QAAQ,IAAI,KAAK,KAAK;AACtD,cAAM,IAAI,KAAK,OAAO,CAAC;AACvB,UAAE,GAAG,UAAU,IAAI,4BAA4B,GAAG,EAAE,KAAK,UAAU,IAAI,+BAA+B,wBAAwB,GAAG,EAAE,QAAQ,UAAU,IAAI,kCAAkC,wBAAwB,GAAG,EAAE,MAAM,UAAU,IAAI,iCAAiC,wBAAwB;AACrS,UAAE,GAAG,aAAc,EAAE,SAAS,SAAS,OAAO,EAAE,WAAW,oGAAoG,CAAC,GAAI,EAAE,KAAK;AAAA,MAC7K;AACA,WAAK,qBAAqB,EAAE,OAAO,KAAK,MAAM,OAAO,SAAS,CAAyC;AAAA,IACzG;AAAA,IACmB,UAAU,QAAQ,KAAK,OAAO,OAAO,SAAS,OAAa;AAC5E,UAAI,UAAU,CAAC,KAAK,KAAK,QAAQ,MAAO;AACxC,YAAM,MAAM,CAAC,GAAG,KAAK,GACnB,MAAM,KAAK,MAAM,OAAO,UACxB,MAAM,KAAK,MAAM,OAAO,QACxB,MAAM,YAAY,KAAK,KAAK,KAAK;AACnC,UAAI,KAAK,OAAO;AACd,iBAAS,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC9C,gBAAM,QAAQ,IAAI,MAAM,CAAC,GACvB,MAAM,IAAI,IAAI,CAAC;AACjB,cAAI,KAAK,EAAE,OAAQ,QAAQ,MAAO,KAAK,KAAM,MAAM,MAAO,KAAK,OAAO,GAAG,gBAAgB,EAAE,MAAM,MAAM,CAAC,CAAC,GAAG,MAAM,QAAQ,IAAI,MAAM,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,YAAY,MAAM,WAAW,CAAC;AAAA,QACzM;AACF,UAAI,KAAK,OAAO;AACd,iBAAS,IAAI,GAAG,MAAM,IAAI,QAAQ,IAAI,KAAK,KAAK;AAC9C,gBAAM,QAAQ,IAAI,MAAM,CAAC,GACvB,MAAM,IAAI,IAAI,CAAC;AACjB,cAAI,KAAK,EAAE,OAAQ,QAAQ,MAAO,KAAK,KAAM,MAAM,MAAO,KAAK,OAAO,GAAG,gBAAgB,EAAE,MAAM,MAAM,CAAC,CAAC,GAAG,MAAM,QAAQ,IAAI,MAAM,gBAAgB,EAAE,MAAM,IAAI,CAAC,CAAC,KAAK,EAAE,YAAY,MAAM,SAAS,CAAC;AAAA,QACvM;AACF,YAAM,UAAU,GAAG;AAAA,IACrB;AAAA,EACF;AAtNE,gBADW,UACY,iBAAgB;AACvC;AAAA,gBAFW,UAEY,aAAqB;;;ACRvC,MAAM,eAAN,cAA2B,WAAyC;AAAA,IACzE,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,iBAAiB;AAAA,IACzC;AAAA,IAEA,YAAY,MAAkB,QAA6B;AACzD,YAAM,MAAM,EAAE,OAAO,iBAAiB,GAAG,OAAO,CAAC;AAAA,IACnD;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,OAAO,IAAI,SAAS,CAAC,MAAM,KAAK,IAAI,KAAK,MAAM,eAAe,IAAI,KAAK,SAAS,OAAO,KAAK,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC5H,WAAK,OAAO,IAAI,gBAAgB,CAAC,MAAM,KAAK,IAAI,KAAK,MAAM,eAAe,IAAI,KAAK,SAAS,OAAO,KAAK,CAAC,GAAG,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEnI,WAAK,MAAM,GAAG,gBAAgB,KAAK,mBAAmB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE5G,WAAK,KAAK,OAAO,GAAG,uBAAuB,KAAK,iBAAiB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACtG;AAAA,IACmB,MAAM,OAAe,QAA2B;AACjE,aAAO,MAAM,MAAM,OAAO,MAAM,KAAK,KAAK,MAAM,kBAAkB,KAAK,GAAG,QAAQ;AAAA,IACpF;AAAA,IAEU,kBAAkB,EAAE,MAAM,GAA4C;AAC9E,UAAI,CAAC,KAAK,MAAM,UAAW,MAAK,OAAO,eAAe,KAAK,OAAO,QAAQ;AAAA,IAC5E;AAAA,IAEU,gBAAgB,EAAE,MAAM,GAAoD;AACpF,WAAK,OAAO,MAAM;AAElB,WAAK,OAAO,OAAO,QAAQ,MAAM,CAAC,EAAE,OAAO,GAAG,OAAO,GAAG,GAAG,EAAE,OAAO,KAAK,OAAO,4GAAuG,CAAE,IAAI,CAAC;AAAA,IAChM;AAAA,EACF;;;AC/BO,MAAM,gBAAN,cAA4B,cAA4C;AAAA,IAAxE;AAAA;AAGL,0BAAO;AACP,0BAAU;AACV,0BAAU;AACV,0BAAU;AAAA;AAAA,IACV,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,iBAAiB;AAAA,IACzC;AAAA,IAEgB,SAAsB;AAEpC,WAAK,SAAS,IAAI,aAAa,KAAK,MAAM,KAAK,MAAM;AACrD,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,oDAAoD,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AACjJ,WAAK,SAAS,SAAS,UAAU,EAAE,WAAW,uCAAuC,MAAM,UAAU,WAAW,aAAa,IAAI,YAAY,IAAI,aAAa,IAAI,WAAW,IAAI,aAAa,IAAI,aAAa,EAAE,CAAC;AAClN,WAAK,gBAAgB,SAAS,QAAQ,EAAE,WAAW,8DAA8D,CAAC;AAClH,YAAM,WAAW,KAAK,OAAO,OAAO;AAEpC,eAAS,UAAU,IAAI,uBAAuB,yBAAyB;AACvE,WAAK,cAAc,OAAO,QAAQ;AAClC,aAAO,KAAK,GAAG,OAAO,KAAK,QAAQ,KAAK,aAAa,GAAG,KAAK;AAAA,IAC/D;AAAA,IAEgB,QAAc;AAC5B,WAAK,OAAO,MAAM;AAAA,IACpB;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,mBAAmB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAElG,WAAK,OAAO,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/E,WAAK,GAAG,iBAAiB,aAAa,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/E,WAAK,GAAG,iBAAiB,cAAc,KAAK,YAAY,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE/E,WAAK,OAAO,OAAO,GAAG,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAExE,WAAK,MAAM,GAAG,gBAAgB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACnG,WAAK,MAAM,GAAG,eAAe,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEnE,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC5F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,MAAM;AAAA,IAC1B;AAAA,IAEU,cAAoB;AAC5B,WAAK,OAAO,OAAO,GAAG,KAAK,YAAY;AAAA,IACzC;AAAA,IACU,cAAoB;AAC5B,WAAK,KAAK,KAAK,kBAAkB,GAAG,MAAM;AAC1C,mBAAa,KAAK,aAAa;AAC/B,WAAK,gBAAgBC,YAAW,MAAM,KAAK,WAAW,GAAG,KAAK,SAAS,QAAQ,OAAO,KAAK,MAAM;AAAA,IACnG;AAAA,IACU,aAAmB;AAC3B,UAAI,KAAK,OAAO,GAAG,QAAQ,SAAS,EAAG,QAAO,KAAK,YAAY;AAC/D,mBAAa,KAAK,aAAa,GAAG,KAAK,OAAO,SAAS;AACvD,WAAK,OAAO,OAAO,eAAe,KAAK,OAAO,OAAO;AAAA,IACvD;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,SAAS,KAAK,MAAM,MAAM,WAAW,IAAI,WAAW;AACxF,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,SAAS,IAAI;AACzG,WAAK,OAAO,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAClD,WAAK,WAAW,QAAW,KAAK,MAAM;AAAA,IACxC;AAAA,IAEmB,YAAkB;AACnC,WAAK,OAAO,QAAQ,GAAG,MAAM,UAAU;AAAA,IACzC;AAAA,EACF;AAvEE,gBADW,eACY,iBAAwB;AAC/C,gBAFW,eAEY,aAAqB;;;ACJvC,MAAM,gBAAN,cAA4B,cAAgE;AAAA,IAIjF,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,yBAAyB,MAAM,UAAU,WAAW,aAAa,IAAI,SAAS,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1L;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,oBAAoB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEnG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,iBAAiB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEpG,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzG,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC/F;AAAA,IAEU,cAAoB;AAC5B,UAAI,CAAC,KAAK,MAAM,MAAM,QAAS,MAAK,MAAM,OAAO,UAAU;AAAA,IAC7D;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,mBAAmB;AACjE,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,SAAS,KAAK,SAAS,MAAM,SAAS,OAAO;AAC/G,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA7BE,gBADW,eACY,iBAAwB;AAC/C,gBAFW,eAEY,aAAqB;;;ACHvC,MAAM,mBAAN,cAA+B,cAAmE;AAAA,IAIvF,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,4BAA4B,MAAM,UAAU,WAAW,aAAa,IAAI,YAAY,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAChM;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,eAAe;AAAA,IACnC;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAvBE,gBADW,kBACY,iBAAwB;AAC/C,gBAFW,kBAEY,aAAqB;;;ACDvC,MAAM,gBAAN,cAA4B,cAAgE;AAAA,IAGjG,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,UAAU;AAAA,IAClC;AAAA,IAEgB,SAAS;AACvB,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,0BAA0B,MAAM,UAAU,WAAW,aAAa,IAAI,MAAM,EAAE,GAAG,EAAE,kBAAkB,IAAI,QAAQ,OAAO,WAAW,KAAK,KAAK,CAAC;AAC7L,aAAO,KAAK,QAAQ,GAAG,KAAK;AAAA,IAC9B;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,MAAM,GAAG,gBAAgB,MAAM,KAAK,KAAK,KAAM,SAAS,YAAY,QAAQ,EAAE,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE/H,WAAK,KAAK,OAAO,GAAG,YAAY,KAAK,QAAQ,EAAE,QAAQ,KAAK,QAAQ,MAAM,MAAM,OAAO,EAAE,CAAC;AAC1F,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC5F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,KAAK;AAAA,IAClB;AAAA,IAEO,SAAe;AACpB,WAAK,KAAK,KAAK,OAAO,SAAS,WAAW,KAAK,KAAK,OAAO,SAAS,QAAQ,SAAS,IAAI,SAAS,MAAM,EAAE;AAAA,IAC5G;AAAA,IACO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,SAAS,IAAI;AACzG,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAnCE,gBADW,eACY,iBAAwB;AAC/C,gBAFW,eAEY,aAAqB;;;ACFvC,MAAM,qBAAN,cAAiC,cAAqE;AAAA,IAI3F,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,gCAAgC,MAAM,UAAU,WAAW,aAAa,IAAI,MAAM,IAAI,aAAa,IAAI,OAAO,IAAI,aAAa,IAAI,QAAQ,EAAE,GAAG,EAAE,kBAAkB,IAAI,QAAQ,OAAO,WAAW,KAAK,KAAK,CAAC;AAAA,IACtQ;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,gBAAgB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACnG,WAAK,MAAM,GAAG,gBAAgB,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEpE,WAAK,KAAK,OAAO,GAAG,qCAAqC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACjG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,SAAS,CAAC,KAAK,MAAM,MAAM;AAAA,IAC/C;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,QAAQ,WAAW,KAAK,MAAM,MAAM,SAAS,SAAS;AAC3F,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,WAAW,KAAK,SAAS,MAAM,SAAS,SAAS;AACnH,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA3BE,gBADW,oBACY,iBAAwB;AAC/C,gBAFW,oBAEY,aAAqB;;;ACFvC,MAAM,gBAAN,cAA4B,cAAgE;AAAA,IAGjG,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,UAAU;AAAA,IAClC;AAAA,IAEgB,SAAS;AACvB,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,0BAA0B,MAAM,UAAU,WAAW,aAAa,IAAI,MAAM,EAAE,GAAG,EAAE,kBAAkB,IAAI,QAAQ,OAAO,WAAW,KAAK,KAAK,CAAC;AAC7L,aAAO,KAAK,QAAQ,GAAG,KAAK;AAAA,IAC9B;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,MAAM,GAAG,gBAAgB,MAAM,KAAK,KAAK,KAAM,UAAU,YAAY,QAAQ,EAAE,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEhI,WAAK,KAAK,OAAO,GAAG,YAAY,KAAK,QAAQ,EAAE,QAAQ,KAAK,QAAQ,MAAM,MAAM,OAAO,EAAE,CAAC;AAC1F,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC5F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,SAAS;AAAA,IACtB;AAAA,IAEO,SAAe;AACpB,WAAK,KAAK,KAAK,OAAO,SAAS,WAAW,KAAK,KAAK,OAAO,SAAS,QAAQ,SAAS,IAAI,SAAS,MAAM,EAAE;AAAA,IAC5G;AAAA,IACO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,SAAS,IAAI;AACzG,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAnCE,gBADW,eACY,iBAAwB;AAC/C,gBAFW,eAEY,aAAqB;;;ACDvC,MAAM,iBAAN,cAA6B,cAAiE;AAAA,IAGnG,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,mBAAmB;AAAA,IAC3C;AAAA,IAEgB,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,0BAA0B,MAAM,UAAU,WAAW,aAAa,IAAI,WAAW,IAAI,aAAa,IAAI,UAAU,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC5N;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,wBAAwB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEvG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,0BAA0B,KAAK,QAAQ,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAC3G,WAAK,MAAM,GAAG,qBAAqB,KAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEvE,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1G,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAChG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,cAAc;AAAA,IAC3B;AAAA,IAEO,SAAe;AACpB,WAAK,CAAC,KAAK,MAAM,aAAa,YAAY,QAAQ,EAAE;AACpD,WAAK,SAAS;AAAA,IAChB;AAAA,IACO,WAAiB;AACtB,WAAK,MAAM,QAAQ,WAAW,KAAK,MAAM,aAAa,CAAC,KAAK;AAC5D,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,UAAU,KAAK,SAAS,MAAM,SAAS,QAAQ;AACjH,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AArCE,gBADW,gBACY,iBAAwB;AAC/C,gBAFW,gBAEY,aAAqB;;;ACHvC,MAAM,gBAAN,cAA4B,cAAgE;AAAA,IAGjG,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,gBAAgB;AAAA,IACxC;AAAA,IAEgB,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,yBAAyB,MAAM,UAAU,WAAW,aAAa,IAAI,SAAS,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC1L;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,yBAAyB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAExG,oBAAc,KAAK,IAAI,KAAK,aAAa,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAErF,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzG,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC/F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,QAAQ;AAAA,IACrB;AAAA,IACU,iBAAuB;AAC/B,WAAK,MAAM,QAAQ,YAAY;AAAA,IACjC;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,SAAS,KAAK,SAAS,MAAM,SAAS,OAAO;AAC/G,WAAK,GAAG,QAAQ,UAAU,KAAK,MAAM,GAAG;AACxC,WAAK,WAAW,0BAA0B;AAAA,IAC5C;AAAA,EACF;AAjCE,gBADW,eACY,iBAAwB;AAC/C,gBAFW,eAEY,aAAqB;;;ACFvC,MAAM,aAAN,cAAyB,cAA6D;AAAA,IAI3E,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,sBAAsB,MAAM,UAAU,WAAW,aAAa,IAAI,MAAM,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IACpL;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,iBAAiB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEhG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,cAAc,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEjG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC5F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM;AAAA,IAC7C;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,OAAO,iBAAiB;AAC5D,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,SAAS,IAAI;AACzG,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA7BE,gBADW,YACY,iBAAwB;AAC/C,gBAFW,YAEY,aAAqB;;;ACFvC,MAAM,gBAAN,cAA4B,cAAgE;AAAA,IAA5F;AAAA;AAGL,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,oDAAoD,MAAM,SAAS,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AACnK,WAAK,SAAS,SAAS,QAAQ,EAAE,WAAW,yBAAyB,CAAC;AACtE,WAAK,SAAS,SAAS,QAAQ,EAAE,WAAW,yBAAyB,CAAC;AACtE,aAAO,KAAK,QAAQ,OAAO,KAAK,QAAQ,KAAK,MAAM,GAAG,KAAK;AAAA,IAC7D;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,2BAA2B,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE1G,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,wBAAwB,KAAK,QAAQ,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACzG,WAAK,MAAM,GAAG,iCAAiC,KAAK,QAAQ,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAElH,WAAK,SAAS;AAAA,IAChB;AAAA,IAEA,MAAgB,cAA6B;AAC3C,YAAM,OAAO,KAAK,KAAK,KAAK,uBAAuB;AACnD,UAAI,MAAM;AACR,aAAK,KAAK,KAAK,KAAK,EAAE;AACtB,aAAK,KAAK,KAAK,UAAU;AAAA,MAC3B;AAAA,IACF;AAAA,IAEU,SAAe;AACvB,YAAM,MAAM,KAAK,MAAM,MAAM,gBAC3BC,YAAW,KAAK,MAAM,SAAS,SAAS;AAC1C,UAAI,QAAQ,MAAM,CAACA,aAAY,CAACA,UAAS,GAAG,EAAG,QAAO,MAAO,KAAK,OAAO,cAAc,IAAK,KAAK,KAAK;AACtG,MAAC,KAAK,OAAO,cAAcA,UAAS,GAAG,EAAE,SAAS,WAAW,MAAM,CAAC,IAAK,KAAK,KAAK;AAAA,IACrF;AAAA,IAEU,WAAiB;AACzB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ;AACnC,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA3CE,gBADW,eACY,iBAAgB;AACvC,gBAFW,eAEY,aAAqB;;;ACFvC,MAAM,iBAAN,cAA6B,cAAiE;AAAA,IAGnG,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,eAAe;AAAA,IACvC;AAAA,IAEgB,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,qDAAqD,aAAa,OAAO,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IACnL;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,mBAAmB,KAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrE,WAAK,MAAM,GAAG,cAAc,CAAC,OAAO,KAAK,GAAG,UAAU,OAAO,0BAA0B,EAAE,KAAK,GAAG,KAAK,GAAG,UAAU,OAAO,wBAAwB,EAAE,KAAK,GAAG,KAAK,SAAS,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AACrM,WAAK,MAAM,GAAG,iBAAiB,CAAC,OAAO,KAAK,MAAM,UAAU,UAAU,OAAO,qBAAqB,EAAE,KAAK,GAAG,KAAK,SAAS,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAErJ,WAAK,KAAK,OAAO,GAAG,wBAAwB,KAAK,QAAQ,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC5F,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC5G,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClG;AAAA,IAEU,cAAoB;AAC5B,OAAC,KAAK,MAAM,OAAO,UAAU,KAAK,MAAM,MAAM,OAAO,KAAK,MAAM,aAAa,IAAI,QAAQ,MAAO,KAAK,MAAM,OAAO,OAAO,IAAK;AAAA,IAChI;AAAA,IAEO,SAAe;AACpB,WAAK,GAAG,cAAc,CAAC,KAAK,MAAM,OAAO,SAAS,KAAK,MAAM,WAAW,KAAK,MAAM,OAAO,QAAQ,KAAK,SAAS;AAAA,IAClH;AAAA,IACO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,YAAY,KAAK,SAAS,MAAM,SAAS,UAAU;AACrH,WAAK,GAAG,QAAQ,CAAC,KAAK,MAAM,OAAO,UAAU,KAAK,MAAM,MAAM,OAAO,KAAK,MAAM,QAAQ,KAAK,MAAM,MAAM;AACzG,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AApCE,gBADW,gBACY,iBAAwB;AAC/C,gBAFW,gBAEY,aAAqB;;;ACHvC,MAAM,yBAAN,cAAqC,cAAyE;AAAA,IAGnH,IAAc,MAAM;AAClB,aAAO,KAAK,KAAK,KAAK,gBAAgB,GAAG;AAAA,IAC3C;AAAA,IAEgB,SAA4B;AAC1C,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,mCAAmC,MAAM,UAAU,WAAW,aAAa,IAAI,kBAAkB,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC7M;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,uBAAuB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEtG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,cAAoB;AAC5B,WAAK,KAAK,OAAO;AAAA,IACnB;AAAA,IAEO,WAAiB;AACtB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ;AACnC,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA3BE,gBADW,wBACY,iBAAwB;AAC/C,gBAFW,wBAEY,aAAqB;;;ACFvC,MAAM,kBAAN,cAA8B,cAAkE;AAAA,IAIrF,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,2BAA2B,MAAM,UAAU,WAAW,aAAa,IAAI,WAAW,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC9L;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,eAAe;AAAA,IACnC;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAvBE,gBADW,iBACY,iBAAwB;AAC/C,gBAFW,iBAEY,aAAqB;;;ACDvC,MAAM,mBAAN,cAA+B,cAAmE;AAAA,IAIvF,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,4BAA4B,MAAM,UAAU,WAAW,aAAa,IAAI,iBAAiB,IAAI,aAAa,IAAI,iBAAiB,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC3O;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,uBAAuB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEtG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,oBAAoB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEvG,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC5G,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,aAAa,CAAC,KAAK,MAAM,MAAM;AAAA,IACnD;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,aAAa,qBAAqB;AACtE,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,YAAY,KAAK,SAAS,MAAM,SAAS,UAAU;AACrH,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA7BE,gBADW,kBACY,iBAAwB;AAC/C,gBAFW,kBAEY,aAAqB;;;ACHvC,MAAM,uBAAN,cAAmC,cAAuE;AAAA,IAI/F,SAAS;AACvB,WAAK,UAAU,SAAS,UAAU,EAAE,MAAM,UAAU,WAAW,mCAAmC,WAAW,aAAa,IAAI,MAAM,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AACvL,aAAO,KAAK,KAAK,GAAG,KAAK;AAAA,IAC3B;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,uBAAuB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,MAAM,GAAG,mBAAmB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAElG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,oBAAoB,MAAM,KAAK,KAAK,UAAU,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEtI,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,SAAS;AAAA,IAC7B;AAAA,IAEO,WAAiB;AACtB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ;AACnC,WAAK,WAAW;AAAA,IAClB;AAAA,IAEA,IAAuB,UAAmB;AACxC,aAAO,KAAK,MAAM,MAAM,cAAc,CAAC,CAAC,KAAK,MAAM,SAAS,cAAc,CAAC,CAAC,KAAK,MAAM,SAAS;AAAA,IAClG;AAAA,EACF;AAhCE,gBADW,sBACY,iBAAwB;AAC/C,gBAFW,sBAEY,aAAqB;;;ACFvC,MAAM,8BAAN,cAA0C,cAA8E;AAAA,IAG7H,IAAc,MAAM;AAClB,aAAO,KAAK,KAAK,KAAK,gBAAgB,GAAG;AAAA,IAC3C;AAAA,IAEgB,SAAS;AACvB,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,wCAAwC,MAAM,UAAU,WAAW,aAAa,IAAI,uBAAuB,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAC7M,aAAO,KAAK,KAAK,GAAG,KAAK;AAAA,IAC3B;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,uBAAuB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,MAAM,GAAG,kCAAkC,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEjH,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,oBAAoB,MAAM,KAAK,KAAK,UAAU,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEtI,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,cAAoB;AAC5B,WAAK,KAAK,wBAAwB;AAAA,IACpC;AAAA,IAEO,WAAiB;AACtB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ;AACnC,WAAK,WAAW;AAAA,IAClB;AAAA,IAEA,IAAuB,UAAmB;AACxC,aAAO,KAAK,MAAM,MAAM,cAAc,CAAC,CAAC,KAAK,MAAM,SAAS,cAAc,CAAC,CAAC,KAAK,MAAM,SAAS;AAAA,IAClG;AAAA,EACF;AAnCE,gBADW,6BACY,iBAAwB;AAC/C,gBAFW,6BAEY,aAAqB;;;ACDvC,MAAM,OAAN,cAAmB,cAA0D;AAAA,IAA7E;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAU,aAA2B,CAAC;AAAA;AAAA,IAEtB,SAAyB;AAEvC,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,yBAAyB,GAAG,EAAE,kBAAkB,IAAI,QAAQ,WAAW,WAAW,KAAK,KAAK,CAAC;AACzI,YAAM,aAAa,SAAS,OAAO,EAAE,WAAW,oCAAoC,CAAC,GACnF,cAAc,SAAS,KAAK,EAAE,WAAW,yBAAyB,CAAC,GACnE,eAAe,SAAS,OAAO,EAAE,WAAW,0BAA0B,CAAC,GACvE,gBAAgB,SAAS,OAAO,EAAE,WAAW,2BAA2B,CAAC;AAC3E,WAAK,KAAK,IAAI,eAAe,KAAK,UAAU,KAAK,KAAK,iBAAiB,SAAS,OAAO,EAAE,KAAK,WAAW,WAAW,oBAAoB,CAAC,CAAC;AAC1I,WAAK,KAAK,IAAI,aAAa,KAAK,QAAQ,SAAS,KAAK,EAAE,WAAW,sCAAsC,CAAC;AAC1G,WAAK,KAAK,IAAI,cAAc,KAAK,SAAS,SAAS,KAAK,EAAE,WAAW,uCAAuC,CAAC;AAE7G,kBAAY,OAAO,KAAK,OAAO,GAAG,aAAa,OAAO,KAAK,KAAK,GAAG,cAAc,OAAO,KAAK,MAAM,GAAG,WAAW,OAAO,cAAc,aAAa;AACnJ,aAAO,KAAK,GAAG,OAAO,aAAa,UAAU,GAAG,KAAK;AAAA,IACvD;AAAA,IAEgB,OAAa;AAE3B,WAAK,KAAK,OAAO,GAAG,iCAAiC,KAAK,aAAa,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1G,WAAK,KAAK,OAAO,GAAG,+BAA+B,KAAK,WAAW,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,YAAY,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAExG,WAAK,UAAU,MAAM,iBAAiB,KAAK,OAAO,EAAE,aAAa,GAAG,CAAC,GAAG,KAAK,MAAM;AACnF,WAAK,UAAU,MAAM,iBAAiB,KAAK,QAAQ,EAAE,aAAa,GAAG,CAAC,GAAG,KAAK,OAAO;AAAA,IACvF;AAAA,IAEO,SAAe;AACpB,WAAK,YAAY,GAAG,KAAK,UAAU,GAAG,KAAK,WAAW;AAAA,IACxD;AAAA,IACO,cAAoB;AACzB,YAAM,UAAU,KAAK,SAAS,aAAa;AAC3C,UAAI,YAAY,KAAM,CAAC,KAAK,QAAQ,QAAQ,SAAS,SAAW,KAAK,QAAQ,QAAQ,eAAe,KAAK,QAAQ,MAAM,WAAW;AAAA,IACpI;AAAA,IACO,YAAkB;AACvB,YAAM,QAAQ,KAAK,SAAS,aAAa;AACzC,UAAI,UAAU,KAAM,MAAK,MAAM,QAAQ,aAAa,KAAK,MAAM,cAAc,SAAS;AAAA,IACxF;AAAA,IACO,aAAmB;AACxB,YAAM,SAAS,KAAK,SAAS,aAAa;AAC1C,UAAI,WAAW,KAAM,MAAK,OAAO,QAAQ,cAAc,KAAK,OAAO,cAAc,UAAU;AAAA,IAC7F;AAAA,IAEmB,YAAkB;AACnC,iBAAW,MAAM,KAAK,UAAW,oBAAmB,EAAE;AACtD,YAAM,UAAU;AAAA,IAClB;AAAA,EACF;AApDE,gBADW,MACY,iBAAwB;AAC/C,gBAFW,MAEY,aAAqB;;;ACFvC,MAAM,aAAN,cAAyB,cAA6D;AAAA,IAG3F,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,UAAU;AAAA,IAClC;AAAA,IAEgB,SAAS;AACvB,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,sBAAsB,MAAM,UAAU,WAAW,aAAa,IAAI,MAAM,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAC1K,aAAO,KAAK,KAAK,GAAG,KAAK;AAAA,IAC3B;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,MAAM,GAAG,gBAAgB,MAAM,KAAK,KAAK,KAAM,SAAS,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE1H,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC5F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,KAAK;AAAA,IAClB;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,SAAS,IAAI;AACzG,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA/BE,gBADW,YACY,iBAAwB;AAC/C,gBAFW,YAEY,aAAqB;;;ACFvC,MAAM,kBAAN,cAA8B,cAA4D;AAAA,IAI/F,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,oBAAoB;AAAA,IAC5C;AAAA,IAEgB,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,4BAA4B,MAAM,UAAU,WAAW,aAAa,IAAI,kBAAkB,IAAI,aAAa,IAAI,gBAAgB,IAAI,aAAa,IAAI,eAAe,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC/Q;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,sBAAsB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAErG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,mBAAmB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEtG,WAAK,KAAK,OAAO,GAAG,qCAAqC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC3G,WAAK,KAAK,OAAO,GAAG,qCAAqC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACjG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,UAAU;AAAA,IACvB;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,KAAK;AAC7D,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,WAAW,KAAK,SAAS,MAAM,SAAS,SAAS;AACnH,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AAjCE,gBADW,iBACY,iBAAwB;AAC/C,gBAFW,iBAEY,aAAqB;;;ACFvC,MAAM,yBAAN,cAAqC,cAAyE;AAAA,IAInG,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,oCAAoC,MAAM,UAAU,WAAW,aAAa,IAAI,UAAU,IAAI,aAAa,IAAI,UAAU,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IACrO;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,6BAA6B,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE5G,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,0BAA0B,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE7G,WAAK,KAAK,OAAO,GAAG,4CAA4C,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAClH,WAAK,KAAK,OAAO,GAAG,4CAA4C,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACxG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,mBAAmB,CAAC,KAAK,MAAM,MAAM;AAAA,IACzD;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,mBAAmB,4BAA4B;AACnF,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,kBAAkB,KAAK,SAAS,MAAM,SAAS,gBAAgB;AACjI,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA7BE,gBADW,wBACY,iBAAwB;AAC/C,gBAFW,wBAEY,aAAqB;;;ACFvC,MAAM,kBAAN,cAA8B,cAAkE;AAAA,IAIrF,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,4BAA4B,WAAW,aAAa,IAAI,MAAM,IAAI,aAAa,IAAI,OAAO,IAAI,aAAa,IAAI,QAAQ,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IACnO;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,gBAAgB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACnG,WAAK,MAAM,GAAG,gBAAgB,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEpE,WAAK,KAAK,OAAO,GAAG,qCAAqC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC/F,WAAK,KAAK,OAAO,GAAG,qCAAqC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IACjG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,SAAS,CAAC,KAAK,MAAM,MAAM;AAAA,IAC/C;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,OAAO,QAAQ,WAAW,KAAK,MAAM,MAAM,SAAS,SAAS;AAC3F,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,WAAW,KAAK,SAAS,MAAM,SAAS,SAAS;AACnH,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA5BE,gBADW,iBACY,iBAAwB;AAC/C,gBAFW,iBAEY,aAAqB;;;ACFvC,MAAM,aAAN,cAAyB,cAA6D;AAAA,IAG3F,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,UAAU;AAAA,IAClC;AAAA,IAEgB,SAAS;AACvB,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,sBAAsB,MAAM,UAAU,WAAW,aAAa,IAAI,MAAM,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAC1K,aAAO,KAAK,KAAK,GAAG,KAAK;AAAA,IAC3B;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,MAAM,GAAG,gBAAgB,MAAM,KAAK,KAAK,KAAM,UAAU,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE3H,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACtG,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC5F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,SAAS;AAAA,IACtB;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,MAAM,KAAK,SAAS,MAAM,SAAS,IAAI;AACzG,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA/BE,gBADW,YACY,iBAAwB;AAC/C,gBAFW,YAEY,aAAqB;;;ACHvC,MAAM,yBAAN,cAAqC,cAAyE;AAAA,IAGnH,IAAc,MAAM;AAClB,aAAO,KAAK,KAAK,KAAK,gBAAgB,GAAG;AAAA,IAC3C;AAAA,IAEgB,SAA4B;AAC1C,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,mCAAmC,MAAM,UAAU,WAAW,aAAa,IAAI,kBAAkB,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC7M;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,uBAAuB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEtG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,SAAS;AAAA,IAChB;AAAA,IAEU,cAAoB;AAC5B,WAAK,KAAK,OAAO;AAAA,IACnB;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAM;AACjB,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA7BE,gBADW,wBACY,iBAAwB;AAC/C,gBAFW,wBAEY,aAAqB;;;ACDvC,MAAM,iBAAN,cAA6B,cAAiE;AAAA,IAGnG,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,uBAAuB;AAAA,IAC/C;AAAA,IAEgB,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,0BAA0B,MAAM,UAAU,WAAW,aAAa,IAAI,UAAU,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC5L;AAAA,IAEgB,OAAa;AAE3B,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1G,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAChG;AAAA,IAEU,cAAoB;AAC5B,YAAM,OAAO,KAAK,MAAM;AACxB,aAAO,KAAK,OAAO,KAAK,EAAE,IAAI,KAAK,MAAM,WAAW;AAAA,IACtD;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ;AACnB,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,UAAU,KAAK,SAAS,MAAM,SAAS,QAAQ;AACjH,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA7BE,gBADW,gBACY,iBAAwB;AAC/C,gBAFW,gBAEY,aAAqB;;;ACFvC,MAAM,gBAAN,cAA4B,cAAgE;AAAA,IAIjF,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,yBAAyB,MAAM,UAAU,WAAW,aAAa,IAAI,cAAc,IAAI,aAAa,IAAI,cAAc,EAAE,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAClO;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,oBAAoB,KAAK,MAAM,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEnG,WAAK,GAAG,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE3E,WAAK,MAAM,GAAG,iBAAiB,KAAK,UAAU,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAEpG,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AACzG,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC/F;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,UAAU,CAAC,KAAK,MAAM,MAAM;AAAA,IAChD;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,iBAAiB;AAC/D,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,SAAS,KAAK,SAAS,MAAM,SAAS,OAAO;AAC/G,WAAK,GAAG,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AAC9C,WAAK,WAAW;AAAA,IAClB;AAAA,EACF;AA7BE,gBADW,eACY,iBAAwB;AAC/C,gBAFW,eAEY,aAAqB;;;ACHvC,MAAM,aAAN,cAAyB,cAA6D;AAAA,IAG3F,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,eAAe;AAAA,IACvC;AAAA,IAEgB,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,UAAU,EAAE,WAAW,iDAAiD,aAAa,OAAO,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAAA,IAC/K;AAAA,IAEgB,OAAa;AAE3B,WAAK,MAAM,GAAG,iBAAiB,CAAC,MAAM,KAAK,EAAE,QAAQ,SAAS,MAAM,EAAE,GAAG,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAE/H,oBAAc,KAAK,SAAS,KAAK,aAAa,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE1F,WAAK,MAAM,GAAG,qBAAqB,KAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEvE,WAAK,KAAK,OAAO,GAAG,sBAAsB,KAAK,QAAQ,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1F,WAAK,KAAK,OAAO,GAAG,wBAAwB,KAAK,QAAQ,EAAE,QAAQ,KAAK,OAAO,CAAC;AAChF,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1G,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC9F,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,WAAW;AAAA,IACxB;AAAA,IACU,iBAAuB;AAC/B,WAAK,MAAM,aAAa;AAAA,IAC1B;AAAA,IAEO,SAAe;AACpB,WAAK,GAAG,cAAc,KAAK,MAAM,WAAW,KAAK,MAAM,MAAM,aAAa,IAAI,KAAK;AACnF,WAAK,SAAS;AAAA,IAChB;AAAA,IACO,WAAiB;AACtB,WAAK,MAAM,QAAQ,QAAQ,KAAK,MAAM,QAAQ;AAC9C,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,UAAU,KAAK,SAAS,MAAM,SAAS,QAAQ;AACjH,WAAK,GAAG,QAAQ,eAAe,KAAK,MAAM,GAAG,0BAAqBA,qBAAoB,KAAK,SAAS,KAAK,UAAU,YAAY,KAAK,SAAS,MAAM,SAAS,UAAU,CAAC;AACvK,WAAK,WAAW,oBAAoB;AAAA,IACtC;AAAA,EACF;AA1CE,gBADW,YACY,iBAAwB;AAC/C,gBAFW,YAEY,aAAqB;;;ACDvC,MAAM,wBAAN,cAAoC,cAAwE;AAAA,IAA5G;AAAA;AAGL,0BAAU;AACV,0BAAU;AACV,0BAAU;AACV,0BAAU;AAAA;AAAA,IACV,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,eAAe;AAAA,IACvC;AAAA,IAEgB,SAAS;AAEvB,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,6DAA6D,GAAG,EAAE,kBAAkB,IAAI,WAAW,KAAK,KAAK,CAAC;AAC7J,WAAK,OAAO,SAAS,QAAQ,EAAE,WAAW,0BAA0B,aAAa,OAAO,CAAC;AACzF,WAAK,SAAS,SAAS,QAAQ,EAAE,WAAW,yBAAyB,aAAa,IAAI,CAAC;AACvF,WAAK,WAAW,SAAS,QAAQ,EAAE,WAAW,2BAA2B,aAAa,OAAO,CAAC;AAC9F,WAAK,YAAY,SAAS,QAAQ,EAAE,WAAW,wBAAwB,aAAa,OAAO,CAAC;AAE5F,aAAO,KAAK,GAAG,OAAO,KAAK,MAAM,KAAK,QAAQ,KAAK,UAAU,KAAK,SAAS,GAAG,KAAK;AAAA,IACrF;AAAA,IAEgB,OAAa;AAE3B,oBAAc,KAAK,SAAS,KAAK,aAAa,KAAK,gBAAgB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE1F,WAAK,MAAM,GAAG,qBAAqB,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AACzE,WAAK,MAAM,GAAG,cAAc,CAAC,OAAO,KAAK,UAAU,UAAU,OAAO,0BAA0B,EAAE,KAAK,GAAG,KAAK,SAAS,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AACjJ,WAAK,MAAM,GAAG,mBAAmB,KAAK,cAAc,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC3E,WAAK,MAAM,GAAG,iBAAiB,CAAC,OAAO,KAAK,MAAM,UAAU,UAAU,OAAO,qBAAqB,EAAE,KAAK,GAAG,KAAK,SAAS,IAAI,EAAE,QAAQ,KAAK,OAAO,CAAC;AAErJ,WAAK,KAAK,OAAO,GAAG,wBAAwB,KAAK,QAAQ,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC5F,WAAK,KAAK,OAAO,GAAG,sBAAsB,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAChF,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAC1G,WAAK,KAAK,OAAO,GAAG,oCAAoC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAC9F,WAAK,KAAK,OAAO,GAAG,sCAAsC,KAAK,UAAU,EAAE,QAAQ,KAAK,OAAO,CAAC;AAAA,IAClG;AAAA,IAEU,cAAoB;AAC5B,OAAC,KAAK,MAAM,OAAO,UAAU,KAAK,MAAM,MAAM,OAAO,KAAK,MAAM,WAAW,IAAI,QAAQ,MAAO,KAAK,MAAM,OAAO,OAAO,IAAK;AAAA,IAC9H;AAAA,IACU,iBAAuB;AAC/B,WAAK,MAAM,aAAa;AAAA,IAC1B;AAAA,IAEO,SAAe;AACpB,WAAK,OAAO,cAAc,EAAE,SAAS,KAAK,OAAO,MAAM,cAAc,SAAS,EAAE,KAAK,SAAS,KAAK,MAAM,KAAK;AAC9G,WAAK,SAAS,GAAG,KAAK,aAAa;AAAA,IACrC;AAAA,IACO,WAAiB;AACtB,WAAK,KAAK,cAAc,KAAK,MAAM,WAAW,KAAK,MAAM,MAAM,aAAa,IAAI,KAAK;AAAA,IACvF;AAAA,IACO,eAAqB;AAC1B,WAAK,SAAS,cAAc,KAAK,MAAM,WAAW,KAAK,MAAM,OAAO,QAAQ,KAAK;AAAA,IACnF;AAAA,IACO,WAAiB;AACtB,WAAK,MAAM,QAAQ,QAAQ,KAAK,MAAM,QAAQ;AAC9C,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,UAAU,KAAK,SAAS,MAAM,SAAS,QAAQ;AACjH,WAAK,GAAG,QAAQ,CAAC,KAAK,MAAM,OAAO,UAAU,KAAK,MAAM,MAAM,OAAO,eAAe,KAAK,MAAM,GAAG,0BAAqBA,qBAAoB,KAAK,SAAS,KAAK,UAAU,YAAY,KAAK,SAAS,MAAM,SAAS,UAAU,CAAC,MAAM;AAClO,WAAK,WAAW,oBAAoB;AAAA,IACtC;AAAA,EACF;AA5DE,gBADW,uBACY,iBAAwB;AAC/C,gBAFW,uBAEY,aAAqB;;;ACFvC,MAAM,qBAAN,cAAiC,cAAwE;AAAA,IAAzG;AAAA;AAEL,0BAAU;AAAA;AAAA,IAEM,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,uDAAuD,WAAW,sCAAsC,CAAC;AACrJ,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,6DAA6D,WAAW,aAAa,IAAI,oBAAoB,EAAE,CAAC;AAC/J,aAAO,KAAK,GAAG,QAAQ,KAAK,OAAO,GAAG,KAAK;AAAA,IAC7C;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,EAAE;AAAA,IAClD;AAAA,IAEgB,OAAa;AAE3B,WAAK,QAAQ,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEhF,WAAK,KAAK,OAAO,GAAG,mCAAmC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC3G;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,UAAU,CAAC,KAAK,MAAM,MAAM;AAAA,IAChD;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,UAAU,oBAAoB;AAClE,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,OAAO;AACzE,WAAK,QAAQ,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AACnD,WAAK,WAAW,IAAI,KAAK,OAAO;AAAA,IAClC;AAAA,EACF;AA/BE,gBADW,oBACY,iBAAgB;;;ACDlC,MAAM,kBAAN,cAA8B,cAAqE;AAAA,IAAnG;AAAA;AAEL,0BAAU;AAAA;AAAA,IAEM,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,oDAAoD,WAAW,qCAAqC,CAAC;AACjJ,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,0DAA0D,WAAW,aAAa,IAAI,iBAAiB,EAAE,CAAC;AACzJ,aAAO,KAAK,GAAG,QAAQ,KAAK,OAAO,GAAG,KAAK;AAAA,IAC7C;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,EAAE;AAAA,IAClD;AAAA,IAEgB,OAAa;AAE3B,WAAK,QAAQ,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEhF,WAAK,KAAK,OAAO,GAAG,gCAAgC,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACxG;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,OAAO,CAAC,KAAK,MAAM,MAAM;AAAA,IAC7C;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,OAAO,iBAAiB;AAC5D,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,IAAI;AACtE,WAAK,QAAQ,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AACnD,WAAK,WAAW,IAAI,KAAK,OAAO;AAAA,IAClC;AAAA,EACF;AA/BE,gBADW,iBACY,iBAAgB;;;ACDlC,MAAM,iBAAN,cAA6B,cAAoE;AAAA,IAAjG;AAAA;AAEL,0BAAU;AAAA;AAAA,IAEM,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,kEAAkE,WAAW,uCAAuC,CAAC;AACjK,WAAK,UAAU,SAAS,UAAU,EAAE,WAAW,wEAAwE,WAAW,aAAa,IAAI,gBAAgB,EAAE,CAAC;AACtK,aAAO,KAAK,GAAG,QAAQ,KAAK,OAAO,GAAG,KAAK;AAAA,IAC7C;AAAA,IAEgB,QAAc;AAE5B,WAAK,KAAK,IAAI,mBAAmB,QAAQ,KAAK,EAAE;AAAA,IAClD;AAAA,IAEgB,OAAa;AAE3B,WAAK,QAAQ,iBAAiB,SAAS,KAAK,aAAa,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEhF,WAAK,KAAK,OAAO,GAAG,4CAA4C,KAAK,UAAU,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAAA,IACpH;AAAA,IAEU,cAAoB;AAC5B,WAAK,MAAM,OAAO,mBAAmB,CAAC,KAAK,MAAM,MAAM;AAAA,IACzD;AAAA,IAEO,WAAiB;AACtB,WAAK,MAAM,QAAQ,KAAK,MAAM,MAAM,mBAAmB,4BAA4B;AACnF,WAAK,MAAM,MAAMC,qBAAoB,KAAK,SAAS,KAAK,UAAU,gBAAgB;AAClF,WAAK,QAAQ,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM;AACnD,WAAK,WAAW,IAAI,KAAK,OAAO;AAAA,IAClC;AAAA,EACF;AA/BE,gBADW,gBACY,iBAAgB;;;ACNlC,MAAe,eAAf,cAA4H,cAAiC;AAAA,IAA7J;AAAA;AAIL,0BAAO,SAAc,CAAC;AAAA;AAAA,IACtB,IAAc,OAAO;AACnB,aAAO,KAAK,KAAK,KAAK,oBAAoB;AAAA,IAC5C;AAAA,IACA,IAAW,SAAS;AAClB,aAAQ,KAAK,YAAoC;AAAA,IACnD;AAAA,IAEgB,QAAQ;AACtB,YAAM,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ,CAAC,KAAK,OAAO;AAC5D,iBAAW,QAAQ,MAAO,MAAK,UAAU,IAAI,oBAAoB;AACjE,WAAK,KAAK,IAAI,oBAAoB,OAAO,GAAG,KAAK;AAAA,IACnD;AAAA,IACgB,UAAgB;AAC9B,iBAAW,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ,CAAC,KAAK,OAAO,EAAG,MAAK,OAAO;AAAA,IAClF;AAAA,IAEgB,OAAa;AAE3B,iBAAW,QAAQ,KAAK,MAAM,SAAS,KAAK,QAAQ,CAAC,KAAK,OAAO,EAAG,MAAK,iBAAiB,gBAAgB,KAAK,oBAAoB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE1J,WAAK,MAAM,MAAM,OAAO,KAAK,GAAG,KAAK,MAAM;AAAA,IAC7C;AAAA,IAEU,qBAA2B;AACnC,WAAK,MAAM,MAAM,IAAI,IAAI;AAAA,IAC3B;AAAA,IAEU,UAAU,OAAiB;AACnC,aAAQ,KAAK,QAAQ,OAAS,KAAK,UAAU,MAAM,CAAC;AAAA,IACtD;AAAA,EACF;AAlCE,gBADoB,cACG,iBAAwB;AAC/C,gBAFoB,cAEG,cAAsB;AAC7C,gBAHoB,cAGG,YAAqB,CAAC;;;ACDxC,MAAM,oBAAN,cAAgC,aAAwD;AAAA,IAAxF;AAAA;AAGL,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,2BAA2B,WAAW,aAAa,IAAI,QAAQ,IAAI,EAAE,CAAC;AAClH,WAAK,WAAW,SAAS,OAAO,EAAE,WAAW,4BAA4B,WAAW,aAAa,IAAI,SAAS,IAAI,EAAE,CAAC;AACrH,aAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,QAAQ,CAAC;AAAA,IACrD;AAAA,EACF;AAVE,gBADW,mBACY,iBAAgB;AACvC,gBAFW,mBAEY,YAAW,CAAC,aAAa,YAAY;;;ACDvD,MAAM,mBAAN,cAA+B,aAAwD;AAAA,IAAvF;AAAA;AAGL,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,2BAA2B,WAAW,aAAa,IAAI,QAAQ,IAAI,EAAE,CAAC;AAClH,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,2BAA2B,WAAW,aAAa,IAAI,QAAQ,IAAI,EAAE,CAAC;AAClH,aAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,OAAO,CAAC;AAAA,IACpD;AAAA,EACF;AAVE,gBADW,kBACY,iBAAgB;AACvC,gBAFW,kBAEY,YAAW,CAAC,aAAa,WAAW;;;ACHtD,MAAM,mBAAN,cAA+B,aAAwD;AAAA,IAI5E,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,+BAA+B,WAAW,aAAa,IAAI,WAAW,IAAI,aAAa,IAAI,UAAU,EAAE,CAAC;AAAA,IAC9J;AAAA,EACF;AANE,gBADW,kBACY,iBAAgB;AACvC,gBAFW,kBAEY,YAAW,CAAC,UAAU;;;ACDxC,MAAM,kBAAN,cAA8B,aAAwD;AAAA,IAI3E,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,8BAA8B,WAAW,aAAa,IAAI,SAAS,EAAE,CAAC;AAAA,IAC5H;AAAA,EACF;AANE,gBADW,iBACY,iBAAgB;AACvC,gBAFW,iBAEY,YAAW,CAAC,SAAS;;;ACDvC,MAAM,uBAAN,cAAmC,aAAwD;AAAA,IAA3F;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,sEAAsE,CAAC;AACnH,WAAK,QAAQ,SAAS,OAAO,EAAE,WAAW,uCAAuC,WAAW,aAAa,IAAI,qBAAqB,EAAE,CAAC;AACrI,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,yCAAyC,WAAW,aAAa,IAAI,oBAAoB,EAAE,CAAC;AACxI,aAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,OAAO,KAAK,OAAO,CAAC;AAAA,IAChE;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,MAAM,GAAG,sBAAsB,KAAK,yBAAyB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC1H;AAAA,IAEU,wBAAwB,EAAE,MAAM,GAAkD;AAC1F,WAAK,QAAQ,cAAc,GAAG,KAAK;AAAA,IACrC;AAAA,EACF;AAtBE,gBADW,sBACY,iBAAgB;AACvC,gBAFW,sBAEY,YAAW,CAAC,kBAAkB,kBAAkB;;;ACDlE,MAAM,iBAAN,cAA6B,aAAwD;AAAA,IAArF;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,+DAA+D,CAAC;AAC5G,WAAK,QAAQ,SAAS,OAAO,EAAE,WAAW,gCAAgC,WAAW,aAAa,IAAI,cAAc,IAAI,EAAE,CAAC;AAC3H,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,kCAAkC,WAAW,aAAa,IAAI,aAAa,IAAI,EAAE,CAAC;AAC9H,WAAK,WAAW,SAAS,OAAO,EAAE,WAAW,mCAAmC,WAAW,aAAa,IAAI,eAAe,IAAI,EAAE,CAAC;AAClI,aAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,QAAQ,CAAC;AAAA,IAC/E;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,KAAK,KAAK,iBAAiB,GAAG,MAAM,GAAG,YAAY,KAAK,mBAAmB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAEvG,WAAK,MAAM,GAAG,gBAAgB,KAAK,mBAAmB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC9G;AAAA,IAEU,kBAAkB,EAAE,MAAM,GAA8E;AAChH,WAAK,QAAQ,YAAY,GAAG,KAAK,KAAK,QAAQ,MAAM,8GAAyG,EAAE,GAAG,KAAK;AAAA,IACzK;AAAA,EACF;AA1BE,gBADW,gBACY,iBAAgB;AACvC,gBAFW,gBAEY,YAAW,CAAC,YAAY,cAAc,aAAa;;;ACFrE,MAAM,qBAAN,cAAiC,aAAwD;AAAA,IAAzF;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,mEAAmE,CAAC;AAChH,WAAK,QAAQ,SAAS,OAAO,EAAE,WAAW,oCAAoC,WAAW,aAAa,IAAI,kBAAkB,IAAI,EAAE,CAAC;AACnI,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,sCAAsC,WAAW,aAAa,IAAI,iBAAiB,IAAI,EAAE,CAAC;AACtI,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,sCAAsC,WAAW,aAAa,IAAI,kBAAkB,IAAI,EAAE,CAAC;AACvI,aAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,OAAO,KAAK,SAAS,KAAK,OAAO,CAAC;AAAA,IAC9E;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,KAAK,KAAK,qBAAqB,GAAG,MAAM,GAAG,YAAY,KAAK,uBAAuB,EAAE,QAAQ,KAAK,OAAO,CAAC;AAE/G,WAAK,MAAM,GAAG,oBAAoB,KAAK,uBAAuB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IACtH;AAAA,IAEU,sBAAsB,EAAE,MAAM,GAAsF;AAC5H,WAAK,QAAQ,YAAY,GAAG,KAAK,KAAK,QAAQ,MAAM,8GAAyG,EAAE,GAAG,KAAK;AAAA,IACzK;AAAA,EACF;AA1BE,gBADW,oBACY,iBAAgB;AACvC,gBAFW,oBAEY,YAAW,CAAC,gBAAgB,kBAAkB,gBAAgB;;;ACHhF,MAAM,oBAAN,cAAgC,aAAwD;AAAA,IAAxF;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,mEAAmE,CAAC;AAChH,WAAK,aAAa,SAAS,OAAO,EAAE,WAAW,yCAAyC,WAAW,aAAa,IAAI,oBAAoB,IAAI,EAAE,CAAC;AAC/I,WAAK,WAAW,SAAS,OAAO,EAAE,WAAW,uCAAuC,WAAW,aAAa,IAAI,kBAAkB,IAAI,EAAE,CAAC;AACzI,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,sCAAsC,WAAW,aAAa,IAAI,iBAAiB,IAAI,EAAE,CAAC;AACtI,aAAO,KAAK,UAAU,CAAC,KAAK,SAAS,KAAK,YAAY,KAAK,UAAU,KAAK,OAAO,CAAC;AAAA,IACpF;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,MAAM,GAAG,mBAAmB,KAAK,sBAAsB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IACpH;AAAA,IAEU,qBAAqB,EAAE,MAAM,GAA+C;AACpF,WAAK,QAAQ,cAAc,KAAK,KAAK,KAAK,oBAAoB,GAAG,QAAQ,KAAK,KAAK;AAAA,IACrF;AAAA,EACF;AAxBE,gBADW,mBACY,iBAAgB;AACvC,gBAFW,mBAEY,YAAW,CAAC,oBAAoB,kBAAkB,eAAe;;;ACHnF,MAAM,iBAAN,cAA6B,aAAwD;AAAA,IAArF;AAAA;AAGL,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,SAAS,SAAS,OAAO,EAAE,WAAW,0BAA0B,WAAW,aAAa,IAAI,KAAK,EAAE,CAAC;AACzG,WAAK,SAAS,SAAS,OAAO,EAAE,WAAW,0BAA0B,WAAW,aAAa,IAAI,KAAK,EAAE,CAAC;AACzG,aAAO,KAAK,UAAU,CAAC,KAAK,QAAQ,KAAK,MAAM,CAAC;AAAA,IAClD;AAAA,EACF;AAVE,gBADW,gBACY,iBAAgB;AACvC,gBAFW,gBAEY,YAAW,CAAC,OAAO,KAAK;;;ACH1C,MAAM,gBAAN,cAA4B,aAAwD;AAAA,IAGzE,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,gFAAgF,WAAW,SAAS,aAAa,IAAI,oBAAoB,CAAC,2GAA2G,aAAa,IAAI,qBAAqB,CAAC,UAAU,CAAC;AAAA,IAC7V;AAAA,EACF;AALE,gBADW,eACY,iBAAgB;;;ACFlC,MAAM,sBAAN,cAAkC,aAAwD;AAAA,IAG/E,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,uFAAuF,WAAW,oBAAoB,CAAC;AAAA,IAC7K;AAAA,EACF;AALE,gBADW,qBACY,iBAAgB;;;ACGlC,MAAM,sBAAN,cAAkC,aAAwD;AAAA,IAA1F;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,QAAQ,EAAE,WAAW,6DAA6D,aAAa,IAAI,CAAC;AAC5H,WAAK,SAAS,SAAS,OAAO,EAAE,WAAW,0DAA0D,CAAC;AACtG,WAAK,SAAS,SAAS,QAAQ,EAAE,WAAW,aAAa,IAAI,YAAY,EAAE,CAAC;AAC5E,WAAK,UAAU,SAAS,QAAQ,EAAE,WAAW,aAAa,IAAI,WAAW,EAAE,CAAC;AAC5E,WAAK,YAAY,SAAS,QAAQ,EAAE,WAAW,aAAa,IAAI,aAAa,EAAE,CAAC;AAChF,YAAM,cAAc,SAAS,MAAM;AACnC,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,8DAA8D,CAAC;AAC3G,WAAK,GAAG,OAAO,KAAK,SAAS,KAAK,SAAS,YAAY,OAAO,KAAK,QAAQ,KAAK,SAAS,KAAK,SAAS,GAAG,YAAY;AACtH,aAAO,KAAK;AAAA,IACd;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,KAAK,KAAK,iBAAiB,GAAG,MAAM,GAAG,YAAY,KAAK,mBAAmB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAEnH,WAAK,MAAM,GAAG,gBAAgB,KAAK,mBAAmB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IAC9G;AAAA,IAEU,kBAAkB,EAAE,MAAM,GAA8E;AAChH,WAAK,QAAQ,cAAc,GAAG,KAAK;AAAA,IACrC;AAAA,EACF;AA/BE,gBADW,qBACY,iBAAgB;AACvC,gBAFW,qBAEY,YAAW,CAAC,YAAY,cAAc,aAAa;;;ACFrE,MAAM,0BAAN,cAAsC,aAAwD;AAAA,IAA9F;AAAA;AAGL,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AACP,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,QAAQ,EAAE,WAAW,iEAAiE,aAAa,IAAI,CAAC;AAChI,WAAK,SAAS,SAAS,OAAO,EAAE,WAAW,8DAA8D,CAAC;AAC1G,WAAK,SAAS,SAAS,QAAQ,EAAE,WAAW,aAAa,IAAI,gBAAgB,EAAE,CAAC;AAChF,WAAK,UAAU,SAAS,QAAQ,EAAE,WAAW,aAAa,IAAI,eAAe,EAAE,CAAC;AAChF,WAAK,WAAW,SAAS,QAAQ,EAAE,WAAW,aAAa,IAAI,gBAAgB,EAAE,CAAC;AAClF,YAAM,cAAc,SAAS,MAAM;AACnC,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,kEAAkE,CAAC;AAC/G,WAAK,GAAG,OAAO,KAAK,SAAS,KAAK,SAAS,YAAY,OAAO,KAAK,QAAQ,KAAK,SAAS,KAAK,QAAQ,GAAG,YAAY;AACrH,aAAO,KAAK;AAAA,IACd;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,KAAK,KAAK,qBAAqB,GAAG,MAAM,GAAG,YAAY,KAAK,uBAAuB,EAAE,MAAM,MAAM,QAAQ,KAAK,OAAO,CAAC;AAE3H,WAAK,MAAM,GAAG,oBAAoB,KAAK,uBAAuB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IACtH;AAAA,IAEU,sBAAsB,EAAE,MAAM,GAAsF;AAC5H,WAAK,QAAQ,cAAc,GAAG,KAAK;AAAA,IACrC;AAAA,EACF;AA/BE,gBADW,yBACY,iBAAgB;AACvC,gBAFW,yBAEY,YAAW,CAAC,gBAAgB,kBAAkB,gBAAgB;;;ACHhF,MAAM,mBAAN,cAA+B,aAAwD;AAAA,IAAvF;AAAA;AAGL,0BAAO;AAAA;AAAA,IAES,SAAS;AACvB,WAAK,UAAU,SAAS,OAAO,EAAE,WAAW,oFAAoF,WAAW,GAAG,aAAa,IAAI,oBAAoB,CAAC,GAAG,aAAa,IAAI,qBAAqB,CAAC,GAAG,CAAC;AAClO,WAAK,OAAO,SAAS,KAAK,EAAE,WAAW,oCAAoC,CAAC;AAC5E,aAAO,KAAK,GAAG,aAAa,KAAK,MAAM,KAAK,GAAG,SAAS,GAAG,KAAK;AAAA,IAClE;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,MAAM,GAAG,sBAAsB,KAAK,yBAAyB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AACxH,WAAK,MAAM,GAAG,qBAAqB,KAAK,wBAAwB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IACxH;AAAA,IAEU,wBAAwB,EAAE,MAAM,GAAkD;AAC1F,WAAK,KAAK,cAAc,GAAG,KAAK;AAAA,IAClC;AAAA,IAEU,uBAAuB,EAAE,MAAM,GAAiD;AACxF,WAAK,GAAG,aAAa,qBAAqB,KAAK,KAAK,KAAK,eAAe,GAAG,WAAW,OAAO,IAAI,KAAK,MAAM;AAAA,IAC9G;AAAA,EACF;AAxBE,gBADW,kBACY,iBAAgB;AACvC,gBAFW,kBAEY,YAAW,CAAC,UAAU;;;ACLxC,MAAM,wBAAN,cAAoC,aAAwD;AAAA,IAGjF,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,6DAA6D,WAAW,eAAe,CAAC;AAAA,IAC9I;AAAA,EACF;AALE,gBADW,uBACY,iBAAgB;;;ACClC,MAAM,kBAAN,cAA8B,aAAwD;AAAA,IAI3E,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,kFAAkF,WAAW,kBAAkB,CAAC;AAAA,IACtK;AAAA,IAEgB,OAAa;AAC3B,YAAM,KAAK;AAEX,WAAK,MAAM,GAAG,wBAAwB,KAAK,oBAAoB,EAAE,MAAM,KAAK,KAAK,QAAQ,OAAO,QAAQ,KAAK,OAAO,CAAC;AAAA,IACvH;AAAA,IAEU,mBAAmB,GAAoD;AAC/E,YAAM,UAAU,KAAK,MAAM,SAAS,SAAS,cAAc,EAAE,KAAK;AAClE,WAAK,GAAG,cAAc,SAAS,SAAS,WAAW,EAAE,QAAQ,CAAC;AAAA,IAChE;AAAA,EACF;AAjBE,gBADW,iBACY,iBAAgB;AACvC,gBAFW,iBAEY,YAAW,CAAC,SAAS;;;ACHvC,MAAM,eAAN,cAA2B,aAAwD;AAAA,IAIxE,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,2BAA2B,WAAW,aAAa,IAAI,MAAM,EAAE,CAAC;AAAA,IACtH;AAAA,EACF;AANE,gBADW,cACY,iBAAgB;AACvC,gBAFW,cAEY,YAAW,CAAC,MAAM;;;ACFpC,MAAM,kBAAN,cAA8B,aAAwD;AAAA,IAI3E,SAAS;AACvB,aAAQ,KAAK,UAAU,SAAS,OAAO,EAAE,WAAW,8BAA8B,WAAW,aAAa,IAAI,SAAS,EAAE,CAAC;AAAA,IAC5H;AAAA,EACF;AANE,gBADW,iBACY,iBAAgB;AACvC,gBAFW,iBAEY,YAAW,CAAC,SAAS;;;ACNvC,MAAM,OAAO;AAAA;AAAA;;;ACAb,MAAM,QAAQ;AAAA;AAAA;;;ACAd,MAAM,SAAS;AAAA;AAAA;;;ACAf,MAAM,OAAO;AAAA;AAAA;AAAA;;;ACAb,MAAM,OAAO;AAAA;AAAA;AAAA;;;ACAb,MAAM,WAAW;AAAA;AAAA;;;ACAjB,MAAM,OAAO;AAAA;AAAA;AAAA;;;ACAb,MAAM,SAAS;AAAA;AAAA;AAAA;;;ACAf,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAxB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAxB,MAAM,WAAW;AAAA;AAAA;;;ACAjB,MAAM,WAAW;AAAA;AAAA;;;ACAjB,MAAM,mBAAmB;AAAA;AAAA;;;ACAzB,MAAM,mBAAmB;AAAA;AAAA;;;ACAzB,MAAM,UAAU;AAAA;AAAA;;;ACAhB,MAAMC,QAAO;AAAA;AAAA;;;ACAb,MAAM,UAAU;AAAA;AAAA;AAAA;;;ACAhB,MAAM,mBAAmB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAzB,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAvB,MAAM,gBAAgB;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAtB,MAAM,aAAa;AAAA;AAAA;;;ACAnB,MAAM,YAAY;AAAA;AAAA;;;ACAlB,MAAM,cAAc;AAAA;AAAA;;;ACApB,MAAM,iBAAiB;AAAA;AAAA;;;ACAvB,MAAM,gBAAgB;AAAA;AAAA;;;ACAtB,MAAM,iBAAiB;AAAA;AAAA;;;ACAvB,MAAM,eAAe;AAAA;AAAA;;;ACArB,MAAM,eAAe;AAAA;AAAA;;;ACArB,MAAM,wBAAwB;AAAA;AAAA;AAAA;;;ACA9B,MAAM,aAAa;AAAA;AAAA;AAAA;;;ACAnB,MAAM,YAAY;AAAA;AAAA;;;ACAlB,MAAM,WAAW;AAAA;AAAA;;;ACAjB,MAAM,eAAe;AAAA;AAAA;;;ACArB,MAAM,qBAAqB;;;ACA3B,MAAM,sBAAsB;;;ACA5B,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;;;ACAZ,MAAM,MAAM;AAAA;AAAA;AAAA;AAAA;;;ACAZ,MAAM,iBAAiB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAvB,MAAM,kBAAkB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACAxB,MAAM,qBAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACA3B,MAAM,gBAAgB;;;ACAtB,MAAM,aAAa;;;ACAnB,MAAM,WAAW;;;ACAjB,MAAM,WAAW;;;ACAjB,MAAM,OAAO;;;ACAb,MAAM,UAAU;;;ACAhB,MAAM,aAAa;;;ACAnB,MAAM,aAAa;;;ACAnB,MAAM,WAAW;;;ACAjB,MAAM,WAAW;;;ACAjB,MAAM,eAAe;;;ACArB,MAAM,QAAQ;;;ACAd,MAAM,MAAM;;;ACAZ,MAAM,UAAU;;;ACAvB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;A3OkBA,SAAO,OAAO,OAAO,KAAK,aAAE;","names":["keys","_a","_b","keys2","state","prev","prev","keys","_a","init","capture","setTimeout","win","requestAnimationFrame","settings","win","_a","stable","isPOJO","setTimeout","prev","loop","requestAnimationFrame","FN_KEY","oncePerSession","uid","keys","state","limited","capture","force","loop","loop","mutationObserver","resizeObserver","next","win","setTimeout","_a","state","_e","_a","setTimeout","prev","m","base","prev","state","chapters","win","next","isBool","prev","e","state","settings","init","setTimeout","state","toast","state","v","_a","_a","_a","_b","_a","_b","_c","_d","prev","_a","setTimeout","_i","_m","_d","_a","_t","limited","toast","requestAnimationFrame","setTimeout","_a","k","setTimeout","r","g","b","_a","toast","next","setTimeout","setTimeout","setTimeout","formatKeyForDisplay","limited","_a","setTimeout","playlist","_a","_b","_a","_a","_b","setTimeout","_a","_a","setTimeout","_a","state","formatKeyForDisplay","isPOJO","limited","requestAnimationFrame","setTimeout","uid","_d","requestAnimationFrame","requestAnimationFrame","requestAnimationFrame","state","setTimeout","setTimeout","prev","_a","_a","setTimeout","_b","loop","_a","limited","_a","state","inputHtml","val","process","_a","_b","_c","Buffer","cast","state","setTimeout","_a","_e","Buffer","setTimeout","flush","setTimeout","formatKeyForDisplay","setTimeout","requestAnimationFrame","_e","setTimeout","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","chapters","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","formatKeyForDisplay","cast"]}