@sjcrh/proteinpaint-client 2.180.0 → 2.180.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 (927) hide show
  1. package/dist/2dmaf-TA6JJ2OR.js +1371 -0
  2. package/dist/AIProjectAdmin-SAYM2UUO.js +830 -0
  3. package/dist/AppHeader-7TNVJJA7.js +833 -0
  4. package/dist/BoxPlot-IAROTQ5L.js +1184 -0
  5. package/dist/CorrelationVolcano-ZFSDE4PA.js +617 -0
  6. package/dist/DifferentialAnalysis-X44YRQNQ.js +238 -0
  7. package/dist/Disco-YI2INE5R.js +3199 -0
  8. package/dist/Disco-YI2INE5R.js.map +7 -0
  9. package/dist/Disco.UI-YWYNQSRV.js +242 -0
  10. package/dist/DmrPlot-5V5QL4VS.js +151 -0
  11. package/dist/GB-3P67R4TI.js +1125 -0
  12. package/dist/HicApp-GKI7GS7Y.js +2248 -0
  13. package/dist/NumBinaryEditor-FNIEMKOY.js +266 -0
  14. package/dist/NumBinaryEditor.unit.spec-CDHPXF7F.js +284 -0
  15. package/dist/NumContEditor-XICKQ4Y6.js +105 -0
  16. package/dist/NumContEditor.unit.spec-DVFH4SZT.js +167 -0
  17. package/dist/NumCustomBinEditor-ZMND7YMB.js +36 -0
  18. package/dist/NumCustomBinEditor.unit.spec-WLWD4FV2.js +282 -0
  19. package/dist/NumDiscreteEditor-H2GG4COK.js +170 -0
  20. package/dist/NumDiscreteEditor.unit.spec-OEREZ6HB.js +200 -0
  21. package/dist/NumRegularBinEditor-YGMQV7ZW.js +36 -0
  22. package/dist/NumRegularBinEditor.unit.spec-ZUTXFGGA.js +225 -0
  23. package/dist/NumSplineEditor-VPKCUM2U.js +188 -0
  24. package/dist/NumSplineEditor.unit.spec-IDEB3KAY.js +197 -0
  25. package/dist/NumericDensity-5DDVJBBW.js +36 -0
  26. package/dist/NumericDensity.unit.spec-KTOY3EON.js +219 -0
  27. package/dist/NumericHandler-XBY7A7TV.js +37 -0
  28. package/dist/NumericHandler.unit.spec-KKBJDLZY.js +217 -0
  29. package/dist/RunChart2-F4652KYJ.js +756 -0
  30. package/dist/SC-GKNVRMYL.js +725 -0
  31. package/dist/Volcano-ZHQFH2MP.js +1092 -0
  32. package/dist/WSIViewer-MU3YXF7I.js +46972 -0
  33. package/dist/WsiSamplesPlot-ZP3EAQLW.js +163 -0
  34. package/dist/adSandbox-7FIAWUBA.js +36 -0
  35. package/dist/alphaGenome-ACWK2XZL.js +173 -0
  36. package/dist/app-6V52ULRQ.js +47 -0
  37. package/dist/app-PP7JFYBG.js +35 -0
  38. package/dist/app.js +20 -20
  39. package/dist/bam-AESS7MP3.js +849 -0
  40. package/dist/barchart-BKWC5UXM.js +45 -0
  41. package/dist/barchart.data-BMH62H5G.js +22 -0
  42. package/dist/barchart.events-ZJSQB3KV.js +45 -0
  43. package/dist/barchart.integration.spec-6QOIOO6T.js +1675 -0
  44. package/dist/block-PH3K3TGJ.js +6300 -0
  45. package/dist/block.init-7LT7FK7V.js +36 -0
  46. package/dist/block.mds.expressionrank-RH25BI5W.js +357 -0
  47. package/dist/block.mds.geneboxplot-YX5SF65Z.js +826 -0
  48. package/dist/block.mds.junction-MXYEREFH.js +1543 -0
  49. package/dist/block.mds.svcnv-C5HEGIAK.js +6799 -0
  50. package/dist/block.svg-LZOSOJPZ.js +162 -0
  51. package/dist/block.tk.aicheck-YMMJJWD7.js +281 -0
  52. package/dist/block.tk.ase-IPQUSAE7.js +363 -0
  53. package/dist/block.tk.bam-HJLFTBGN.js +1904 -0
  54. package/dist/block.tk.bedgraphdot-5ZBNIQFY.js +382 -0
  55. package/dist/block.tk.bigwig.ui-V2GLBUU5.js +209 -0
  56. package/dist/block.tk.hicstraw-3NJLYMEJ.js +821 -0
  57. package/dist/block.tk.junction-C4CAACOA.js +2362 -0
  58. package/dist/block.tk.junction.textmatrixui-NJCGCHZ5.js +197 -0
  59. package/dist/block.tk.ld-PNX72F42.js +97 -0
  60. package/dist/block.tk.menu-AZ44SBLU.js +1027 -0
  61. package/dist/block.tk.pgv-AGD3EYGQ.js +942 -0
  62. package/dist/brainImaging-5DO3465Z.js +421 -0
  63. package/dist/chat-346IEKTC.js +147 -0
  64. package/dist/chunk-2GGOU75N.js +2672 -0
  65. package/dist/chunk-2GGOU75N.js.map +7 -0
  66. package/dist/chunk-2K5DSRBJ.js +84 -0
  67. package/dist/chunk-2K5DSRBJ.js.map +7 -0
  68. package/dist/chunk-2NVHNNBT.js +286 -0
  69. package/dist/chunk-2Q52VJDX.js +153 -0
  70. package/dist/chunk-2Q52VJDX.js.map +7 -0
  71. package/dist/chunk-2ZEGV5AG.js +370 -0
  72. package/dist/chunk-3W2QIOL2.js +4202 -0
  73. package/dist/chunk-3W2QIOL2.js.map +7 -0
  74. package/dist/chunk-46COTHPZ.js +1275 -0
  75. package/dist/chunk-46COTHPZ.js.map +7 -0
  76. package/dist/chunk-4D4SESA7.js +1413 -0
  77. package/dist/chunk-4D4SESA7.js.map +7 -0
  78. package/dist/chunk-4UAWJRR6.js +526 -0
  79. package/dist/chunk-4VGSBYQC.js +6364 -0
  80. package/dist/chunk-5MB65WAE.js +534 -0
  81. package/dist/chunk-6RUSW7HY.js +480 -0
  82. package/dist/chunk-6RUSW7HY.js.map +7 -0
  83. package/dist/chunk-6RXCKL6A.js +158 -0
  84. package/dist/chunk-72YYKDTX.js +330 -0
  85. package/dist/chunk-72YYKDTX.js.map +7 -0
  86. package/dist/chunk-7Q5X253Q.js +423 -0
  87. package/dist/chunk-7Q5X253Q.js.map +7 -0
  88. package/dist/chunk-A2UFOQ3B.js +170 -0
  89. package/dist/chunk-A4RBXF53.js +158 -0
  90. package/dist/chunk-AQ4OP4GR.js +39 -0
  91. package/dist/chunk-AUWK22ER.js +504 -0
  92. package/dist/chunk-AXOTFMIM.js +26 -0
  93. package/dist/chunk-CFXUDZWK.js +95 -0
  94. package/dist/chunk-CRRWBY4C.js +229 -0
  95. package/dist/chunk-D6VDBY2S.js +217 -0
  96. package/dist/chunk-DN52ILXL.js +293 -0
  97. package/dist/chunk-DTCFNQKZ.js +215 -0
  98. package/dist/chunk-ED3HWBZF.js +46 -0
  99. package/dist/chunk-EWTGCHU5.js +100 -0
  100. package/dist/chunk-FJ6KNGDS.js +226 -0
  101. package/dist/chunk-FVWCYGJL.js +121 -0
  102. package/dist/chunk-GM6H3CUI.js +177 -0
  103. package/dist/chunk-GQVM3NTV.js +615 -0
  104. package/dist/chunk-H3RU5NUZ.js +1155 -0
  105. package/dist/chunk-HEKX7RAT.js +406 -0
  106. package/dist/chunk-HGHRMQQO.js +203 -0
  107. package/dist/chunk-HIV4NSWS.js +205 -0
  108. package/dist/chunk-HMXYZXDN.js +1147 -0
  109. package/dist/chunk-IA6ZJ6ZS.js +629 -0
  110. package/dist/chunk-INROHUDU.js +272 -0
  111. package/dist/chunk-JEN6TGBR.js +228 -0
  112. package/dist/chunk-JGRIKYJE.js +92 -0
  113. package/dist/chunk-JGRIKYJE.js.map +7 -0
  114. package/dist/chunk-JGU7ERLS.js +2784 -0
  115. package/dist/chunk-K2CTY4BE.js +381 -0
  116. package/dist/chunk-K7PK3JQJ.js +194 -0
  117. package/dist/chunk-KDKY7S5G.js +1764 -0
  118. package/dist/chunk-KDKY7S5G.js.map +7 -0
  119. package/dist/chunk-KFRJ5LNK.js +334 -0
  120. package/dist/chunk-KKQON43X.js +102 -0
  121. package/dist/chunk-KKQON43X.js.map +7 -0
  122. package/dist/chunk-L4QG7XZE.js +46 -0
  123. package/dist/chunk-L4QG7XZE.js.map +7 -0
  124. package/dist/chunk-LAVSN35L.js +48 -0
  125. package/dist/chunk-LUW252RA.js +302 -0
  126. package/dist/chunk-MBYEA2R3.js +129 -0
  127. package/dist/chunk-NF34NHZM.js +4945 -0
  128. package/dist/chunk-NF34NHZM.js.map +7 -0
  129. package/dist/chunk-O55HHVQS.js +276 -0
  130. package/dist/chunk-O55HHVQS.js.map +7 -0
  131. package/dist/chunk-OGZPMUPF.js +446 -0
  132. package/dist/chunk-OJSG5RK5.js +52 -0
  133. package/dist/chunk-OM22RN7S.js +438 -0
  134. package/dist/chunk-OTK7UQ7K.js +252 -0
  135. package/dist/chunk-PJCALFS6.js +749 -0
  136. package/dist/chunk-Q3SI7IQ7.js +142 -0
  137. package/dist/chunk-RGAJYIKI.js +34 -0
  138. package/dist/chunk-RMQMUFIK.js +36 -0
  139. package/dist/chunk-RTKRLATH.js +247 -0
  140. package/dist/chunk-RTKRLATH.js.map +7 -0
  141. package/dist/chunk-SAHCLNNL.js +19974 -0
  142. package/dist/chunk-SAHCLNNL.js.map +7 -0
  143. package/dist/chunk-SMD5GI24.js +1087 -0
  144. package/dist/chunk-SMKRNNHY.js +462 -0
  145. package/dist/chunk-SNMJEDHY.js +815 -0
  146. package/dist/chunk-SOYDFNWV.js +1656 -0
  147. package/dist/chunk-SOYDFNWV.js.map +7 -0
  148. package/dist/chunk-T4PUAROY.js +368 -0
  149. package/dist/chunk-TEA3NTUR.js +31 -0
  150. package/dist/chunk-TECXLSHZ.js +147 -0
  151. package/dist/chunk-TV74I3Y5.js +43 -0
  152. package/dist/chunk-TV74I3Y5.js.map +7 -0
  153. package/dist/chunk-VDNVTMJ3.js +14 -0
  154. package/dist/chunk-VPRXRWOR.js +2815 -0
  155. package/dist/chunk-VQHUYWD6.js +261 -0
  156. package/dist/chunk-VQHUYWD6.js.map +7 -0
  157. package/dist/chunk-WVJKEXT7.js +98 -0
  158. package/dist/chunk-XEBPIJHM.js +168 -0
  159. package/dist/chunk-XEBPIJHM.js.map +7 -0
  160. package/dist/chunk-XQMDLYEK.js +119 -0
  161. package/dist/chunk-XQMDLYEK.js.map +7 -0
  162. package/dist/chunk-YBRYGRGG.js +237 -0
  163. package/dist/chunk-YBRYGRGG.js.map +7 -0
  164. package/dist/chunk-YFCDOHEK.js +146 -0
  165. package/dist/chunk-YMY73A3W.js +1201 -0
  166. package/dist/chunk-YUPIKHOC.js +107 -0
  167. package/dist/chunk-Z3BKMKQR.js +2370 -0
  168. package/dist/chunk-Z3BKMKQR.js.map +7 -0
  169. package/dist/chunk-Z5XHVPCP.js +386 -0
  170. package/dist/chunk-Z5XHVPCP.js.map +7 -0
  171. package/dist/chunk-ZGWYEVXK.js +54 -0
  172. package/dist/chunk-ZMY7LBL6.js +55 -0
  173. package/dist/condition-NJCZST5Q.js +330 -0
  174. package/dist/controls-F4X2WXQB.js +39 -0
  175. package/dist/controls.config-XGY3VBIY.js +37 -0
  176. package/dist/correlation-6VR3QLD5.js +96 -0
  177. package/dist/cuminc-ENV7RGH2.js +1147 -0
  178. package/dist/cuminc.integration.spec-SBZ4BINE.js +676 -0
  179. package/dist/customdata.inputui-DRCIAHVC.js +285 -0
  180. package/dist/dataDownload-E22OVEWA.js +328 -0
  181. package/dist/dataDownload.integration.spec-SHXBOHP7.js +191 -0
  182. package/dist/databrowser.ui-EY4MYHIN.js +419 -0
  183. package/dist/dictionary-RXSFDNVZ.js +98 -0
  184. package/dist/dnaMethylation-LBLLHMD4.js +36 -0
  185. package/dist/dnaMethylation.integration.spec-SCZSVS4Q.js +179 -0
  186. package/dist/e2pca-7Y4E37LV.js +348 -0
  187. package/dist/ep-3CMYYJHS.js +1254 -0
  188. package/dist/expclust.gdc.spec-PBOZFONS.js +305 -0
  189. package/dist/facet-VWQJBZCD.js +519 -0
  190. package/dist/geneExpClustering-FBKONWXK.js +246 -0
  191. package/dist/geneExpression-3K67HK7E.js +312 -0
  192. package/dist/geneExpression-3O5CGX4X.js +36 -0
  193. package/dist/geneExpression.unit.spec-PAWYATIF.js +100 -0
  194. package/dist/geneORA-4I7AQCHS.js +276 -0
  195. package/dist/geneVariant-6RSUL5BT.js +37 -0
  196. package/dist/geneVariant-IONFAQDH.js +39 -0
  197. package/dist/geneVariant.integration.spec-D5JQMXWA.js +196 -0
  198. package/dist/genefusion.ui-5TEA3V7M.js +249 -0
  199. package/dist/geneset-FPSUFQYL.js +194 -0
  200. package/dist/genomeBrowser.spec-37JOBDU3.js +279 -0
  201. package/dist/grin2-A7DYEQOC.js +1554 -0
  202. package/dist/grin2-YVFBDIJR.js +1031 -0
  203. package/dist/gsea-OQH53X4W.js +45 -0
  204. package/dist/hierCluster-2AQPDWQN.js +58 -0
  205. package/dist/hierCluster-H4EP5RK6.js +62 -0
  206. package/dist/hierCluster.config-OMHLRSMT.js +38 -0
  207. package/dist/hierCluster.integration.spec-EZC3DXH5.js +374 -0
  208. package/dist/hierCluster.integration.spec-EZC3DXH5.js.map +7 -0
  209. package/dist/hierCluster.interactivity-VD23UMI7.js +52 -0
  210. package/dist/hierCluster.renderers-ZKODOVW5.js +21 -0
  211. package/dist/imagePlot-5RQLP27H.js +139 -0
  212. package/dist/importPlot-R4LOYFA3.js +8 -0
  213. package/dist/launch.adhoc-7NRKGIIF.js +40 -0
  214. package/dist/leftlabel.sample-BSDNBLN4.js +256 -0
  215. package/dist/legacyDataset-4PBBW67M.js +119 -0
  216. package/dist/lollipop-L62KZOCL.js +166 -0
  217. package/dist/maf-4TQPFF46.js +442 -0
  218. package/dist/maftimeline-XIAKNULE.js +591 -0
  219. package/dist/matrix-H72HOOI5.js +57 -0
  220. package/dist/matrix-W6ARLZHT.js +62 -0
  221. package/dist/matrix.cells-AP4ENHAY.js +28 -0
  222. package/dist/matrix.config-HJURMAA2.js +39 -0
  223. package/dist/matrix.controls-77T2V4MM.js +37 -0
  224. package/dist/matrix.data-OPJXBHQF.js +25 -0
  225. package/dist/matrix.groups-RF5XZTIX.js +26 -0
  226. package/dist/matrix.integration.spec-NXFIEBAV.js +3070 -0
  227. package/dist/matrix.interactivity-KYV3I5NA.js +40 -0
  228. package/dist/matrix.layout-BKCT6WFO.js +42 -0
  229. package/dist/matrix.legend-DMR5WO2B.js +22 -0
  230. package/dist/matrix.renderers-YA45F4J3.js +36 -0
  231. package/dist/matrix.serieses-LIJYLDRY.js +21 -0
  232. package/dist/matrix.sort-MJXBZP5Z.js +27 -0
  233. package/dist/matrix.sort.unit.spec-XZ66MEFK.js +470 -0
  234. package/dist/matrix.sorterUi-RYZPGKNR.js +18 -0
  235. package/dist/matrix.sorterUi.unit.spec-5HLSSQDG.js +340 -0
  236. package/dist/mavb-6BDLX76H.js +730 -0
  237. package/dist/mds.fimo-JWUDO2YS.js +516 -0
  238. package/dist/mds.samplescatterplot-H5ZHOO3F.js +1548 -0
  239. package/dist/mds.survivalplot-6LJPCDUC.js +481 -0
  240. package/dist/oncomatrix-5TAYUFN7.js +293 -0
  241. package/dist/oncomatrix.spec-4J6ZQSCA.js +446 -0
  242. package/dist/plot.2dvaf-NEKUHMQA.js +375 -0
  243. package/dist/plot.app-CDA4NVBW.js +39 -0
  244. package/dist/plot.barplot-WPNGNPFU.js +100 -0
  245. package/dist/plot.boxplot-FBHMTSOE.js +150 -0
  246. package/dist/plot.brainImaging-53CS65FP.js +51 -0
  247. package/dist/plot.disco-477IKREB.js +101 -0
  248. package/dist/plot.dzi-37H4EUKF.js +33 -0
  249. package/dist/plot.ssgq-WR3HFXR4.js +137 -0
  250. package/dist/plot.vaf2cov-FCGREDI7.js +257 -0
  251. package/dist/plot.wsi-HO3DYKJ6.js +36 -0
  252. package/dist/polar-LRVTYG4P.js +184 -0
  253. package/dist/profile.spec-K2JOABV3.js +78 -0
  254. package/dist/profileBarchart-IYWOBHGP.js +265 -0
  255. package/dist/profileForms-4VCEGMGS.js +367 -0
  256. package/dist/profilePlot-N246QTWM.js +52 -0
  257. package/dist/profileRadar-2ENLQG7V.js +261 -0
  258. package/dist/profileRadarFacility-FTNZELJ7.js +261 -0
  259. package/dist/proteomeAbundance-AM4N7PLI.js +19 -0
  260. package/dist/proteomeAbundance-K5AR6HO5.js +63 -0
  261. package/dist/proteomeAbundance-K5AR6HO5.js.map +7 -0
  262. package/dist/qualitative-I3GVVQ6U.js +41 -0
  263. package/dist/regression-XBZL2KMJ.js +54 -0
  264. package/dist/regression.inputs-UCM5THYS.js +46 -0
  265. package/dist/regression.inputs.term-24JWPAVV.js +46 -0
  266. package/dist/regression.inputs.values.table-QOHYUCIJ.js +43 -0
  267. package/dist/regression.integration.spec-JJXWPLID.js +784 -0
  268. package/dist/regression.results-T34IDQTC.js +38 -0
  269. package/dist/regression.spec-E74GPU5O.js +706 -0
  270. package/dist/report-U65OAFJR.js +220 -0
  271. package/dist/sampleScatter.spec-3LFSRARK.js +200 -0
  272. package/dist/sampleView-MX7LX3EJ.js +46 -0
  273. package/dist/samplelst-V4I6WIOC.js +109 -0
  274. package/dist/samplematrix-LNZJNTRE.js +2196 -0
  275. package/dist/sc-T2BPIFZ4.js +84 -0
  276. package/dist/scatter-PER7W2GO.js +800 -0
  277. package/dist/scatter.integration.spec-EUSA7IOP.js +1194 -0
  278. package/dist/scatter.integration.spec-EUSA7IOP.js.map +7 -0
  279. package/dist/selectGenomeWithTklst-UEJZV63V.js +132 -0
  280. package/dist/singleCellCellType-OLXPVJE6.js +36 -0
  281. package/dist/singleCellCellType.unit.spec-MQH6HMRC.js +177 -0
  282. package/dist/singleCellGeneExpression-P2K6EAGJ.js +36 -0
  283. package/dist/singleCellGeneExpression.unit.spec-LMCCDVIY.js +163 -0
  284. package/dist/singleCellPlot-CP5QDUSH.js +51 -0
  285. package/dist/singlecell-57YOSKNP.js +84 -0
  286. package/dist/singlecell-FGDYQAVM.js +1570 -0
  287. package/dist/snp-BYMKURQO.js +36 -0
  288. package/dist/snp.unit.spec-6UGQYGQR.js +174 -0
  289. package/dist/snplocus-AYSJ7PSU.js +206 -0
  290. package/dist/spliceevent.a53ss.diagram-BB73A4HM.js +149 -0
  291. package/dist/spliceevent.exonskip.diagram-VWIAD5DQ.js +275 -0
  292. package/dist/spliceevent.noeventdiagram-QACCAJS4.js +458 -0
  293. package/dist/ssGSEA-REHCYQ7Z.js +36 -0
  294. package/dist/ssGSEA.unit.spec-XJNHMFF5.js +86 -0
  295. package/dist/summarizeCnvGeneexp-NDEEB7PV.js +158 -0
  296. package/dist/summarizeGeneexpSurvival-ZCGBEB4C.js +105 -0
  297. package/dist/summarizeMutationCnv-OOMN2AVW.js +159 -0
  298. package/dist/summarizeMutationDiagnosis-B6TF3KU5.js +38 -0
  299. package/dist/summarizeMutationSurvival-Y2J6T2CS.js +97 -0
  300. package/dist/summary-O5LSGPWD.js +45 -0
  301. package/dist/summary.integration.spec-EH7FMP7B.js +412 -0
  302. package/dist/summaryInput-ZWURF7E2.js +218 -0
  303. package/dist/sunburst-ZDE5Q2SJ.js +282 -0
  304. package/dist/survival-DTUOFMGJ.js +44 -0
  305. package/dist/survival-XKLFNJF2.js +56 -0
  306. package/dist/survival.integration.spec-J352BAT4.js +787 -0
  307. package/dist/svgraph-NZQ6Z4HS.js +1385 -0
  308. package/dist/svmr-BPDWKVL2.js +3840 -0
  309. package/dist/table-6FOITCXA.js +198 -0
  310. package/dist/termCollection-HFDUSCPL.js +36 -0
  311. package/dist/termCollection-SWYRSREU.js +177 -0
  312. package/dist/termCollection.unit.spec-ZSAAQS26.js +206 -0
  313. package/dist/tk-D2YVENB3.js +44 -0
  314. package/dist/tp.ui-XALNLDLX.js +1457 -0
  315. package/dist/tvs.density-HSVPDDGA.js +18 -0
  316. package/dist/tvs.dt-TOZ47QR3.js +37 -0
  317. package/dist/tvs.dtcnv.categorical-OZFNQFCX.js +38 -0
  318. package/dist/tvs.dtcnv.continuous-XCZJ7JOD.js +70 -0
  319. package/dist/tvs.dtfusion-G3BI6YSH.js +38 -0
  320. package/dist/tvs.dtsnvindel-ETMWTQLL.js +38 -0
  321. package/dist/tvs.dtsv-66AEHBQE.js +38 -0
  322. package/dist/tvs.numeric-AU4U3UXI.js +21 -0
  323. package/dist/tvs.samplelst-TMUNONJI.js +102 -0
  324. package/dist/tvs.termCollection-HZ2ZVONI.js +151 -0
  325. package/dist/violin-P4A4BLKJ.js +44 -0
  326. package/dist/violin.integration.spec-DSSHXEES.js +1417 -0
  327. package/dist/violin.interactivity-FRXW7MH4.js +36 -0
  328. package/dist/violin.renderer-LQAFOSRK.js +38 -0
  329. package/dist/vocabulary-ELXLTPKE.js +39 -0
  330. package/dist/vocabulary-ELXLTPKE.js.map +7 -0
  331. package/package.json +3 -3
  332. package/dist/2dmaf-XRPOTQDU.js +0 -1371
  333. package/dist/AIProjectAdmin-Y6HPDEG6.js +0 -830
  334. package/dist/AppHeader-BBVIL4Y2.js +0 -833
  335. package/dist/BoxPlot-CRLSHBKA.js +0 -1184
  336. package/dist/CorrelationVolcano-CMY7UGYT.js +0 -617
  337. package/dist/DifferentialAnalysis-OIBUAY4O.js +0 -238
  338. package/dist/Disco-UNPSOUQ4.js +0 -3198
  339. package/dist/Disco-UNPSOUQ4.js.map +0 -7
  340. package/dist/Disco.UI-ODDXIAWH.js +0 -242
  341. package/dist/DmrPlot-JKNCSNGQ.js +0 -151
  342. package/dist/GB-TDX5IHWX.js +0 -1125
  343. package/dist/HicApp-TCV4FS7E.js +0 -2248
  344. package/dist/NumBinaryEditor-6HTFH5FY.js +0 -266
  345. package/dist/NumBinaryEditor.unit.spec-WQ3JNUQ5.js +0 -284
  346. package/dist/NumContEditor-SPHMFOFQ.js +0 -105
  347. package/dist/NumContEditor.unit.spec-O5X3I64X.js +0 -167
  348. package/dist/NumCustomBinEditor-TOYSQP4N.js +0 -36
  349. package/dist/NumCustomBinEditor.unit.spec-C3RGLZ66.js +0 -282
  350. package/dist/NumDiscreteEditor-YH4GA2QU.js +0 -170
  351. package/dist/NumDiscreteEditor.unit.spec-Q4YWXUDI.js +0 -200
  352. package/dist/NumRegularBinEditor-VOMG7SEN.js +0 -36
  353. package/dist/NumRegularBinEditor.unit.spec-DGK6OCYA.js +0 -225
  354. package/dist/NumSplineEditor-ZQUZHKX7.js +0 -188
  355. package/dist/NumSplineEditor.unit.spec-WIELA3UO.js +0 -197
  356. package/dist/NumericDensity-STVC5FR2.js +0 -36
  357. package/dist/NumericDensity.unit.spec-TNGOEAPS.js +0 -219
  358. package/dist/NumericHandler-42Y7UO3B.js +0 -37
  359. package/dist/NumericHandler.unit.spec-NX3FLHTT.js +0 -217
  360. package/dist/RunChart2-UVFQH4NJ.js +0 -756
  361. package/dist/SC-GGR54SO2.js +0 -725
  362. package/dist/Volcano-SWO5S4LF.js +0 -1092
  363. package/dist/WSIViewer-67IUYLCN.js +0 -46972
  364. package/dist/WsiSamplesPlot-ZOABZBI4.js +0 -163
  365. package/dist/adSandbox-CBLQAQJF.js +0 -36
  366. package/dist/alphaGenome-XJFQ24PG.js +0 -173
  367. package/dist/app-I3VGBBL5.js +0 -35
  368. package/dist/app-KKQRY35L.js +0 -47
  369. package/dist/bam-R5Q7E4PV.js +0 -849
  370. package/dist/barchart-D4GZAPHJ.js +0 -45
  371. package/dist/barchart.data-RSXEAMID.js +0 -22
  372. package/dist/barchart.events-HTZSPF6D.js +0 -45
  373. package/dist/barchart.integration.spec-NNJYJC44.js +0 -1675
  374. package/dist/block-6AULTYNF.js +0 -6300
  375. package/dist/block.init-WYBRJUDH.js +0 -36
  376. package/dist/block.mds.expressionrank-E7I2DP3V.js +0 -357
  377. package/dist/block.mds.geneboxplot-HMI6X526.js +0 -826
  378. package/dist/block.mds.junction-GH6LIIZG.js +0 -1543
  379. package/dist/block.mds.svcnv-X4PDPNI5.js +0 -6799
  380. package/dist/block.svg-W6KDKWAC.js +0 -162
  381. package/dist/block.tk.aicheck-YKZF7QPX.js +0 -281
  382. package/dist/block.tk.ase-YP2TEE7F.js +0 -363
  383. package/dist/block.tk.bam-UTZHNWLU.js +0 -1904
  384. package/dist/block.tk.bedgraphdot-ZYZNYH43.js +0 -382
  385. package/dist/block.tk.bigwig.ui-J7EJKZSB.js +0 -209
  386. package/dist/block.tk.hicstraw-EABGSDZT.js +0 -821
  387. package/dist/block.tk.junction-6PCAR65K.js +0 -2362
  388. package/dist/block.tk.junction.textmatrixui-3XCI6TUK.js +0 -197
  389. package/dist/block.tk.ld-POXNFUUP.js +0 -97
  390. package/dist/block.tk.menu-O2RTQNVA.js +0 -1027
  391. package/dist/block.tk.pgv-3YUGYTAM.js +0 -942
  392. package/dist/brainImaging-ZXQ6427A.js +0 -421
  393. package/dist/chat-26P2POKL.js +0 -147
  394. package/dist/chunk-2AAQVP35.js +0 -276
  395. package/dist/chunk-2AAQVP35.js.map +0 -7
  396. package/dist/chunk-2PBPUWVG.js +0 -4202
  397. package/dist/chunk-2PBPUWVG.js.map +0 -7
  398. package/dist/chunk-2YV6SLSN.js +0 -504
  399. package/dist/chunk-3RQDXPMF.js +0 -158
  400. package/dist/chunk-4U3X37P7.js +0 -368
  401. package/dist/chunk-5EUYO5JM.js +0 -293
  402. package/dist/chunk-5OHXYXLD.js +0 -46
  403. package/dist/chunk-5OHXYXLD.js.map +0 -7
  404. package/dist/chunk-5SB27JYT.js +0 -46
  405. package/dist/chunk-5TUM3XRB.js +0 -203
  406. package/dist/chunk-5UDKSRQK.js +0 -370
  407. package/dist/chunk-6DOPV4YR.js +0 -406
  408. package/dist/chunk-6FFL7DNW.js +0 -217
  409. package/dist/chunk-753JYY5R.js +0 -421
  410. package/dist/chunk-753JYY5R.js.map +0 -7
  411. package/dist/chunk-7BPHFWNS.js +0 -4945
  412. package/dist/chunk-7BPHFWNS.js.map +0 -7
  413. package/dist/chunk-AEMDVK4L.js +0 -146
  414. package/dist/chunk-AX6FH7EI.js +0 -26
  415. package/dist/chunk-BEWDIM6H.js +0 -42
  416. package/dist/chunk-BEWDIM6H.js.map +0 -7
  417. package/dist/chunk-BIUYEBET.js +0 -526
  418. package/dist/chunk-C5FRQK4N.js +0 -1087
  419. package/dist/chunk-CSHYN3WA.js +0 -302
  420. package/dist/chunk-DHQHLBGH.js +0 -205
  421. package/dist/chunk-DIBNJ6DG.js +0 -229
  422. package/dist/chunk-DONWY7TP.js +0 -39
  423. package/dist/chunk-DU4EIQ4C.js +0 -2683
  424. package/dist/chunk-DU4EIQ4C.js.map +0 -7
  425. package/dist/chunk-EAHT56LQ.js +0 -177
  426. package/dist/chunk-EOLAW55O.js +0 -2327
  427. package/dist/chunk-EOLAW55O.js.map +0 -7
  428. package/dist/chunk-EPGSHRD6.js +0 -20018
  429. package/dist/chunk-EPGSHRD6.js.map +0 -7
  430. package/dist/chunk-F6XC3L7V.js +0 -386
  431. package/dist/chunk-F6XC3L7V.js.map +0 -7
  432. package/dist/chunk-FG4ZGAE2.js +0 -147
  433. package/dist/chunk-FNQIF4YM.js +0 -48
  434. package/dist/chunk-FP2WUSUV.js +0 -100
  435. package/dist/chunk-FXNFDZBK.js +0 -2815
  436. package/dist/chunk-FY7D5KJW.js +0 -1413
  437. package/dist/chunk-FY7D5KJW.js.map +0 -7
  438. package/dist/chunk-GJD6CXOH.js +0 -95
  439. package/dist/chunk-GQV2V5MQ.js +0 -129
  440. package/dist/chunk-GRP5BFV6.js +0 -228
  441. package/dist/chunk-H5D3CMXT.js +0 -101
  442. package/dist/chunk-H5D3CMXT.js.map +0 -7
  443. package/dist/chunk-HES3EG3O.js +0 -31
  444. package/dist/chunk-IHA4FMNL.js +0 -55
  445. package/dist/chunk-IQIXGTQV.js +0 -84
  446. package/dist/chunk-IQIXGTQV.js.map +0 -7
  447. package/dist/chunk-IZ5H6KD4.js +0 -246
  448. package/dist/chunk-IZ5H6KD4.js.map +0 -7
  449. package/dist/chunk-JGDUGTKX.js +0 -14
  450. package/dist/chunk-JY6S3IJC.js +0 -107
  451. package/dist/chunk-K52HSRLL.js +0 -241
  452. package/dist/chunk-K52HSRLL.js.map +0 -7
  453. package/dist/chunk-K535LGE2.js +0 -1559
  454. package/dist/chunk-K535LGE2.js.map +0 -7
  455. package/dist/chunk-LDUAVBGW.js +0 -438
  456. package/dist/chunk-LFBEDMIT.js +0 -98
  457. package/dist/chunk-LHC3X2DP.js +0 -54
  458. package/dist/chunk-LPFM2MNU.js +0 -252
  459. package/dist/chunk-LWCFNUOW.js +0 -34
  460. package/dist/chunk-MAR6R3H5.js +0 -281
  461. package/dist/chunk-MAR6R3H5.js.map +0 -7
  462. package/dist/chunk-MNBFX3MS.js +0 -226
  463. package/dist/chunk-NR77BCU4.js +0 -1275
  464. package/dist/chunk-NR77BCU4.js.map +0 -7
  465. package/dist/chunk-O6TX37JQ.js +0 -815
  466. package/dist/chunk-OLOAKFZF.js +0 -170
  467. package/dist/chunk-P6NMCAVI.js +0 -52
  468. package/dist/chunk-PG3ROZWE.js +0 -615
  469. package/dist/chunk-PMIJURAQ.js +0 -286
  470. package/dist/chunk-PNCNPXIS.js +0 -256
  471. package/dist/chunk-PNCNPXIS.js.map +0 -7
  472. package/dist/chunk-R37DKXUQ.js +0 -194
  473. package/dist/chunk-RE2RAH2N.js +0 -462
  474. package/dist/chunk-RHGTRDHQ.js +0 -158
  475. package/dist/chunk-RWKOMJLI.js +0 -95
  476. package/dist/chunk-RWKOMJLI.js.map +0 -7
  477. package/dist/chunk-SGIUQ7YG.js +0 -446
  478. package/dist/chunk-TF4BMI2M.js +0 -1731
  479. package/dist/chunk-TF4BMI2M.js.map +0 -7
  480. package/dist/chunk-UEG7TL6D.js +0 -2784
  481. package/dist/chunk-UWX7W22M.js +0 -121
  482. package/dist/chunk-UYXGGZ2H.js +0 -381
  483. package/dist/chunk-V2P4V5FW.js +0 -629
  484. package/dist/chunk-VCKBMP7I.js +0 -1147
  485. package/dist/chunk-W7MBUYQV.js +0 -119
  486. package/dist/chunk-W7MBUYQV.js.map +0 -7
  487. package/dist/chunk-WD6TQESQ.js +0 -6364
  488. package/dist/chunk-XAATLZAS.js +0 -272
  489. package/dist/chunk-XORHQSNN.js +0 -534
  490. package/dist/chunk-XQRMLNMB.js +0 -749
  491. package/dist/chunk-XR5JON5N.js +0 -215
  492. package/dist/chunk-Y6SRLOZE.js +0 -142
  493. package/dist/chunk-YBR2WSWS.js +0 -482
  494. package/dist/chunk-YBR2WSWS.js.map +0 -7
  495. package/dist/chunk-YKJ3M52W.js +0 -1201
  496. package/dist/chunk-YL3RPMSG.js +0 -334
  497. package/dist/chunk-YURMUZ3J.js +0 -1155
  498. package/dist/chunk-ZLWXHJGG.js +0 -36
  499. package/dist/chunk-ZZMWPGNS.js +0 -169
  500. package/dist/chunk-ZZMWPGNS.js.map +0 -7
  501. package/dist/condition-47CFP6GZ.js +0 -330
  502. package/dist/controls-DDPU6QBE.js +0 -39
  503. package/dist/controls.config-EUYUFIWU.js +0 -37
  504. package/dist/correlation-N5XS6W7Y.js +0 -96
  505. package/dist/cuminc-4SQGINGP.js +0 -1147
  506. package/dist/cuminc.integration.spec-ICVP6TZW.js +0 -676
  507. package/dist/customdata.inputui-WCLXB62B.js +0 -285
  508. package/dist/dataDownload-EEX7RXDI.js +0 -328
  509. package/dist/dataDownload.integration.spec-MQMIVZF5.js +0 -191
  510. package/dist/databrowser.ui-52R3KPJE.js +0 -419
  511. package/dist/dictionary-RWFUSM5I.js +0 -98
  512. package/dist/dnaMethylation-76BZMYQV.js +0 -36
  513. package/dist/dnaMethylation.integration.spec-IJ3BYHWM.js +0 -179
  514. package/dist/e2pca-JXHX2G5O.js +0 -348
  515. package/dist/ep-HQBXQ2CU.js +0 -1254
  516. package/dist/expclust.gdc.spec-RUJ75H7G.js +0 -305
  517. package/dist/facet-IYOEFMXX.js +0 -519
  518. package/dist/geneExpClustering-A5ORFMCR.js +0 -246
  519. package/dist/geneExpression-4JPAG342.js +0 -312
  520. package/dist/geneExpression-CS6IC5YK.js +0 -36
  521. package/dist/geneExpression.unit.spec-M2RR57VN.js +0 -100
  522. package/dist/geneORA-KWTJGRSC.js +0 -276
  523. package/dist/geneVariant-6Z6JD7RE.js +0 -37
  524. package/dist/geneVariant-E3WFTPEJ.js +0 -39
  525. package/dist/geneVariant.integration.spec-OHLRA5LC.js +0 -196
  526. package/dist/genefusion.ui-BMWB6LTV.js +0 -249
  527. package/dist/geneset-XVG5WUP3.js +0 -194
  528. package/dist/genomeBrowser.spec-ZPHQTNZZ.js +0 -279
  529. package/dist/grin2-5MJE7WTM.js +0 -1554
  530. package/dist/grin2-XRWBTJ6P.js +0 -1031
  531. package/dist/gsea-ANUS3EB7.js +0 -45
  532. package/dist/hierCluster-F6AIINGR.js +0 -62
  533. package/dist/hierCluster-L365C2BW.js +0 -58
  534. package/dist/hierCluster.config-EAWIWY7G.js +0 -38
  535. package/dist/hierCluster.integration.spec-A6XLBEKB.js +0 -393
  536. package/dist/hierCluster.integration.spec-A6XLBEKB.js.map +0 -7
  537. package/dist/hierCluster.interactivity-RXKLKZJ7.js +0 -52
  538. package/dist/hierCluster.renderers-BHZNOML3.js +0 -21
  539. package/dist/imagePlot-HQJHYBMI.js +0 -139
  540. package/dist/importPlot-VD36EEYJ.js +0 -8
  541. package/dist/launch.adhoc-HCFMHPEH.js +0 -40
  542. package/dist/leftlabel.sample-CVG2KHY6.js +0 -256
  543. package/dist/legacyDataset-ALQDNTCK.js +0 -119
  544. package/dist/lollipop-WVMHA434.js +0 -166
  545. package/dist/maf-YFCW36CW.js +0 -442
  546. package/dist/maftimeline-B3ONLQLI.js +0 -591
  547. package/dist/matrix-FT5H2YVT.js +0 -57
  548. package/dist/matrix-XTQWNP6X.js +0 -62
  549. package/dist/matrix.cells-ZZGFKNTN.js +0 -28
  550. package/dist/matrix.config-T3F2KQJ3.js +0 -39
  551. package/dist/matrix.controls-AKDR7NUM.js +0 -37
  552. package/dist/matrix.data-FBQXHU2L.js +0 -25
  553. package/dist/matrix.groups-GSQFQZS2.js +0 -26
  554. package/dist/matrix.integration.spec-TNU3PHTT.js +0 -3070
  555. package/dist/matrix.interactivity-PF5EQ2VW.js +0 -40
  556. package/dist/matrix.layout-62CXYNJU.js +0 -42
  557. package/dist/matrix.legend-AAP2CDEZ.js +0 -22
  558. package/dist/matrix.renderers-S44INICR.js +0 -36
  559. package/dist/matrix.serieses-B5OJKZZZ.js +0 -21
  560. package/dist/matrix.sort-25APWUH3.js +0 -27
  561. package/dist/matrix.sort.unit.spec-MT5TJ6TP.js +0 -470
  562. package/dist/matrix.sorterUi-FDWJKGJM.js +0 -18
  563. package/dist/matrix.sorterUi.unit.spec-7RHMXULV.js +0 -340
  564. package/dist/mavb-RHCYQSK7.js +0 -730
  565. package/dist/mds.fimo-TM7YLN4F.js +0 -516
  566. package/dist/mds.samplescatterplot-LSNRX5LC.js +0 -1548
  567. package/dist/mds.survivalplot-PKEVTEC3.js +0 -481
  568. package/dist/mutationSignature-ZALSVJXI.js +0 -74
  569. package/dist/mutationSignature-ZALSVJXI.js.map +0 -7
  570. package/dist/numericDictTermCluster-3GDDFYJW.js +0 -72
  571. package/dist/numericDictTermCluster-3GDDFYJW.js.map +0 -7
  572. package/dist/oncomatrix-VA5BGIMU.js +0 -293
  573. package/dist/oncomatrix.spec-ZKSSTD3F.js +0 -446
  574. package/dist/plot.2dvaf-PRDECBWZ.js +0 -375
  575. package/dist/plot.app-LMUCBS2S.js +0 -39
  576. package/dist/plot.barplot-NI46LKJN.js +0 -100
  577. package/dist/plot.boxplot-RNJK3TH5.js +0 -150
  578. package/dist/plot.brainImaging-5PQKFCME.js +0 -51
  579. package/dist/plot.disco-NB6EWBO7.js +0 -101
  580. package/dist/plot.dzi-PGWTT7LB.js +0 -33
  581. package/dist/plot.ssgq-XLIV4C3J.js +0 -137
  582. package/dist/plot.vaf2cov-QRDE7BXH.js +0 -257
  583. package/dist/plot.wsi-KLYQYZUC.js +0 -36
  584. package/dist/polar-LXW6OMOZ.js +0 -184
  585. package/dist/profile.spec-Z622PMSX.js +0 -78
  586. package/dist/profileBarchart-3OCMQPHU.js +0 -265
  587. package/dist/profileForms-QNS26EYF.js +0 -367
  588. package/dist/profilePlot-E5LWDBSK.js +0 -52
  589. package/dist/profileRadar-JVISDMFQ.js +0 -261
  590. package/dist/profileRadarFacility-L3H7NERH.js +0 -261
  591. package/dist/qualitative-7KOKJDCI.js +0 -41
  592. package/dist/regression-H5SLMJTU.js +0 -54
  593. package/dist/regression.inputs-T4CB7HO6.js +0 -46
  594. package/dist/regression.inputs.term-CSO55NIV.js +0 -46
  595. package/dist/regression.inputs.values.table-3ORSYPRI.js +0 -43
  596. package/dist/regression.integration.spec-AODFYXEV.js +0 -784
  597. package/dist/regression.results-FVWF776Y.js +0 -38
  598. package/dist/regression.spec-D2SYDVSK.js +0 -706
  599. package/dist/report-DBHQIHVX.js +0 -220
  600. package/dist/sampleScatter.spec-NMQJ5WIE.js +0 -200
  601. package/dist/sampleView-OCADT4BV.js +0 -46
  602. package/dist/samplelst-GWEMRR4J.js +0 -109
  603. package/dist/samplematrix-QJ6PHCJ4.js +0 -2196
  604. package/dist/sc-NVPIXDG2.js +0 -84
  605. package/dist/scatter-H7HUQRKE.js +0 -800
  606. package/dist/scatter.integration.spec-QGQIYVYE.js +0 -1141
  607. package/dist/scatter.integration.spec-QGQIYVYE.js.map +0 -7
  608. package/dist/selectGenomeWithTklst-W6FA72HM.js +0 -132
  609. package/dist/singleCellCellType-OQEFL3EY.js +0 -36
  610. package/dist/singleCellCellType.unit.spec-BAIWJSUP.js +0 -177
  611. package/dist/singleCellGeneExpression-QPVTXR5W.js +0 -36
  612. package/dist/singleCellGeneExpression.unit.spec-Q5TS6VB5.js +0 -163
  613. package/dist/singleCellPlot-T2YNDBTX.js +0 -51
  614. package/dist/singlecell-B3NERPJ5.js +0 -1570
  615. package/dist/singlecell-PAOWCTF5.js +0 -84
  616. package/dist/snp-DAIHQXTJ.js +0 -36
  617. package/dist/snp.unit.spec-MXTEPR3Z.js +0 -174
  618. package/dist/snplocus-PMAVBMTK.js +0 -206
  619. package/dist/spliceevent.a53ss.diagram-G6W7EY3Q.js +0 -149
  620. package/dist/spliceevent.exonskip.diagram-YHUNDN4M.js +0 -275
  621. package/dist/spliceevent.noeventdiagram-FN3PORQA.js +0 -458
  622. package/dist/ssGSEA-5H4QBOY2.js +0 -36
  623. package/dist/ssGSEA.unit.spec-UBZGATIZ.js +0 -86
  624. package/dist/summarizeCnvGeneexp-IR7HMUG3.js +0 -158
  625. package/dist/summarizeGeneexpSurvival-INZXCZ37.js +0 -105
  626. package/dist/summarizeMutationCnv-GZFJTCRN.js +0 -159
  627. package/dist/summarizeMutationDiagnosis-OAUXQ6HD.js +0 -38
  628. package/dist/summarizeMutationSurvival-PT2BGPWD.js +0 -97
  629. package/dist/summary-SAVKS777.js +0 -45
  630. package/dist/summary.integration.spec-LWO7Y4OP.js +0 -412
  631. package/dist/summaryInput-SEIB7F3A.js +0 -218
  632. package/dist/sunburst-HCF2V66V.js +0 -282
  633. package/dist/survival-65IBMTWU.js +0 -44
  634. package/dist/survival-RIV2T7KO.js +0 -56
  635. package/dist/survival.integration.spec-2V2O4H7K.js +0 -787
  636. package/dist/svgraph-XV52FOMN.js +0 -1385
  637. package/dist/svmr-BDAHM7UH.js +0 -3840
  638. package/dist/table-5N2CRI36.js +0 -198
  639. package/dist/termCollection-GYMOT2EE.js +0 -36
  640. package/dist/termCollection-TZY6DOSP.js +0 -177
  641. package/dist/termCollection.unit.spec-VWHQ72DD.js +0 -206
  642. package/dist/tk-IOJVJ34S.js +0 -44
  643. package/dist/tp.ui-JHPHESWM.js +0 -1457
  644. package/dist/tvs.density-AQ5GD437.js +0 -18
  645. package/dist/tvs.dt-JPB46UPH.js +0 -37
  646. package/dist/tvs.dtcnv.categorical-37TA7GCY.js +0 -38
  647. package/dist/tvs.dtcnv.continuous-X4K3RPYG.js +0 -70
  648. package/dist/tvs.dtfusion-77SKDRRH.js +0 -38
  649. package/dist/tvs.dtsnvindel-2QGQ455S.js +0 -38
  650. package/dist/tvs.dtsv-QBCE5IHM.js +0 -38
  651. package/dist/tvs.numeric-PLNP7MBV.js +0 -21
  652. package/dist/tvs.samplelst-NRSYJ64L.js +0 -102
  653. package/dist/tvs.termCollection-BK36KZL2.js +0 -151
  654. package/dist/violin-DCKEHIVC.js +0 -44
  655. package/dist/violin.integration.spec-IIYDX5DT.js +0 -1417
  656. package/dist/violin.interactivity-RS6D5YPY.js +0 -36
  657. package/dist/violin.renderer-XIQTOVEK.js +0 -38
  658. package/dist/vocabulary-6437MWB6.js +0 -39
  659. /package/dist/{2dmaf-XRPOTQDU.js.map → 2dmaf-TA6JJ2OR.js.map} +0 -0
  660. /package/dist/{AIProjectAdmin-Y6HPDEG6.js.map → AIProjectAdmin-SAYM2UUO.js.map} +0 -0
  661. /package/dist/{AppHeader-BBVIL4Y2.js.map → AppHeader-7TNVJJA7.js.map} +0 -0
  662. /package/dist/{BoxPlot-CRLSHBKA.js.map → BoxPlot-IAROTQ5L.js.map} +0 -0
  663. /package/dist/{CorrelationVolcano-CMY7UGYT.js.map → CorrelationVolcano-ZFSDE4PA.js.map} +0 -0
  664. /package/dist/{DifferentialAnalysis-OIBUAY4O.js.map → DifferentialAnalysis-X44YRQNQ.js.map} +0 -0
  665. /package/dist/{Disco.UI-ODDXIAWH.js.map → Disco.UI-YWYNQSRV.js.map} +0 -0
  666. /package/dist/{DmrPlot-JKNCSNGQ.js.map → DmrPlot-5V5QL4VS.js.map} +0 -0
  667. /package/dist/{GB-TDX5IHWX.js.map → GB-3P67R4TI.js.map} +0 -0
  668. /package/dist/{HicApp-TCV4FS7E.js.map → HicApp-GKI7GS7Y.js.map} +0 -0
  669. /package/dist/{NumBinaryEditor-6HTFH5FY.js.map → NumBinaryEditor-FNIEMKOY.js.map} +0 -0
  670. /package/dist/{NumBinaryEditor.unit.spec-WQ3JNUQ5.js.map → NumBinaryEditor.unit.spec-CDHPXF7F.js.map} +0 -0
  671. /package/dist/{NumContEditor-SPHMFOFQ.js.map → NumContEditor-XICKQ4Y6.js.map} +0 -0
  672. /package/dist/{NumContEditor.unit.spec-O5X3I64X.js.map → NumContEditor.unit.spec-DVFH4SZT.js.map} +0 -0
  673. /package/dist/{NumCustomBinEditor-TOYSQP4N.js.map → NumCustomBinEditor-ZMND7YMB.js.map} +0 -0
  674. /package/dist/{NumCustomBinEditor.unit.spec-C3RGLZ66.js.map → NumCustomBinEditor.unit.spec-WLWD4FV2.js.map} +0 -0
  675. /package/dist/{NumDiscreteEditor-YH4GA2QU.js.map → NumDiscreteEditor-H2GG4COK.js.map} +0 -0
  676. /package/dist/{NumDiscreteEditor.unit.spec-Q4YWXUDI.js.map → NumDiscreteEditor.unit.spec-OEREZ6HB.js.map} +0 -0
  677. /package/dist/{NumRegularBinEditor-VOMG7SEN.js.map → NumRegularBinEditor-YGMQV7ZW.js.map} +0 -0
  678. /package/dist/{NumRegularBinEditor.unit.spec-DGK6OCYA.js.map → NumRegularBinEditor.unit.spec-ZUTXFGGA.js.map} +0 -0
  679. /package/dist/{NumSplineEditor-ZQUZHKX7.js.map → NumSplineEditor-VPKCUM2U.js.map} +0 -0
  680. /package/dist/{NumSplineEditor.unit.spec-WIELA3UO.js.map → NumSplineEditor.unit.spec-IDEB3KAY.js.map} +0 -0
  681. /package/dist/{NumericDensity-STVC5FR2.js.map → NumericDensity-5DDVJBBW.js.map} +0 -0
  682. /package/dist/{NumericDensity.unit.spec-TNGOEAPS.js.map → NumericDensity.unit.spec-KTOY3EON.js.map} +0 -0
  683. /package/dist/{NumericHandler-42Y7UO3B.js.map → NumericHandler-XBY7A7TV.js.map} +0 -0
  684. /package/dist/{NumericHandler.unit.spec-NX3FLHTT.js.map → NumericHandler.unit.spec-KKBJDLZY.js.map} +0 -0
  685. /package/dist/{RunChart2-UVFQH4NJ.js.map → RunChart2-F4652KYJ.js.map} +0 -0
  686. /package/dist/{SC-GGR54SO2.js.map → SC-GKNVRMYL.js.map} +0 -0
  687. /package/dist/{Volcano-SWO5S4LF.js.map → Volcano-ZHQFH2MP.js.map} +0 -0
  688. /package/dist/{WSIViewer-67IUYLCN.js.map → WSIViewer-MU3YXF7I.js.map} +0 -0
  689. /package/dist/{WsiSamplesPlot-ZOABZBI4.js.map → WsiSamplesPlot-ZP3EAQLW.js.map} +0 -0
  690. /package/dist/{adSandbox-CBLQAQJF.js.map → adSandbox-7FIAWUBA.js.map} +0 -0
  691. /package/dist/{alphaGenome-XJFQ24PG.js.map → alphaGenome-ACWK2XZL.js.map} +0 -0
  692. /package/dist/{app-I3VGBBL5.js.map → app-6V52ULRQ.js.map} +0 -0
  693. /package/dist/{app-KKQRY35L.js.map → app-PP7JFYBG.js.map} +0 -0
  694. /package/dist/{bam-R5Q7E4PV.js.map → bam-AESS7MP3.js.map} +0 -0
  695. /package/dist/{barchart-D4GZAPHJ.js.map → barchart-BKWC5UXM.js.map} +0 -0
  696. /package/dist/{barchart.data-RSXEAMID.js.map → barchart.data-BMH62H5G.js.map} +0 -0
  697. /package/dist/{barchart.events-HTZSPF6D.js.map → barchart.events-ZJSQB3KV.js.map} +0 -0
  698. /package/dist/{barchart.integration.spec-NNJYJC44.js.map → barchart.integration.spec-6QOIOO6T.js.map} +0 -0
  699. /package/dist/{block-6AULTYNF.js.map → block-PH3K3TGJ.js.map} +0 -0
  700. /package/dist/{block.init-WYBRJUDH.js.map → block.init-7LT7FK7V.js.map} +0 -0
  701. /package/dist/{block.mds.expressionrank-E7I2DP3V.js.map → block.mds.expressionrank-RH25BI5W.js.map} +0 -0
  702. /package/dist/{block.mds.geneboxplot-HMI6X526.js.map → block.mds.geneboxplot-YX5SF65Z.js.map} +0 -0
  703. /package/dist/{block.mds.junction-GH6LIIZG.js.map → block.mds.junction-MXYEREFH.js.map} +0 -0
  704. /package/dist/{block.mds.svcnv-X4PDPNI5.js.map → block.mds.svcnv-C5HEGIAK.js.map} +0 -0
  705. /package/dist/{block.svg-W6KDKWAC.js.map → block.svg-LZOSOJPZ.js.map} +0 -0
  706. /package/dist/{block.tk.aicheck-YKZF7QPX.js.map → block.tk.aicheck-YMMJJWD7.js.map} +0 -0
  707. /package/dist/{block.tk.ase-YP2TEE7F.js.map → block.tk.ase-IPQUSAE7.js.map} +0 -0
  708. /package/dist/{block.tk.bam-UTZHNWLU.js.map → block.tk.bam-HJLFTBGN.js.map} +0 -0
  709. /package/dist/{block.tk.bedgraphdot-ZYZNYH43.js.map → block.tk.bedgraphdot-5ZBNIQFY.js.map} +0 -0
  710. /package/dist/{block.tk.bigwig.ui-J7EJKZSB.js.map → block.tk.bigwig.ui-V2GLBUU5.js.map} +0 -0
  711. /package/dist/{block.tk.hicstraw-EABGSDZT.js.map → block.tk.hicstraw-3NJLYMEJ.js.map} +0 -0
  712. /package/dist/{block.tk.junction-6PCAR65K.js.map → block.tk.junction-C4CAACOA.js.map} +0 -0
  713. /package/dist/{block.tk.junction.textmatrixui-3XCI6TUK.js.map → block.tk.junction.textmatrixui-NJCGCHZ5.js.map} +0 -0
  714. /package/dist/{block.tk.ld-POXNFUUP.js.map → block.tk.ld-PNX72F42.js.map} +0 -0
  715. /package/dist/{block.tk.menu-O2RTQNVA.js.map → block.tk.menu-AZ44SBLU.js.map} +0 -0
  716. /package/dist/{block.tk.pgv-3YUGYTAM.js.map → block.tk.pgv-AGD3EYGQ.js.map} +0 -0
  717. /package/dist/{brainImaging-ZXQ6427A.js.map → brainImaging-5DO3465Z.js.map} +0 -0
  718. /package/dist/{chat-26P2POKL.js.map → chat-346IEKTC.js.map} +0 -0
  719. /package/dist/{chunk-PMIJURAQ.js.map → chunk-2NVHNNBT.js.map} +0 -0
  720. /package/dist/{chunk-5UDKSRQK.js.map → chunk-2ZEGV5AG.js.map} +0 -0
  721. /package/dist/{chunk-BIUYEBET.js.map → chunk-4UAWJRR6.js.map} +0 -0
  722. /package/dist/{chunk-WD6TQESQ.js.map → chunk-4VGSBYQC.js.map} +0 -0
  723. /package/dist/{chunk-XORHQSNN.js.map → chunk-5MB65WAE.js.map} +0 -0
  724. /package/dist/{chunk-RHGTRDHQ.js.map → chunk-6RXCKL6A.js.map} +0 -0
  725. /package/dist/{chunk-OLOAKFZF.js.map → chunk-A2UFOQ3B.js.map} +0 -0
  726. /package/dist/{chunk-3RQDXPMF.js.map → chunk-A4RBXF53.js.map} +0 -0
  727. /package/dist/{chunk-DONWY7TP.js.map → chunk-AQ4OP4GR.js.map} +0 -0
  728. /package/dist/{chunk-2YV6SLSN.js.map → chunk-AUWK22ER.js.map} +0 -0
  729. /package/dist/{chunk-AX6FH7EI.js.map → chunk-AXOTFMIM.js.map} +0 -0
  730. /package/dist/{chunk-GJD6CXOH.js.map → chunk-CFXUDZWK.js.map} +0 -0
  731. /package/dist/{chunk-DIBNJ6DG.js.map → chunk-CRRWBY4C.js.map} +0 -0
  732. /package/dist/{chunk-6FFL7DNW.js.map → chunk-D6VDBY2S.js.map} +0 -0
  733. /package/dist/{chunk-5EUYO5JM.js.map → chunk-DN52ILXL.js.map} +0 -0
  734. /package/dist/{chunk-XR5JON5N.js.map → chunk-DTCFNQKZ.js.map} +0 -0
  735. /package/dist/{chunk-5SB27JYT.js.map → chunk-ED3HWBZF.js.map} +0 -0
  736. /package/dist/{chunk-FP2WUSUV.js.map → chunk-EWTGCHU5.js.map} +0 -0
  737. /package/dist/{chunk-MNBFX3MS.js.map → chunk-FJ6KNGDS.js.map} +0 -0
  738. /package/dist/{chunk-UWX7W22M.js.map → chunk-FVWCYGJL.js.map} +0 -0
  739. /package/dist/{chunk-EAHT56LQ.js.map → chunk-GM6H3CUI.js.map} +0 -0
  740. /package/dist/{chunk-PG3ROZWE.js.map → chunk-GQVM3NTV.js.map} +0 -0
  741. /package/dist/{chunk-YURMUZ3J.js.map → chunk-H3RU5NUZ.js.map} +0 -0
  742. /package/dist/{chunk-6DOPV4YR.js.map → chunk-HEKX7RAT.js.map} +0 -0
  743. /package/dist/{chunk-5TUM3XRB.js.map → chunk-HGHRMQQO.js.map} +0 -0
  744. /package/dist/{chunk-DHQHLBGH.js.map → chunk-HIV4NSWS.js.map} +0 -0
  745. /package/dist/{chunk-VCKBMP7I.js.map → chunk-HMXYZXDN.js.map} +0 -0
  746. /package/dist/{chunk-V2P4V5FW.js.map → chunk-IA6ZJ6ZS.js.map} +0 -0
  747. /package/dist/{chunk-XAATLZAS.js.map → chunk-INROHUDU.js.map} +0 -0
  748. /package/dist/{chunk-GRP5BFV6.js.map → chunk-JEN6TGBR.js.map} +0 -0
  749. /package/dist/{chunk-UEG7TL6D.js.map → chunk-JGU7ERLS.js.map} +0 -0
  750. /package/dist/{chunk-UYXGGZ2H.js.map → chunk-K2CTY4BE.js.map} +0 -0
  751. /package/dist/{chunk-R37DKXUQ.js.map → chunk-K7PK3JQJ.js.map} +0 -0
  752. /package/dist/{chunk-YL3RPMSG.js.map → chunk-KFRJ5LNK.js.map} +0 -0
  753. /package/dist/{chunk-FNQIF4YM.js.map → chunk-LAVSN35L.js.map} +0 -0
  754. /package/dist/{chunk-CSHYN3WA.js.map → chunk-LUW252RA.js.map} +0 -0
  755. /package/dist/{chunk-GQV2V5MQ.js.map → chunk-MBYEA2R3.js.map} +0 -0
  756. /package/dist/{chunk-SGIUQ7YG.js.map → chunk-OGZPMUPF.js.map} +0 -0
  757. /package/dist/{chunk-P6NMCAVI.js.map → chunk-OJSG5RK5.js.map} +0 -0
  758. /package/dist/{chunk-LDUAVBGW.js.map → chunk-OM22RN7S.js.map} +0 -0
  759. /package/dist/{chunk-LPFM2MNU.js.map → chunk-OTK7UQ7K.js.map} +0 -0
  760. /package/dist/{chunk-XQRMLNMB.js.map → chunk-PJCALFS6.js.map} +0 -0
  761. /package/dist/{chunk-Y6SRLOZE.js.map → chunk-Q3SI7IQ7.js.map} +0 -0
  762. /package/dist/{chunk-LWCFNUOW.js.map → chunk-RGAJYIKI.js.map} +0 -0
  763. /package/dist/{chunk-ZLWXHJGG.js.map → chunk-RMQMUFIK.js.map} +0 -0
  764. /package/dist/{chunk-C5FRQK4N.js.map → chunk-SMD5GI24.js.map} +0 -0
  765. /package/dist/{chunk-RE2RAH2N.js.map → chunk-SMKRNNHY.js.map} +0 -0
  766. /package/dist/{chunk-O6TX37JQ.js.map → chunk-SNMJEDHY.js.map} +0 -0
  767. /package/dist/{chunk-4U3X37P7.js.map → chunk-T4PUAROY.js.map} +0 -0
  768. /package/dist/{chunk-HES3EG3O.js.map → chunk-TEA3NTUR.js.map} +0 -0
  769. /package/dist/{chunk-FG4ZGAE2.js.map → chunk-TECXLSHZ.js.map} +0 -0
  770. /package/dist/{chunk-JGDUGTKX.js.map → chunk-VDNVTMJ3.js.map} +0 -0
  771. /package/dist/{chunk-FXNFDZBK.js.map → chunk-VPRXRWOR.js.map} +0 -0
  772. /package/dist/{chunk-LFBEDMIT.js.map → chunk-WVJKEXT7.js.map} +0 -0
  773. /package/dist/{chunk-AEMDVK4L.js.map → chunk-YFCDOHEK.js.map} +0 -0
  774. /package/dist/{chunk-YKJ3M52W.js.map → chunk-YMY73A3W.js.map} +0 -0
  775. /package/dist/{chunk-JY6S3IJC.js.map → chunk-YUPIKHOC.js.map} +0 -0
  776. /package/dist/{chunk-LHC3X2DP.js.map → chunk-ZGWYEVXK.js.map} +0 -0
  777. /package/dist/{chunk-IHA4FMNL.js.map → chunk-ZMY7LBL6.js.map} +0 -0
  778. /package/dist/{condition-47CFP6GZ.js.map → condition-NJCZST5Q.js.map} +0 -0
  779. /package/dist/{controls-DDPU6QBE.js.map → controls-F4X2WXQB.js.map} +0 -0
  780. /package/dist/{controls.config-EUYUFIWU.js.map → controls.config-XGY3VBIY.js.map} +0 -0
  781. /package/dist/{correlation-N5XS6W7Y.js.map → correlation-6VR3QLD5.js.map} +0 -0
  782. /package/dist/{cuminc-4SQGINGP.js.map → cuminc-ENV7RGH2.js.map} +0 -0
  783. /package/dist/{cuminc.integration.spec-ICVP6TZW.js.map → cuminc.integration.spec-SBZ4BINE.js.map} +0 -0
  784. /package/dist/{customdata.inputui-WCLXB62B.js.map → customdata.inputui-DRCIAHVC.js.map} +0 -0
  785. /package/dist/{dataDownload-EEX7RXDI.js.map → dataDownload-E22OVEWA.js.map} +0 -0
  786. /package/dist/{dataDownload.integration.spec-MQMIVZF5.js.map → dataDownload.integration.spec-SHXBOHP7.js.map} +0 -0
  787. /package/dist/{databrowser.ui-52R3KPJE.js.map → databrowser.ui-EY4MYHIN.js.map} +0 -0
  788. /package/dist/{dictionary-RWFUSM5I.js.map → dictionary-RXSFDNVZ.js.map} +0 -0
  789. /package/dist/{dnaMethylation-76BZMYQV.js.map → dnaMethylation-LBLLHMD4.js.map} +0 -0
  790. /package/dist/{dnaMethylation.integration.spec-IJ3BYHWM.js.map → dnaMethylation.integration.spec-SCZSVS4Q.js.map} +0 -0
  791. /package/dist/{e2pca-JXHX2G5O.js.map → e2pca-7Y4E37LV.js.map} +0 -0
  792. /package/dist/{ep-HQBXQ2CU.js.map → ep-3CMYYJHS.js.map} +0 -0
  793. /package/dist/{expclust.gdc.spec-RUJ75H7G.js.map → expclust.gdc.spec-PBOZFONS.js.map} +0 -0
  794. /package/dist/{facet-IYOEFMXX.js.map → facet-VWQJBZCD.js.map} +0 -0
  795. /package/dist/{geneExpClustering-A5ORFMCR.js.map → geneExpClustering-FBKONWXK.js.map} +0 -0
  796. /package/dist/{geneExpression-4JPAG342.js.map → geneExpression-3K67HK7E.js.map} +0 -0
  797. /package/dist/{geneExpression-CS6IC5YK.js.map → geneExpression-3O5CGX4X.js.map} +0 -0
  798. /package/dist/{geneExpression.unit.spec-M2RR57VN.js.map → geneExpression.unit.spec-PAWYATIF.js.map} +0 -0
  799. /package/dist/{geneORA-KWTJGRSC.js.map → geneORA-4I7AQCHS.js.map} +0 -0
  800. /package/dist/{geneVariant-6Z6JD7RE.js.map → geneVariant-6RSUL5BT.js.map} +0 -0
  801. /package/dist/{geneVariant-E3WFTPEJ.js.map → geneVariant-IONFAQDH.js.map} +0 -0
  802. /package/dist/{geneVariant.integration.spec-OHLRA5LC.js.map → geneVariant.integration.spec-D5JQMXWA.js.map} +0 -0
  803. /package/dist/{genefusion.ui-BMWB6LTV.js.map → genefusion.ui-5TEA3V7M.js.map} +0 -0
  804. /package/dist/{geneset-XVG5WUP3.js.map → geneset-FPSUFQYL.js.map} +0 -0
  805. /package/dist/{genomeBrowser.spec-ZPHQTNZZ.js.map → genomeBrowser.spec-37JOBDU3.js.map} +0 -0
  806. /package/dist/{grin2-5MJE7WTM.js.map → grin2-A7DYEQOC.js.map} +0 -0
  807. /package/dist/{grin2-XRWBTJ6P.js.map → grin2-YVFBDIJR.js.map} +0 -0
  808. /package/dist/{gsea-ANUS3EB7.js.map → gsea-OQH53X4W.js.map} +0 -0
  809. /package/dist/{hierCluster-F6AIINGR.js.map → hierCluster-2AQPDWQN.js.map} +0 -0
  810. /package/dist/{hierCluster-L365C2BW.js.map → hierCluster-H4EP5RK6.js.map} +0 -0
  811. /package/dist/{hierCluster.config-EAWIWY7G.js.map → hierCluster.config-OMHLRSMT.js.map} +0 -0
  812. /package/dist/{hierCluster.interactivity-RXKLKZJ7.js.map → hierCluster.interactivity-VD23UMI7.js.map} +0 -0
  813. /package/dist/{hierCluster.renderers-BHZNOML3.js.map → hierCluster.renderers-ZKODOVW5.js.map} +0 -0
  814. /package/dist/{imagePlot-HQJHYBMI.js.map → imagePlot-5RQLP27H.js.map} +0 -0
  815. /package/dist/{importPlot-VD36EEYJ.js.map → importPlot-R4LOYFA3.js.map} +0 -0
  816. /package/dist/{launch.adhoc-HCFMHPEH.js.map → launch.adhoc-7NRKGIIF.js.map} +0 -0
  817. /package/dist/{leftlabel.sample-CVG2KHY6.js.map → leftlabel.sample-BSDNBLN4.js.map} +0 -0
  818. /package/dist/{legacyDataset-ALQDNTCK.js.map → legacyDataset-4PBBW67M.js.map} +0 -0
  819. /package/dist/{lollipop-WVMHA434.js.map → lollipop-L62KZOCL.js.map} +0 -0
  820. /package/dist/{maf-YFCW36CW.js.map → maf-4TQPFF46.js.map} +0 -0
  821. /package/dist/{maftimeline-B3ONLQLI.js.map → maftimeline-XIAKNULE.js.map} +0 -0
  822. /package/dist/{matrix-FT5H2YVT.js.map → matrix-H72HOOI5.js.map} +0 -0
  823. /package/dist/{matrix-XTQWNP6X.js.map → matrix-W6ARLZHT.js.map} +0 -0
  824. /package/dist/{matrix.cells-ZZGFKNTN.js.map → matrix.cells-AP4ENHAY.js.map} +0 -0
  825. /package/dist/{matrix.config-T3F2KQJ3.js.map → matrix.config-HJURMAA2.js.map} +0 -0
  826. /package/dist/{matrix.controls-AKDR7NUM.js.map → matrix.controls-77T2V4MM.js.map} +0 -0
  827. /package/dist/{matrix.data-FBQXHU2L.js.map → matrix.data-OPJXBHQF.js.map} +0 -0
  828. /package/dist/{matrix.groups-GSQFQZS2.js.map → matrix.groups-RF5XZTIX.js.map} +0 -0
  829. /package/dist/{matrix.integration.spec-TNU3PHTT.js.map → matrix.integration.spec-NXFIEBAV.js.map} +0 -0
  830. /package/dist/{matrix.interactivity-PF5EQ2VW.js.map → matrix.interactivity-KYV3I5NA.js.map} +0 -0
  831. /package/dist/{matrix.layout-62CXYNJU.js.map → matrix.layout-BKCT6WFO.js.map} +0 -0
  832. /package/dist/{matrix.legend-AAP2CDEZ.js.map → matrix.legend-DMR5WO2B.js.map} +0 -0
  833. /package/dist/{matrix.renderers-S44INICR.js.map → matrix.renderers-YA45F4J3.js.map} +0 -0
  834. /package/dist/{matrix.serieses-B5OJKZZZ.js.map → matrix.serieses-LIJYLDRY.js.map} +0 -0
  835. /package/dist/{matrix.sort-25APWUH3.js.map → matrix.sort-MJXBZP5Z.js.map} +0 -0
  836. /package/dist/{matrix.sort.unit.spec-MT5TJ6TP.js.map → matrix.sort.unit.spec-XZ66MEFK.js.map} +0 -0
  837. /package/dist/{matrix.sorterUi-FDWJKGJM.js.map → matrix.sorterUi-RYZPGKNR.js.map} +0 -0
  838. /package/dist/{matrix.sorterUi.unit.spec-7RHMXULV.js.map → matrix.sorterUi.unit.spec-5HLSSQDG.js.map} +0 -0
  839. /package/dist/{mavb-RHCYQSK7.js.map → mavb-6BDLX76H.js.map} +0 -0
  840. /package/dist/{mds.fimo-TM7YLN4F.js.map → mds.fimo-JWUDO2YS.js.map} +0 -0
  841. /package/dist/{mds.samplescatterplot-LSNRX5LC.js.map → mds.samplescatterplot-H5ZHOO3F.js.map} +0 -0
  842. /package/dist/{mds.survivalplot-PKEVTEC3.js.map → mds.survivalplot-6LJPCDUC.js.map} +0 -0
  843. /package/dist/{oncomatrix-VA5BGIMU.js.map → oncomatrix-5TAYUFN7.js.map} +0 -0
  844. /package/dist/{oncomatrix.spec-ZKSSTD3F.js.map → oncomatrix.spec-4J6ZQSCA.js.map} +0 -0
  845. /package/dist/{plot.2dvaf-PRDECBWZ.js.map → plot.2dvaf-NEKUHMQA.js.map} +0 -0
  846. /package/dist/{plot.app-LMUCBS2S.js.map → plot.app-CDA4NVBW.js.map} +0 -0
  847. /package/dist/{plot.barplot-NI46LKJN.js.map → plot.barplot-WPNGNPFU.js.map} +0 -0
  848. /package/dist/{plot.boxplot-RNJK3TH5.js.map → plot.boxplot-FBHMTSOE.js.map} +0 -0
  849. /package/dist/{plot.brainImaging-5PQKFCME.js.map → plot.brainImaging-53CS65FP.js.map} +0 -0
  850. /package/dist/{plot.disco-NB6EWBO7.js.map → plot.disco-477IKREB.js.map} +0 -0
  851. /package/dist/{plot.dzi-PGWTT7LB.js.map → plot.dzi-37H4EUKF.js.map} +0 -0
  852. /package/dist/{plot.ssgq-XLIV4C3J.js.map → plot.ssgq-WR3HFXR4.js.map} +0 -0
  853. /package/dist/{plot.vaf2cov-QRDE7BXH.js.map → plot.vaf2cov-FCGREDI7.js.map} +0 -0
  854. /package/dist/{plot.wsi-KLYQYZUC.js.map → plot.wsi-HO3DYKJ6.js.map} +0 -0
  855. /package/dist/{polar-LXW6OMOZ.js.map → polar-LRVTYG4P.js.map} +0 -0
  856. /package/dist/{profile.spec-Z622PMSX.js.map → profile.spec-K2JOABV3.js.map} +0 -0
  857. /package/dist/{profileBarchart-3OCMQPHU.js.map → profileBarchart-IYWOBHGP.js.map} +0 -0
  858. /package/dist/{profileForms-QNS26EYF.js.map → profileForms-4VCEGMGS.js.map} +0 -0
  859. /package/dist/{profilePlot-E5LWDBSK.js.map → profilePlot-N246QTWM.js.map} +0 -0
  860. /package/dist/{profileRadar-JVISDMFQ.js.map → profileRadar-2ENLQG7V.js.map} +0 -0
  861. /package/dist/{profileRadarFacility-L3H7NERH.js.map → profileRadarFacility-FTNZELJ7.js.map} +0 -0
  862. /package/dist/{qualitative-7KOKJDCI.js.map → proteomeAbundance-AM4N7PLI.js.map} +0 -0
  863. /package/dist/{regression-H5SLMJTU.js.map → qualitative-I3GVVQ6U.js.map} +0 -0
  864. /package/dist/{regression.inputs-T4CB7HO6.js.map → regression-XBZL2KMJ.js.map} +0 -0
  865. /package/dist/{regression.inputs.term-CSO55NIV.js.map → regression.inputs-UCM5THYS.js.map} +0 -0
  866. /package/dist/{regression.inputs.values.table-3ORSYPRI.js.map → regression.inputs.term-24JWPAVV.js.map} +0 -0
  867. /package/dist/{regression.results-FVWF776Y.js.map → regression.inputs.values.table-QOHYUCIJ.js.map} +0 -0
  868. /package/dist/{regression.integration.spec-AODFYXEV.js.map → regression.integration.spec-JJXWPLID.js.map} +0 -0
  869. /package/dist/{sampleView-OCADT4BV.js.map → regression.results-T34IDQTC.js.map} +0 -0
  870. /package/dist/{regression.spec-D2SYDVSK.js.map → regression.spec-E74GPU5O.js.map} +0 -0
  871. /package/dist/{report-DBHQIHVX.js.map → report-U65OAFJR.js.map} +0 -0
  872. /package/dist/{sampleScatter.spec-NMQJ5WIE.js.map → sampleScatter.spec-3LFSRARK.js.map} +0 -0
  873. /package/dist/{singleCellCellType-OQEFL3EY.js.map → sampleView-MX7LX3EJ.js.map} +0 -0
  874. /package/dist/{samplelst-GWEMRR4J.js.map → samplelst-V4I6WIOC.js.map} +0 -0
  875. /package/dist/{samplematrix-QJ6PHCJ4.js.map → samplematrix-LNZJNTRE.js.map} +0 -0
  876. /package/dist/{sc-NVPIXDG2.js.map → sc-T2BPIFZ4.js.map} +0 -0
  877. /package/dist/{scatter-H7HUQRKE.js.map → scatter-PER7W2GO.js.map} +0 -0
  878. /package/dist/{selectGenomeWithTklst-W6FA72HM.js.map → selectGenomeWithTklst-UEJZV63V.js.map} +0 -0
  879. /package/dist/{singleCellGeneExpression-QPVTXR5W.js.map → singleCellCellType-OLXPVJE6.js.map} +0 -0
  880. /package/dist/{singleCellCellType.unit.spec-BAIWJSUP.js.map → singleCellCellType.unit.spec-MQH6HMRC.js.map} +0 -0
  881. /package/dist/{singleCellPlot-T2YNDBTX.js.map → singleCellGeneExpression-P2K6EAGJ.js.map} +0 -0
  882. /package/dist/{singleCellGeneExpression.unit.spec-Q5TS6VB5.js.map → singleCellGeneExpression.unit.spec-LMCCDVIY.js.map} +0 -0
  883. /package/dist/{snp-DAIHQXTJ.js.map → singleCellPlot-CP5QDUSH.js.map} +0 -0
  884. /package/dist/{singlecell-PAOWCTF5.js.map → singlecell-57YOSKNP.js.map} +0 -0
  885. /package/dist/{singlecell-B3NERPJ5.js.map → singlecell-FGDYQAVM.js.map} +0 -0
  886. /package/dist/{ssGSEA-5H4QBOY2.js.map → snp-BYMKURQO.js.map} +0 -0
  887. /package/dist/{snp.unit.spec-MXTEPR3Z.js.map → snp.unit.spec-6UGQYGQR.js.map} +0 -0
  888. /package/dist/{snplocus-PMAVBMTK.js.map → snplocus-AYSJ7PSU.js.map} +0 -0
  889. /package/dist/{spliceevent.a53ss.diagram-G6W7EY3Q.js.map → spliceevent.a53ss.diagram-BB73A4HM.js.map} +0 -0
  890. /package/dist/{spliceevent.exonskip.diagram-YHUNDN4M.js.map → spliceevent.exonskip.diagram-VWIAD5DQ.js.map} +0 -0
  891. /package/dist/{spliceevent.noeventdiagram-FN3PORQA.js.map → spliceevent.noeventdiagram-QACCAJS4.js.map} +0 -0
  892. /package/dist/{summarizeMutationDiagnosis-OAUXQ6HD.js.map → ssGSEA-REHCYQ7Z.js.map} +0 -0
  893. /package/dist/{ssGSEA.unit.spec-UBZGATIZ.js.map → ssGSEA.unit.spec-XJNHMFF5.js.map} +0 -0
  894. /package/dist/{summarizeCnvGeneexp-IR7HMUG3.js.map → summarizeCnvGeneexp-NDEEB7PV.js.map} +0 -0
  895. /package/dist/{summarizeGeneexpSurvival-INZXCZ37.js.map → summarizeGeneexpSurvival-ZCGBEB4C.js.map} +0 -0
  896. /package/dist/{summarizeMutationCnv-GZFJTCRN.js.map → summarizeMutationCnv-OOMN2AVW.js.map} +0 -0
  897. /package/dist/{summary-SAVKS777.js.map → summarizeMutationDiagnosis-B6TF3KU5.js.map} +0 -0
  898. /package/dist/{summarizeMutationSurvival-PT2BGPWD.js.map → summarizeMutationSurvival-Y2J6T2CS.js.map} +0 -0
  899. /package/dist/{survival-65IBMTWU.js.map → summary-O5LSGPWD.js.map} +0 -0
  900. /package/dist/{summary.integration.spec-LWO7Y4OP.js.map → summary.integration.spec-EH7FMP7B.js.map} +0 -0
  901. /package/dist/{summaryInput-SEIB7F3A.js.map → summaryInput-ZWURF7E2.js.map} +0 -0
  902. /package/dist/{sunburst-HCF2V66V.js.map → sunburst-ZDE5Q2SJ.js.map} +0 -0
  903. /package/dist/{termCollection-GYMOT2EE.js.map → survival-DTUOFMGJ.js.map} +0 -0
  904. /package/dist/{survival-RIV2T7KO.js.map → survival-XKLFNJF2.js.map} +0 -0
  905. /package/dist/{survival.integration.spec-2V2O4H7K.js.map → survival.integration.spec-J352BAT4.js.map} +0 -0
  906. /package/dist/{svgraph-XV52FOMN.js.map → svgraph-NZQ6Z4HS.js.map} +0 -0
  907. /package/dist/{svmr-BDAHM7UH.js.map → svmr-BPDWKVL2.js.map} +0 -0
  908. /package/dist/{table-5N2CRI36.js.map → table-6FOITCXA.js.map} +0 -0
  909. /package/dist/{tk-IOJVJ34S.js.map → termCollection-HFDUSCPL.js.map} +0 -0
  910. /package/dist/{termCollection-TZY6DOSP.js.map → termCollection-SWYRSREU.js.map} +0 -0
  911. /package/dist/{termCollection.unit.spec-VWHQ72DD.js.map → termCollection.unit.spec-ZSAAQS26.js.map} +0 -0
  912. /package/dist/{tvs.density-AQ5GD437.js.map → tk-D2YVENB3.js.map} +0 -0
  913. /package/dist/{tp.ui-JHPHESWM.js.map → tp.ui-XALNLDLX.js.map} +0 -0
  914. /package/dist/{tvs.dt-JPB46UPH.js.map → tvs.density-HSVPDDGA.js.map} +0 -0
  915. /package/dist/{tvs.numeric-PLNP7MBV.js.map → tvs.dt-TOZ47QR3.js.map} +0 -0
  916. /package/dist/{tvs.dtcnv.categorical-37TA7GCY.js.map → tvs.dtcnv.categorical-OZFNQFCX.js.map} +0 -0
  917. /package/dist/{tvs.dtcnv.continuous-X4K3RPYG.js.map → tvs.dtcnv.continuous-XCZJ7JOD.js.map} +0 -0
  918. /package/dist/{tvs.dtfusion-77SKDRRH.js.map → tvs.dtfusion-G3BI6YSH.js.map} +0 -0
  919. /package/dist/{tvs.dtsnvindel-2QGQ455S.js.map → tvs.dtsnvindel-ETMWTQLL.js.map} +0 -0
  920. /package/dist/{tvs.dtsv-QBCE5IHM.js.map → tvs.dtsv-66AEHBQE.js.map} +0 -0
  921. /package/dist/{violin-DCKEHIVC.js.map → tvs.numeric-AU4U3UXI.js.map} +0 -0
  922. /package/dist/{tvs.samplelst-NRSYJ64L.js.map → tvs.samplelst-TMUNONJI.js.map} +0 -0
  923. /package/dist/{tvs.termCollection-BK36KZL2.js.map → tvs.termCollection-HZ2ZVONI.js.map} +0 -0
  924. /package/dist/{violin.interactivity-RS6D5YPY.js.map → violin-P4A4BLKJ.js.map} +0 -0
  925. /package/dist/{violin.integration.spec-IIYDX5DT.js.map → violin.integration.spec-DSSHXEES.js.map} +0 -0
  926. /package/dist/{violin.renderer-XIQTOVEK.js.map → violin.interactivity-FRXW7MH4.js.map} +0 -0
  927. /package/dist/{vocabulary-6437MWB6.js.map → violin.renderer-LQAFOSRK.js.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../plots/matrix/matrix.interactivity.js"],
4
+ "sourcesContent": ["import { select, pointer } from 'd3-selection'\nimport { format as d3format } from 'd3-format'\nimport { fillTermWrapper, termsettingInit } from '#termsetting'\nimport { icons, newSandboxDiv, Menu, renderTable, table2col, renderCnvConfig } from '#dom'\nimport { dofetch3 } from '#common/dofetch'\nimport { TermTypes, isNumericTerm } from '#shared/terms.js'\nimport {\n\tmclass,\n\tdt2label,\n\tdtsnvindel,\n\tdtcnv,\n\tdtgeneexpression,\n\tdtmetaboliteintensity,\n\tdtproteomeabundance\n} from '#shared/common.js'\nimport { rgb2hex } from '#src/client'\nimport { getSamplelstTW, getFilter, addNewGroup } from '../../mass/groups.js'\nimport { TwBase } from '#tw/TwBase'\n\nlet inputIndex = 0\nconst svgIcons = {\n\texternalLink: '' //`<svg xmlns=\"http://www.w3.org/2000/svg\" height=\"16\" width=\"16\" viewBox=\"0 0 512 512\" transform=\"scale(0.8)\" style=\"display: inline-block; position:relative; top: -2px; left:4px;\" ><!--!Font Awesome Free 6.5.0 by @fontawesome - https://fontawesome.com License - https://fontawesome.com/license/free Copyright 2023 Fonticons, Inc.--><path d=\"M320 0c-17.7 0-32 14.3-32 32s14.3 32 32 32h82.7L201.4 265.4c-12.5 12.5-12.5 32.8 0 45.3s32.8 12.5 45.3 0L448 109.3V192c0 17.7 14.3 32 32 32s32-14.3 32-32V32c0-17.7-14.3-32-32-32H320zM80 32C35.8 32 0 67.8 0 112V432c0 44.2 35.8 80 80 80H400c44.2 0 80-35.8 80-80V320c0-17.7-14.3-32-32-32s-32 14.3-32 32V432c0 8.8-7.2 16-16 16H80c-8.8 0-16-7.2-16-16V112c0-8.8 7.2-16 16-16H192c17.7 0 32-14.3 32-32s-14.3-32-32-32H80z\"/></svg>`\n}\n\nexport function setInteractivity(self) {\n\tlet t\n\tself.delayedMouseoutHandler = () => {\n\t\tif (t) clearTimeout(t)\n\t\tt = setTimeout(self.mouseout, 500)\n\t}\n\tself.showCellInfo = function (event) {\n\t\tif (self.activeLabel || self.zoomArea) return\n\t\tif (event.target.__data__?.isLegendItem) {\n\t\t\t// do not show info for matrix legend\n\t\t\treturn\n\t\t}\n\t\tif (!(event.target.tagName == 'rect' || event.target.tagName == 'image')) {\n\t\t\tconst d = event.target.__data__\n\t\t\tconst grp = d?.grp\n\t\t\tif (grp?.legendData) {\n\t\t\t\tif (event.target.closest('.sjpp-matrix-series-group-label-g')) self.displaySampleGroupInfo(event, grp)\n\t\t\t} //else if (d?.isLegendItem) self.handleLegendMouseover(event, d)\n\t\t\treturn\n\t\t}\n\t\tif (event.target.tagName !== 'rect' && !self.imgBox) self.imgBox = event.target.getBoundingClientRect()\n\t\tconst d = event.target.tagName == 'rect' ? event.target.__data__ : self.getImgCell(event)\n\t\t// TODO: svg-rendered cell rects may be thin and hard to mouse over,\n\t\t// but the tooltip should still display info\n\t\tif (!d || !d.term || !d.sample) {\n\t\t\tself.dom.tip.hide()\n\t\t\tself.mouseout()\n\t\t\treturn\n\t\t}\n\n\t\tconst x = self.dimensions.xOffset + self.dimensions.seriesXoffset\n\t\tconst y = self.dimensions.yOffset\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\n\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\tconst twBarh = twSpecificSettings[d.tw.$id]?.contBarH\n\t\tconst twGap = twSpecificSettings[d.tw.$id]?.contBarGap\n\n\t\tself.dom.rowBeam\n\t\t\t.attr('x', x)\n\t\t\t.attr('y', y + d.seriesY)\n\t\t\t.attr('height', twBarh ? twBarh + 2 * twGap : d.t.grp.type == 'hierCluster' ? s.clusterRowh : s.rowh)\n\t\t\t.style('display', '')\n\n\t\tself.dom.colBeam\n\t\t\t.attr('x', x + d.x)\n\t\t\t.attr('y', y)\n\t\t\t.style('display', '')\n\n\t\tself.dom.matrixCellHoverOver.clear()\n\t\tconst table = table2col({ holder: self.dom.matrixCellHoverOver.d.append('div') })\n\n\t\tif (d.term.type == 'geneVariant' && d.tw.q?.type == 'values') {\n\t\t\t{\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html(l.Sample)\n\t\t\t\tc2.html(d.row._ref_.label || d.value?.sample)\n\t\t\t}\n\t\t\t{\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html('Gene')\n\t\t\t\tc2.html(d.term.name)\n\t\t\t}\n\n\t\t\tconst siblingCellLabels = {}\n\t\t\tif (d.siblingCells)\n\t\t\t\tfor (const c of d.siblingCells) {\n\t\t\t\t\tif (c.$id != d.$id) continue\n\t\t\t\t\tconst v = c.value\n\t\t\t\t\tconst p = v.pairlst\n\t\t\t\t\tconst dtLabel = v.origin ? `${v.origin} ${dt2label[v.dt]}` : dt2label[v.dt]\n\t\t\t\t\t// TODO: when the same label can apply to multiple values/hits in the same matrix cell,\n\t\t\t\t\t// list that label only once but with a hit count, instead of listing that same label\n\t\t\t\t\t// as multiple table rows in the mouseover\n\t\t\t\t\tconst label = getLabel(c, v, p)\n\t\t\t\t\t/* display as two column tabel, do not display these info and do not show gradient CNV anymore\n\t\t\t\tconst info = []\n\t\t\t\tif (v.label && v.label !== c.label) info.push(v.label)\n\t\t\t\tif ('value' in v) info.push(`${s.cnvUnit}=${v.value}`)\n\t\t\t\tif (v.chr) {\n\t\t\t\t\tconst pos = v.pos ? `:${v.pos}` : v.start ? `:${v.start}-${v.stop}` : ''\n\t\t\t\t\tinfo.push(`${v.chr}${pos}`)\n\t\t\t\t}\n\t\t\t\tif (v.alt) info.push(`${v.ref}>${v.alt}`)\n\n\t\t\t\tconst tds = !info.length\n\t\t\t\t\t? `<td colspan='2' style='text-align: center'>${label}</td>`\n\t\t\t\t\t: `<td style='text-align: right'>${label}</td><td>${info.map(i => `<span>${i}</span>`).join(' ')}</td>`\n\t\t\t\t*/\n\t\t\t\t\tconst color = c.fill == v.color || v.class == 'Blank' ? '' : c.fill\n\n\t\t\t\t\tif (!siblingCellLabels[dtLabel]) {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel] = [{ label, color }]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel].push({ label, color })\n\t\t\t\t\t}\n\t\t\t\t\t/*\n\t\t\t\tdo not use gradient CNV anymore\n\t\t\t\tif (v.dt == 4 && 'value' in v) {\n\t\t\t\t\tconst textColor = Math.abs(v.value) < 0.5 ? '#000' : '#fff'\n\t\t\t\t\trows.push(\n\t\t\t\t\t\t`<tr style='background-color: ${color}; color: ${textColor}; padding-left: 2px; padding-right: 2px'>${tds}</tr>`\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\trows.push(`<tr style='color: ${color}'>${tds}</tr>`)\n\t\t\t\t}\n\t\t\t\t*/\n\t\t\t\t}\n\t\t\tfor (const [dtLabel, classArray] of Object.entries(siblingCellLabels).sort((a, b) => b.length - a.length)) {\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html(dtLabel)\n\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classArray[0].color}\" ></span>\n\t\t\t\t\t${classArray[0].label}`)\n\t\t\t\tfor (const classType of classArray.slice(1)) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html('')\n\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classType.color}\" ></span>\n\t\t\t\t\t\t${classType.label}`)\n\t\t\t\t}\n\t\t\t}\n\t\t} else {\n\t\t\t{\n\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\tc1.html(l.Sample)\n\t\t\t\tc2.html(d.row._ref_.label)\n\t\t\t}\n\n\t\t\tlet survivalInfo\n\t\t\tif (d.term.type == TermTypes.SURVIVAL && d.exitCodeKey) {\n\t\t\t\tsurvivalInfo = d.term.values?.[d.exitCodeKey]?.label || d.exitCodeKey\n\t\t\t}\n\n\t\t\tif (survivalInfo || d.convertedValueLabel || d.label || d.label === 0) {\n\t\t\t\t// show term value row only when not undefined\n\t\t\t\tif (d.term.type == TermTypes.GENE_EXPRESSION) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\t\tc2.html(d.term.gene)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene Expression')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.METABOLITE_INTENSITY) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite')\n\t\t\t\t\t\tc2.html(d.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite Intensity')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.PROTEOME_ABUNDANCE) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('gene')\n\t\t\t\t\t\tc2.html(d.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Protein Abundance')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.SURVIVAL) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(d.term.name)\n\t\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t}\" ></span>\n\t\t\t\t\t\t\t${survivalInfo || d.label}`)\n\t\t\t\t\t}\n\n\t\t\t\t\tconst timeToEventKey =\n\t\t\t\t\t\t'Time to Event: ' +\n\t\t\t\t\t\t(d.timeToEventKey\n\t\t\t\t\t\t\t? d.timeToEventKey + (d.term.unit ? ` ${d.term.unit}` : '')\n\t\t\t\t\t\t\t: (d.convertedValueLabel || d.label) +\n\t\t\t\t\t\t\t (d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''))\n\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('')\n\t\t\t\t\t\tc2.html(timeToEventKey)\n\t\t\t\t\t}\n\t\t\t\t} else if (d.term.type == TermTypes.TERM_COLLECTION) {\n\t\t\t\t\tconst renderedValues = d.row[d.$id].renderedValues\n\t\t\t\t\tconst sortedRenderedValues = renderedValues.filter(rv => rv.value !== 0).sort((a, b) => b.value - a.value)\n\n\t\t\t\t\tfor (const renderedValue of sortedRenderedValues) {\n\t\t\t\t\t\tconst colorSquare = `<span style=\"display:inline-block; width:12px; height:12px; background-color:${renderedValue.color}\"></span>`\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(`${colorSquare} ${renderedValue.label}`)\n\t\t\t\t\t\tc2.html(`${renderedValue.value.toFixed(2)}%`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t(d.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous') || d.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\td.fill == '#fff' || d.fill == 'transparent' ? '' : d.fill\n\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html(d.term.name)\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`${colorSquare} ${d.convertedValueLabel || d.label}${\n\t\t\t\t\t\t\td.tw?.q?.convert2ZScore && d.tw.q.mode == 'continuous' && d.zscoreLabel ? d.zscoreLabel : ''\n\t\t\t\t\t\t}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tself.dom.matrixCellHoverOver.show2(event.clientX, event.clientY)\n\t\tself.dom.mainG.on('mouseout', self.mouseout)\n\t}\n\n\tself.getImgCell = function (event) {\n\t\tif (!self.imgBox) {\n\t\t\tif (event.target.tagName == 'image') self.imgBox = event.target.getBoundingClientRect()\n\t\t\telse return\n\t\t}\n\t\t//const [x,y] = pointer(event, event.target)\n\t\tconst y = event.clientY - self.imgBox.y - event.target.clientTop\n\t\tconst d = event.target.__data__.find(series => series.hoverY0 <= y && y <= series.hoverY1)\n\t\tif (!d) return\n\t\tconst { xMin, dx } = self.dimensions\n\t\tconst x2 = event.clientX - self.imgBox.x - event.target.clientLeft + xMin\n\t\tfor (const cell of d.cells) {\n\t\t\tconst min = cell.x\n\t\t\tconst max = cell.x + dx\n\t\t\tif (min <= x2 && x2 <= max) return cell\n\t\t}\n\t\treturn null\n\t}\n\n\tself.mouseout = function () {\n\t\tif (!self.activeLabel && self.dom.tip) self.dom.tip.hide()\n\t\tdelete self.imgBox\n\t\tif (self.dom.colBeam) self.dom.colBeam.style('display', 'none')\n\t\tif (self.dom.rowBeam) self.dom.rowBeam.style('display', 'none')\n\t\tif (self.dom.matrixCellHoverOver) self.dom.matrixCellHoverOver.clear()\n\t}\n\n\tself.mouseclick = async function (event, data) {\n\t\t// clicking only show actions for available genomic data; can later expand to non-genomic data and custom overrides\n\t\tconst q = self.state.termdbConfig.queries\n\t\tif (!q) return // no genomic queries\n\n\t\tif (!(q.singleSampleGenomeQuantification || q.singleSampleMutation || q.NIdata || q.DZImages)) return // only works for these queries\n\n\t\tself.dom.mainG.on('mouseout', null)\n\t\tdelete self.imgBox\n\t\tconst sampleData = data || event.target.__data__\n\n\t\tif (!sampleData) return // !!! it's undefined when dragging on the sample names\n\t\tconst s = self.config.settings.matrix\n\t\t// preliminary fix: assign string sample name for \"sample_id\", which is used by data queries below\n\t\tconst sample = {\n\t\t\tsample_id: sampleData.row._ref_.label\n\t\t}\n\t\t//when clicking a cell in SV, CNV, mutation panels\n\t\tconst geneName = sampleData.term?.type == 'geneVariant' ? sampleData.term.name : null\n\n\t\tself.dom.clickMenu.clear()\n\t\tself.dom.dendroClickMenu.clear()\n\t\tself.dom.brushMenu.clear()\n\t\tself.dom.matrixCellHoverOver.clear()\n\n\t\tif (self.dom.sampleListMenu) self.dom.sampleListMenu.destroy()\n\n\t\tif (q.singleSampleGenomeQuantification) {\n\t\t\tfor (const k in q.singleSampleGenomeQuantification) {\n\t\t\t\tconst menuDiv = self.dom.clickMenu.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.attr('data-testid', 'sjpp-ssgp-menu-btn')\n\t\t\t\t\t.text(k)\n\t\t\t\t\t.on('click', async event => {\n\t\t\t\t\t\tconst sandbox = newSandboxDiv(self.opts.plotDiv || select(self.opts.holder.node().parentNode))\n\t\t\t\t\t\tsandbox.header.text(sample.sample_id)\n\t\t\t\t\t\tawait (\n\t\t\t\t\t\t\tawait import('#plots/plot.ssgq.js')\n\t\t\t\t\t\t).plotSingleSampleGenomeQuantification(\n\t\t\t\t\t\t\tself.state.termdbConfig,\n\t\t\t\t\t\t\tself.state.vocab.dslabel,\n\t\t\t\t\t\t\tk,\n\t\t\t\t\t\t\tsample,\n\t\t\t\t\t\t\tsandbox.body.append('div').style('margin', '20px'),\n\t\t\t\t\t\t\tself.app.opts.genome,\n\t\t\t\t\t\t\tgeneName\n\t\t\t\t\t\t)\n\t\t\t\t\t\tmenuDiv.remove()\n\t\t\t\t\t\tself.dom.clickMenu.d.selectAll('*').remove()\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\t\tif (q?.singleSampleMutation) {\n\t\t\tconst menuDiv = self.dom.clickMenu.d\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.attr('data-testid', 'oncoMatrix_termLabel_disco_button')\n\t\t\t\t.text('Disco plot')\n\t\t\t\t.on('click', async event => {\n\t\t\t\t\tconst sandbox = newSandboxDiv(self.opts.plotDiv || select(self.opts.holder.node().parentNode))\n\t\t\t\t\tsandbox.header.text(sample.sample_id)\n\t\t\t\t\t;(await import('#plots/plot.disco.js')).default(\n\t\t\t\t\t\tself.state.termdbConfig,\n\t\t\t\t\t\tself.state.vocab.dslabel,\n\t\t\t\t\t\tsample,\n\t\t\t\t\t\tsandbox.body,\n\t\t\t\t\t\tself.app.opts.genome\n\t\t\t\t\t)\n\t\t\t\t\tmenuDiv.remove()\n\t\t\t\t\tself.dom.clickMenu.d.selectAll('*').remove()\n\t\t\t\t})\n\t\t}\n\n\t\tif (q.DZImages) {\n\t\t\t// no longer used. replaced by wsimages\n\t\t\tconst menuDiv = self.dom.clickMenu.d\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t.attr('data-testid', 'oncoMatrix_termLabel_dzi_button')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.text(`${q.DZImages.type} Images (0)`)\n\n\t\t\tconst data = await dofetch3('sampledzimages', {\n\t\t\t\tbody: {\n\t\t\t\t\tgenome: self.app.opts.genome.name,\n\t\t\t\t\tdslabel: self.state.vocab.dslabel,\n\t\t\t\t\tsample_id: sample.sample_id\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tif (data.sampleDZImages?.length > 0) {\n\t\t\t\tmenuDiv.style('display', 'block')\n\t\t\t\tmenuDiv.text(`${q.DZImages.type} Images (${data.sampleDZImages.length})`)\n\t\t\t\tmenuDiv.on('click', async _ => {\n\t\t\t\t\tconst sandbox = newSandboxDiv(self.opts.plotDiv || select(self.opts.holder.node().parentNode))\n\t\t\t\t\tsandbox.header.text(sample.sample_id)\n\t\t\t\t\t;(await import('#plots/dziviewer/plot.dzi.js')).default(\n\t\t\t\t\t\tself.state.vocab.dslabel,\n\t\t\t\t\t\tsandbox.body,\n\t\t\t\t\t\tself.app.opts.genome,\n\t\t\t\t\t\tsample.sample_id,\n\t\t\t\t\t\tdata.sampleDZImages\n\t\t\t\t\t)\n\n\t\t\t\t\tmenuDiv.remove()\n\t\t\t\t\tself.dom.clickMenu.d.selectAll('*').remove()\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tif (q.NIdata) {\n\t\t\tfor (const [queryKey, ref] of Object.entries(q.NIdata)) {\n\t\t\t\tconst menuDiv = self.dom.clickMenu.d\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text('Neuro Image: ' + queryKey)\n\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\tself.dom.clickMenu.clear()\n\n\t\t\t\t\t\tconst config = {\n\t\t\t\t\t\t\tchartType: 'brainImaging',\n\t\t\t\t\t\t\tqueryKey,\n\t\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\t\tbrainImaging: {\n\t\t\t\t\t\t\t\t\tbrainImageL: ref.parameters.l,\n\t\t\t\t\t\t\t\t\tbrainImageF: ref.parameters.f,\n\t\t\t\t\t\t\t\t\tbrainImageT: ref.parameters.t\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\tselectedSampleFileNames: [sample.sample_id + '.nii']\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\ttype: 'plot_create',\n\t\t\t\t\t\t\tconfig\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tconst table = table2col({ holder: self.dom.clickMenu.d.append('div').append('span') })\n\n\t\tconst templates = self.state.termdbConfig.urlTemplates\n\t\tif (templates?.sample) {\n\t\t\tconst name = sampleData[templates.sample.namekey] || sampleData.sample || sampleData.row.sample\n\t\t\tconst [c1, c2] = table.addRow()\n\t\t\tc1.html(l.Sample)\n\t\t\tc2.html(\n\t\t\t\t`<a href=\"${templates.sample.base}${name}\" target=\"_blank\">${sampleData.row._ref_.label} ${svgIcons.externalLink}</a>`\n\t\t\t)\n\t\t} else {\n\t\t\tconst [c1, c2] = table.addRow()\n\t\t\tc1.html(l.Sample)\n\t\t\tc2.html(sampleData.row._ref_.label || sampleData.value.sample)\n\t\t}\n\t\tif (sampleData.term?.type == 'geneVariant' && sampleData.tw.q?.type == 'values') {\n\t\t\tif (sampleData.value) {\n\t\t\t\tif (templates?.gene) {\n\t\t\t\t\tconst name = self.data.refs.byTermId[sampleData.tw.$id][templates.gene.namekey]\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`<a href=\"${templates.gene.base}${name}\" target=\"_blank\">${sampleData.tw.term.name} ${svgIcons.externalLink}</a>`\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t}\n\n\t\t\t\tconst siblingCellLabels = {}\n\t\t\t\tfor (const c of sampleData.siblingCells) {\n\t\t\t\t\tif (c.$id != sampleData.$id) continue\n\t\t\t\t\tconst v = c.value\n\t\t\t\t\tconst p = v.pairlst\n\t\t\t\t\tconst dtLabel = v.origin ? `${v.origin} ${dt2label[v.dt]}` : dt2label[v.dt]\n\t\t\t\t\tconst label = getLabel(c, v, p)\n\t\t\t\t\tconst color = c.fill == v.color || v.class == 'Blank' ? '' : c.fill\n\n\t\t\t\t\tif (!siblingCellLabels[dtLabel]) {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel] = [{ label, color }]\n\t\t\t\t\t} else {\n\t\t\t\t\t\tsiblingCellLabels[dtLabel].push({ label, color })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tfor (const [dtLabel, classArray] of Object.entries(siblingCellLabels).sort((a, b) => b.length - a.length)) {\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html(dtLabel)\n\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classArray[0].color}\" ></span>\n\t\t\t\t\t\t${classArray[0].label}`)\n\t\t\t\t\tfor (const classType of classArray.slice(1)) {\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('')\n\t\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${classType.color}\" ></span>\n\t\t\t\t\t\t\t${classType.label}`)\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t} else if (sampleData.term) {\n\t\t\tlet survivalInfo\n\t\t\tif (sampleData.term.type == TermTypes.SURVIVAL && sampleData.exitCodeKey) {\n\t\t\t\tsurvivalInfo = sampleData.term.values?.[sampleData.exitCodeKey]?.label || sampleData.exitCodeKey\n\t\t\t}\n\n\t\t\tif (survivalInfo || sampleData.convertedValueLabel || sampleData.label || sampleData.label === 0) {\n\t\t\t\t// show term value row only when not undefined\n\t\t\t\tif (sampleData.term.type == TermTypes.GENE_EXPRESSION) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene Expression')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.METABOLITE_INTENSITY) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite')\n\t\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Metabolite Intensity')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.PROTEOME_ABUNDANCE) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Gene')\n\t\t\t\t\t\tc2.html(sampleData.term.name)\n\t\t\t\t\t}\n\t\t\t\t\t{\n\t\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('Protein Abundance')\n\t\t\t\t\t\tc2.html(\n\t\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t\t}`\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.SURVIVAL) {\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(sampleData.term.name)\n\t\t\t\t\t\tc2.html(`<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t}\" ></span>\n\t\t\t\t\t\t\t${survivalInfo || sampleData.label}`)\n\t\t\t\t\t}\n\t\t\t\t\tconst timeToEventKey =\n\t\t\t\t\t\t'Time to Event: ' +\n\t\t\t\t\t\t(sampleData.timeToEventKey\n\t\t\t\t\t\t\t? sampleData.timeToEventKey + (sampleData.term.unit ? ` ${sampleData.term.unit}` : '')\n\t\t\t\t\t\t\t: (sampleData.convertedValueLabel || sampleData.label) +\n\t\t\t\t\t\t\t (sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t\t: ''))\n\t\t\t\t\t{\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html('')\n\t\t\t\t\t\tc2.html(timeToEventKey)\n\t\t\t\t\t}\n\t\t\t\t} else if (sampleData.term.type == TermTypes.TERM_COLLECTION) {\n\t\t\t\t\tconst renderedValues = sampleData.row[sampleData.$id].renderedValues\n\t\t\t\t\tconst sortedRenderedValues = renderedValues.filter(rv => rv.value !== 0).sort((a, b) => b.value - a.value)\n\n\t\t\t\t\tfor (const renderedValue of sortedRenderedValues) {\n\t\t\t\t\t\tconst colorSquare = `<span style=\"display:inline-block; width:12px; height:12px; background-color:${renderedValue.color}\"></span>`\n\t\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\t\tc1.html(`${colorSquare} ${renderedValue.label}`)\n\t\t\t\t\t\tc2.html(`${renderedValue.value.toFixed(2)}%`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\tconst colorSquare =\n\t\t\t\t\t\t(sampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous') ||\n\t\t\t\t\t\tsampleData.tw.q.mode !== 'continuous'\n\t\t\t\t\t\t\t? `<span style=\"display:inline-block; width:12px; height:12px; background-color:${\n\t\t\t\t\t\t\t\t\tsampleData.fill == '#fff' || sampleData.fill == 'transparent' ? '' : sampleData.fill\n\t\t\t\t\t\t\t }\" ></span>`\n\t\t\t\t\t\t\t: ''\n\n\t\t\t\t\tconst [c1, c2] = table.addRow()\n\t\t\t\t\tc1.html(sampleData.term.name)\n\t\t\t\t\tc2.html(\n\t\t\t\t\t\t`${colorSquare} ${sampleData.convertedValueLabel || sampleData.label}${\n\t\t\t\t\t\t\tsampleData.tw?.q?.convert2ZScore && sampleData.tw.q.mode == 'continuous' && sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t? sampleData.zscoreLabel\n\t\t\t\t\t\t\t\t: ''\n\t\t\t\t\t\t}`\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tself.dom.clickMenu.show(event.clientX, event.clientY, false, true)\n\t}\n\n\tself.legendClick = function () {}\n\n\tself.svgMousemove = function (event) {\n\t\tif (!self.dragged) return\n\t\tconst s = self.config.settings.matrix\n\t\tconst d = self.dragged\n\t\tconst x2 = !s.transpose ? d.x : d.x - d.clientX + event.clientX\n\t\tconst y2 = !s.transpose ? d.y - d.clientY + event.clientY : d.y\n\t\td.clone.attr('transform', `translate(${x2},${y2})`)\n\t}\n\n\tself.svgMouseup = function (event) {\n\t\tif (!self.dragged) return\n\t\tself.dragged.clone.remove()\n\t\tdelete self.dragged\n\t\tdelete self.clicked\n\t}\n\n\tself.getVisibleCenterCell = function (dx) {\n\t\t//const s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tif (d.seriesXoffset <= 0 && d.mainw >= d.zoomedMainW) {\n\t\t\treturn self.sampleOrder[Math.floor(self.sampleOrder.length / 2)]\n\t\t}\n\t\tconst w = 0.5 * d.mainw - d.seriesXoffset - dx\n\t\tconst i = Math.round(w / d.dx)\n\t\treturn self.sampleOrder[i]\n\t}\n\n\t//setSampleActions(self)\n\tsetTermActions(self)\n\tsetTermGroupActions(self)\n\tsetSampleGroupActions(self)\n\tsetZoomPanActions(self)\n\tsetResizeHandler(self)\n\tsetLengendActions(self)\n\tsetMutationSelectionActions(self)\n}\n\nfunction setResizeHandler(self) {\n\tlet resizeId\n\tselect(window).on(`resize.sjpp-${self.id}`, () => {\n\t\tif (resizeId) clearTimeout(resizeId)\n\t\tif (self.dimensions && self.layout) resizeId = setTimeout(resize, 200)\n\t})\n\n\tfunction resize() {\n\t\t// !!! this.abortCtl.abort()\n\t\tif (self.dimensions && self.layout) self.main()\n\t}\n}\n\nfunction setTermActions(self) {\n\tsetLabelDragEvents(self, 'term')\n\n\tself.setPill = function (appState) {\n\t\t// will reuse a pill instance to show term edit menu\n\t\tself.pill = termsettingInit({\n\t\t\ttip: self.customTipApi,\n\t\t\tmenuOptions: 'all',\n\t\t\tmenuLayout: 'horizontal',\n\t\t\tvocabApi: self.app.vocabApi,\n\t\t\tvocab: appState.vocab,\n\t\t\tactiveCohort: appState.activeCohort,\n\t\t\tnumericEditMenuVersion: ['discrete', 'continuous'],\n\t\t\tusecase: { target: 'matrix' },\n\n\t\t\tgetBodyParams: () => {\n\t\t\t\tconst currentGeneNames = []\n\t\t\t\tfor (const g of self.config.termgroups) {\n\t\t\t\t\t// only consider hierCluster group for hierCluster plot\n\t\t\t\t\tif (self.chartType == 'hierCluster' && g.type != 'hierCluster') continue\n\n\t\t\t\t\tfor (const t of g.lst) {\n\t\t\t\t\t\tif (t.term.chr) {\n\t\t\t\t\t\t\tcurrentGeneNames.push(`${t.term.chr}:${t.term.start}-${t.term.stop}`)\n\t\t\t\t\t\t} else if (t.term.gene) {\n\t\t\t\t\t\t\tcurrentGeneNames.push(t.term.gene)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tif (currentGeneNames.length) return { currentGeneNames }\n\t\t\t\treturn {}\n\t\t\t},\n\n\t\t\t//holder: {}, //self.dom.inputTd.append('div'),\n\t\t\t//debug: opts.debug,\n\t\t\trenderAs: 'none',\n\t\t\tcallback: tw => {\n\t\t\t\t// data is object with only one needed attribute: q, never is null\n\t\t\t\tif (tw && !tw.q) throw 'data.q{} missing from pill callback'\n\t\t\t\tconst t = self.activeLabel || self.lastactiveLabel\n\t\t\t\tif (tw) {\n\t\t\t\t\t// users could modify the term label, need to update tw.label to the latest label\n\t\t\t\t\ttw.label = t.tw.label\n\t\t\t\t\tif (t && t.tw) tw.$id = t.tw.$id\n\t\t\t\t\tconst legendValueFilter = self.mayRemoveTvsEntry(tw)\n\t\t\t\t\tself.pill.main(Object.assign({ filter: self.state.filter }, tw))\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tedits: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst', t.lstIndex],\n\t\t\t\t\t\t\t\tvalue: tw\n\t\t\t\t\t\t\t},\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['legendValueFilter'],\n\t\t\t\t\t\t\t\tvalue: legendValueFilter\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t} else {\n\t\t\t\t\tself.removeTerm()\n\t\t\t\t}\n\t\t\t\tself.dom.tip.hide()\n\t\t\t}\n\t\t})\n\t}\n\n\tself.getMenuOptions = function (t) {\n\t\treturn self.config.chartType == 'hierCluster' && t.grp.type === 'hierCluster'\n\t\t\t? '{remove,}'\n\t\t\t: t.tw.term.type == 'geneVariant'\n\t\t\t? '{edit,replace,remove}'\n\t\t\t: t.tw.term.type == 'termCollection'\n\t\t\t? '{edit,replace,remove}'\n\t\t\t: '*'\n\t}\n\n\tself.showTermMenu = async function (event) {\n\t\tconst t = event.target.__data__\n\t\tif (!t || !t.tw || !t.grp) return\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\t\tself.activeLabel = t\n\t\tself.dom.menutop.style('display', '').selectAll('*').remove()\n\t\tself.dom.menubody.style('padding', 0).selectAll('*').remove()\n\n\t\t// display loading... upon clicking a term row label\n\t\tconst termMenuWaitDiv = self.dom.menutop.append('div').style('display', 'block').text('Loading...')\n\t\tself.dom.tip.show(event.clientX - 20, event.clientY - 20)\n\n\t\tconst pillArg = Object.assign(\n\t\t\t{ menuOptions: self.getMenuOptions(t), filter: self.state.filter },\n\t\t\tt.tw ? t.tw : { term: null, q: null }\n\t\t)\n\n\t\tmayAddEditMsg(pillArg, t)\n\n\t\tawait self.pill.main(pillArg)\n\n\t\ttermMenuWaitDiv.remove()\n\n\t\tself.dom.shortcutDiv = self.dom.menutop.append('div').style('z-index', 10000)\n\t\tself.showShortcuts(t, self.dom.shortcutDiv)\n\t\tself.dom.twMenuDiv = self.dom.menutop.append('div')\n\t\tconst labelEditDiv = self.dom.twMenuDiv.append('div').style('text-align', 'center')\n\t\tif (t.tw?.term?.type) labelEditDiv.append('span').text(`${l.Term} `)\n\n\t\tconst twlabel = t.tw.label || t.tw.term.name\n\t\tconst vartype =\n\t\t\tt.tw.term.type == 'geneVariant' || t.tw.term.type == TermTypes.GENE_EXPRESSION\n\t\t\t\t? 'gene'\n\t\t\t\t: t.tw.term.type == TermTypes.METABOLITE_INTENSITY\n\t\t\t\t? 'metabolite'\n\t\t\t\t: t.tw.term.type == TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\t? 'protein'\n\t\t\t\t: 'variable'\n\n\t\tif (t.tw?.term?.type)\n\t\t\tself.dom.twLabelInput = labelEditDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'text')\n\t\t\t\t.attr('size', twlabel.length + 3)\n\t\t\t\t.attr('aria-label', `Type to edit the ${vartype} label`)\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.property('value', twlabel)\n\t\t\t\t.on('input', () => {\n\t\t\t\t\tconst value = self.dom.twLabelInput.property('value')\n\t\t\t\t\tself.dom.twLabelInput.attr('size', value.length + 3)\n\t\t\t\t\tself.dom.twLabelEditBtn.style('display', value.trim() === twlabel ? 'none' : 'inline')\n\t\t\t\t})\n\n\t\tif (t.tw?.term?.type)\n\t\t\tself.dom.twLabelEditBtn = labelEditDiv\n\t\t\t\t.append('button')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.html('submit')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tif (twlabel != self.dom.twLabelInput.property('value').trim()) self.updateTermLabel()\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\n\t\tif (vartype == 'gene') {\n\t\t\t// is gene, may show extra button for quick data access\n\t\t\tif (t.tw.term.type == 'geneVariant') {\n\t\t\t\t// lollipop btn for plotting gene-level mut data\n\t\t\t\tself.dom.gbButton = labelEditDiv\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.style('text-align', 'center')\n\t\t\t\t\t.html('Lollipop')\n\t\t\t\t\t.attr('data-testid', 'oncoMatrix_cell_lollipop_button')\n\t\t\t\t\t.on('click', async () => {\n\t\t\t\t\t\tawait self.launchGB(t)\n\t\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t// might add new btn to support other type, e.g. boxplot for geneexp\n\t\t}\n\n\t\t// Add gene summary button\n\t\tif (self.state.termdbConfig.urlTemplates?.gene && vartype == 'gene') {\n\t\t\tconst templates = self.state.termdbConfig.urlTemplates\n\t\t\tself.dom.geneSummaryLink = labelEditDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'inline-block')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('color', 'rgb(0, 0, 238)')\n\t\t\t\t.style('cursor', 'pointer')\n\t\t\t\t.style('text-decoration', 'underline')\n\t\t\t\t.html(`${templates.gene.defaultText || ''}${svgIcons.externalLink}`)\n\t\t\t\t.on('click', async () => {\n\t\t\t\t\tconst name = self.data.refs.byTermId[t.tw.$id][templates.gene.namekey]\n\t\t\t\t\twindow.open(`${templates.gene.base}${name}`, '_blank')\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t}\n\n\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\tif (!twSpecificSettings[t.tw.$id]) twSpecificSettings[t.tw.$id] = {}\n\t\tconst twSettings = twSpecificSettings[t.tw.$id]\n\n\t\tconst rowHeightColorEditDiv = self.dom.twMenuDiv.append('div').style('text-align', 'center')\n\t\tif (t.grp?.type !== 'hierCluster' && t.tw?.q?.mode == 'continuous') {\n\t\t\trowHeightColorEditDiv.append('span').text('Row Height')\n\t\t\tself.dom.twRowheightInput = rowHeightColorEditDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.attr('aria-label', `edit the row height`)\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('width', '60px')\n\t\t\t\t.property('value', twSettings.contBarH)\n\t\t\t\t.on('keyup', async event => {\n\t\t\t\t\tif (event.code != 'Enter') return\n\t\t\t\t\tconst newBarh = parseFloat(self.dom.twRowheightInput.node().value)\n\t\t\t\t\ttwSettings.contBarH = newBarh\n\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tconfig: { settings: { matrix: { twSpecificSettings } } }\n\t\t\t\t\t})\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t}\n\n\t\tif (\n\t\t\tt.grp?.type !== 'hierCluster' &&\n\t\t\tt.tw?.q?.mode == 'continuous' &&\n\t\t\tt.tw.term.type != 'survival' &&\n\t\t\tt.tw.term.type != 'termCollection' &&\n\t\t\tt.tw.q.convert2ZScore != true\n\t\t) {\n\t\t\trowHeightColorEditDiv.append('span').text('Bar Color')\n\n\t\t\tself.dom.twRowColorInput = rowHeightColorEditDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'color')\n\t\t\t\t.attr('aria-label', `change the bar color`)\n\t\t\t\t.style('padding', '1px 5px')\n\t\t\t\t.attr('value', twSettings.contBarColor)\n\t\t\t\t.on('change', async () => {\n\t\t\t\t\tconst color = self.dom.twRowColorInput.node().value\n\t\t\t\t\ttwSettings.contBarColor = color\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tconfig: { settings: { matrix: { twSpecificSettings } } }\n\t\t\t\t\t})\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t}\n\n\t\tif (self.config.settings.matrix.maxSample && t.counts.samples && t.allCounts.samples) {\n\t\t\tself.dom.twMenuDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('text-align', 'center')\n\t\t\t\t.style('margin', '5px')\n\t\t\t\t.text(`#${l.samples}: ${t.counts.samples} rendered, ${t.allCounts.samples - t.counts.samples} not rendered`)\n\t\t}\n\n\t\tself.dom.twMenuBar = self.dom.twMenuDiv.append('div').style('text-align', 'center')\n\t\t//menuBtnsDiv.on('click', () => menuBtnsDiv.style('display', 'none'))\n\t\t// must remember event target since it's cleared after async-await\n\t\tconst clickedElem = event.target\n\t\tself.pill.showMenu(event, clickedElem, self.dom.twMenuBar)\n\n\t\tself.dom.grpMenuDiv = self.dom.menutop.append('div').style('margin-top', '10px')\n\t\t//self.showTermGroupInputs(self.dom.grpMenuDiv)\n\t\t//self.dom.tip.showunder(clickedElem)\n\t\t//self.dom.tip.show(event.clientX - 20, event.clientY - 20)\n\t}\n\n\tself.launchGB = t => {\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_create',\n\t\t\tconfig: {\n\t\t\t\tchartType: 'genomeBrowser',\n\t\t\t\tsnvindel: { shown: true },\n\t\t\t\tgeneSearchResult: { geneSymbol: t.tw.term.name }\n\t\t\t}\n\t\t})\n\t}\n\n\tself.updateTermLabel = () => {\n\t\tconst value = self.dom.twLabelInput.property('value').trim()\n\t\tconst t = self.activeLabel\n\t\tif (t.tw.label === value) return\n\t\tt.tw.label = value\n\t\tt.grp.lst[t.lstIndex] = t.tw\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: t.grp\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tself.showShortcuts = (t, div) => {\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tdiv.style('text-align', 'center')\n\t\t//div.append('span').html('Shortcuts: ')\n\n\t\t// sorting icons\n\t\tconst vartype =\n\t\t\tt.tw.term.type == 'geneVariant' || t.tw.term.type == TermTypes.GENE_EXPRESSION\n\t\t\t\t? 'gene'\n\t\t\t\t: t.tw.term.type == TermTypes.METABOLITE_INTENSITY\n\t\t\t\t? 'metabolite'\n\t\t\t\t: t.tw.term.type == TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\t? 'protein'\n\t\t\t\t: 'variable'\n\t\tconst sortRevertable = self.type != 'hierCluster' && t.tw.sortSamples?.priority !== undefined\n\t\tdiv\n\t\t\t.append('span')\n\t\t\t.selectAll('div')\n\t\t\t.data(\n\t\t\t\t[\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'corner',\n\t\t\t\t\t\ttitle: `Sort ${l.samples} against this ${vartype}, and position this ${vartype} at the top left corner`,\n\t\t\t\t\t\tdisabled:\n\t\t\t\t\t\t\tt.grp.lst.length < 1 || (t.index === 0 && t.tw.sortSamples?.priority === 0) || self.type == 'hierCluster',\n\t\t\t\t\t\thandler: self.sortSamplesAgainstCornerTerm\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'left',\n\t\t\t\t\t\ttitle: `Sort ${l.samples} against this ${vartype}`,\n\t\t\t\t\t\t// should not disable sorting when hierCluster has top dendrogram\n\t\t\t\t\t\tdisabled: t.tw.sortSamples?.priority === 0 && !self.config.settings.hierCluster?.clusterSamples,\n\t\t\t\t\t\tfill: sortRevertable ? 'rgba(200,100,100,0.5)' : '',\n\t\t\t\t\t\thandler: sortRevertable ? self.unsortSamplesAgainstTerm : self.sortSamplesAgainstTerm\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\thtml: '&nbsp;|&nbsp;'\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'up',\n\t\t\t\t\t\ttitle: `Move this ${vartype} up`,\n\t\t\t\t\t\tdisabled: t.index === 0 || self.type == 'hierCluster',\n\t\t\t\t\t\thandler: self.moveTermUp\n\t\t\t\t\t},\n\n\t\t\t\t\t{\n\t\t\t\t\t\ticon: 'down',\n\t\t\t\t\t\ttitle: `Move this ${vartype} down`,\n\t\t\t\t\t\tdisabled: t.index === t.grp.lst.length - 1 || self.type == 'hierCluster',\n\t\t\t\t\t\thandler: self.moveTermDown\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\td => d.icon\n\t\t\t)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.each(function (d) {\n\t\t\t\tconst elem = select(this)\n\t\t\t\tif (d.icon) icons[d.icon](elem, d)\n\t\t\t\telse elem.html(d.html)\n\t\t\t})\n\t}\n\n\tself.sortSamplesAgainstCornerTerm = event => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst termgroups = JSON.parse(JSON.stringify(self.termGroups))\n\t\tconst grp = termgroups[t.grpIndex]\n\t\tconst [tcopy, sorterTerms] = self.getSorterTerms(t)\n\t\tconst removed = grp.lst.splice(t.lstIndex, 1)\n\t\tgrp.lst.unshift(tcopy)\n\t\tgrp.sortTermsBy = 'asListed'\n\n\t\tfor (const g of termgroups) {\n\t\t\tif (g == grp) {\n\t\t\t\tfor (const [priority, tw] of g.lst.entries()) {\n\t\t\t\t\t// the `by: 'values'` may be overridden by self.config.settings.matrix.sortPriority, if available\n\t\t\t\t\tif (!tw.sortSamples) tw.sortSamples = { priority, by: 'values' }\n\t\t\t\t\ttw.sortSamples.priority = priority\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tfor (const tw of g.lst) {\n\t\t\t\t\tif (!tw.sortSamples) continue\n\t\t\t\t\ttw.sortSamples.priority = sorterTerms.findIndex(t => t.tw?.$id === tw.$id) + grp.lst.length\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: {\n\t\t\t\ttermgroups,\n\t\t\t\tsettings: {\n\t\t\t\t\tmatrix: {\n\t\t\t\t\t\tsortTermsBy: 'asListed'\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.sortSamplesAgainstTerm = event => {\n\t\tevent?.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst [tcopy] = self.getSorterTerms(t)\n\t\tif (t.grp.type == 'hierCluster') tcopy.sortSamples.by = 'values'\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups[t.grpIndex].lst[t.lstIndex] = tcopy\n\t\tfor (const g of termgroups) {\n\t\t\tfor (const tw of g.lst) {\n\t\t\t\tif (!tw.sortSamples) continue\n\t\t\t\tif (tw.$id === t.tw.$id) {\n\t\t\t\t\ttw.sortSamples.priority = 0\n\t\t\t\t} else tw.sortSamples.priority += 1\n\t\t\t}\n\t\t}\n\n\t\tif (self.chartType == 'hierCluster') {\n\t\t\t// remove top dendrogram after sortting samples in hierCluster\n\t\t\tself.config.settings.hierCluster.clusterSamples = false\n\t\t\tself.config.settings.hierCluster.yDendrogramHeight = 0\n\t\t}\n\n\t\tself.config.termgroups = termgroups\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: self.config\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.unsortSamplesAgainstTerm = (event, d) => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel || d.data.t\n\t\tconst [tcopy] = self.getSorterTerms(t)\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups[t.grpIndex].lst[t.lstIndex] = tcopy\n\t\tfor (const g of termgroups) {\n\t\t\tfor (const tw of g.lst) {\n\t\t\t\tif (!tw.sortSamples) continue\n\t\t\t\tif (tw.$id === t.tw.$id) {\n\t\t\t\t\tdelete tw.sortSamples //.priority\n\t\t\t\t} else if ('sortSamples' in tw && 'priority' in tw.sortSamples) {\n\t\t\t\t\tif (tw.sortSamples.priority > t.sortSamples?.priority) tw.sortSamples.priority -= 1\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: {\n\t\t\t\ttermgroups\n\t\t\t}\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.moveTermUp = event => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst grp = self.termGroups[t.grpIndex]\n\t\tgrp.lst.splice(t.lstIndex, 1)\n\t\tgrp.lst.splice(t.lstIndex - 1, 0, t.tw)\n\t\tgrp.sortTermsBy = 'asListed'\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: grp\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['settings', 'matrix', 'sortTermsBy'],\n\t\t\t\t\tvalue: 'asListed'\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.moveTermDown = event => {\n\t\tevent.stopPropagation()\n\t\tconst t = self.activeLabel\n\t\tconst grp = self.termGroups[t.grpIndex]\n\t\tgrp.lst.splice(t.lstIndex, 1)\n\t\tgrp.lst.splice(t.lstIndex + 1, 0, t.tw)\n\t\tgrp.sortTermsBy = 'asListed'\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: grp\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['settings', 'matrix', 'sortTermsBy'],\n\t\t\t\t\tvalue: 'asListed'\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.showTermEditMenu = async () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tconst t = self.activeLabel\n\t\tconst s = self.config.settings.matrix\n\t\tconst l = s.controlLabels\n\n\t\tif (t.tw.term.type == 'geneVariant') {\n\t\t\tconst div = self.dom.menubody.append('div')\n\t\t\tconst label = div.append('label')\n\t\t\tlabel.append('span').html(`Minimum # ${l.samples} to be visible`)\n\n\t\t\tconst minNumSamples = 'minNumSamples' in t.tw ? t.tw.minNumSamples : ''\n\t\t\tconst input = label\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'number')\n\t\t\t\t.style('margin-left', '5px')\n\t\t\t\t.style('width', '50px')\n\t\t\t\t.property('value', minNumSamples)\n\n\t\t\tdiv\n\t\t\t\t.append('div')\n\t\t\t\t.append('button')\n\t\t\t\t.html('Submit')\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tconst value = input.property('value')\n\t\t\t\t\tif (value === minNumSamples) return\n\t\t\t\t\tif (value === '') {\n\t\t\t\t\t\tdelete t.tw.minNumSamples\n\t\t\t\t\t} else {\n\t\t\t\t\t\tt.tw.minNumSamples = Number(value)\n\t\t\t\t\t}\n\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tedits: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst', t.lstIndex],\n\t\t\t\t\t\t\t\tvalue: t.tw\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t})\n\t\t} else {\n\t\t\tawait self.pill.main(\n\t\t\t\tObject.assign({ menuOptions: self.getMenuOptions(t), filter: self.state.filter }, self.activeLabel.tw)\n\t\t\t)\n\t\t\tself.pill.showMenu()\n\t\t}\n\t}\n\n\tself.showMoveMenu = async () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tself.termBeingMoved = self.activeLabel\n\t\tconst div = self.dom.menubody.append('div')\n\t\tdiv.append('span').html('Click on another label')\n\t\tself.makeInsertPosRadios(div)\n\t}\n\n\tself.showTermInsertMenu = () => {\n\t\t//self.dom.tip.clear()\n\t\t//self.dom.menutop = self.dom.tip.d.append('div')\n\t\tself.dom.menubody.selectAll('*').remove()\n\n\t\tself.dom.editbtns = self.dom.menubody.append('div')\n\t\tself.dom.editbody = self.dom.menubody.append('div')\n\n\t\tif (self.activeLabel.grp.type == 'hierCluster') {\n\t\t\t// for hierCluster term group, only allow to add current hierCluster term to current group\n\t\t\tself.showDictTermSelection(self.dom.editbody)\n\t\t\treturn\n\t\t}\n\n\t\tconst grpNameDiv = self.dom.editbtns.append('div').style('margin', '10px 5px')\n\t\tgrpNameDiv.append('label').html(`Insert genes or variables in `)\n\t\tself.dom.grpNameSelect = grpNameDiv.append('select').on('change', () => {\n\t\t\tconst value = self.dom.grpNameSelect.property('value')\n\t\t\tself.dom.grpNameTextInput\n\t\t\t\t.property('disabled', value == 'current')\n\t\t\t\t.property('value', value == 'current' ? self.activeLabel.grp.name : newGrpName)\n\t\t})\n\t\tself.dom.grpNameSelect\n\t\t\t.selectAll('option')\n\t\t\t.data([\n\t\t\t\t{ label: 'current', value: 'current', selected: true },\n\t\t\t\t{ label: 'new', value: 'new' }\n\t\t\t])\n\t\t\t.enter()\n\t\t\t.append('option')\n\t\t\t.attr('selected', d => d.selected)\n\t\t\t.html(d => d.label)\n\n\t\tgrpNameDiv.append('span').html('&nbsp;group: &nbsp;')\n\n\t\tlet newGrpName = ''\n\t\tself.dom.grpNameTextInput = grpNameDiv\n\t\t\t.append('input')\n\t\t\t.attr('type', 'text')\n\t\t\t.property('disabled', true)\n\t\t\t.property('value', self.activeLabel.grp.name)\n\t\t\t.on('change', () => {\n\t\t\t\tconst name = self.dom.grpNameTextInput.property('value')\n\t\t\t\tif (name == self.activeLabel.grp.name) {\n\t\t\t\t} else {\n\t\t\t\t\tnewGrpName = self.dom.grpNameTextInput.property('value')\n\t\t\t\t}\n\t\t\t})\n\n\t\tself.makeInsertPosRadios(self.dom.editbtns)\n\n\t\t//const termSrcDiv = self.dom.editbtns.append('div')\n\t\t//termSrcDiv.append('span').html('Source&nbsp;')\n\t\tself.showDictTermSelection(self.dom.editbody)\n\t}\n\n\tself.makeInsertPosRadios = function (div) {\n\t\tconst insertPosInput = div\n\t\t\t.append('div') /*.style('display', 'inline-block')*/\n\t\t\t.style('margin', '10px 5px')\n\t\tinsertPosInput.append('div').style('display', 'inline-block').style('padding-right', '10px').html('Insert&nbsp')\n\n\t\tconst insertRadiosDiv = insertPosInput.append('div').style('display', 'inline-block')\n\n\t\tself.insertRadioId = `sjpp-matrix-${self.id}-insert-pos`\n\t\tconst aboveLabel = insertRadiosDiv.append('label')\n\t\taboveLabel\n\t\t\t.append('input')\n\t\t\t.attr('type', 'radio')\n\t\t\t.attr('value', 'above')\n\t\t\t.property('checked', true)\n\t\t\t.attr('name', self.insertRadioId)\n\t\taboveLabel.append('span').html('above')\n\n\t\tinsertRadiosDiv.append('span').html('&nbsp;&nbsp')\n\n\t\tconst belowLabel = insertRadiosDiv.append('label')\n\t\tbelowLabel.append('input').attr('type', 'radio').attr('value', 'below').attr('name', self.insertRadioId)\n\t\tbelowLabel.append('span').html('&nbsp;below')\n\t}\n\n\tself.showDictTermSelection = async holder => {\n\t\t//self.dom.dictTermBtn.style('text-decoration', 'underline')\n\t\t//self.dom.textTermBtn.style('text-decoration', '')\n\n\t\tconst usecase = { target: 'matrix', detail: 'termgroups' }\n\t\tif (self.chartType == 'hierCluster') {\n\t\t\tif (\n\t\t\t\tself.config.dataType == TermTypes.METABOLITE_INTENSITY &&\n\t\t\t\t(!self.activeLabel || self.activeLabel.grp.type == 'hierCluster')\n\t\t\t) {\n\t\t\t\tusecase.target = TermTypes.METABOLITE_INTENSITY\n\t\t\t\tusecase.detail = 'term'\n\t\t\t} else if (\n\t\t\t\tself.config.dataType == TermTypes.PROTEOME_ABUNDANCE &&\n\t\t\t\t(!self.activeLabel || self.activeLabel.grp.type == 'hierCluster')\n\t\t\t) {\n\t\t\t\tusecase.target = TermTypes.PROTEOME_ABUNDANCE\n\t\t\t\tusecase.detail = 'term'\n\t\t\t} else {\n\t\t\t\tusecase.target = self.activeLabel.tw.term.type\n\t\t\t\tusecase.detail = 'term'\n\t\t\t}\n\t\t}\n\t\tconst termdb = await import('#termdb/app')\n\t\tholder.selectAll('*').remove()\n\t\ttermdb.appInit({\n\t\t\tholder: holder.append('div'),\n\t\t\tvocabApi: self.app.vocabApi,\n\t\t\tstate: {\n\t\t\t\tvocab: self.state.vocab,\n\t\t\t\tactiveCohort: self.activeCohort,\n\t\t\t\tnav: {\n\t\t\t\t\theader_mode: 'search_only'\n\t\t\t\t},\n\t\t\t\ttree: {\n\t\t\t\t\tusecase\n\t\t\t\t},\n\t\t\t\t...(!self.activeLabel || self.activeLabel.grp.type == 'hierCluster'\n\t\t\t\t\t? { selectedTerms: self.hcTermGroup.lst.map(t => t.term) }\n\t\t\t\t\t: {})\n\t\t\t},\n\t\t\ttree: {\n\t\t\t\tsubmit_lst\n\t\t\t},\n\t\t\tsearch: {\n\t\t\t\thandleGeneVariant: term => submit_lst([term])\n\t\t\t}\n\t\t})\n\t}\n\n\tasync function submit_lst(termlst) {\n\t\tconst newterms = await Promise.all(\n\t\t\ttermlst.map(async _term => {\n\t\t\t\tconst term = structuredClone(_term)\n\t\t\t\tconst tw = 'id' in term ? { id: term.id, term } : { term }\n\t\t\t\tawait fillTermWrapper(tw, self.app.vocabApi)\n\t\t\t\treturn tw\n\t\t\t})\n\t\t)\n\t\tconst t = self.activeLabel\n\t\tconst termgroups = self.termGroups\n\n\t\tconst isMetaboliteIntensityCBut = self.config.dataType == TermTypes.METABOLITE_INTENSITY && !t\n\t\tconst isProteomeAbundanceCBut = self.config.dataType == TermTypes.PROTEOME_ABUNDANCE && !t\n\t\tif (isMetaboliteIntensityCBut || isProteomeAbundanceCBut || t.grp.type == 'hierCluster') {\n\t\t\tconst grp = isMetaboliteIntensityCBut || isProteomeAbundanceCBut ? termgroups[0] : termgroups[t.grpIndex]\n\t\t\t// for hiercluster group, use selected terms as new group.lst\n\t\t\tgrp.lst.splice(0, grp.lst.length, ...newterms)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tedits: [\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['termgroups', isMetaboliteIntensityCBut || isProteomeAbundanceCBut ? 0 : t.grpIndex, 'lst'],\n\t\t\t\t\t\tvalue: grp.lst\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t} else if (self.dom.grpNameSelect.property('value') == 'current') {\n\t\t\tconst pos = self.insertRadioId && select(`input[name='${self.insertRadioId}']:checked`)?.property('value')\n\t\t\tconst grp = termgroups[t.grpIndex]\n\t\t\tconst i = pos == 'above' ? t.lstIndex : t.lstIndex + 1\n\t\t\t// remove this element\n\t\t\tgrp.lst.splice(i, 0, ...newterms)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tedits: [\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst'],\n\t\t\t\t\t\tvalue: grp.lst\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t} else {\n\t\t\tconst pos = self.insertRadioId && select(`input[name='${self.insertRadioId}']:checked`)?.property('value')\n\t\t\tconst i = pos == 'above' ? t.grpIndex : t.grpIndex + 1\n\t\t\ttermgroups.splice(i, 0, {\n\t\t\t\tname: self.dom.grpNameTextInput.property('value'),\n\t\t\t\tlst: newterms\n\t\t\t})\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tconfig: { termgroups }\n\t\t\t})\n\t\t}\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.showSortMenu = () => {\n\t\t/*\n\t\t\tsort rows and samples by:\n\t\t\t- #hits\n\n\t\t\tsort samples by #hits against\n\t\t\t- draggable divs of term names\n\n\n\t\t\t-- OR --\n\n\t\t\t[ ] move this row [above || below] [all rows || term names]\n\n\t\t\t[ ] sort samples against this term:\n\t\t\t\t\t// by: *hits _values _mutation class\n\t\t\t\t\t// priority: *first _last _order# [ ]\n\n\t\t\tApply\n\t\t*/\n\n\t\tconst t = self.activeLabel\n\t\tself.dom.menubody.selectAll('*').remove()\n\n\t\tself.dom.menubody.append('div').style('margin-top', '10px').style('text-align', 'center').html(t.tw.term.name)\n\n\t\tself.moveInput = undefined\n\t\t//if (t.grp.lst.length > 1) self.showTermMoveOptions(t)\n\t\tself.showSortOptions(t)\n\t}\n\n\tself.showTermMoveOptions = t => {\n\t\tconst moveDiv = self.dom.menubody.append('div').style('margin-top', '10px')\n\n\t\tconst moveLabel = moveDiv.append('label')\n\t\tself.moveInput = moveLabel.append('input').attr('type', 'checkbox').style('text-align', 'center')\n\n\t\tmoveLabel.append('span').html(`&nbsp;move this row&nbsp;`)\n\n\t\tconst movePos = moveDiv.append('select')\n\t\tmovePos\n\t\t\t.selectAll('option')\n\t\t\t.data([\n\t\t\t\t{ label: 'before', value: 0 },\n\t\t\t\t{ label: 'after', value: 1 }\n\t\t\t])\n\t\t\t.enter()\n\t\t\t.append('option')\n\t\t\t.attr('value', d => d.value)\n\t\t\t.html(d => d.label)\n\n\t\tmoveDiv.append('span').html('&nbsp;')\n\n\t\tconst otherTermsInGrp = t.grp.lst\n\t\t\t.filter(tw => tw.$id != t.tw.$id)\n\t\t\t.map(tw => {\n\t\t\t\treturn { label: tw.term.name, value: tw.$id }\n\t\t\t})\n\t\tconst moveTarget = moveDiv.append('select')\n\t\tmoveTarget\n\t\t\t.selectAll('option')\n\t\t\t.data([{ label: 'all', value: '*' }, ...otherTermsInGrp])\n\t\t\t.enter()\n\t\t\t.append('option')\n\t\t\t.attr('value', d => d.value)\n\t\t\t.html(d => d.label)\n\t}\n\n\tself.showSortOptions = t => {\n\t\tconst sortColDiv = self.dom.menubody.append('div').style('margin-top', '10px')\n\t\tconst sortColLabel = sortColDiv.append('label')\n\t\tconst sortColInput = sortColLabel\n\t\t\t.append('input')\n\t\t\t.attr('type', 'checkbox')\n\t\t\t.property('checked', true)\n\t\t\t.style('text-align', 'center')\n\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tsortColLabel.append('span').html(`&nbsp;sort ${l.samples} against (in order of priority):`)\n\n\t\tconst tcopy = self.showSorterTerms(sortColDiv, t)\n\n\t\tself.dom.menubody\n\t\t\t.append('button')\n\t\t\t.html('Apply')\n\t\t\t.on('click', () => {\n\t\t\t\tconst matrix = JSON.parse(JSON.stringify(self.config.settings.matrix)) || {}\n\t\t\t\tdelete tcopy.div\n\t\t\t\tdelete tcopy.up\n\t\t\t\tdelete tcopy.down\n\t\t\t\tdelete tcopy.delete\n\n\t\t\t\t//if (self.moveInput.property('checked')) {}\n\n\t\t\t\tif (sortColInput.property('checked') || self.moveInput?.property('checked')) {\n\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\tedits: [\n\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst', t.lstIndex],\n\t\t\t\t\t\t\t\tvalue: tcopy\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t]\n\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\tself.dom.tip.hide()\n\t\t\t})\n\t}\n\n\tself.showSorterTerms = (sortColDiv, t) => {\n\t\tconst [tcopy, sorterTerms] = self.getSorterTerms(t)\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\t\tsortColDiv\n\t\t\t.append('div')\n\t\t\t.style('margin', '5px')\n\t\t\t.style('padding', '5px 10px')\n\t\t\t.selectAll('div')\n\t\t\t.data(sorterTerms, s => s.$id)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.style('width', 'fit-content')\n\t\t\t.style('margin', '3px')\n\t\t\t.style('cursor', 'default')\n\t\t\t.style('padding', '3px 10px')\n\t\t\t.style('border-radius', '5px')\n\t\t\t.style('color', 'black')\n\t\t\t.style('background-color', 'rgb(238, 238, 238)')\n\t\t\t.each(function (st, i) {\n\t\t\t\tst.sortSamples.priority = i\n\t\t\t\tst.div = select(this)\n\t\t\t\tconst label = st.$id == 'sample' ? `${l.Sample} name` : st.term.name\n\t\t\t\tst.div.append('span').style('margin-right', '10px').html(label)\n\t\t\t\tst.up = st.div\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.html(' &#9650; ')\n\t\t\t\t\t.style('display', i === 0 ? 'none' : 'inline')\n\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.parentNode.insertBefore(this, this.previousSibling)\n\t\t\t\t\t\tsorterTerms.splice(st.priority, 1)\n\t\t\t\t\t\tsorterTerms.splice(st.priority - 1, 0, st)\n\t\t\t\t\t\tupdateSorterDivStyles()\n\t\t\t\t\t})\n\n\t\t\t\tst.down = st.div\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.html(' &#9660; ')\n\t\t\t\t\t.style('display', i < sorterTerms.length - 1 ? 'inline' : 'none')\n\t\t\t\t\t.style('color', '#555')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.parentNode.insertBefore(this, this.nextSibling.nextSibling)\n\t\t\t\t\t\tsorterTerms.splice(st.priority, 1)\n\t\t\t\t\t\tsorterTerms.splice(st.priority + 1, 0, st)\n\t\t\t\t\t\tupdateSorterDivStyles()\n\t\t\t\t\t})\n\n\t\t\t\tst.delete = st.div\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.html(' &#10005; ')\n\t\t\t\t\t.style('display', 'inline')\n\t\t\t\t\t.style('color', 'rgb(255, 100, 100)')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tst.div.remove()\n\t\t\t\t\t\tsorterTerms.splice(st.priority, 1)\n\t\t\t\t\t\tupdateSorterDivStyles()\n\t\t\t\t\t})\n\t\t\t})\n\n\t\tfunction updateSorterDivStyles() {\n\t\t\tfor (const [i, st] of sorterTerms.entries()) {\n\t\t\t\tst.priority = i\n\t\t\t\tst.up.style('display', st.priority > 0 ? 'inline' : 'none')\n\t\t\t\tst.down.style('display', st.priority < sorterTerms.length - 1 ? 'inline' : 'none')\n\t\t\t}\n\t\t}\n\n\t\treturn tcopy\n\t}\n\n\tself.getSorterTerms = t => {\n\t\tconst sorterTerms = [\n\t\t\t...self.termOrder\n\t\t\t\t.filter(t => t.tw.sortSamples)\n\t\t\t\t.map(t => JSON.parse(JSON.stringify(t.tw)))\n\t\t\t\t.sort((a, b) => a.sortSamples.priority - b.sortSamples.priority),\n\t\t\t...self.config.settings.matrix.sortSamplesTieBreakers.map(st => JSON.parse(JSON.stringify(st)))\n\t\t]\n\n\t\tconst s = self.settings.matrix\n\t\tconst activeOption = s.sortOptions[s.sortSamplesBy]\n\t\tif (!activeOption) {\n\t\t\tthrow `unsupported s.sortSamplesBy='${s.sortSamplesBy}'`\n\t\t}\n\t\tconst matchingSortSamples = activeOption.sortPriority?.find(o => o.types.includes(t.tw?.term?.type))?.tiebreakers[0]\n\t\tconst sortSamples = matchingSortSamples\n\t\t\t? {} // will let matrix.sort fill-in based on the first matching tiebreaker\n\t\t\t: t.tw?.term?.type == 'geneVariant' && t.tw?.q?.type == 'values'\n\t\t\t? {\n\t\t\t\t\tby: 'class',\n\t\t\t\t\torder: [\n\t\t\t\t\t\t'Fuserna',\n\t\t\t\t\t\t'CNV_homozygous_deletion',\n\t\t\t\t\t\t'CNV_amplification',\n\t\t\t\t\t\t'CNV_loss',\n\t\t\t\t\t\t'CNV_amp',\n\t\t\t\t\t\t'CNV_loh',\n\t\t\t\t\t\t// truncating\n\t\t\t\t\t\t'F',\n\t\t\t\t\t\t'N',\n\t\t\t\t\t\t// indel\n\t\t\t\t\t\t'D',\n\t\t\t\t\t\t'I',\n\t\t\t\t\t\t// point\n\t\t\t\t\t\t'M',\n\t\t\t\t\t\t'P',\n\t\t\t\t\t\t'L',\n\t\t\t\t\t\t// noncoding\n\t\t\t\t\t\t'Utr3',\n\t\t\t\t\t\t'Utr5',\n\t\t\t\t\t\t'S',\n\t\t\t\t\t\t'Intron',\n\t\t\t\t\t\t'WT',\n\t\t\t\t\t\t'Blank'\n\t\t\t\t\t]\n\t\t\t }\n\t\t\t: { by: 'values' }\n\n\t\tconst i = sorterTerms.findIndex(st => st.$id === t.tw?.$id)\n\t\tconst tcopy = JSON.parse(JSON.stringify(t.tw || {}))\n\t\t// will let the matrix.sorter code fill-in the sortSamples with tiebreakers\n\t\ttcopy.sortSamples = sortSamples\n\t\tif (i == -1) {\n\t\t\tsorterTerms.unshift(tcopy)\n\t\t} else {\n\t\t\tif (sortSamples.order) tcopy.sortSamples.order = sortSamples.order\n\t\t}\n\n\t\treturn [tcopy, sorterTerms]\n\t}\n\n\tself.removeTerm = () => {\n\t\tconst t = self.activeLabel\n\t\tconst legendValueFilter = self.mayRemoveTvsEntry(t.tw)\n\t\tconst termgroups = self.termGroups\n\t\tconst grp = termgroups[t.grpIndex]\n\t\t// remove this element\n\t\tgrp.lst.splice(t.lstIndex, 1)\n\t\tif (grp.lst.length) {\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tedits: [\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex, 'lst'],\n\t\t\t\t\t\tvalue: grp.lst\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tnestedKeys: ['legendValueFilter'],\n\t\t\t\t\t\tvalue: legendValueFilter\n\t\t\t\t\t}\n\t\t\t\t]\n\t\t\t})\n\t\t} else {\n\t\t\t// remove this now-empty group\n\t\t\ttermgroups.splice(t.grpIndex, 1)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.opts.id,\n\t\t\t\tconfig: {\n\t\t\t\t\ttermgroups,\n\t\t\t\t\tlegendValueFilter\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.removeTermGroup = () => {\n\t\tconst t = self.activeLabel\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups.splice(t.grpIndex, 1)\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.opts.id,\n\t\t\tconfig: { termgroups }\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.mayRemoveTvsEntry = tw => {\n\t\tif (!self.config.legendValueFilter?.lst.length) return self.config.legendValueFilter\n\t\tconst lst = structuredClone(self.config.legendValueFilter.lst)\n\t\tconst items = lst.filter(\n\t\t\tf =>\n\t\t\t\tf.tvs?.term.type === tw?.term.type &&\n\t\t\t\t((('id' in f.tvs.term || 'id' in tw.term) && f.tvs.term.id === tw.term.id) || f.tvs.term.name === tw.term.name)\n\t\t)\n\t\tif (!items.length) return self.config.legendValueFilter\n\t\telse {\n\t\t\tfor (const t of items) {\n\t\t\t\tconst tvs = t.tvs\n\t\t\t\tif (tvs.term.type != tw.term.type) continue\n\t\t\t\tif (('id' in tvs.term || 'id' in tw.term) && tvs.term.id !== tw.term.id) continue\n\t\t\t\telse if (tvs.term.name != tw.term.name) continue\n\t\t\t\t// always remove a legendValueFilter.lst entry that corresponds to an edited term\n\t\t\t\t// TODO: may improve the logic to not remove a tvs entry when the tw edits are not data related, such as for colors\n\t\t\t\tconst i = lst.findIndex(t => t === tvs)\n\t\t\t\tlst.splice(i, 1)\n\t\t\t}\n\t\t}\n\t\treturn { in: true, join: 'and', type: 'tvslst', lst }\n\t}\n}\n\nfunction setSampleGroupActions(self) {\n\tself.showSampleGroupMenu = function (event) {\n\t\tconst d = event.target.__data__\n\t\tif (!d) return\n\t\tself.activeLabel = d\n\t\tself.dom.menutop.selectAll('*').remove()\n\t\tself.dom.menubody.style('padding', 0).selectAll('*').remove()\n\n\t\tconst options = JSON.parse(JSON.stringify(self.config.menuOpts?.sampleGroup || [])).map(d => {\n\t\t\td.callback = self[d.callback]\n\t\t\treturn d\n\t\t})\n\t\tconst menuOptions = [...options, { label: 'Delete', callback: self.removeSampleGroup }]\n\n\t\tself.dom.menutop\n\t\t\t.append('div')\n\t\t\t.selectAll(':scope>.sja_menuoption')\n\t\t\t.data(menuOptions)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t.style('display', 'block')\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', (event, d) => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\td.callback(d)\n\t\t\t})\n\n\t\tself.dom.tip.showunder(event.target)\n\t}\n\n\tself.showNewChartMenu = () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t}\n\n\tself.launchSurvivalPlot = async menuOpt => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tself.dom.menubody\n\t\t\t.append('div')\n\t\t\t.style('padding-top', '10px')\n\t\t\t.html(`Use \"<b>${self.config.divideBy.term.name}</b>\" to`)\n\n\t\tconst radioDiv = self.dom.menubody.append('div').style('padding', '0 10px')\n\n\t\tconst radioName = 'sjpp-matrix-surv-termnum-' + inputIndex++\n\t\tconst label1 = radioDiv.append('label')\n\t\tlabel1\n\t\t\t.append('input')\n\t\t\t.attr('type', 'radio')\n\t\t\t.attr('name', radioName)\n\t\t\t.attr('value', 'term2')\n\t\t\t.property('checked', true)\n\t\tlabel1.append('span').html(' overlay')\n\n\t\tconst label2 = radioDiv.append('label').style('margin-left', '10px')\n\t\tlabel2.append('input').attr('type', 'radio').attr('name', radioName).attr('value', 'term0')\n\t\tlabel2.append('span').html(' divide')\n\n\t\tself.dom.menubody.append('div').style('padding-bottom', '10px').html(`the selected survival variable below:`)\n\n\t\tconst termdb = await import('#termdb/app')\n\t\ttermdb.appInit({\n\t\t\tholder: self.dom.menubody.append('div'),\n\t\t\tvocabApi: self.app.vocabApi,\n\t\t\tstate: {\n\t\t\t\tvocab: self.state.vocab,\n\t\t\t\tactiveCohort: self.state.activeCohort,\n\t\t\t\tnav: {\n\t\t\t\t\theader_mode: 'search_only'\n\t\t\t\t},\n\t\t\t\ttree: { usecase: { target: 'survival', detail: 'term' } }\n\t\t\t},\n\t\t\ttree: {\n\t\t\t\tclick_term: term => {\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t\tconst termNum = radioDiv.select(`input[name='${radioName}']:checked`).property('value')\n\t\t\t\t\tself.dom.menubody.selectAll('*').remove()\n\t\t\t\t\tconst config = {\n\t\t\t\t\t\tchartType: 'survival',\n\t\t\t\t\t\tterm,\n\t\t\t\t\t\t[termNum]: JSON.parse(JSON.stringify(self.config.divideBy)),\n\t\t\t\t\t\tinsertBefore: self.id\n\t\t\t\t\t}\n\n\t\t\t\t\tif (menuOpt.config) {\n\t\t\t\t\t\tObject.assign(config, menuOpt.config)\n\t\t\t\t\t}\n\t\t\t\t\tself.app.dispatch({ type: 'plot_create', config })\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tself.removeSampleGroup = () => {\n\t\t// this should not happen, but making sure\n\t\tif (!self.config.divideBy) return\n\n\t\tconst tw = self.activeLabel.grp.tw\n\t\tconst term = tw.term\n\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\tterm.$id = tw.$id\n\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(l => l.legendGrpName == tw.term.id)\n\t\t\tif (filterGrpIndex == -1) {\n\t\t\t\tconst filterNew = {\n\t\t\t\t\tlegendGrpName: tw.term.id,\n\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\ttvs: {\n\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\tterm,\n\t\t\t\t\t\tvalues: [{ key: self.activeLabel.grp.id }]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t} else {\n\t\t\t\t// the filter for the categorical or survival term exist, but the current legend key is not there.\n\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.push({ key: self.activeLabel.grp.id })\n\t\t\t}\n\t\t} else if (isNumericTerm(term)) {\n\t\t\tterm.$id = tw.$id\n\t\t\tconst filterNew = {\n\t\t\t\tlegendGrpName: tw.term.id || tw.term.name,\n\t\t\t\ttype: 'tvs',\n\t\t\t\ttvs: {\n\t\t\t\t\tisnot: true,\n\t\t\t\t\tterm,\n\t\t\t\t\tranges: [self.data.refs.byTermId[tw.$id].bins.find(b => self.activeLabel.grp.id == b.name)]\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t}\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: { legendValueFilter: self.config.legendValueFilter }\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.showDeletedSampleGroups = () => {\n\t\t// this should not happen, but making sure\n\t\tif (!self.config.divideBy) return\n\n\t\tconst tw = self.activeLabel?.grp?.tw || self.config.divideBy\n\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\tl => l.legendGrpName !== tw.term.id && l.legendGrpName != tw.term.name\n\t\t)\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: { legendValueFilter: self.config.legendValueFilter }\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\n\tself.displaySampleGroupInfo = (event, grp) => {\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tconst n = grp.lst.length\n\t\tself.dom.menutop.selectAll('*').remove()\n\t\tself.dom.menubody.selectAll('*').remove()\n\t\tself.dom.menubody\n\t\t\t.append('div')\n\t\t\t.style('text-align', 'center')\n\t\t\t.html(`<b>${grp.name}</b> (${n} ${n < 2 ? l.sample : l.samples})`)\n\t\tconst div = self.dom.menubody.append('div').style('max-width', '400px').style('padding', '5px')\n\t\tfor (const key in event.target.__data__.grp.legendData) {\n\t\t\tconst g = event.target.__data__.grp.legendData[key]\n\t\t\tdiv.append('div').style('padding-top', '10px').html(`<b>${g.name}</b>`)\n\t\t\tconst t = div.append('table')\n\t\t\tfor (const i of g.items) {\n\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t// icon\n\t\t\t\ttr.append('td')\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t.style('background-color', i.color)\n\t\t\t\t\t.style('border', `1px soloid ${i.stroke}`)\n\t\t\t\ttr.append('td').html(i.text)\n\t\t\t}\n\t\t}\n\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t}\n\n\t// TODO: may use this later to sort legend, mouseover items by count\n\tself.legendItemSorter = (a, b) => {\n\t\tif (a.order && b.order) return a.order - b.order\n\t\tif (Number.isFinite(a.order) || b.order == -1) return -1\n\t\tif (Number.isFinite(b.order) || a.order == -1) return 1\n\t\tif (a.count) return b.count - a.count\n\t\tif (Number.isFinite(a.count)) return -1\n\t\tif (Number.isFinite(b.count)) return 1\n\t\treturn 0\n\t}\n\n\tself.handleLegendItemClick = d => {\n\t\tconst dvt = structuredClone(self.config.divideBy || {})\n\t\tconst id = 'id' in dvt ? dvt.id : dvt.name\n\t\tif (d.termid == id) {\n\t\t\tif (!dvt.exclude) dvt.exclude = []\n\t\t\tconst i = dvt.exclude?.indexOf(d.key)\n\t\t\tif (i == -1) dvt.exclude.push(d.key)\n\t\t\telse dvt.exclude.splice(i, 1)\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.id,\n\t\t\t\tconfig: {\n\t\t\t\t\tdivideBy: dvt\n\t\t\t\t}\n\t\t\t})\n\t\t}\n\t}\n\n\tself.handleLegendMouseover = (event, d) => {\n\t\tconst dvt = structuredClone(self.config.divideBy || {})\n\t\tconst id = 'id' in dvt ? dvt.id : dvt.name\n\t\tif (d.termid == id) {\n\t\t\tself.dom.menutop.selectAll('*').remove()\n\t\t\tself.dom.menubody.selectAll('*').remove()\n\t\t\tself.dom.menubody.html(`Click to ${d.isExcluded ? 'show' : 'hide'}`)\n\t\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t\t}\n\t}\n}\n\nfunction setTermGroupActions(self) {\n\tsetLabelDragEvents(self, 'termGrp')\n\n\tself.showTermGroupMenu = function (event) {\n\t\tconst d = event.target.tagName.toLowerCase() == 'tspan' ? event.target.parentNode.__data__ : event.target.__data__\n\t\tif (!d) return\n\t\tself.activeLabel = d\n\t\tself.dom.menutop.style('display', '').selectAll('*').remove()\n\t\tself.showTermGroupInputs(self.dom.menutop.append('div'))\n\t\tself.dom.tip.showunder(event.target)\n\t}\n\n\tself.showTermGroupInputs = function (div) {\n\t\tconst holder = div\n\t\tconst labelEditDiv = holder.append('div').style('text-align', 'center')\n\t\tlabelEditDiv.append('span').text('Group ')\n\n\t\tself.dom.grpNameInput = labelEditDiv\n\t\t\t.append('input')\n\t\t\t.attr('type', 'text')\n\t\t\t.attr('size', (self.activeLabel.grp.name?.length || 0) + 5)\n\t\t\t.style('padding', '1px 5px')\n\t\t\t.style('text-align', 'center')\n\t\t\t.property('value', self.activeLabel.grp.name)\n\t\t\t.on('input', () => {\n\t\t\t\tconst value = self.dom.grpNameInput.property('value')\n\t\t\t\tself.dom.grpNameInput.attr('size', value.length + 5)\n\t\t\t\tself.dom.grpEditBtn.style('display', value === self.activeLabel.grp.name ? 'none' : '')\n\t\t\t})\n\t\t//.on('change', self.updateTermGrpName)\n\n\t\tself.dom.grpEditBtn = labelEditDiv\n\t\t\t.append('button')\n\t\t\t.style('display', 'none')\n\t\t\t.style('margin-left', '5px')\n\t\t\t.html('submit')\n\t\t\t.on('click', () => {\n\t\t\t\tself.updateTermGrpName()\n\t\t\t\tself.dom.tip.hide()\n\t\t\t})\n\n\t\tself.dom.menubody.style('padding', 0).selectAll('*').remove()\n\n\t\tconst menuOptions = [{ label: 'Add Rows', callback: self.showTermInsertMenu }]\n\t\t// try to maintain a familiar button order\n\t\tif (self.chartType != 'hierCluster') {\n\t\t\tmenuOptions.push(\n\t\t\t\t{ label: 'Edit', callback: self.showTermGroupEditMenu }\n\t\t\t\t//{ label: 'Sort', callback: self.showSortMenu },\n\t\t\t)\n\t\t}\n\t\tif (self.activeLabel.grp.type != 'hierCluster') {\n\t\t\tmenuOptions.push({ label: 'Delete', callback: self.removeTermGroup })\n\t\t}\n\n\t\tholder\n\t\t\t.append('div')\n\t\t\t.style('text-align', 'center')\n\t\t\t.selectAll(':scope>.sja_menuoption')\n\t\t\t.data(menuOptions)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t.style('display', 'inline-block')\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', (event, d) => {\n\t\t\t\tevent.stopPropagation()\n\t\t\t\tself.dom.menutop.style('display', 'none')\n\t\t\t\td.callback(d)\n\t\t\t})\n\t}\n\n\tself.updateTermGrpName = () => {\n\t\tconst value = self.dom.grpNameInput.property('value')\n\t\tconst t = self.activeLabel\n\t\tif (t.grp.name === value) return\n\t\tt.grp.name = value\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_nestedEdits',\n\t\t\tid: self.opts.id,\n\t\t\tedits: [\n\t\t\t\t{\n\t\t\t\t\tnestedKeys: ['termgroups', t.grpIndex],\n\t\t\t\t\tvalue: t.grp\n\t\t\t\t}\n\t\t\t]\n\t\t})\n\t}\n\n\tself.showTermGroupEditMenu = async () => {\n\t\tself.dom.menubody.selectAll('*').remove()\n\n\t\tconst menu = self.dom.menubody.append('div').style('padding', '5px')\n\t\tmenu.append('div').style('width', '100%').style('font-weight', 600).html('Group options')\n\n\t\tconst label = menu.append('div').append('label')\n\t\tconst l = self.settings.matrix.controlLabels\n\t\tlabel\n\t\t\t.append('span')\n\t\t\t.html(\n\t\t\t\t`Minimum # of mutated ${l.samples} for the ${l.term.charAt(0).toLowerCase() + l.term.slice(1)} to be visible `\n\t\t\t)\n\t\t\t.attr('aria-label', `May be overridden by a row-specific minNumSamples`)\n\t\tconst minNumSampleInput = label\n\t\t\t.append('input')\n\t\t\t.attr('type', 'number')\n\t\t\t.style('margin-left', '5px')\n\t\t\t.style('width', '50px')\n\t\t\t.property('value', self.activeLabel.grp.settings?.minNumSamples || 0)\n\n\t\tmenu\n\t\t\t.append('div')\n\t\t\t.append('button')\n\t\t\t.html('Submit')\n\t\t\t.on('click', () => {\n\t\t\t\tconst settings = self.activeLabel.grp.settings || {}\n\t\t\t\tsettings.minNumSamples = minNumSampleInput.property('value')\n\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_nestedEdits',\n\t\t\t\t\tid: self.id,\n\t\t\t\t\tedits: [\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tnestedKeys: ['termgroups', self.activeLabel.grpIndex, 'settings'],\n\t\t\t\t\t\t\tvalue: settings\n\t\t\t\t\t\t}\n\t\t\t\t\t]\n\t\t\t\t})\n\t\t\t})\n\t}\n\n\tself.removeTermGroup = () => {\n\t\tconst termgroups = self.termGroups\n\t\ttermgroups.splice(self.activeLabel.grpIndex, 1)\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: {\n\t\t\t\ttermgroups\n\t\t\t}\n\t\t})\n\t\tself.dom.tip.hide()\n\t}\n\tconst labelParentSelectors = ['series', 'series-group', 'term', 'term-group']\n\t\t.map(d => `.sjpp-matrix-${d}-label-g`)\n\t\t.join(',')\n\tself.enableTextHighlight = event => {\n\t\tselect(event.target.closest(labelParentSelectors))\n\t\t\t.selectAll('.sjpp-matrix-label text')\n\t\t\t//.selectAll('text')\n\t\t\t.style('-webkit-user-select', 'auto')\n\t\t\t.style('-moz-user-select', 'auto')\n\t\t\t.style('-ms-user-select', 'auto')\n\t\t\t.style('user-select', 'auto')\n\n\t\tselect('body').on('mouseup.sjppMatrixLabelText', self.disableTextHighlight)\n\t}\n\n\tself.disableTextHighlight = event => {\n\t\tselect(event.target.closest(labelParentSelectors))\n\t\t\t.selectAll('.sjpp-matrix-label text')\n\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t.style('-moz-user-select', 'none')\n\t\t\t.style('-ms-user-select', 'none')\n\t\t\t.style('user-select', 'none')\n\n\t\tselect('body').on('mouseup.sjppMatrixLabelText', null)\n\t}\n}\n\n// prefix = \"term\" | \"termGrp\"\nfunction setLabelDragEvents(self, prefix) {\n\tself[`${prefix}LabelMousedown`] = (event, d) => {\n\t\tself.clicked = { event, d }\n\t}\n\n\tself[`${prefix}LabelMouseover`] = (event, t) => {\n\t\tif (prefix == 'term' && event.target.__data__?.tw && event.target.__data__.grp) {\n\t\t\tif (event.target.__data__.grp.type == 'hierCluster') {\n\t\t\t\t// do allow to be dragged/dropped and do not show term label hover over tooltip for hier cluster\n\t\t\t\treturn\n\t\t\t}\n\t\t\t//show counts in each subgroup when hover over term label\n\t\t\tif (self.activeLabel || self.zoomArea) {\n\t\t\t\t// when an edit menu is open or when users are selecting a portion of matrix to zoom\n\t\t\t\treturn\n\t\t\t}\n\t\t\tself.dom.menutop.selectAll('*').remove()\n\t\t\tself.dom.menubody.selectAll('*').remove()\n\t\t\tconst groupName = event.target.__data__.grp.name\n\t\t\tconst termName = event.target.__data__.tw.term.name\n\n\t\t\t//Add subGroup name\n\t\t\tconst titleDiv = self.dom.menubody\n\t\t\t\t.append('div')\n\t\t\t\t.style('text-align', 'left')\n\t\t\t\t.style('font-size', '1.1em')\n\t\t\t\t.html(groupName ? `<b>${groupName}: ${termName}</b>` : `<b>${termName}</b>`)\n\n\t\t\tconst div = self.dom.menubody.append('div').style('max-width', '400px')\n\n\t\t\tconst data = event.target.__data__\n\n\t\t\tif (data.tw.term.type == 'geneVariant' && data.tw.q?.type == 'values') {\n\t\t\t\t// for geneVariant term, when groupsetting is <not?> used, use subGroupCounts to\n\t\t\t\t// show number of counted samples (WT and Blank are not counted)\n\t\t\t\t// and number of each class in the subGroup\n\n\t\t\t\t//Sum of not tested samples in all group\n\t\t\t\tconst notTestedSum = Object.values(data.counts.subGroupCounts).reduce(\n\t\t\t\t\t(sum, curr) => sum + curr.samplesNotTested,\n\t\t\t\t\t0\n\t\t\t\t)\n\n\t\t\t\t//Add number of tested samples\n\t\t\t\ttitleDiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.style('text-align', 'left')\n\t\t\t\t\t.style('font-size', '0.9em')\n\t\t\t\t\t.html(`(tested ${self.samples.length - notTestedSum} of ${self.samples.length})`)\n\n\t\t\t\tfor (const [grpName, counts] of Object.entries(data.counts.subGroupCounts)) {\n\t\t\t\t\tconst groupSampleTotal = self.sampleGroups.find(g => g.name == grpName).lst.length\n\t\t\t\t\tconst mRate =\n\t\t\t\t\t\tgroupSampleTotal - counts.samplesNotTested\n\t\t\t\t\t\t\t? counts.samplesTotal / (groupSampleTotal - counts.samplesNotTested)\n\t\t\t\t\t\t\t: 0\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('padding-top', '10px')\n\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\tgrpName\n\t\t\t\t\t\t\t\t? `<b>${grpName}</b>: Mutated samples (${counts.samplesTotal} of ${\n\t\t\t\t\t\t\t\t\t\tgroupSampleTotal - counts.samplesNotTested\n\t\t\t\t\t\t\t\t }, ${d3format('.1%')(mRate)})`\n\t\t\t\t\t\t\t\t: `<b>Mutated samples (${counts.samplesTotal} of ${\n\t\t\t\t\t\t\t\t\t\tgroupSampleTotal - counts.samplesNotTested\n\t\t\t\t\t\t\t\t }, ${d3format('.1%')(mRate)})`\n\t\t\t\t\t\t)\n\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.classes).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t// icon\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t.style('background-color', mclass[classType].color)\n\t\t\t\t\t\ttr.append('td').html(`${mclass[classType].label}: ${num}`)\n\t\t\t\t\t}\n\t\t\t\t\tif (counts.notTestedClasses) {\n\t\t\t\t\t\tdiv.append('div').style('margin-left', '15px').style('padding-top', '12px').html('<b> Not counted:</b>')\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.notTestedClasses).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', mclass[classType].color)\n\t\t\t\t\t\t\ttr.append('td').html(`${mclass[classType].label}: ${num}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else if (!self.config.divideBy) {\n\t\t\t\t// non-geneVariant term, when matrix is not divided into multiple subGorups\n\t\t\t\tconst termLegend = self.legendData.find(t => t.name == data.tw.term.name)\n\t\t\t\tif (termLegend && termLegend.items) {\n\t\t\t\t\t// when legend data is available\n\t\t\t\t\tconst t = div.append('table')\n\t\t\t\t\tfor (const classType of termLegend.items) {\n\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t// icon\n\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t.style('background-color', classType.color)\n\t\t\t\t\t\ttr.append('td').html(`${classType.key}: ${classType.count}`)\n\t\t\t\t\t}\n\t\t\t\t} else {\n\t\t\t\t\t// when legend data is not available, use subGroupCounts\n\t\t\t\t\tfor (const [grpName, counts] of Object.entries(data.counts.subGroupCounts)) {\n\t\t\t\t\t\tconst groupSampleTotal = self.sampleGroups.find(g => g.name == grpName).totalCountedValues\n\t\t\t\t\t\tdiv\n\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t.style('padding-top', '10px')\n\t\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\t\tgrpName !== ''\n\t\t\t\t\t\t\t\t\t? `<b>${grpName}</b>: ${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t\t\t\t: `<b>${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.classes).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\t\tconst classColor = data.tw.term.values?.[classType]?.color\n\t\t\t\t\t\t\tif (!classColor) continue\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', classColor)\n\t\t\t\t\t\t\ttr.append('td').html(`${classType}: ${num}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\t// non-geneVariant term, when matrix is divided into multiple subGorups\n\t\t\t\tfor (const [grpName, counts] of Object.entries(data.counts.subGroupCounts)) {\n\t\t\t\t\tconst groupSampleTotal = self.sampleGroups.find(g => g.name == grpName).totalCountedValues\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.style('padding-top', '10px')\n\t\t\t\t\t\t.html(\n\t\t\t\t\t\t\tgrpName !== ''\n\t\t\t\t\t\t\t\t? `<b>${grpName}</b>: ${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t\t\t: `<b>${counts.samplesTotal} of ${groupSampleTotal}`\n\t\t\t\t\t\t)\n\t\t\t\t\tconst subGrp = self.sampleGroups.find(g => g.name == grpName)\n\t\t\t\t\tconst termLegend = subGrp.legendData.find(t => t.name == data.tw.term.name)\n\n\t\t\t\t\tif (termLegend && termLegend.items) {\n\t\t\t\t\t\t// when legend data is available\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const classType of termLegend.items) {\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', classType.color)\n\t\t\t\t\t\t\ttr.append('td').html(`${classType.key}: ${classType.count}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// when legend data is not available, use subGroupCounts\n\t\t\t\t\t\tconst t = div.append('table').style('margin-left', '15px')\n\t\t\t\t\t\tfor (const [classType, num] of Object.entries(counts.classes).sort((a, b) => b[1] - a[1])) {\n\t\t\t\t\t\t\tconst classColor = data.tw.term.values?.[classType]?.color\n\t\t\t\t\t\t\tif (!classColor) continue\n\t\t\t\t\t\t\tconst tr = t.append('tr')\n\t\t\t\t\t\t\t// icon\n\t\t\t\t\t\t\ttr.append('td')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.style('width', '12px')\n\t\t\t\t\t\t\t\t.style('height', '12px')\n\t\t\t\t\t\t\t\t.style('background-color', classColor)\n\t\t\t\t\t\t\ttr.append('td').html(`${classType}: ${num}`)\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.dom.tip.show(event.clientX, event.clientY)\n\t\t}\n\t\t//const cls = event.target.className?.baseVal || event.target.parentNode.className?.baseVal || ''\n\t\tif (event.target.innerHTML.includes('grouped by')) return\n\t\tif (event.target.tagName === 'text') {\n\t\t\tselect(event.target).style('fill', 'blue')\n\t\t}\n\t\tif (!self.dragged) return\n\t\t// TODO: why is the element-bound __data__ (t) not provided as a second argument by d3??\n\t\tself.hovered = event.target.__data__\n\t}\n\n\tself[`${prefix}LabelMouseout`] = event => {\n\t\tselect(event.target).style('fill', '')\n\t\t//if (!this.dragged) return\n\t}\n\n\tself[`${prefix}LabelMousemove`] = (event, data) => {\n\t\tconst s = self.config.settings.matrix\n\t\tif (self.clicked && !self.dragged) {\n\t\t\tself.dom[`${prefix}LabelG`]\n\t\t\t\t.selectAll('text')\n\t\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t\t.style('-moz-user-select', 'none')\n\t\t\t\t.style('-ms-user-select', 'none')\n\t\t\t\t.style('user-select', 'none')\n\n\t\t\tconst label = self.clicked.event.target.closest('.sjpp-matrix-label')\n\t\t\tconst t = label?.__data__\n\t\t\tif (!t) return\n\t\t\tif (self.type == 'hierCluster' && t.tw && t.grp?.name == self.config.settings.hierCluster?.termGroupName) return\n\t\t\t// TODO: use a native or D3 transform accessor\n\t\t\tconst [x, y] = select(label).attr('transform').split('translate(')[1].split(')')[0].split(',').map(Number)\n\t\t\tconst node = label.cloneNode(true)\n\t\t\tself.dom[`${prefix}LabelG`].node().prepend(node)\n\t\t\tself.dragged = {\n\t\t\t\torig: label,\n\t\t\t\tclone: select(node).style('cursor', 'move').style('pointer-events', 'none'),\n\t\t\t\tnode,\n\t\t\t\tx,\n\t\t\t\ty,\n\t\t\t\tclientX: event.clientX,\n\t\t\t\tclientY: event.clientY\n\t\t\t}\n\t\t\tself.dragged.clone.selectAll('text').style('fill', 'red')\n\t\t}\n\t\tif (!self.dragged) return\n\t\tconst d = self.dragged\n\t\tconst x2 = !s.transpose ? d.x : d.x - d.clientX + event.clientX\n\t\tconst y2 = !s.transpose ? d.y - d.clientY + event.clientY : d.y\n\t\td.clone.attr('transform', `translate(${x2},${y2})`)\n\t}\n\n\tself[`${prefix}LabelMouseup`] = event => {\n\t\tdelete self.clicked\n\t\tconst s = self.config.settings.matrix\n\t\tif (self.dragged) {\n\t\t\tself.dragged.clone.remove()\n\t\t\t//self.dragged.bgrect.remove()\n\t\t\tif (self.hovered) {\n\t\t\t\t// reposition the dragged row/column\n\t\t\t\tconst d = self.dragged\n\t\t\t\tconst t = d.orig.__data__\n\t\t\t\tconst h = self.hovered\n\n\t\t\t\tif (prefix == 'termGrp') {\n\t\t\t\t\tconst grp = self.config.termgroups.splice(t.grpIndex, 1)[0]\n\t\t\t\t\tself.config.termgroups.splice(h.grpIndex, 0, grp)\n\t\t\t\t} else {\n\t\t\t\t\t// NOTE: currently, the rendered order does not have to match the termgroup.lst order\n\t\t\t\t\t// ??? actually resort termgroup.lst to reflect the current term order ???\n\t\t\t\t\tfor (const grp of self.config.termgroups) {\n\t\t\t\t\t\tgrp.lst.sort((a, b) => {\n\t\t\t\t\t\t\tconst a1 = self.termOrder.find(t => t.tw.$id === a.$id)\n\t\t\t\t\t\t\tconst b1 = self.termOrder.find(t => t.tw.$id === b.$id)\n\t\t\t\t\t\t\tif (!a1 && !b1) return 0\n\t\t\t\t\t\t\tif (!a1) return 1\n\t\t\t\t\t\t\tif (!b1) return -1\n\t\t\t\t\t\t\treturn a1.totalIndex - b1.totalIndex\n\t\t\t\t\t\t})\n\t\t\t\t\t}\n\n\t\t\t\t\tconst tw = self.config.termgroups[t.grpIndex].lst.splice(t.index, 1)[0]\n\t\t\t\t\tself.config.termgroups[h.grpIndex].lst.splice(h.index, 0, t.tw)\n\t\t\t\t\t// if the \"source\" term group was emptied, then remove that group\n\t\t\t\t\tif (!self.config.termgroups[t.grpIndex].lst.length) self.config.termgroups.splice(t.grpIndex, 1)\n\t\t\t\t}\n\n\t\t\t\tconst sortKey = prefix == 'term' ? 'sortTermsBy' : 'sortTermGroupsBy'\n\t\t\t\tself.app.dispatch({\n\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\tid: self.id,\n\t\t\t\t\tconfig: {\n\t\t\t\t\t\ttermgroups: self.config.termgroups,\n\t\t\t\t\t\tsettings: {\n\t\t\t\t\t\t\tmatrix: {\n\t\t\t\t\t\t\t\t[sortKey]: 'asListed'\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\n\t\t\tself.dom[`${prefix}LabelG`]\n\t\t\t\t.selectAll('text')\n\t\t\t\t.style('fill', '')\n\t\t\t\t.style('-webkit-user-select', '')\n\t\t\t\t.style('-moz-user-select', '')\n\t\t\t\t.style('-ms-user-select', '')\n\t\t\t\t.style('user-select', '')\n\n\t\t\tdelete self.dragged\n\t\t} else if (prefix == 'term') {\n\t\t\tself.showTermMenu(event)\n\t\t} else {\n\t\t\tself.showTermGroupMenu(event)\n\t\t}\n\t}\n}\n\nfunction setZoomPanActions(self) {\n\tself.resetInteractions = function () {\n\t\tif (self.zoomArea) {\n\t\t\tself.zoomArea.remove()\n\t\t\tdelete self.zoomArea\n\t\t\t//self.dom.seriesesG.on('mouseup.zoom', null)\n\t\t\tselect('body').on('mouseup.matrixZoom', null)\n\t\t}\n\t\tdelete self.clickedSeriesCell\n\t}\n\n\tself.seriesesGMousedown = function (event) {\n\t\tevent.stopPropagation()\n\t\tself.resetInteractions()\n\t\tconst startCell = self.getCellByPos(event)\n\t\tif (!startCell) return\n\t\tself.clickedSeriesCell = { event, startCell }\n\t\tif (self.settings.matrix.mouseMode == 'pan') {\n\t\t\tself.seriesesGdragInit()\n\t\t} else {\n\t\t\tself.zoomPointer = pointer(event, self.dom.seriesesG.node())\n\t\t\tself.dom.seriesesG\n\t\t\t\t.on('mousemove', self.seriesesGoutlineZoom)\n\t\t\t\t.on('mouseup', self.seriesesGtriggerZoom)\n\t\t\t\t.on('contextmenu', self.resetInteractions)\n\t\t}\n\t\tself.dom.mainG\n\t\t\t.selectAll('text')\n\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t.style('-moz-user-select', 'none')\n\t\t\t.style('-ms-user-select', 'none')\n\t\t\t.style('user-select', 'none')\n\t}\n\n\tself.getCellByPos = function (event) {\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tif (event.target.tagName == 'rect') {\n\t\t\tif (event.target.__data__?.sample) return event.target.__data__\n\t\t\tif (event.target.__data__?.xg) {\n\t\t\t\tconst width = event.clientX - event.target.getBoundingClientRect().x + d.seriesXoffset\n\t\t\t\tconst i = Math.floor(width / d.dx)\n\t\t\t\treturn self.sampleOrder[i]\n\t\t\t}\n\t\t}\n\t\tif (event.target.tagName == 'image' && s.useCanvas) {\n\t\t\treturn self.getImgCell(event)\n\t\t}\n\t}\n\n\tself.seriesesGdragInit = function () {\n\t\t//self.dom.seriesesG.on('mousemove', self.seriesesGdrag).on('mouseup', self.seriesesGcancelDrag)\n\t\tselect('body')\n\t\t\t.on('mousemove.sjppMatrixDrag', self.seriesesGdrag)\n\t\t\t.on('mouseup.sjppMatrixDrag', self.seriesesGcancelDrag)\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tconst c = self.clickedSeriesCell\n\t\tc.dxPad = 20 // to show edge that limits drag, and to \"bounce back\" on mouseup\n\t\t//const pos = d.seriesXoffset s.zoomCenterPct * d.mainw /// d.mainw\n\t\tc.dxMax = -d.seriesXoffset\n\t\tc.dxMaxPad = c.dxMax + c.dxPad\n\t\tc.dxMin = d.mainw - d.zoomedMainW - d.seriesXoffset\n\t\tc.dxMinPad = c.dxMin - c.dxPad\n\t\tconst halfw = 0.5 * d.mainw\n\t\tc.center = {\n\t\t\tmax: halfw + (d.zoomedMainW - d.mainw),\n\t\t\tmin: halfw\n\t\t}\n\t}\n\n\tself.seriesesGdrag = function (event) {\n\t\tconst s = self.settings.matrix\n\t\tconst c = self.clickedSeriesCell\n\t\tconst d = self.dimensions\n\t\tconst dx = event.clientX - c.event.clientX\n\t\tif (Math.abs(dx) < 1) return\n\t\tif (dx < c.dxMinPad || dx > c.dxMaxPad) return\n\t\tself.clickedSeriesCell.dx = dx\n\t\tself.translateElems(dx, d, s, c)\n\t}\n\n\tself.translateElems = function (dx, d, s, c) {\n\t\tself.dom.seriesesG.attr('transform', `translate(${d.xOffset + d.seriesXoffset + dx},${d.yOffset})`)\n\t\tself.layout.top.attr.adjustBoxTransform(dx)\n\t\tself.layout.btm.attr.adjustBoxTransform(dx)\n\t\tconst computedCenter = s.zoomCenterPct * d.mainw - d.seriesXoffset - dx\n\t\tself.controlsRenderer.svgScrollApi.update({ zoomCenter: computedCenter })\n\t}\n\n\tself.seriesesGcancelDrag = function (event) {\n\t\tselect('body').on('mousemove.sjppMatrixDrag', null).on('mouseup.sjppMatrixDrag', null)\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tconst cc = self.clickedSeriesCell\n\t\tconst _dx = event.clientX - cc.event.clientX\n\t\tconst dx = Math.min(cc.dxMax, Math.max(_dx, cc.dxMin))\n\t\tif (Math.abs(_dx) < 1 || Math.abs(dx) < 1) {\n\t\t\tself.translateElems(0, d, s, cc)\n\t\t\treturn\n\t\t}\n\t\tself.translateElems(dx, d, s, cc)\n\t\tconst c = self.getVisibleCenterCell(dx)\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: {\n\t\t\t\tsettings: {\n\t\t\t\t\tmatrix: {\n\t\t\t\t\t\tzoomCenterPct: 0.5,\n\t\t\t\t\t\tzoomIndex: c.totalIndex,\n\t\t\t\t\t\tzoomGrpIndex: c.grpIndex\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\t}\n\n\tself.seriesesGoutlineZoom = function (event) {\n\t\tif (!self.clickedSeriesCell) return\n\t\tconst s = self.config.settings.matrix\n\t\tconst e = self.clickedSeriesCell.event\n\n\t\tif (self.clickedSeriesCell && !self.zoomArea) {\n\t\t\tself.zoomArea = self.dom.seriesesG.append('rect').attr('fill', 'rgba(50, 50, 50, 0.3)')\n\n\t\t\tselect('body').on('mouseup.matrixZoom', self.mouseup)\n\n\t\t\tself.dom.mainG\n\t\t\t\t.selectAll('text')\n\t\t\t\t.style('-webkit-user-select', 'none')\n\t\t\t\t.style('-moz-user-select', 'none')\n\t\t\t\t.style('-ms-user-select', 'none')\n\t\t\t\t.style('user-select', 'none')\n\t\t}\n\n\t\tconst dx = event.clientX - e.clientX\n\t\tconst dy = event.clientY - e.clientY\n\t\tconst x = dx > 0 ? self.zoomPointer[0] : self.zoomPointer[0] + dx + 3\n\t\tself.zoomWidth = Math.abs(dx)\n\t\tself.zoomArea\n\t\t\t.attr('transform', `translate(${x},0)`)\n\t\t\t.attr('width', Math.max(0, self.zoomWidth - 2))\n\t\t\t.attr('height', self.dimensions.mainh)\n\n\t\tif (!self.clickedSeriesCell.endCell) self.clickedSeriesCell.endCell = self.getCellByPos(event)\n\t}\n\n\tself.seriesesGtriggerZoom = function (event) {\n\t\tevent.stopPropagation()\n\t\tself.dom.seriesesG.on('mousemove', null).on('mouseup', null)\n\t\t//const d = event.target.__data__\n\t\tselect('body').on('mouseup.matrixZoom', null)\n\n\t\tself.dom.mainG\n\t\t\t.selectAll('text')\n\t\t\t.style('-webkit-user-select', '')\n\t\t\t.style('-moz-user-select', '')\n\t\t\t.style('-ms-user-select', '')\n\t\t\t.style('user-select', '')\n\n\t\tconst c = self.clickedSeriesCell\n\t\tconst endCell = self.getCellByPos(event)\n\t\tif (!c || !c.startCell) {\n\t\t\tself.dom.mainG.on('mouseout', null)\n\t\t\tdelete self.clickedSeriesCell\n\t\t\treturn\n\t\t} else if (!c.endCell || endCell === c.startCell) {\n\t\t\tself.dom.mainG.on('mouseout', null)\n\t\t\tself.dom.tip.hide()\n\t\t\tconst cell = event.target.tagName == 'rect' ? event.target.__data__ : c.startCell\n\t\t\tif (cell) {\n\t\t\t\tif (self.opts.cellClick) {\n\t\t\t\t\tself.opts.cellClick(\n\t\t\t\t\t\tstructuredClone({\n\t\t\t\t\t\t\tsampleData: cell.row,\n\t\t\t\t\t\t\tterm: cell.term,\n\t\t\t\t\t\t\tvalue: cell.value,\n\t\t\t\t\t\t\ts: cell.s,\n\t\t\t\t\t\t\tt: cell.t,\n\t\t\t\t\t\t\tsiblingCells: cell.siblingCells\n\t\t\t\t\t\t\t\t.filter(c => c !== cell)\n\t\t\t\t\t\t\t\t.map(c => ({\n\t\t\t\t\t\t\t\t\tterm: c.term,\n\t\t\t\t\t\t\t\t\tvalue: c.value,\n\t\t\t\t\t\t\t\t\ts: c.s,\n\t\t\t\t\t\t\t\t\tt: c.t\n\t\t\t\t\t\t\t\t}))\n\t\t\t\t\t\t})\n\t\t\t\t\t)\n\t\t\t\t} else {\n\t\t\t\t\tself.mouseclick(event, cell)\n\t\t\t\t}\n\t\t\t}\n\t\t\tdelete self.clickedSeriesCell\n\t\t\tdelete self.zoomArea\n\t\t\treturn\n\t\t}\n\n\t\tconst s = self.settings.matrix\n\t\tconst l = s.controlLabels\n\t\tc.endCell = endCell\n\t\tconst ss = self.opts.allow2selectSamples\n\n\t\tconst startCellTouched = c.startCell.totalIndex < c.endCell.totalIndex ? c.startCell : c.endCell\n\t\tconst endCellTouched = c.startCell.totalIndex < c.endCell.totalIndex ? c.endCell : c.startCell\n\t\tconst samplesSet = new Set()\n\t\tfor (let i = startCellTouched.totalIndex; i <= endCellTouched.totalIndex; i++) {\n\t\t\tsamplesSet.add(self.sampleOrder[i].row)\n\t\t}\n\t\tconst samples = [...samplesSet]\n\n\t\tconst optionArr = [\n\t\t\t{\n\t\t\t\tlabel: 'Zoom in',\n\t\t\t\tcallback: self.triggerZoomArea\n\t\t\t},\n\t\t\t{\n\t\t\t\tlabel: `List ${samples.length} ${l.samples}`,\n\t\t\t\tcallback: () => {\n\t\t\t\t\tself.resetInteractions()\n\t\t\t\t\tself.dom.tip.hide()\n\t\t\t\t\tshowTable(self, samples, event.clientX, event.clientY)\n\t\t\t\t}\n\t\t\t}\n\t\t]\n\n\t\tif (ss) {\n\t\t\toptionArr.push({\n\t\t\t\tlabel: ss.buttonText || `Select ${l.Samples}`,\n\t\t\t\tcallback: async () => {\n\t\t\t\t\tss.callback({\n\t\t\t\t\t\tsamples: await self.app.vocabApi.convertSampleId(samples, ss.attributes),\n\t\t\t\t\t\tsource: `Selected ${l.samples} from OncoMatrix`\n\t\t\t\t\t})\n\t\t\t\t\tself.zoomArea.remove()\n\t\t\t\t\tdelete self.zoomArea\n\t\t\t\t\tdelete self.clickedSeriesCell\n\t\t\t\t}\n\t\t\t})\n\t\t} else {\n\t\t\tif (self.state.nav && self.state.nav.header_mode !== 'hidden') {\n\t\t\t\tfor (const s of samples) {\n\t\t\t\t\tif (!s.sampleId) s.sampleId = s.sample\n\t\t\t\t}\n\t\t\t\toptionArr.push({\n\t\t\t\t\tlabel: 'Add to a group',\n\t\t\t\t\tcallback: async () => {\n\t\t\t\t\t\tself.resetInteractions()\n\t\t\t\t\t\tconst group = {\n\t\t\t\t\t\t\tname: 'Group',\n\t\t\t\t\t\t\titems: samples\n\t\t\t\t\t\t}\n\t\t\t\t\t\tself.addGroup(group)\n\t\t\t\t\t}\n\t\t\t\t})\n\t\t\t}\n\t\t}\n\n\t\tself.dom.dendroClickMenu.clear() // close the dendrogram clicking menu when brushing\n\t\tself.dom.clickMenu.clear() // close the matrix cell click menu when brushing\n\t\tself.mouseout()\n\t\tself.dom.tip.hide()\n\t\tself.dom.brushMenu.clear()\n\t\tself.dom.brushMenu.d\n\t\t\t.selectAll('div')\n\t\t\t.data(optionArr)\n\t\t\t.enter()\n\t\t\t.append('div')\n\t\t\t.attr('class', 'sja_menuoption')\n\t\t\t.style('border-radius', '0px')\n\t\t\t.html(d => d.label)\n\t\t\t.on('click', event => {\n\t\t\t\tself.dom.brushMenu.d.selectAll('*').remove()\n\t\t\t\tevent.target.__data__.callback()\n\t\t\t})\n\t\tself.dom.brushMenu.show(event.clientX, event.clientY)\n\t}\n\n\t// show the list of clicked samples as a table\n\tconst showTable = function (self, samples, x, y) {\n\t\tdelete self.clickedSeriesCell\n\t\tconst templates = self.state.termdbConfig.urlTemplates\n\t\tconst rows = templates?.sample\n\t\t\t? samples.map(c => [{ value: c._ref_.label, url: `${templates.sample.base}${c.sample}` }])\n\t\t\t: samples.map(c => [{ value: c._ref_.label }])\n\n\t\tconst columns = [{ label: self.settings.matrix.controlLabels.Samples }]\n\n\t\tif (!self.dom.sampleListMenu) self.dom.sampleListMenu = new Menu({ padding: '5px' })\n\t\telse self.dom.sampleListMenu.clear()\n\t\tconst div = self.dom.sampleListMenu.d.append('div')\n\n\t\trenderTable({\n\t\t\trows,\n\t\t\tcolumns,\n\t\t\tdiv,\n\t\t\tshowLines: true,\n\t\t\tmaxWidth: columns.length * '30' + 'vw',\n\t\t\tmaxHeight: '35vh',\n\t\t\tresize: true\n\t\t})\n\t\tself.dom.sampleListMenu.show(x, y)\n\t}\n\n\t// add the selected samples into a group\n\tself.addGroup = async function (group) {\n\t\tconst tw = getSamplelstTW([group])\n\t\tconst filter = getFilter(tw)\n\t\taddNewGroup(self.app, filter, self.state.groups)\n\t}\n\tself.triggerZoomArea = function () {\n\t\tif (self.zoomArea) {\n\t\t\tself.zoomArea.remove()\n\t\t\tdelete self.zoomArea\n\t\t}\n\t\tconst c = self.clickedSeriesCell\n\t\tdelete self.clickedSeriesCell\n\t\tconst s = self.settings.matrix\n\t\tconst d = self.dimensions\n\t\tconst start = c.startCell.totalIndex < c.endCell.totalIndex ? c.startCell : c.endCell\n\t\tconst zoomIndex = Math.floor(start.totalIndex + Math.abs(c.endCell.totalIndex - c.startCell.totalIndex) / 2)\n\t\tconst centerCell = self.sampleOrder[zoomIndex] || self.getImgCell(event)\n\t\tconst colw = self.computedSettings.colw || self.settings.matrix.colw\n\t\tconst maxZoomLevel = s.colwMax / colw\n\t\tconst minZoomLevel = s.colwMin / colw\n\n\t\t// 0.75 is used to add left and right padding to the zoom.\n\t\tconst tentativeZoomLevel = ((s.zoomLevel * d.mainw) / self.zoomWidth) * 0.75\n\t\tconst zoomLevel = Math.max(minZoomLevel, Math.min(tentativeZoomLevel, maxZoomLevel))\n\t\tconst zoomCenter = centerCell.totalIndex * d.dx + (centerCell.grpIndex - 1) * s.colgspace + d.seriesXoffset\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: {\n\t\t\t\tsettings: {\n\t\t\t\t\tmatrix: {\n\t\t\t\t\t\tzoomLevel,\n\t\t\t\t\t\t// try to keep the center of the grey zoom rectangle in the same position before and after zoom\n\t\t\t\t\t\t// this could aslo support mouse scroll zoom in the future.\n\t\t\t\t\t\tzoomCenterPct: zoomLevel < 1 && d.mainw >= d.zoomedMainW ? 0.5 : zoomCenter / d.mainw,\n\t\t\t\t\t\tzoomIndex,\n\t\t\t\t\t\tzoomGrpIndex: centerCell.grpIndex\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t})\n\n\t\tself.resetInteractions()\n\t}\n}\n\nfunction setLengendActions(self) {\n\tself.legendLabelMouseover = event => {\n\t\tconst targetData = event.target.__data__\n\t\tif (\n\t\t\t!targetData ||\n\t\t\ttargetData.dt == dtgeneexpression ||\n\t\t\ttargetData.dt == dtmetaboliteintensity ||\n\t\t\ttargetData.dt == dtproteomeabundance\n\t\t) {\n\t\t\t// for gene expression don't use legend as filter\n\t\t\treturn\n\t\t}\n\t\tif (!targetData.isLegendItem && !targetData.dt) {\n\t\t\t// do not change color when its a non-genevariant legend group name\n\t\t\treturn\n\t\t}\n\t\tconst legendGrpHidden =\n\t\t\tself.config.legendGrpFilter.lst.find(\n\t\t\t\tf => f.dt?.includes(targetData.dt) && (!f.origin || f.origin == targetData.origin)\n\t\t\t) && true\n\t\tif (targetData.isLegendItem && legendGrpHidden) {\n\t\t\t// when the legend's group is hidden\n\t\t\treturn\n\t\t}\n\t\tconst term = self.termOrder.find(t => t.tw.$id == targetData.$id)\n\t\tif (term?.tw?.q?.type == 'predefined-groupset' || term?.tw?.q?.type == 'custom-groupset') {\n\t\t\t// when the term has customized groupsetting\n\t\t\treturn\n\t\t}\n\t\tif (event.target.nodeName == 'rect') select(event.target).style('cursor', 'pointer')\n\t\telse select(event.target).style('fill', 'blue').style('cursor', 'pointer')\n\t}\n\n\tself.legendLabelMouseout = event => {\n\t\t// Commenting out for reference. Borders for mouse events are not desired.\n\t\t// if (event.target.nodeName == 'rect') select(event.target).style('stroke', '#aaa')\n\t\t// else\n\t\tselect(event.target).style('fill', '')\n\t}\n\n\tself.legendLabelMouseup = event => {\n\t\tconst targetData = event.target.__data__\n\t\tif (\n\t\t\t!targetData ||\n\t\t\ttargetData.dt == dtgeneexpression ||\n\t\t\ttargetData.dt == dtmetaboliteintensity ||\n\t\t\ttargetData.dt == dtproteomeabundance\n\t\t) {\n\t\t\t// for gene expression don't use legend as filter\n\t\t\treturn\n\t\t}\n\t\tif (event.target.className.baseVal.includes('sjpp-color-scale') && targetData.dt == dtcnv) {\n\t\t\t/** Changing the cnv cutoffs are enabled from the clickable color scale menu.\n\t\t\t * Disable creating the standard matrix menu from clicking the color scale.*/\n\t\t\treturn\n\t\t}\n\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\t\tconst menuGrp = self.dom.legendMenu.clear()\n\n\t\t// When clicking a legend group name\n\t\tif (!targetData.isLegendItem) {\n\t\t\tif (!targetData.dt) {\n\t\t\t\t// do not use as filter when its a non-genevariant legend group name\n\t\t\t\t// or when its a genevariant legend group name for hierCluster\n\t\t\t\treturn\n\t\t\t}\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\n\t\t\t//legendFilterIndex is the index of the first filter (in this filter group being clicked) that is already in self.config.legendValueFilter.lst, if there's any\n\t\t\tconst legendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\tl =>\n\t\t\t\t\tl.legendGrpName == targetData.name &&\n\t\t\t\t\tl.tvs.values.find(v => targetData.dt.includes(v.dt) && (!byOrigin || v.origin == targetData.origin))\n\t\t\t)\n\t\t\tconst div = menuGrp.d.append('div')\n\n\t\t\t// when the legend group is not hidden\n\t\t\tif (legendGrpFilterIndex == -1) {\n\t\t\t\t// for consequences/mutations legend group\n\t\t\t\tif (targetData.dt.includes(dtsnvindel)) {\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text(`Show only truncating mutations`)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tshowOnlyTrunc(menuGrp, targetData, self)\n\t\t\t\t\t\t})\n\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text(`Show only protein-changing mutations`)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tshowOnlyPC(menuGrp, targetData, self)\n\t\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst onlyGeneGroupShown =\n\t\t\t\t\tself.legendData.filter(\n\t\t\t\t\t\tl =>\n\t\t\t\t\t\t\tl.dt && !l.crossedOut && (l.name == targetData.name || l.items.find(i => !i.greyedOut && !i.crossedOut))\n\t\t\t\t\t).length <= 1\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr(\n\t\t\t\t\t\t'class',\n\t\t\t\t\t\tonlyGeneGroupShown ? 'sja_menuoption_not_interactive sja_sharp_border' : 'sja_menuoption sja_sharp_border'\n\t\t\t\t\t)\n\t\t\t\t\t.text(`Do not show ${targetData.name}`)\n\t\t\t\t\t.style('opacity', onlyGeneGroupShown ? '0.5' : '1')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tif (!onlyGeneGroupShown) showNone(menuGrp, targetData, self)\n\t\t\t\t\t})\n\t\t\t}\n\t\t\t// when the legend group is hidden or when a legend filter belongs to the legend group exist in legendValueFilter, show the \"show all\" option\n\t\t\tif (legendGrpFilterIndex !== -1 || legendFilterIndex !== -1) {\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text(`Show all ${targetData.name}`)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tshowAll(menuGrp, targetData, self)\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\t// // adding the option to specify criteria for a CNV alteration for numeric CNV\n\t\t\t// const cnv =\n\t\t\t// \tObject.keys(self.config.cnvCutoffs).length !== 0\n\t\t\t// \t\t? self.config.cnvCutoffs\n\t\t\t// \t\t: self.state.termdbConfig?.queries?.cnv\n\t\t\t// const keys = Object.keys(cnv)\n\t\t\t// if (\n\t\t\t// \ttargetData.dt.includes(dtcnv) &&\n\t\t\t// \tlegendGrpFilterIndex == -1 &&\n\t\t\t// \t(keys.includes('cnvGainCutoff') || keys.includes('cnvLossCutoff' || keys.includes('cnvMaxLength')))\n\t\t\t// ) {\n\t\t\t// \tconst existingCnvSetDiv = div.select('.cnv-set-div')\n\t\t\t// \tif (!existingCnvSetDiv.empty()) existingCnvSetDiv.remove()\n\n\t\t\t// \tconst cnvSetDiv = div.append('div').classed('cnv-set-div', true)\n\n\t\t\t// \t// render cnv config\n\t\t\t// \tconst arg = {\n\t\t\t// \t\tholder: cnvSetDiv,\n\t\t\t// \t\tcnvGainCutoff: cnv.cnvGainCutoff,\n\t\t\t// \t\tcnvLossCutoff: cnv.cnvLossCutoff,\n\t\t\t// \t\tcnvMaxLength: cnv.cnvMaxLength,\n\t\t\t// \t\tcallback: config => {\n\t\t\t// \t\t\tmenuGrp.hide()\n\t\t\t// \t\t\tself.config.cnvCutoffs = structuredClone(config)\n\t\t\t// \t\t\tfor (const termgroup of self.config.termgroups) {\n\t\t\t// \t\t\t\tfor (const t of termgroup.lst) {\n\t\t\t// \t\t\t\t\tif (t.term.type == 'geneVariant') {\n\t\t\t// \t\t\t\t\t\tt.q.cnvGainCutoff = config.cnvGainCutoff\n\t\t\t// \t\t\t\t\t\tt.q.cnvLossCutoff = config.cnvLossCutoff\n\t\t\t// \t\t\t\t\t\tt.q.cnvMaxLength = config.cnvMaxLength\n\t\t\t// \t\t\t\t\t}\n\t\t\t// \t\t\t\t}\n\t\t\t// \t\t\t}\n\t\t\t// \t\t\tself.app.dispatch({\n\t\t\t// \t\t\t\ttype: 'plot_edit',\n\t\t\t// \t\t\t\tid: self.id,\n\t\t\t// \t\t\t\tconfig: self.config\n\t\t\t// \t\t\t})\n\t\t\t// \t\t}\n\t\t\t// \t}\n\n\t\t\t// \trenderCnvConfig(arg)\n\t\t\t// }\n\t\t\tmenuGrp.showunder(event.target)\n\t\t\treturn\n\t\t}\n\n\t\t// when clicking a legend item\n\t\tconst legendGrpHidden =\n\t\t\tself.config.legendGrpFilter.lst.find(\n\t\t\t\tf => f.dt?.includes(targetData.dt) && (!f.origin || f.origin == targetData.origin)\n\t\t\t) && true\n\t\tif (targetData.isLegendItem && legendGrpHidden) {\n\t\t\t// when the legend's group is hidden\n\t\t\treturn\n\t\t}\n\n\t\tconst term = self.terms.find(t => t.tw.$id == targetData.$id)\n\t\tif (term?.tw?.q?.type == 'predefined-groupset' || term?.tw?.q?.type == 'custom-groupset') {\n\t\t\t// when the term has customized groupsetting\n\t\t\treturn\n\t\t}\n\t\t//legendFilterIndex is the index of the filter that is already in self.config.legendValueFilter.lst\n\t\t// All the filters in self.config.legendValueFilter.lst is joined by 'and' and for all of them the isnot is true.\n\t\tlet legendFilterIndex\n\t\tif (targetData.dt) {\n\t\t\t// when its geneVariant term\n\t\t\tlegendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\tl =>\n\t\t\t\t\tl.legendGrpName == targetData.termid &&\n\t\t\t\t\tl.tvs.values.find(\n\t\t\t\t\t\tv =>\n\t\t\t\t\t\t\tv.dt == targetData.dt && (!byOrigin || v.origin == targetData.origin) && v.mclasslst[0] == targetData.key\n\t\t\t\t\t)\n\t\t\t)\n\t\t} else {\n\t\t\t// when its non-geneVariant term\n\t\t\tconst legendTerm = self.termOrder.find(to => to.tw.$id == targetData.$id)?.tw?.term\n\t\t\tif (!legendTerm) {\n\t\t\t\t// legend value filter works for the terms in self.termOrder\n\t\t\t\treturn\n\t\t\t}\n\t\t\tif (legendTerm.type == 'categorical' || legendTerm.type == 'survival') {\n\t\t\t\tlegendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\tl => l.legendGrpName == targetData.termid && l.tvs.values.find(v => v.key == targetData.key)\n\t\t\t\t)\n\t\t\t} else if (isNumericTerm(legendTerm)) {\n\t\t\t\tlegendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\tl => l.legendGrpName == targetData.termid && l.tvs.ranges.find(r => r.name == targetData.key)\n\t\t\t\t)\n\t\t\t}\n\t\t}\n\t\tconst controlLabels = self.settings.matrix.controlLabels\n\n\t\tconst div = menuGrp.d.append('div')\n\n\t\t/** targetItemData may either be the target or parent data (i.e. the original parent mclass key for a merged\n\t\t * legend item.) */\n\t\tconst addMenuOptions = targetItemData => {\n\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id)?.tw?.term\n\t\t\t//Add the hard filter option\n\t\t\tif (\n\t\t\t\tterm?.type !== 'termCollection' &&\n\t\t\t\t(!targetItemData.dt || self.type !== 'hierCluster' || legendFilterIndex !== -1)\n\t\t\t) {\n\t\t\t\t// Do not show the hard filter option for hierCluster geneVariant legend items.\n\n\t\t\t\t// ********* TODO ********\n\t\t\t\t// allow to hard filter geneVariant legend for hierCluster\n\t\t\t\t// ********* TODO ********\n\t\t\t\tdiv\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t.text(\n\t\t\t\t\t\ttargetItemData.dt\n\t\t\t\t\t\t\t? legendFilterIndex == -1\n\t\t\t\t\t\t\t\t? `Hide ${controlLabels.samples} with ${mclass[targetItemData.key].label}`\n\t\t\t\t\t\t\t\t: `Show ${controlLabels.samples} with ${mclass[targetItemData.key].label}`\n\t\t\t\t\t\t\t: legendFilterIndex == -1\n\t\t\t\t\t\t\t? 'Hide'\n\t\t\t\t\t\t\t: 'Show'\n\t\t\t\t\t)\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\tif (legendFilterIndex == -1) {\n\t\t\t\t\t\t\t// when its shown and now hide it\n\t\t\t\t\t\t\tif (targetItemData.dt) {\n\t\t\t\t\t\t\t\t// for a geneVariant term\n\t\t\t\t\t\t\t\t// add a new \"hard filter\" to filter out samples that have genes' values match with the legend's origin + legend's dt + legend's class\n\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\tlegendFilterType: 'geneVariant_hard', // indicates this matrix legend filter is hard filter\n\t\t\t\t\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\t\t\t\t\tvalues: [\n\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\tdt: targetItemData.dt,\n\t\t\t\t\t\t\t\t\t\t\t\torigin: targetItemData.origin,\n\t\t\t\t\t\t\t\t\t\t\t\tmclasslst: [targetItemData.key]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t// for a non-geneVariant term\n\t\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id).tw.term\n\t\t\t\t\t\t\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\t\t\t\t\t\tl => l.legendGrpName == targetItemData.termid\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tif (filterGrpIndex == -1) {\n\t\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: [{ key: targetItemData.key }]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t// the filter for the categorical or survival term exist, but the current legend key is not there.\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.push({ key: targetItemData.key })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} else if (isNumericTerm(term)) {\n\t\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\tranges: [self.data.refs.byTermId[targetItemData.$id].bins.find(b => targetItemData.key == b.name)]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t// when the legend is crossed-out, either by clicking hide or by clicking another legend and show-only,\n\t\t\t\t\t\t\t// A filter to filter out the legend's dt + legend's class exist in self.config.legendValueFilter\n\t\t\t\t\t\t\t// So remove the filter that filters out the legend's dt + legend's class\n\t\t\t\t\t\t\tif (targetItemData.dt) self.config.legendValueFilter.lst.splice(legendFilterIndex, 1)\n\t\t\t\t\t\t\telse {\n\t\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id).tw.term\n\t\t\t\t\t\t\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\t\t\t\t\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\t\t\t\t\t\tl => l.legendGrpName == targetItemData.termid\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tconst filterIndex = self.config.legendValueFilter.lst[filterGrpIndex].tvs.values.findIndex(\n\t\t\t\t\t\t\t\t\t\tv => v.key == targetItemData.key\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.splice(filterIndex, 1)\n\t\t\t\t\t\t\t\t} else self.config.legendValueFilter.lst.splice(legendFilterIndex, 1)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\t\t\t\t\t\tif (targetItemData.dt == dtsnvindel) {\n\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixMutation = 'bySelection'\n\t\t\t\t\t\t\t\tconst cl = self.settings.matrix.controlLabels\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == cl.Mutations)?.items?.length ==\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == cl.Mutations)?.length\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t//when all mutation items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixMutationHidden = true\n\t\t\t\t\t\t\t\t} else self.config.settings.matrix.allMatrixMutationHidden = false\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tif (targetItemData.dt == dtcnv) {\n\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixCNV = 'bySelection'\n\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == 'CNV')?.items?.length ==\n\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == 'CNV')?.length\n\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t//when all CNV items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixCNVHidden = true\n\t\t\t\t\t\t\t\t\tif (self.config.settings.matrix.cellEncoding == 'oncoprint')\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixCNVHidden = false\n\t\t\t\t\t\t\t\t\tif (self.config.settings.matrix.cellEncoding !== '')\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'oncoprint'\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t}\n\n\t\t\tif (targetItemData.isLegendItem) {\n\t\t\t\t// Add the soft filter option only for the not already hidden geneVariant legend\n\t\t\t\tif (targetItemData.dt && legendFilterIndex == -1 && term?.type !== 'termCollection') {\n\t\t\t\t\t// only when filtering a not already hidden geneVariant legend, show the soft filter\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text(`Do not show ${mclass[targetItemData.key]?.label}`)\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\t// add a new \"soft filter\" to filter out the legend's origin + legend's dt + legend's class\n\t\t\t\t\t\t\t// add a new \"soft filter\" to filter out samples that only have mutation match with (the legend's origin + legend's dt + legend's class) and no other mutation\n\t\t\t\t\t\t\t// and then hide the selected mutation on samples that have this selected mutation if the sample was not filtered out by this soft filter.\n\n\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\tlegendFilterType: 'geneVariant_soft', // indicates this matrix legend filter is soft filter\n\t\t\t\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\t\t\t\tvalues: [{ dt: targetItemData.dt, origin: targetItemData.origin, mclasslst: [targetItemData.key] }]\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\n\t\t\t\t\t\t\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\t\t\t\t\t\t\tif (targetItemData.dt == dtsnvindel) {\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixMutation = 'bySelection'\n\t\t\t\t\t\t\t\t\tconst cl = self.settings.matrix.controlLabels\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == cl.Mutations)?.items?.length ==\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == cl.Mutations)?.length\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t//when all mutation items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixMutationHidden = true\n\t\t\t\t\t\t\t\t\t} else self.config.settings.matrix.allMatrixMutationHidden = false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (targetItemData.dt == dtcnv) {\n\t\t\t\t\t\t\t\t\tself.config.settings.matrix.showMatrixCNV = 'bySelection'\n\t\t\t\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t\t\t\tself.legendData.find(l => l.name == 'CNV')?.items?.length ==\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.filter(l => l.legendGrpName == 'CNV')?.length\n\t\t\t\t\t\t\t\t\t) {\n\t\t\t\t\t\t\t\t\t\t//when all CNV items are hidden by applying legend value filter\n\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.allMatrixCNVHidden = true\n\t\t\t\t\t\t\t\t\t\tif (self.config.settings.matrix.cellEncoding == 'oncoprint')\n\t\t\t\t\t\t\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t\t\t\t\t\t\t\t\t} else self.config.settings.matrix.allMatrixCNVHidden = false\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t//Add the show only option only for non-genevariant legend\n\t\t\t\tif (!targetItemData.dt && term?.type !== 'termCollection') {\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Show only')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id)?.tw?.term\n\t\t\t\t\t\t\tconst legendGrp =\n\t\t\t\t\t\t\t\tself.legendData.find(lg => lg.name == targetItemData.termid) ||\n\t\t\t\t\t\t\t\tself.legendData.find(lg => lg.$id == targetItemData.$id)\n\n\t\t\t\t\t\t\t// reset self.config.legendValueFilter.lst to remove all the filters in the lst that's in the same legendGrp\n\t\t\t\t\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\t\t\t\t\tl => l.legendGrpName !== targetItemData.termid\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\t/*\n\t\t\t\t\t\tif (targetItemData.dt) {\n\t\t\t\t\t\t\t// for a geneVariant term\n\t\t\t\t\t\t\tfor (const l of legendGrp.items) {\n\t\t\t\t\t\t\t\tif (l.dt == targetItemData.dt && (l.origin ? l.origin == targetItemData.origin : true) && l.key == targetItemData.key)\n\t\t\t\t\t\t\t\t\tcontinue\n\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\tlegendFilterType: 'geneVariant_soft', // indicates this matrix legend filter is soft filter\n\t\t\t\t\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\t\t\t\t\tvalues: [{ dt: l.dt, origin: l.origin, mclasslst: [l.key] }]\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\tif (!self.config.legendValueFilter.lst.length) self.config.legendValueFilter.lst = [filterNew]\n\t\t\t\t\t\t\t\telse self.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tconst term = self.termOrder.find(t => t.tw.$id == targetItemData.$id).tw.term\n\t\t\t\t\t\t*/\n\n\t\t\t\t\t\t\t// for a non-geneVariant term\n\t\t\t\t\t\t\tif (term.type == 'categorical' || term.type == 'survival') {\n\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\tfor (const l of legendGrp.items) {\n\t\t\t\t\t\t\t\t\tif (l.key == targetItemData.key) continue\n\t\t\t\t\t\t\t\t\tconst filterGrpIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\t\t\t\t\t\t\t\tl => l.legendGrpName == targetItemData.termid\n\t\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\t\tif (filterGrpIndex == -1) {\n\t\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\t\tvalues: [{ key: l.key }]\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tself.config.legendValueFilter.lst[filterGrpIndex].tvs.values.push({ key: l.key })\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} else if (isNumericTerm(term)) {\n\t\t\t\t\t\t\t\tterm.$id = targetItemData.$id\n\t\t\t\t\t\t\t\tfor (const l of legendGrp.items) {\n\t\t\t\t\t\t\t\t\tif (l.key == targetItemData.key) continue\n\t\t\t\t\t\t\t\t\tconst filterNew = {\n\t\t\t\t\t\t\t\t\t\tlegendGrpName: targetItemData.termid,\n\t\t\t\t\t\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\t\t\t\t\t\ttvs: {\n\t\t\t\t\t\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\t\t\t\t\t\tterm,\n\t\t\t\t\t\t\t\t\t\t\tranges: [self.data.refs.byTermId[targetItemData.$id].bins.find(b => l.key == b.name)]\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\tif (!self.config.legendValueFilter.lst.length) self.config.legendValueFilter.lst = [filterNew]\n\t\t\t\t\t\t\t\t\telse self.config.legendValueFilter.lst.push(filterNew)\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t//Add the show all option only for non-genevariant legend\n\t\t\t\tif (!targetItemData.dt && term?.type !== 'termCollection') {\n\t\t\t\t\tdiv\n\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t.attr('class', 'sja_menuoption sja_sharp_border')\n\t\t\t\t\t\t.text('Show all')\n\t\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\t\t\t\t\tl => l.legendGrpName !== targetItemData.termid\n\t\t\t\t\t\t\t)\n\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.id,\n\t\t\t\t\t\t\t\tconfig: self.config\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t}\n\n\t\t\t\t// adding the change color option\n\t\t\t\tif (!targetData.domain) {\n\t\t\t\t\tdiv.append('span').text('Color').style('padding', '5px 10px').style('margin', '1px')\n\t\t\t\t\tself.dom.legendColorInput = div\n\t\t\t\t\t\t.append('input')\n\t\t\t\t\t\t.attr('type', 'color')\n\t\t\t\t\t\t.attr('aria-label', `change the bar color`)\n\t\t\t\t\t\t.attr('value', targetData.color?.startsWith('rgb') ? rgb2hex(targetData.color) : targetData.color)\n\t\t\t\t\t\t.on('change', async () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\tconst color = self.dom.legendColorInput.node().value\n\t\t\t\t\t\t\tif (targetData.dt) {\n\t\t\t\t\t\t\t\tif (!mclass[targetData.key].origColor) mclass[targetData.key].origColor = mclass[targetData.key].color\n\t\t\t\t\t\t\t\tmclass[targetData.key].color = color\n\t\t\t\t\t\t\t\tself.main()\n\t\t\t\t\t\t\t\treturn\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tconst twSpecificSettings = self.config.settings.matrix.twSpecificSettings\n\t\t\t\t\t\t\tif (!twSpecificSettings[targetData.$id]) twSpecificSettings[targetData.$id] = {}\n\t\t\t\t\t\t\tconst twSettings = twSpecificSettings[targetData.$id]\n\n\t\t\t\t\t\t\tif (!twSettings[targetData.key]) twSettings[targetData.key] = {}\n\t\t\t\t\t\t\ttwSettings[targetData.key].color = color\n\n\t\t\t\t\t\t\tself.app.dispatch({\n\t\t\t\t\t\t\t\ttype: 'plot_edit',\n\t\t\t\t\t\t\t\tid: self.opts.id,\n\t\t\t\t\t\t\t\tconfig: { settings: { matrix: { twSpecificSettings } } }\n\t\t\t\t\t\t\t})\n\t\t\t\t\t\t})\n\t\t\t\t\tif (targetData.dt && mclass[targetData.key].origColor) {\n\t\t\t\t\t\tconst resetDiv = div.append('div').style('display', 'inline-block')\n\t\t\t\t\t\tconst handler = () => {\n\t\t\t\t\t\t\tmenuGrp.hide()\n\t\t\t\t\t\t\tmclass[targetData.key].color = mclass[targetData.key].origColor\n\t\t\t\t\t\t\tdelete mclass[targetData.key].origColor\n\t\t\t\t\t\t\tself.main()\n\t\t\t\t\t\t}\n\t\t\t\t\t\ticons['restart'](resetDiv, { handler, title: 'Reset to original color' })\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tmenuGrp.showunder(event.target)\n\t\t\t}\n\t\t}\n\t\tif (targetData.parents) {\n\t\t\tfor (const p of targetData.parents) {\n\t\t\t\taddMenuOptions(p)\n\t\t\t}\n\t\t} else {\n\t\t\taddMenuOptions(targetData)\n\t\t}\n\t}\n}\n\nfunction setMutationSelectionActions(self) {\n\tself.mutationSelectionActions = {\n\t\tonlyTruncating: showOnlyTrunc,\n\t\tonlyPC: showOnlyPC,\n\t\tnone: showNone,\n\t\tall: showAll,\n\t\tbySelection: showByLegendFilter\n\t}\n\tself.mutationControlCallback = mutationSelection => {\n\t\tconst menuGrp = self.dom.legendMenu.clear()\n\t\tconst targetData = self.legendData.find(l => l.dt?.includes(dtsnvindel))\n\t\tself.mutationSelectionActions[mutationSelection](menuGrp, targetData, self, 'mutation')\n\t}\n\tself.CNVControlCallback = CNVSelection => {\n\t\tconst menuGrp = self.dom.legendMenu.clear()\n\t\tconst targetData = self.legendData.find(l => l.dt?.includes(dtcnv))\n\t\tself.mutationSelectionActions[CNVSelection](menuGrp, targetData, self, 'CNV')\n\t}\n\n\tself.geneStyleControlCallback = styleSelection => {\n\t\tconst targetData = self.legendData.find(l => l.dt?.includes(dtcnv))\n\t\tif (styleSelection == '') showStackedStyle(targetData, self) //stacked style\n\t\telse if (styleSelection == 'single') showSingleStyle(targetData, self)\n\t\telse if (styleSelection == 'oncoprint') showOncoprintStyle(targetData, self)\n\t}\n}\n\nfunction showSingleStyle(targetData, self) {\n\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\tif (targetData) {\n\t\t\t// there are CNV data\n\t\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\t\t\tif (legendGrpFilterIndex == -1) {\n\t\t\t\t// when the legend group is shown and now hide it\n\t\t\t\t// add a new \"legend group filter\" to filter out the legend group's origin + legend group's dt\n\t\t\t\tconst filterNew = { dt: targetData.dt }\n\t\t\t\tif (byOrigin) {\n\t\t\t\t\t// when distinguish between germline and somatic for the dt\n\t\t\t\t\tfilterNew.origin = targetData.origin\n\t\t\t\t}\n\t\t\t\t// when the legend group is hidden, need to remove the individual legend filter belongs to this legend group\n\t\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t\t)\n\t\t\t\tself.config.legendGrpFilter.lst.push(filterNew)\n\t\t\t}\n\t\t}\n\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showOncoprintStyle(targetData, self) {\n\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\tif (targetData) {\n\t\t\t// there are CNV data\n\t\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\t\t\tif (legendGrpFilterIndex !== -1) self.config.legendGrpFilter.lst.splice(legendGrpFilterIndex, 1)\n\t\t\t// when changing to oncoPrint, need to remove the CNV legend filters\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t)\n\t\t}\n\t\tself.config.settings.matrix.showMatrixCNV = 'all'\n\t\tself.config.settings.matrix.allMatrixCNVHidden = false\n\t}\n\tself.config.settings.matrix.cellEncoding = 'oncoprint'\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showStackedStyle(targetData, self) {\n\tif (self.state.config.settings.matrix.addMutationCNVButtons && self.chartType !== 'hierCluster') {\n\t\tif (targetData) {\n\t\t\t// there are CNV data\n\t\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\t\tf =>\n\t\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t\t)\n\t\t\tif (legendGrpFilterIndex !== -1) self.config.legendGrpFilter.lst.splice(legendGrpFilterIndex, 1)\n\t\t\t// when changing to oncoPrint, need to remove the CNV legend filters\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t)\n\t\t}\n\t}\n\n\tself.config.settings.matrix.cellEncoding = ''\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showOnlyTrunc(menuGrp, targetData, self) {\n\tmenuGrp.hide()\n\t// when the legend group is not hidden and show a \"show only the truncating mutations\" option\n\t// add a new \"soft legend filter\" to for all the legends in the legend group whose mclass\n\t// is not in the truncatingM\n\n\tif (targetData) {\n\t\t// there are mutations data\n\t\t//remove the individual legend filter in the group\n\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\tf => f.legendGrpName !== targetData.name\n\t\t)\n\n\t\t// remove the grp legend filter for the group\n\t\tself.config.legendGrpFilter.lst = self.config.legendGrpFilter.lst.filter(\n\t\t\tf => !(f.dt.includes(dtsnvindel) && f.origin == targetData.origin)\n\t\t)\n\n\t\tconst truncatingM = self.config.settings.matrix.truncatingMutations\n\t\tconst controlLabels = self.config.settings.matrix.controlLabels\n\t\tfor (const [k, v] of Object.entries(mclass)) {\n\t\t\tif (truncatingM.includes(k) || v.dt != dtsnvindel) continue\n\t\t\tconst filterNew = {\n\t\t\t\tlegendGrpName: targetData.origin\n\t\t\t\t\t? `${targetData.origin[0].toUpperCase() + targetData.origin.slice(1)} ${controlLabels.Mutations}`\n\t\t\t\t\t: controlLabels.Mutations,\n\t\t\t\ttype: 'tvs',\n\t\t\t\ttvs: {\n\t\t\t\t\tisnot: true,\n\t\t\t\t\tlegendFilterType: 'geneVariant_soft',\n\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\tvalues: [{ dt: dtsnvindel, origin: targetData.origin, mclasslst: [k] }]\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t}\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showOnlyPC(menuGrp, targetData, self) {\n\tmenuGrp.hide()\n\t// when the legend group is not hidden and show a \"show only non-truncating protein-changing mutations\" option\n\t// add a new \"soft legend filter\" for all the legends in the legend group (origin + dt) whose mclass\n\t// is not in the nonTruncatingPCM\n\n\tif (targetData) {\n\t\t// there are mutations data\n\t\t//remove the individual legend filter in the group\n\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\tf => f.legendGrpName !== targetData.name\n\t\t)\n\n\t\t// remove the grp legend filter for the group\n\t\tself.config.legendGrpFilter.lst = self.config.legendGrpFilter.lst.filter(\n\t\t\tf => !(f.dt.includes(dtsnvindel) && f.origin == targetData.origin)\n\t\t)\n\n\t\tconst proteinChangingMutations = self.config.settings.matrix.proteinChangingMutations\n\t\tconst controlLabels = self.config.settings.matrix.controlLabels\n\t\tfor (const [k, v] of Object.entries(mclass)) {\n\t\t\tif (proteinChangingMutations.includes(k) || v.dt != dtsnvindel) continue\n\t\t\tconst filterNew = {\n\t\t\t\tlegendGrpName: targetData.origin\n\t\t\t\t\t? `${targetData.origin[0].toUpperCase() + targetData.origin.slice(1)} ${controlLabels.Mutations}`\n\t\t\t\t\t: controlLabels.Mutations,\n\t\t\t\ttype: 'tvs',\n\t\t\t\ttvs: {\n\t\t\t\t\tisnot: true,\n\t\t\t\t\tlegendFilterType: 'geneVariant_soft',\n\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\tvalues: [{ dt: dtsnvindel, origin: targetData.origin, mclasslst: [k] }]\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t}\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nfunction showNone(menuGrp, targetData, self, target) {\n\tmenuGrp.hide()\n\tif (targetData) {\n\t\t// there are data\n\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\t\t// when the legend group is shown and now hide it\n\t\t// add a new \"legend group filter\" to filter out the legend group's origin + legend group's dt\n\n\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\tf =>\n\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t)\n\t\tif (legendGrpFilterIndex == -1) {\n\t\t\tconst filterNew = { dt: targetData.dt }\n\t\t\tif (byOrigin) {\n\t\t\t\t// when distinguish between germline and somatic for the dt\n\t\t\t\tfilterNew.origin = targetData.origin\n\t\t\t}\n\t\t\t// when the legend group is hidden, need to remove the individual legend filter belongs to this legend group\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name\n\t\t\t)\n\t\t\tself.config.legendGrpFilter.lst.push(filterNew)\n\t\t}\n\t}\n\n\tif (\n\t\tself.state.config.settings.matrix.addMutationCNVButtons &&\n\t\tself.chartType !== 'hierCluster' &&\n\t\t(target == 'CNV' || targetData?.dt?.includes(dtcnv)) &&\n\t\tself.config.settings.matrix.cellEncoding == 'oncoprint'\n\t) {\n\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t}\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: self.config\n\t})\n}\n\nexport function getConfigForShowAll(self, targetData, target) {\n\tif (targetData) {\n\t\t// there are data\n\t\tconst byOrigin = self.state.termdbConfig.assayAvailability?.byDt?.[parseInt(targetData.dt)]?.byOrigin\n\n\t\t//legendGrpFilterIndex is the index of the filter that is already in self.config.legendGrpFilter.lst\n\t\tconst legendGrpFilterIndex = self.config.legendGrpFilter.lst.findIndex(\n\t\t\tf =>\n\t\t\t\tf.dt.slice().sort().toString() === targetData.dt.slice().sort().toString() &&\n\t\t\t\t(!byOrigin || f.origin == targetData.origin)\n\t\t)\n\n\t\t//legendFilterIndex is the index of the first filter (in this filter group being clicked) that is already in self.config.legendValueFilter.lst, if there's any\n\t\tconst legendFilterIndex = self.config.legendValueFilter.lst.findIndex(\n\t\t\tl =>\n\t\t\t\tl.legendGrpName == targetData.name &&\n\t\t\t\tl.tvs.values.find(v => targetData.dt.includes(v.dt) && (!byOrigin || v.origin == targetData.origin))\n\t\t)\n\n\t\tif (legendGrpFilterIndex !== -1) self.config.legendGrpFilter.lst.splice(legendGrpFilterIndex, 1)\n\t\tif (legendFilterIndex !== -1)\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName != targetData.name\n\t\t\t)\n\t}\n\n\tconst s = self.config.settings.matrix\n\tif (\n\t\ts.addMutationCNVButtons &&\n\t\tself.chartType !== 'hierCluster' &&\n\t\t(target == 'CNV' || targetData?.dt?.includes(dtcnv)) &&\n\t\ts.cellEncoding !== ''\n\t) {\n\t\ts.cellEncoding = 'oncoprint'\n\t}\n\n\treturn self.config\n}\n\nexport function showAll(menuGrp, targetData, self, target) {\n\tmenuGrp.hide()\n\n\tself.app.dispatch({\n\t\ttype: 'plot_edit',\n\t\tid: self.id,\n\t\tconfig: getConfigForShowAll(self, targetData, target)\n\t})\n}\n\nfunction showByLegendFilter(menuGrp, targetData, self, target) {\n\tmenuGrp.hide()\n\tconst s = self.config.settings.matrix\n\tif (!targetData) {\n\t\t//there are no mutatons data\n\t\tif (s.addMutationCNVButtons && self.chartType !== 'hierCluster' && target == 'mutation') {\n\t\t\ts.showMatrixMutation = 'bySelection'\n\t\t} else if (s.addMutationCNVButtons && self.chartType !== 'hierCluster' && target == 'CNV') {\n\t\t\ts.showMatrixCNV = 'bySelection'\n\t\t}\n\n\t\tself.app.dispatch({\n\t\t\ttype: 'plot_edit',\n\t\t\tid: self.id,\n\t\t\tconfig: self.config\n\t\t})\n\t\treturn\n\t}\n\tself.app.tip.d.selectAll('.byLFClassDiv').remove()\n\tconst classDiv = self.app.tip.d.append('div').attr('class', 'byLFClassDiv')\n\n\tconst checkboxName = Math.random().toString()\n\tconst mClassDiv = classDiv\n\t\t.selectAll(':scope>div')\n\t\t.data(target == 'mutation' ? s.mutationClasses : s.CNVClasses)\n\t\t.enter()\n\t\t.append('label')\n\t\t.style('margin', '5px')\n\t\t.style('margin-left', '30px')\n\t\t.style('display', 'block')\n\t\t.each(function (d) {\n\t\t\tconst mclassDisabled = self.config.legendValueFilter.lst.find(\n\t\t\t\tf =>\n\t\t\t\t\tf.tvs.legendFilterType == 'geneVariant_hard' &&\n\t\t\t\t\tf.tvs.values[0].dt == mclass[d].dt &&\n\t\t\t\t\tf.tvs.values[0].mclasslst.includes(d)\n\t\t\t)\n\t\t\tconst mclassHidden = target == 'mutation' ? s.hiddenMutations.includes(d) : s.hiddenCNVs.includes(d)\n\n\t\t\tconst oneClassDiv = select(this).attr('class', 'sjpp_row_wrapper')\n\t\t\toneClassDiv\n\t\t\t\t.append('input')\n\t\t\t\t.attr('type', 'checkbox')\n\t\t\t\t.attr('name', checkboxName)\n\t\t\t\t.property('disabled', mclassDisabled ? true : false)\n\t\t\t\t.property('checked', mclassDisabled || mclassHidden ? false : true)\n\t\t\t\t.style('vertical-align', 'top')\n\t\t\t\t.style('margin-right', '3px')\n\t\t\t\t.on('change', function () {\n\t\t\t\t\tconst anyChecked = mClassDiv.selectAll(`input[type='checkbox'][name='${checkboxName}']:checked`).empty()\n\t\t\t\t\tapplyBtn.property('disabled', anyChecked)\n\t\t\t\t})\n\t\t\toneClassDiv\n\t\t\t\t.append('span')\n\t\t\t\t.style('margin-left', '3px')\n\t\t\t\t.html(mclass[d].label)\n\t\t\t\t//.style('color', d.color)\n\t\t\t\t.style('text-decoration', mclassDisabled ? 'line-through' : '')\n\t\t})\n\n\tconst applyBtn = classDiv\n\t\t.append('button')\n\t\t.property('disabled', true)\n\t\t.style('margin-top', '3px')\n\t\t.text('Apply')\n\t\t.on('click', () => {\n\t\t\tconst checkedCheckboxes = mClassDiv.selectAll(`input[type='checkbox'][name='${checkboxName}']:checked`)\n\t\t\tconst checkedItems = checkedCheckboxes.nodes().map(c => select(c).datum())\n\t\t\tmenuGrp.hide()\n\n\t\t\t//remove the individual legend filter in the group\n\t\t\tself.config.legendValueFilter.lst = self.config.legendValueFilter.lst.filter(\n\t\t\t\tf => f.legendGrpName !== targetData.name || f.tvs.legendFilterType == 'geneVariant_hard'\n\t\t\t)\n\n\t\t\t// remove the grp legend filter for the group\n\t\t\tself.config.legendGrpFilter.lst = self.config.legendGrpFilter.lst.filter(\n\t\t\t\tf =>\n\t\t\t\t\t!(\n\t\t\t\t\t\t(f.dt.includes(dtsnvindel) && targetData.dt.includes(dtsnvindel)) ||\n\t\t\t\t\t\t(f.dt.includes(dtcnv) && targetData.dt.includes(dtcnv))\n\t\t\t\t\t)\n\t\t\t)\n\n\t\t\tfor (const item of target == 'mutation' ? s.mutationClasses : s.CNVClasses) {\n\t\t\t\tif (checkedItems.includes(item)) continue\n\t\t\t\t// add a new \"soft filter\" to filter out the legend's origin + legend's dt + legend's class\n\t\t\t\t// add a new \"soft filter\" to filter out samples that only have mutation match with (the legend's origin + legend's dt + legend's class) and no other mutation\n\t\t\t\t// and then hide the selected mutation on samples that have this selected mutation if the sample was not filtered out by this soft filter.\n\t\t\t\tconst filterNew = {\n\t\t\t\t\tlegendGrpName: targetData.name,\n\t\t\t\t\ttype: 'tvs',\n\t\t\t\t\ttvs: {\n\t\t\t\t\t\tisnot: true,\n\t\t\t\t\t\tlegendFilterType: 'geneVariant_soft', // indicates this matrix legend filter is soft filter\n\t\t\t\t\t\tterm: { type: 'geneVariant' },\n\t\t\t\t\t\tvalues: [{ dt: mclass[item].dt, origin: targetData.origin, mclasslst: [item] }]\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tself.config.legendValueFilter.lst.push(filterNew)\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tself.state.config.settings.matrix.addMutationCNVButtons &&\n\t\t\t\tself.chartType !== 'hierCluster' &&\n\t\t\t\t(target == 'CNV' || targetData?.dt?.includes(dtcnv))\n\t\t\t) {\n\t\t\t\tif (checkedItems.length == 0 && self.config.settings.matrix.cellEncoding == 'oncoprint') {\n\t\t\t\t\t//when all CNV items are hidden by applying legend value filter\n\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'single'\n\t\t\t\t} else if (checkedItems.length > 0 && self.config.settings.matrix.cellEncoding == 'single') {\n\t\t\t\t\tself.config.settings.matrix.cellEncoding = 'oncoprint'\n\t\t\t\t}\n\t\t\t}\n\t\t\tself.app.dispatch({\n\t\t\t\ttype: 'plot_edit',\n\t\t\t\tid: self.id,\n\t\t\t\tconfig: self.config\n\t\t\t})\n\t\t})\n}\n\n//used by self.showCellInfo and self.mouseclick to get appropriate label\nfunction getLabel(c, v, p) {\n\tlet fusionLabel\n\tif (p)\n\t\tfusionLabel =\n\t\t\tp[0].a.name && p[0].b.name\n\t\t\t\t? p[0].a.name + '::' + p[0].b.name\n\t\t\t\t: p[0].a.name\n\t\t\t\t? p[0].a.name + '::' + '?'\n\t\t\t\t: p[0].b.name\n\t\t\t\t? '?' + '::' + p[0].b.name\n\t\t\t\t: ''\n\tconst label =\n\t\tc.t.grp.type == 'hierCluster'\n\t\t\t? v.value\n\t\t\t: v && v.dt == dtcnv && v.value\n\t\t\t? `${mclass[v.class].label} (${v.value.toFixed(2)})`\n\t\t\t: p\n\t\t\t? fusionLabel\n\t\t\t: v.mname\n\t\t\t? `${v.mname} ${mclass[v.class].label}`\n\t\t\t: mclass[v.class].label\n\n\treturn label\n}\n\n// if group value filter is defined, then cannot reliably edit term\n// notify user in edit menu\nfunction mayAddEditMsg(arg, t) {\n\tif (!t.grp.valueFilter) return\n\tconst editMsg =\n\t\t'Cannot edit variable because group value filter is in use.<br>Please add new variable/variable group to enable editing.'\n\targ.editMsg = editMsg\n}\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAmBA,IAAI,aAAa;AACjB,IAAM,WAAW;AAAA,EAChB,cAAc;AAAA;AACf;AAEO,SAAS,iBAAiB,MAAM;AACtC,MAAI;AACJ,OAAK,yBAAyB,MAAM;AACnC,QAAI,EAAG,cAAa,CAAC;AACrB,QAAI,WAAW,KAAK,UAAU,GAAG;AAAA,EAClC;AACA,OAAK,eAAe,SAAUA,QAAO;AACpC,QAAI,KAAK,eAAe,KAAK,SAAU;AACvC,QAAIA,OAAM,OAAO,UAAU,cAAc;AAExC;AAAA,IACD;AACA,QAAI,EAAEA,OAAM,OAAO,WAAW,UAAUA,OAAM,OAAO,WAAW,UAAU;AACzE,YAAMC,KAAID,OAAM,OAAO;AACvB,YAAM,MAAMC,IAAG;AACf,UAAI,KAAK,YAAY;AACpB,YAAID,OAAM,OAAO,QAAQ,mCAAmC,EAAG,MAAK,uBAAuBA,QAAO,GAAG;AAAA,MACtG;AACA;AAAA,IACD;AACA,QAAIA,OAAM,OAAO,YAAY,UAAU,CAAC,KAAK,OAAQ,MAAK,SAASA,OAAM,OAAO,sBAAsB;AACtG,UAAM,IAAIA,OAAM,OAAO,WAAW,SAASA,OAAM,OAAO,WAAW,KAAK,WAAWA,MAAK;AAGxF,QAAI,CAAC,KAAK,CAAC,EAAE,QAAQ,CAAC,EAAE,QAAQ;AAC/B,WAAK,IAAI,IAAI,KAAK;AAClB,WAAK,SAAS;AACd;AAAA,IACD;AAEA,UAAM,IAAI,KAAK,WAAW,UAAU,KAAK,WAAW;AACpD,UAAM,IAAI,KAAK,WAAW;AAC1B,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,EAAE;AAEZ,UAAM,qBAAqB,KAAK,OAAO,SAAS,OAAO;AACvD,UAAM,SAAS,mBAAmB,EAAE,GAAG,GAAG,GAAG;AAC7C,UAAM,QAAQ,mBAAmB,EAAE,GAAG,GAAG,GAAG;AAE5C,SAAK,IAAI,QACP,KAAK,KAAK,CAAC,EACX,KAAK,KAAK,IAAI,EAAE,OAAO,EACvB,KAAK,UAAU,SAAS,SAAS,IAAI,QAAQ,EAAE,EAAE,IAAI,QAAQ,gBAAgB,EAAE,cAAc,EAAE,IAAI,EACnG,MAAM,WAAW,EAAE;AAErB,SAAK,IAAI,QACP,KAAK,KAAK,IAAI,EAAE,CAAC,EACjB,KAAK,KAAK,CAAC,EACX,MAAM,WAAW,EAAE;AAErB,SAAK,IAAI,oBAAoB,MAAM;AACnC,UAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,IAAI,oBAAoB,EAAE,OAAO,KAAK,EAAE,CAAC;AAEhF,QAAI,EAAE,KAAK,QAAQ,iBAAiB,EAAE,GAAG,GAAG,QAAQ,UAAU;AAC7D;AACC,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,EAAE,MAAM;AAChB,WAAG,KAAK,EAAE,IAAI,MAAM,SAAS,EAAE,OAAO,MAAM;AAAA,MAC7C;AACA;AACC,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,MAAM;AACd,WAAG,KAAK,EAAE,KAAK,IAAI;AAAA,MACpB;AAEA,YAAM,oBAAoB,CAAC;AAC3B,UAAI,EAAE;AACL,mBAAW,KAAK,EAAE,cAAc;AAC/B,cAAI,EAAE,OAAO,EAAE,IAAK;AACpB,gBAAM,IAAI,EAAE;AACZ,gBAAM,IAAI,EAAE;AACZ,gBAAM,UAAU,EAAE,SAAS,GAAG,EAAE,MAAM,IAAI,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,EAAE;AAI1E,gBAAM,QAAQ,SAAS,GAAG,GAAG,CAAC;AAe9B,gBAAM,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,UAAU,KAAK,EAAE;AAE/D,cAAI,CAAC,kBAAkB,OAAO,GAAG;AAChC,8BAAkB,OAAO,IAAI,CAAC,EAAE,OAAO,MAAM,CAAC;AAAA,UAC/C,OAAO;AACN,8BAAkB,OAAO,EAAE,KAAK,EAAE,OAAO,MAAM,CAAC;AAAA,UACjD;AAAA,QAYD;AACD,iBAAW,CAAC,SAAS,UAAU,KAAK,OAAO,QAAQ,iBAAiB,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;AAC1G,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,OAAO;AACf,WAAG,KAAK,gFAAgF,WAAW,CAAC,EAAE,KAAK;AAAA,OACxG,WAAW,CAAC,EAAE,KAAK,EAAE;AACxB,mBAAW,aAAa,WAAW,MAAM,CAAC,GAAG;AAC5C,gBAAM,CAACE,KAAIC,GAAE,IAAI,MAAM,OAAO;AAC9B,UAAAD,IAAG,KAAK,EAAE;AACV,UAAAC,IAAG,KAAK,gFAAgF,UAAU,KAAK;AAAA,QACpG,UAAU,KAAK,EAAE;AAAA,QACrB;AAAA,MACD;AAAA,IACD,OAAO;AACN;AACC,cAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,WAAG,KAAK,EAAE,MAAM;AAChB,WAAG,KAAK,EAAE,IAAI,MAAM,KAAK;AAAA,MAC1B;AAEA,UAAI;AACJ,UAAI,EAAE,KAAK,QAAQ,UAAU,YAAY,EAAE,aAAa;AACvD,uBAAe,EAAE,KAAK,SAAS,EAAE,WAAW,GAAG,SAAS,EAAE;AAAA,MAC3D;AAEA,UAAI,gBAAgB,EAAE,uBAAuB,EAAE,SAAS,EAAE,UAAU,GAAG;AAEtE,YAAI,EAAE,KAAK,QAAQ,UAAU,iBAAiB;AAC7C;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,MAAM;AACd,eAAG,KAAK,EAAE,KAAK,IAAI;AAAA,UACpB;AACA;AACC,kBAAM,cACJ,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAiB,EAAE,GAAG,EAAE,SAAS,eACzE,gFACA,EAAE,QAAQ,UAAU,EAAE,QAAQ,gBAAgB,KAAK,EAAE,IACrD,eACA;AAEJ,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,iBAAiB;AACzB,eAAG;AAAA,cACF,GAAG,WAAW,IAAI,EAAE,uBAAuB,EAAE,KAAK,GACjD,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAC3F;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,EAAE,KAAK,QAAQ,UAAU,sBAAsB;AACzD;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,YAAY;AACpB,eAAG,KAAK,EAAE,KAAK,IAAI;AAAA,UACpB;AACA;AACC,kBAAM,cACJ,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAiB,EAAE,GAAG,EAAE,SAAS,eACzE,gFACA,EAAE,QAAQ,UAAU,EAAE,QAAQ,gBAAgB,KAAK,EAAE,IACrD,eACA;AAEJ,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,sBAAsB;AAC9B,eAAG;AAAA,cACF,GAAG,WAAW,IAAI,EAAE,uBAAuB,EAAE,KAAK,GACjD,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAC3F;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,EAAE,KAAK,QAAQ,UAAU,oBAAoB;AACvD;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,MAAM;AACd,eAAG,KAAK,EAAE,KAAK,IAAI;AAAA,UACpB;AACA;AACC,kBAAM,cACJ,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAiB,EAAE,GAAG,EAAE,SAAS,eACzE,gFACA,EAAE,QAAQ,UAAU,EAAE,QAAQ,gBAAgB,KAAK,EAAE,IACrD,eACA;AAEJ,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,mBAAmB;AAC3B,eAAG;AAAA,cACF,GAAG,WAAW,IAAI,EAAE,uBAAuB,EAAE,KAAK,GACjD,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAC3F;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,EAAE,KAAK,QAAQ,UAAU,UAAU;AAC7C;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,EAAE,KAAK,IAAI;AACnB,eAAG,KAAK,gFACP,EAAE,QAAQ,UAAU,EAAE,QAAQ,gBAAgB,KAAK,EAAE,IACtD;AAAA,SACG,gBAAgB,EAAE,KAAK,EAAE;AAAA,UAC7B;AAEA,gBAAM,iBACL,qBACC,EAAE,iBACA,EAAE,kBAAkB,EAAE,KAAK,OAAO,IAAI,EAAE,KAAK,IAAI,KAAK,OACrD,EAAE,uBAAuB,EAAE,UAC3B,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAgB,EAAE,cAAc,EAAE,cAAc;AAE/F;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,EAAE;AACV,eAAG,KAAK,cAAc;AAAA,UACvB;AAAA,QACD,WAAW,EAAE,KAAK,QAAQ,UAAU,iBAAiB;AACpD,gBAAM,iBAAiB,EAAE,IAAI,EAAE,GAAG,EAAE;AACpC,gBAAM,uBAAuB,eAAe,OAAO,QAAM,GAAG,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAEzG,qBAAW,iBAAiB,sBAAsB;AACjD,kBAAM,cAAc,gFAAgF,cAAc,KAAK;AACvH,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,GAAG,WAAW,IAAI,cAAc,KAAK,EAAE;AAC/C,eAAG,KAAK,GAAG,cAAc,MAAM,QAAQ,CAAC,CAAC,GAAG;AAAA,UAC7C;AAAA,QACD,OAAO;AACN,gBAAM,cACJ,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAiB,EAAE,GAAG,EAAE,SAAS,eACzE,gFACA,EAAE,QAAQ,UAAU,EAAE,QAAQ,gBAAgB,KAAK,EAAE,IACrD,eACA;AAEJ,gBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,aAAG,KAAK,EAAE,KAAK,IAAI;AACnB,aAAG;AAAA,YACF,GAAG,WAAW,IAAI,EAAE,uBAAuB,EAAE,KAAK,GACjD,EAAE,IAAI,GAAG,kBAAkB,EAAE,GAAG,EAAE,QAAQ,gBAAgB,EAAE,cAAc,EAAE,cAAc,EAC3F;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,SAAK,IAAI,oBAAoB,MAAMH,OAAM,SAASA,OAAM,OAAO;AAC/D,SAAK,IAAI,MAAM,GAAG,YAAY,KAAK,QAAQ;AAAA,EAC5C;AAEA,OAAK,aAAa,SAAUA,QAAO;AAClC,QAAI,CAAC,KAAK,QAAQ;AACjB,UAAIA,OAAM,OAAO,WAAW,QAAS,MAAK,SAASA,OAAM,OAAO,sBAAsB;AAAA,UACjF;AAAA,IACN;AAEA,UAAM,IAAIA,OAAM,UAAU,KAAK,OAAO,IAAIA,OAAM,OAAO;AACvD,UAAM,IAAIA,OAAM,OAAO,SAAS,KAAK,YAAU,OAAO,WAAW,KAAK,KAAK,OAAO,OAAO;AACzF,QAAI,CAAC,EAAG;AACR,UAAM,EAAE,MAAM,GAAG,IAAI,KAAK;AAC1B,UAAM,KAAKA,OAAM,UAAU,KAAK,OAAO,IAAIA,OAAM,OAAO,aAAa;AACrE,eAAW,QAAQ,EAAE,OAAO;AAC3B,YAAM,MAAM,KAAK;AACjB,YAAM,MAAM,KAAK,IAAI;AACrB,UAAI,OAAO,MAAM,MAAM,IAAK,QAAO;AAAA,IACpC;AACA,WAAO;AAAA,EACR;AAEA,OAAK,WAAW,WAAY;AAC3B,QAAI,CAAC,KAAK,eAAe,KAAK,IAAI,IAAK,MAAK,IAAI,IAAI,KAAK;AACzD,WAAO,KAAK;AACZ,QAAI,KAAK,IAAI,QAAS,MAAK,IAAI,QAAQ,MAAM,WAAW,MAAM;AAC9D,QAAI,KAAK,IAAI,QAAS,MAAK,IAAI,QAAQ,MAAM,WAAW,MAAM;AAC9D,QAAI,KAAK,IAAI,oBAAqB,MAAK,IAAI,oBAAoB,MAAM;AAAA,EACtE;AAEA,OAAK,aAAa,eAAgBA,QAAO,MAAM;AAE9C,UAAM,IAAI,KAAK,MAAM,aAAa;AAClC,QAAI,CAAC,EAAG;AAER,QAAI,EAAE,EAAE,oCAAoC,EAAE,wBAAwB,EAAE,UAAU,EAAE,UAAW;AAE/F,SAAK,IAAI,MAAM,GAAG,YAAY,IAAI;AAClC,WAAO,KAAK;AACZ,UAAM,aAAa,QAAQA,OAAM,OAAO;AAExC,QAAI,CAAC,WAAY;AACjB,UAAM,IAAI,KAAK,OAAO,SAAS;AAE/B,UAAM,SAAS;AAAA,MACd,WAAW,WAAW,IAAI,MAAM;AAAA,IACjC;AAEA,UAAM,WAAW,WAAW,MAAM,QAAQ,gBAAgB,WAAW,KAAK,OAAO;AAEjF,SAAK,IAAI,UAAU,MAAM;AACzB,SAAK,IAAI,gBAAgB,MAAM;AAC/B,SAAK,IAAI,UAAU,MAAM;AACzB,SAAK,IAAI,oBAAoB,MAAM;AAEnC,QAAI,KAAK,IAAI,eAAgB,MAAK,IAAI,eAAe,QAAQ;AAE7D,QAAI,EAAE,kCAAkC;AACvC,iBAAW,KAAK,EAAE,kCAAkC;AACnD,cAAM,UAAU,KAAK,IAAI,UAAU,EACjC,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,eAAe,oBAAoB,EACxC,KAAK,CAAC,EACN,GAAG,SAAS,OAAMA,WAAS;AAC3B,gBAAM,UAAU,cAAc,KAAK,KAAK,WAAW,eAAO,KAAK,KAAK,OAAO,KAAK,EAAE,UAAU,CAAC;AAC7F,kBAAQ,OAAO,KAAK,OAAO,SAAS;AACpC,iBACC,MAAM,OAAO,yBAAqB,GACjC;AAAA,YACD,KAAK,MAAM;AAAA,YACX,KAAK,MAAM,MAAM;AAAA,YACjB;AAAA,YACA;AAAA,YACA,QAAQ,KAAK,OAAO,KAAK,EAAE,MAAM,UAAU,MAAM;AAAA,YACjD,KAAK,IAAI,KAAK;AAAA,YACd;AAAA,UACD;AACA,kBAAQ,OAAO;AACf,eAAK,IAAI,UAAU,EAAE,UAAU,GAAG,EAAE,OAAO;AAAA,QAC5C,CAAC;AAAA,MACH;AAAA,IACD;AACA,QAAI,GAAG,sBAAsB;AAC5B,YAAM,UAAU,KAAK,IAAI,UAAU,EACjC,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,eAAe,mCAAmC,EACvD,KAAK,YAAY,EACjB,GAAG,SAAS,OAAMA,WAAS;AAC3B,cAAM,UAAU,cAAc,KAAK,KAAK,WAAW,eAAO,KAAK,KAAK,OAAO,KAAK,EAAE,UAAU,CAAC;AAC7F,gBAAQ,OAAO,KAAK,OAAO,SAAS;AACnC,SAAC,MAAM,OAAO,0BAAsB,GAAG;AAAA,UACvC,KAAK,MAAM;AAAA,UACX,KAAK,MAAM,MAAM;AAAA,UACjB;AAAA,UACA,QAAQ;AAAA,UACR,KAAK,IAAI,KAAK;AAAA,QACf;AACA,gBAAQ,OAAO;AACf,aAAK,IAAI,UAAU,EAAE,UAAU,GAAG,EAAE,OAAO;AAAA,MAC5C,CAAC;AAAA,IACH;AAEA,QAAI,EAAE,UAAU;AAEf,YAAM,UAAU,KAAK,IAAI,UAAU,EACjC,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,eAAe,iCAAiC,EACrD,MAAM,WAAW,MAAM,EACvB,KAAK,GAAG,EAAE,SAAS,IAAI,aAAa;AAEtC,YAAMI,QAAO,MAAM,SAAS,kBAAkB;AAAA,QAC7C,MAAM;AAAA,UACL,QAAQ,KAAK,IAAI,KAAK,OAAO;AAAA,UAC7B,SAAS,KAAK,MAAM,MAAM;AAAA,UAC1B,WAAW,OAAO;AAAA,QACnB;AAAA,MACD,CAAC;AAED,UAAIA,MAAK,gBAAgB,SAAS,GAAG;AACpC,gBAAQ,MAAM,WAAW,OAAO;AAChC,gBAAQ,KAAK,GAAG,EAAE,SAAS,IAAI,YAAYA,MAAK,eAAe,MAAM,GAAG;AACxE,gBAAQ,GAAG,SAAS,OAAM,MAAK;AAC9B,gBAAM,UAAU,cAAc,KAAK,KAAK,WAAW,eAAO,KAAK,KAAK,OAAO,KAAK,EAAE,UAAU,CAAC;AAC7F,kBAAQ,OAAO,KAAK,OAAO,SAAS;AACnC,WAAC,MAAM,OAAO,wBAA8B,GAAG;AAAA,YAC/C,KAAK,MAAM,MAAM;AAAA,YACjB,QAAQ;AAAA,YACR,KAAK,IAAI,KAAK;AAAA,YACd,OAAO;AAAA,YACPA,MAAK;AAAA,UACN;AAEA,kBAAQ,OAAO;AACf,eAAK,IAAI,UAAU,EAAE,UAAU,GAAG,EAAE,OAAO;AAAA,QAC5C,CAAC;AAAA,MACF;AAAA,IACD;AAEA,QAAI,EAAE,QAAQ;AACb,iBAAW,CAAC,UAAU,GAAG,KAAK,OAAO,QAAQ,EAAE,MAAM,GAAG;AACvD,cAAM,UAAU,KAAK,IAAI,UAAU,EACjC,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,kBAAkB,QAAQ,EAC/B,GAAG,SAAS,YAAY;AACxB,eAAK,IAAI,UAAU,MAAM;AAEzB,gBAAM,SAAS;AAAA,YACd,WAAW;AAAA,YACX;AAAA,YACA,UAAU;AAAA,cACT,cAAc;AAAA,gBACb,aAAa,IAAI,WAAW;AAAA,gBAC5B,aAAa,IAAI,WAAW;AAAA,gBAC5B,aAAa,IAAI,WAAW;AAAA,cAC7B;AAAA,YACD;AAAA,YACA,yBAAyB,CAAC,OAAO,YAAY,MAAM;AAAA,UACpD;AACA,eAAK,IAAI,SAAS;AAAA,YACjB,MAAM;AAAA,YACN;AAAA,UACD,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAAA,IACD;AAEA,UAAM,IAAI,KAAK,SAAS,OAAO;AAC/B,UAAM,QAAQ,UAAU,EAAE,QAAQ,KAAK,IAAI,UAAU,EAAE,OAAO,KAAK,EAAE,OAAO,MAAM,EAAE,CAAC;AAErF,UAAM,YAAY,KAAK,MAAM,aAAa;AAC1C,QAAI,WAAW,QAAQ;AACtB,YAAM,OAAO,WAAW,UAAU,OAAO,OAAO,KAAK,WAAW,UAAU,WAAW,IAAI;AACzF,YAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,SAAG,KAAK,EAAE,MAAM;AAChB,SAAG;AAAA,QACF,YAAY,UAAU,OAAO,IAAI,GAAG,IAAI,qBAAqB,WAAW,IAAI,MAAM,KAAK,IAAI,SAAS,YAAY;AAAA,MACjH;AAAA,IACD,OAAO;AACN,YAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,SAAG,KAAK,EAAE,MAAM;AAChB,SAAG,KAAK,WAAW,IAAI,MAAM,SAAS,WAAW,MAAM,MAAM;AAAA,IAC9D;AACA,QAAI,WAAW,MAAM,QAAQ,iBAAiB,WAAW,GAAG,GAAG,QAAQ,UAAU;AAChF,UAAI,WAAW,OAAO;AACrB,YAAI,WAAW,MAAM;AACpB,gBAAM,OAAO,KAAK,KAAK,KAAK,SAAS,WAAW,GAAG,GAAG,EAAE,UAAU,KAAK,OAAO;AAC9E,gBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,aAAG,KAAK,MAAM;AACd,aAAG;AAAA,YACF,YAAY,UAAU,KAAK,IAAI,GAAG,IAAI,qBAAqB,WAAW,GAAG,KAAK,IAAI,IAAI,SAAS,YAAY;AAAA,UAC5G;AAAA,QACD,OAAO;AACN,gBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,aAAG,KAAK,MAAM;AACd,aAAG,KAAK,WAAW,KAAK,IAAI;AAAA,QAC7B;AAEA,cAAM,oBAAoB,CAAC;AAC3B,mBAAW,KAAK,WAAW,cAAc;AACxC,cAAI,EAAE,OAAO,WAAW,IAAK;AAC7B,gBAAM,IAAI,EAAE;AACZ,gBAAM,IAAI,EAAE;AACZ,gBAAM,UAAU,EAAE,SAAS,GAAG,EAAE,MAAM,IAAI,SAAS,EAAE,EAAE,CAAC,KAAK,SAAS,EAAE,EAAE;AAC1E,gBAAM,QAAQ,SAAS,GAAG,GAAG,CAAC;AAC9B,gBAAM,QAAQ,EAAE,QAAQ,EAAE,SAAS,EAAE,SAAS,UAAU,KAAK,EAAE;AAE/D,cAAI,CAAC,kBAAkB,OAAO,GAAG;AAChC,8BAAkB,OAAO,IAAI,CAAC,EAAE,OAAO,MAAM,CAAC;AAAA,UAC/C,OAAO;AACN,8BAAkB,OAAO,EAAE,KAAK,EAAE,OAAO,MAAM,CAAC;AAAA,UACjD;AAAA,QACD;AACA,mBAAW,CAAC,SAAS,UAAU,KAAK,OAAO,QAAQ,iBAAiB,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,SAAS,EAAE,MAAM,GAAG;AAC1G,gBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,aAAG,KAAK,OAAO;AACf,aAAG,KAAK,gFAAgF,WAAW,CAAC,EAAE,KAAK;AAAA,QACxG,WAAW,CAAC,EAAE,KAAK,EAAE;AACxB,qBAAW,aAAa,WAAW,MAAM,CAAC,GAAG;AAC5C,kBAAM,CAACF,KAAIC,GAAE,IAAI,MAAM,OAAO;AAC9B,YAAAD,IAAG,KAAK,EAAE;AACV,YAAAC,IAAG,KAAK,gFAAgF,UAAU,KAAK;AAAA,SACpG,UAAU,KAAK,EAAE;AAAA,UACrB;AAAA,QACD;AAAA,MACD;AAAA,IACD,WAAW,WAAW,MAAM;AAC3B,UAAI;AACJ,UAAI,WAAW,KAAK,QAAQ,UAAU,YAAY,WAAW,aAAa;AACzE,uBAAe,WAAW,KAAK,SAAS,WAAW,WAAW,GAAG,SAAS,WAAW;AAAA,MACtF;AAEA,UAAI,gBAAgB,WAAW,uBAAuB,WAAW,SAAS,WAAW,UAAU,GAAG;AAEjG,YAAI,WAAW,KAAK,QAAQ,UAAU,iBAAiB;AACtD;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,MAAM;AACd,eAAG,KAAK,WAAW,KAAK,IAAI;AAAA,UAC7B;AACA;AACC,kBAAM,cACJ,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAC7D,WAAW,GAAG,EAAE,SAAS,eACtB,gFACA,WAAW,QAAQ,UAAU,WAAW,QAAQ,gBAAgB,KAAK,WAAW,IAChF,eACA;AAEJ,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,iBAAiB;AACzB,eAAG;AAAA,cACF,GAAG,WAAW,IAAI,WAAW,uBAAuB,WAAW,KAAK,GACnE,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAAgB,WAAW,cACpF,WAAW,cACX,EACJ;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,WAAW,KAAK,QAAQ,UAAU,sBAAsB;AAClE;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,YAAY;AACpB,eAAG,KAAK,WAAW,KAAK,IAAI;AAAA,UAC7B;AACA;AACC,kBAAM,cACJ,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAC7D,WAAW,GAAG,EAAE,SAAS,eACtB,gFACA,WAAW,QAAQ,UAAU,WAAW,QAAQ,gBAAgB,KAAK,WAAW,IAChF,eACA;AAEJ,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,sBAAsB;AAC9B,eAAG;AAAA,cACF,GAAG,WAAW,IAAI,WAAW,uBAAuB,WAAW,KAAK,GACnE,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAAgB,WAAW,cACpF,WAAW,cACX,EACJ;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,WAAW,KAAK,QAAQ,UAAU,oBAAoB;AAChE;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,MAAM;AACd,eAAG,KAAK,WAAW,KAAK,IAAI;AAAA,UAC7B;AACA;AACC,kBAAM,cACJ,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAC7D,WAAW,GAAG,EAAE,SAAS,eACtB,gFACA,WAAW,QAAQ,UAAU,WAAW,QAAQ,gBAAgB,KAAK,WAAW,IAChF,eACA;AAEJ,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,mBAAmB;AAC3B,eAAG;AAAA,cACF,GAAG,WAAW,IAAI,WAAW,uBAAuB,WAAW,KAAK,GACnE,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAAgB,WAAW,cACpF,WAAW,cACX,EACJ;AAAA,YACD;AAAA,UACD;AAAA,QACD,WAAW,WAAW,KAAK,QAAQ,UAAU,UAAU;AACtD;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,WAAW,KAAK,IAAI;AAC5B,eAAG,KAAK,gFACP,WAAW,QAAQ,UAAU,WAAW,QAAQ,gBAAgB,KAAK,WAAW,IACjF;AAAA,SACG,gBAAgB,WAAW,KAAK,EAAE;AAAA,UACtC;AACA,gBAAM,iBACL,qBACC,WAAW,iBACT,WAAW,kBAAkB,WAAW,KAAK,OAAO,IAAI,WAAW,KAAK,IAAI,KAAK,OAChF,WAAW,uBAAuB,WAAW,UAC7C,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAAgB,WAAW,cACtF,WAAW,cACX;AACN;AACC,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,EAAE;AACV,eAAG,KAAK,cAAc;AAAA,UACvB;AAAA,QACD,WAAW,WAAW,KAAK,QAAQ,UAAU,iBAAiB;AAC7D,gBAAM,iBAAiB,WAAW,IAAI,WAAW,GAAG,EAAE;AACtD,gBAAM,uBAAuB,eAAe,OAAO,QAAM,GAAG,UAAU,CAAC,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,QAAQ,EAAE,KAAK;AAEzG,qBAAW,iBAAiB,sBAAsB;AACjD,kBAAM,cAAc,gFAAgF,cAAc,KAAK;AACvH,kBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,eAAG,KAAK,GAAG,WAAW,IAAI,cAAc,KAAK,EAAE;AAC/C,eAAG,KAAK,GAAG,cAAc,MAAM,QAAQ,CAAC,CAAC,GAAG;AAAA,UAC7C;AAAA,QACD,OAAO;AACN,gBAAM,cACJ,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAC7D,WAAW,GAAG,EAAE,SAAS,eACtB,gFACA,WAAW,QAAQ,UAAU,WAAW,QAAQ,gBAAgB,KAAK,WAAW,IAChF,eACA;AAEJ,gBAAM,CAAC,IAAI,EAAE,IAAI,MAAM,OAAO;AAC9B,aAAG,KAAK,WAAW,KAAK,IAAI;AAC5B,aAAG;AAAA,YACF,GAAG,WAAW,IAAI,WAAW,uBAAuB,WAAW,KAAK,GACnE,WAAW,IAAI,GAAG,kBAAkB,WAAW,GAAG,EAAE,QAAQ,gBAAgB,WAAW,cACpF,WAAW,cACX,EACJ;AAAA,UACD;AAAA,QACD;AAAA,MACD;AAAA,IACD;AACA,SAAK,IAAI,UAAU,KAAKH,OAAM,SAASA,OAAM,SAAS,OAAO,IAAI;AAAA,EAClE;AAEA,OAAK,cAAc,WAAY;AAAA,EAAC;AAEhC,OAAK,eAAe,SAAUA,QAAO;AACpC,QAAI,CAAC,KAAK,QAAS;AACnB,UAAM,IAAI,KAAK,OAAO,SAAS;AAC/B,UAAM,IAAI,KAAK;AACf,UAAM,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,UAAUA,OAAM;AACxD,UAAM,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,UAAUA,OAAM,UAAU,EAAE;AAC9D,MAAE,MAAM,KAAK,aAAa,aAAa,EAAE,IAAI,EAAE,GAAG;AAAA,EACnD;AAEA,OAAK,aAAa,SAAUA,QAAO;AAClC,QAAI,CAAC,KAAK,QAAS;AACnB,SAAK,QAAQ,MAAM,OAAO;AAC1B,WAAO,KAAK;AACZ,WAAO,KAAK;AAAA,EACb;AAEA,OAAK,uBAAuB,SAAU,IAAI;AAEzC,UAAM,IAAI,KAAK;AACf,QAAI,EAAE,iBAAiB,KAAK,EAAE,SAAS,EAAE,aAAa;AACrD,aAAO,KAAK,YAAY,KAAK,MAAM,KAAK,YAAY,SAAS,CAAC,CAAC;AAAA,IAChE;AACA,UAAM,IAAI,MAAM,EAAE,QAAQ,EAAE,gBAAgB;AAC5C,UAAM,IAAI,KAAK,MAAM,IAAI,EAAE,EAAE;AAC7B,WAAO,KAAK,YAAY,CAAC;AAAA,EAC1B;AAGA,iBAAe,IAAI;AACnB,sBAAoB,IAAI;AACxB,wBAAsB,IAAI;AAC1B,oBAAkB,IAAI;AACtB,mBAAiB,IAAI;AACrB,oBAAkB,IAAI;AACtB,8BAA4B,IAAI;AACjC;AAEA,SAAS,iBAAiB,MAAM;AAC/B,MAAI;AACJ,iBAAO,MAAM,EAAE,GAAG,eAAe,KAAK,EAAE,IAAI,MAAM;AACjD,QAAI,SAAU,cAAa,QAAQ;AACnC,QAAI,KAAK,cAAc,KAAK,OAAQ,YAAW,WAAW,QAAQ,GAAG;AAAA,EACtE,CAAC;AAED,WAAS,SAAS;AAEjB,QAAI,KAAK,cAAc,KAAK,OAAQ,MAAK,KAAK;AAAA,EAC/C;AACD;AAEA,SAAS,eAAe,MAAM;AAC7B,qBAAmB,MAAM,MAAM;AAE/B,OAAK,UAAU,SAAU,UAAU;AAElC,SAAK,OAAO,gBAAgB;AAAA,MAC3B,KAAK,KAAK;AAAA,MACV,aAAa;AAAA,MACb,YAAY;AAAA,MACZ,UAAU,KAAK,IAAI;AAAA,MACnB,OAAO,SAAS;AAAA,MAChB,cAAc,SAAS;AAAA,MACvB,wBAAwB,CAAC,YAAY,YAAY;AAAA,MACjD,SAAS,EAAE,QAAQ,SAAS;AAAA,MAE5B,eAAe,MAAM;AACpB,cAAM,mBAAmB,CAAC;AAC1B,mBAAW,KAAK,KAAK,OAAO,YAAY;AAEvC,cAAI,KAAK,aAAa,iBAAiB,EAAE,QAAQ,cAAe;AAEhE,qBAAW,KAAK,EAAE,KAAK;AACtB,gBAAI,EAAE,KAAK,KAAK;AACf,+BAAiB,KAAK,GAAG,EAAE,KAAK,GAAG,IAAI,EAAE,KAAK,KAAK,IAAI,EAAE,KAAK,IAAI,EAAE;AAAA,YACrE,WAAW,EAAE,KAAK,MAAM;AACvB,+BAAiB,KAAK,EAAE,KAAK,IAAI;AAAA,YAClC;AAAA,UACD;AAAA,QACD;AACA,YAAI,iBAAiB,OAAQ,QAAO,EAAE,iBAAiB;AACvD,eAAO,CAAC;AAAA,MACT;AAAA;AAAA;AAAA,MAIA,UAAU;AAAA,MACV,UAAU,QAAM;AAEf,YAAI,MAAM,CAAC,GAAG,EAAG,OAAM;AACvB,cAAM,IAAI,KAAK,eAAe,KAAK;AACnC,YAAI,IAAI;AAEP,aAAG,QAAQ,EAAE,GAAG;AAChB,cAAI,KAAK,EAAE,GAAI,IAAG,MAAM,EAAE,GAAG;AAC7B,gBAAM,oBAAoB,KAAK,kBAAkB,EAAE;AACnD,eAAK,KAAK,KAAK,OAAO,OAAO,EAAE,QAAQ,KAAK,MAAM,OAAO,GAAG,EAAE,CAAC;AAC/D,eAAK,IAAI,SAAS;AAAA,YACjB,MAAM;AAAA,YACN,IAAI,KAAK,KAAK;AAAA,YACd,OAAO;AAAA,cACN;AAAA,gBACC,YAAY,CAAC,cAAc,EAAE,UAAU,OAAO,EAAE,QAAQ;AAAA,gBACxD,OAAO;AAAA,cACR;AAAA,cACA;AAAA,gBACC,YAAY,CAAC,mBAAmB;AAAA,gBAChC,OAAO;AAAA,cACR;AAAA,YACD;AAAA,UACD,CAAC;AAAA,QACF,OAAO;AACN,eAAK,WAAW;AAAA,QACjB;AACA,aAAK,IAAI,IAAI,KAAK;AAAA,MACnB;AAAA,IACD,CAAC;AAAA,EACF;AAEA,OAAK,iBAAiB,SAAU,GAAG;AAClC,WAAO,KAAK,OAAO,aAAa,iBAAiB,EAAE,IAAI,SAAS,gBAC7D,cACA,EAAE,GAAG,KAAK,QAAQ,gBAClB,0BACA,EAAE,GAAG,KAAK,QAAQ,mBAClB,0BACA;AAAA,EACJ;AAEA,OAAK,eAAe,eAAgBA,QAAO;AAC1C,UAAM,IAAIA,OAAM,OAAO;AACvB,QAAI,CAAC,KAAK,CAAC,EAAE,MAAM,CAAC,EAAE,IAAK;AAC3B,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,EAAE;AACZ,SAAK,cAAc;AACnB,SAAK,IAAI,QAAQ,MAAM,WAAW,EAAE,EAAE,UAAU,GAAG,EAAE,OAAO;AAC5D,SAAK,IAAI,SAAS,MAAM,WAAW,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO;AAG5D,UAAM,kBAAkB,KAAK,IAAI,QAAQ,OAAO,KAAK,EAAE,MAAM,WAAW,OAAO,EAAE,KAAK,YAAY;AAClG,SAAK,IAAI,IAAI,KAAKA,OAAM,UAAU,IAAIA,OAAM,UAAU,EAAE;AAExD,UAAM,UAAU,OAAO;AAAA,MACtB,EAAE,aAAa,KAAK,eAAe,CAAC,GAAG,QAAQ,KAAK,MAAM,OAAO;AAAA,MACjE,EAAE,KAAK,EAAE,KAAK,EAAE,MAAM,MAAM,GAAG,KAAK;AAAA,IACrC;AAEA,kBAAc,SAAS,CAAC;AAExB,UAAM,KAAK,KAAK,KAAK,OAAO;AAE5B,oBAAgB,OAAO;AAEvB,SAAK,IAAI,cAAc,KAAK,IAAI,QAAQ,OAAO,KAAK,EAAE,MAAM,WAAW,GAAK;AAC5E,SAAK,cAAc,GAAG,KAAK,IAAI,WAAW;AAC1C,SAAK,IAAI,YAAY,KAAK,IAAI,QAAQ,OAAO,KAAK;AAClD,UAAM,eAAe,KAAK,IAAI,UAAU,OAAO,KAAK,EAAE,MAAM,cAAc,QAAQ;AAClF,QAAI,EAAE,IAAI,MAAM,KAAM,cAAa,OAAO,MAAM,EAAE,KAAK,GAAG,EAAE,IAAI,GAAG;AAEnE,UAAM,UAAU,EAAE,GAAG,SAAS,EAAE,GAAG,KAAK;AACxC,UAAM,UACL,EAAE,GAAG,KAAK,QAAQ,iBAAiB,EAAE,GAAG,KAAK,QAAQ,UAAU,kBAC5D,SACA,EAAE,GAAG,KAAK,QAAQ,UAAU,uBAC5B,eACA,EAAE,GAAG,KAAK,QAAQ,UAAU,qBAC5B,YACA;AAEJ,QAAI,EAAE,IAAI,MAAM;AACf,WAAK,IAAI,eAAe,aACtB,OAAO,OAAO,EACd,KAAK,QAAQ,MAAM,EACnB,KAAK,QAAQ,QAAQ,SAAS,CAAC,EAC/B,KAAK,cAAc,oBAAoB,OAAO,QAAQ,EACtD,MAAM,WAAW,SAAS,EAC1B,MAAM,cAAc,QAAQ,EAC5B,SAAS,SAAS,OAAO,EACzB,GAAG,SAAS,MAAM;AAClB,cAAM,QAAQ,KAAK,IAAI,aAAa,SAAS,OAAO;AACpD,aAAK,IAAI,aAAa,KAAK,QAAQ,MAAM,SAAS,CAAC;AACnD,aAAK,IAAI,eAAe,MAAM,WAAW,MAAM,KAAK,MAAM,UAAU,SAAS,QAAQ;AAAA,MACtF,CAAC;AAEH,QAAI,EAAE,IAAI,MAAM;AACf,WAAK,IAAI,iBAAiB,aACxB,OAAO,QAAQ,EACf,MAAM,WAAW,MAAM,EACvB,MAAM,eAAe,KAAK,EAC1B,KAAK,QAAQ,EACb,GAAG,SAAS,MAAM;AAClB,YAAI,WAAW,KAAK,IAAI,aAAa,SAAS,OAAO,EAAE,KAAK,EAAG,MAAK,gBAAgB;AACpF,aAAK,IAAI,IAAI,KAAK;AAAA,MACnB,CAAC;AAEH,QAAI,WAAW,QAAQ;AAEtB,UAAI,EAAE,GAAG,KAAK,QAAQ,eAAe;AAEpC,aAAK,IAAI,WAAW,aAClB,OAAO,QAAQ,EACf,MAAM,cAAc,QAAQ,EAC5B,KAAK,UAAU,EACf,KAAK,eAAe,iCAAiC,EACrD,GAAG,SAAS,YAAY;AACxB,gBAAM,KAAK,SAAS,CAAC;AACrB,eAAK,IAAI,IAAI,KAAK;AAAA,QACnB,CAAC;AAAA,MACH;AAAA,IAED;AAGA,QAAI,KAAK,MAAM,aAAa,cAAc,QAAQ,WAAW,QAAQ;AACpE,YAAM,YAAY,KAAK,MAAM,aAAa;AAC1C,WAAK,IAAI,kBAAkB,aACzB,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,MAAM,eAAe,KAAK,EAC1B,MAAM,cAAc,QAAQ,EAC5B,MAAM,SAAS,gBAAgB,EAC/B,MAAM,UAAU,SAAS,EACzB,MAAM,mBAAmB,WAAW,EACpC,KAAK,GAAG,UAAU,KAAK,eAAe,EAAE,GAAG,SAAS,YAAY,EAAE,EAClE,GAAG,SAAS,YAAY;AACxB,cAAM,OAAO,KAAK,KAAK,KAAK,SAAS,EAAE,GAAG,GAAG,EAAE,UAAU,KAAK,OAAO;AACrE,eAAO,KAAK,GAAG,UAAU,KAAK,IAAI,GAAG,IAAI,IAAI,QAAQ;AACrD,aAAK,IAAI,IAAI,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,UAAM,qBAAqB,KAAK,OAAO,SAAS,OAAO;AACvD,QAAI,CAAC,mBAAmB,EAAE,GAAG,GAAG,EAAG,oBAAmB,EAAE,GAAG,GAAG,IAAI,CAAC;AACnE,UAAM,aAAa,mBAAmB,EAAE,GAAG,GAAG;AAE9C,UAAM,wBAAwB,KAAK,IAAI,UAAU,OAAO,KAAK,EAAE,MAAM,cAAc,QAAQ;AAC3F,QAAI,EAAE,KAAK,SAAS,iBAAiB,EAAE,IAAI,GAAG,QAAQ,cAAc;AACnE,4BAAsB,OAAO,MAAM,EAAE,KAAK,YAAY;AACtD,WAAK,IAAI,mBAAmB,sBAC1B,OAAO,OAAO,EACd,KAAK,QAAQ,QAAQ,EACrB,KAAK,cAAc,qBAAqB,EACxC,MAAM,WAAW,SAAS,EAC1B,MAAM,cAAc,QAAQ,EAC5B,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,WAAW,QAAQ,EACrC,GAAG,SAAS,OAAMA,WAAS;AAC3B,YAAIA,OAAM,QAAQ,QAAS;AAC3B,cAAM,UAAU,WAAW,KAAK,IAAI,iBAAiB,KAAK,EAAE,KAAK;AACjE,mBAAW,WAAW;AAEtB,aAAK,IAAI,SAAS;AAAA,UACjB,MAAM;AAAA,UACN,IAAI,KAAK,KAAK;AAAA,UACd,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE;AAAA,QACxD,CAAC;AACD,aAAK,IAAI,IAAI,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,QACC,EAAE,KAAK,SAAS,iBAChB,EAAE,IAAI,GAAG,QAAQ,gBACjB,EAAE,GAAG,KAAK,QAAQ,cAClB,EAAE,GAAG,KAAK,QAAQ,oBAClB,EAAE,GAAG,EAAE,kBAAkB,MACxB;AACD,4BAAsB,OAAO,MAAM,EAAE,KAAK,WAAW;AAErD,WAAK,IAAI,kBAAkB,sBACzB,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,KAAK,cAAc,sBAAsB,EACzC,MAAM,WAAW,SAAS,EAC1B,KAAK,SAAS,WAAW,YAAY,EACrC,GAAG,UAAU,YAAY;AACzB,cAAM,QAAQ,KAAK,IAAI,gBAAgB,KAAK,EAAE;AAC9C,mBAAW,eAAe;AAC1B,aAAK,IAAI,SAAS;AAAA,UACjB,MAAM;AAAA,UACN,IAAI,KAAK,KAAK;AAAA,UACd,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE;AAAA,QACxD,CAAC;AACD,aAAK,IAAI,IAAI,KAAK;AAAA,MACnB,CAAC;AAAA,IACH;AAEA,QAAI,KAAK,OAAO,SAAS,OAAO,aAAa,EAAE,OAAO,WAAW,EAAE,UAAU,SAAS;AACrF,WAAK,IAAI,UACP,OAAO,KAAK,EACZ,MAAM,cAAc,QAAQ,EAC5B,MAAM,UAAU,KAAK,EACrB,KAAK,IAAI,EAAE,OAAO,KAAK,EAAE,OAAO,OAAO,cAAc,EAAE,UAAU,UAAU,EAAE,OAAO,OAAO,eAAe;AAAA,IAC7G;AAEA,SAAK,IAAI,YAAY,KAAK,IAAI,UAAU,OAAO,KAAK,EAAE,MAAM,cAAc,QAAQ;AAGlF,UAAM,cAAcA,OAAM;AAC1B,SAAK,KAAK,SAASA,QAAO,aAAa,KAAK,IAAI,SAAS;AAEzD,SAAK,IAAI,aAAa,KAAK,IAAI,QAAQ,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM;AAAA,EAIhF;AAEA,OAAK,WAAW,OAAK;AACpB,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,QAAQ;AAAA,QACP,WAAW;AAAA,QACX,UAAU,EAAE,OAAO,KAAK;AAAA,QACxB,kBAAkB,EAAE,YAAY,EAAE,GAAG,KAAK,KAAK;AAAA,MAChD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,OAAK,kBAAkB,MAAM;AAC5B,UAAM,QAAQ,KAAK,IAAI,aAAa,SAAS,OAAO,EAAE,KAAK;AAC3D,UAAM,IAAI,KAAK;AACf,QAAI,EAAE,GAAG,UAAU,MAAO;AAC1B,MAAE,GAAG,QAAQ;AACb,MAAE,IAAI,IAAI,EAAE,QAAQ,IAAI,EAAE;AAC1B,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,OAAO;AAAA,QACN;AAAA,UACC,YAAY,CAAC,cAAc,EAAE,QAAQ;AAAA,UACrC,OAAO,EAAE;AAAA,QACV;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,OAAK,gBAAgB,CAAC,GAAG,QAAQ;AAChC,UAAM,IAAI,KAAK,SAAS,OAAO;AAC/B,QAAI,MAAM,cAAc,QAAQ;AAIhC,UAAM,UACL,EAAE,GAAG,KAAK,QAAQ,iBAAiB,EAAE,GAAG,KAAK,QAAQ,UAAU,kBAC5D,SACA,EAAE,GAAG,KAAK,QAAQ,UAAU,uBAC5B,eACA,EAAE,GAAG,KAAK,QAAQ,UAAU,qBAC5B,YACA;AACJ,UAAM,iBAAiB,KAAK,QAAQ,iBAAiB,EAAE,GAAG,aAAa,aAAa;AACpF,QACE,OAAO,MAAM,EACb,UAAU,KAAK,EACf;AAAA,MACA;AAAA,QACC;AAAA,UACC,MAAM;AAAA,UACN,OAAO,QAAQ,EAAE,OAAO,iBAAiB,OAAO,uBAAuB,OAAO;AAAA,UAC9E,UACC,EAAE,IAAI,IAAI,SAAS,KAAM,EAAE,UAAU,KAAK,EAAE,GAAG,aAAa,aAAa,KAAM,KAAK,QAAQ;AAAA,UAC7F,SAAS,KAAK;AAAA,QACf;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO,QAAQ,EAAE,OAAO,iBAAiB,OAAO;AAAA;AAAA,UAEhD,UAAU,EAAE,GAAG,aAAa,aAAa,KAAK,CAAC,KAAK,OAAO,SAAS,aAAa;AAAA,UACjF,MAAM,iBAAiB,0BAA0B;AAAA,UACjD,SAAS,iBAAiB,KAAK,2BAA2B,KAAK;AAAA,QAChE;AAAA,QACA;AAAA,UACC,MAAM;AAAA,QACP;AAAA,QACA;AAAA,UACC,MAAM;AAAA,UACN,OAAO,aAAa,OAAO;AAAA,UAC3B,UAAU,EAAE,UAAU,KAAK,KAAK,QAAQ;AAAA,UACxC,SAAS,KAAK;AAAA,QACf;AAAA,QAEA;AAAA,UACC,MAAM;AAAA,UACN,OAAO,aAAa,OAAO;AAAA,UAC3B,UAAU,EAAE,UAAU,EAAE,IAAI,IAAI,SAAS,KAAK,KAAK,QAAQ;AAAA,UAC3D,SAAS,KAAK;AAAA,QACf;AAAA,MACD;AAAA,MACA,OAAK,EAAE;AAAA,IACR,EACC,MAAM,EACN,OAAO,KAAK,EACZ,MAAM,WAAW,cAAc,EAC/B,KAAK,SAAU,GAAG;AAClB,YAAM,OAAO,eAAO,IAAI;AACxB,UAAI,EAAE,KAAM,OAAM,EAAE,IAAI,EAAE,MAAM,CAAC;AAAA,UAC5B,MAAK,KAAK,EAAE,IAAI;AAAA,IACtB,CAAC;AAAA,EACH;AAEA,OAAK,+BAA+B,CAAAA,WAAS;AAC5C,IAAAA,OAAM,gBAAgB;AACtB,UAAM,IAAI,KAAK;AACf,UAAM,aAAa,KAAK,MAAM,KAAK,UAAU,KAAK,UAAU,CAAC;AAC7D,UAAM,MAAM,WAAW,EAAE,QAAQ;AACjC,UAAM,CAAC,OAAO,WAAW,IAAI,KAAK,eAAe,CAAC;AAClD,UAAM,UAAU,IAAI,IAAI,OAAO,EAAE,UAAU,CAAC;AAC5C,QAAI,IAAI,QAAQ,KAAK;AACrB,QAAI,cAAc;AAElB,eAAW,KAAK,YAAY;AAC3B,UAAI,KAAK,KAAK;AACb,mBAAW,CAAC,UAAU,EAAE,KAAK,EAAE,IAAI,QAAQ,GAAG;AAE7C,cAAI,CAAC,GAAG,YAAa,IAAG,cAAc,EAAE,UAAU,IAAI,SAAS;AAC/D,aAAG,YAAY,WAAW;AAAA,QAC3B;AAAA,MACD,OAAO;AACN,mBAAW,MAAM,EAAE,KAAK;AACvB,cAAI,CAAC,GAAG,YAAa;AACrB,aAAG,YAAY,WAAW,YAAY,UAAU,CAAAK,OAAKA,GAAE,IAAI,QAAQ,GAAG,GAAG,IAAI,IAAI,IAAI;AAAA,QACtF;AAAA,MACD;AAAA,IACD;AAEA,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,QAAQ;AAAA,QACP;AAAA,QACA,UAAU;AAAA,UACT,QAAQ;AAAA,YACP,aAAa;AAAA,UACd;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,yBAAyB,CAAAL,WAAS;AACtC,IAAAA,QAAO,gBAAgB;AACvB,UAAM,IAAI,KAAK;AACf,UAAM,CAAC,KAAK,IAAI,KAAK,eAAe,CAAC;AACrC,QAAI,EAAE,IAAI,QAAQ,cAAe,OAAM,YAAY,KAAK;AACxD,UAAM,aAAa,KAAK;AACxB,eAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI;AACzC,eAAW,KAAK,YAAY;AAC3B,iBAAW,MAAM,EAAE,KAAK;AACvB,YAAI,CAAC,GAAG,YAAa;AACrB,YAAI,GAAG,QAAQ,EAAE,GAAG,KAAK;AACxB,aAAG,YAAY,WAAW;AAAA,QAC3B,MAAO,IAAG,YAAY,YAAY;AAAA,MACnC;AAAA,IACD;AAEA,QAAI,KAAK,aAAa,eAAe;AAEpC,WAAK,OAAO,SAAS,YAAY,iBAAiB;AAClD,WAAK,OAAO,SAAS,YAAY,oBAAoB;AAAA,IACtD;AAEA,SAAK,OAAO,aAAa;AACzB,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,QAAQ,KAAK;AAAA,IACd,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,2BAA2B,CAACA,QAAO,MAAM;AAC7C,IAAAA,OAAM,gBAAgB;AACtB,UAAM,IAAI,KAAK,eAAe,EAAE,KAAK;AACrC,UAAM,CAAC,KAAK,IAAI,KAAK,eAAe,CAAC;AACrC,UAAM,aAAa,KAAK;AACxB,eAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,IAAI;AACzC,eAAW,KAAK,YAAY;AAC3B,iBAAW,MAAM,EAAE,KAAK;AACvB,YAAI,CAAC,GAAG,YAAa;AACrB,YAAI,GAAG,QAAQ,EAAE,GAAG,KAAK;AACxB,iBAAO,GAAG;AAAA,QACX,WAAW,iBAAiB,MAAM,cAAc,GAAG,aAAa;AAC/D,cAAI,GAAG,YAAY,WAAW,EAAE,aAAa,SAAU,IAAG,YAAY,YAAY;AAAA,QACnF;AAAA,MACD;AAAA,IACD;AACA,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,QAAQ;AAAA,QACP;AAAA,MACD;AAAA,IACD,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,aAAa,CAAAA,WAAS;AAC1B,IAAAA,OAAM,gBAAgB;AACtB,UAAM,IAAI,KAAK;AACf,UAAM,MAAM,KAAK,WAAW,EAAE,QAAQ;AACtC,QAAI,IAAI,OAAO,EAAE,UAAU,CAAC;AAC5B,QAAI,IAAI,OAAO,EAAE,WAAW,GAAG,GAAG,EAAE,EAAE;AACtC,QAAI,cAAc;AAElB,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,OAAO;AAAA,QACN;AAAA,UACC,YAAY,CAAC,cAAc,EAAE,QAAQ;AAAA,UACrC,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,YAAY,CAAC,YAAY,UAAU,aAAa;AAAA,UAChD,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,eAAe,CAAAA,WAAS;AAC5B,IAAAA,OAAM,gBAAgB;AACtB,UAAM,IAAI,KAAK;AACf,UAAM,MAAM,KAAK,WAAW,EAAE,QAAQ;AACtC,QAAI,IAAI,OAAO,EAAE,UAAU,CAAC;AAC5B,QAAI,IAAI,OAAO,EAAE,WAAW,GAAG,GAAG,EAAE,EAAE;AACtC,QAAI,cAAc;AAElB,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,OAAO;AAAA,QACN;AAAA,UACC,YAAY,CAAC,cAAc,EAAE,QAAQ;AAAA,UACrC,OAAO;AAAA,QACR;AAAA,QACA;AAAA,UACC,YAAY,CAAC,YAAY,UAAU,aAAa;AAAA,UAChD,OAAO;AAAA,QACR;AAAA,MACD;AAAA,IACD,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,mBAAmB,YAAY;AACnC,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AACxC,UAAM,IAAI,KAAK;AACf,UAAM,IAAI,KAAK,OAAO,SAAS;AAC/B,UAAM,IAAI,EAAE;AAEZ,QAAI,EAAE,GAAG,KAAK,QAAQ,eAAe;AACpC,YAAM,MAAM,KAAK,IAAI,SAAS,OAAO,KAAK;AAC1C,YAAM,QAAQ,IAAI,OAAO,OAAO;AAChC,YAAM,OAAO,MAAM,EAAE,KAAK,aAAa,EAAE,OAAO,gBAAgB;AAEhE,YAAM,gBAAgB,mBAAmB,EAAE,KAAK,EAAE,GAAG,gBAAgB;AACrE,YAAM,QAAQ,MACZ,OAAO,OAAO,EACd,KAAK,QAAQ,QAAQ,EACrB,MAAM,eAAe,KAAK,EAC1B,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,aAAa;AAEjC,UACE,OAAO,KAAK,EACZ,OAAO,QAAQ,EACf,KAAK,QAAQ,EACb,GAAG,SAAS,MAAM;AAClB,cAAM,QAAQ,MAAM,SAAS,OAAO;AACpC,YAAI,UAAU,cAAe;AAC7B,YAAI,UAAU,IAAI;AACjB,iBAAO,EAAE,GAAG;AAAA,QACb,OAAO;AACN,YAAE,GAAG,gBAAgB,OAAO,KAAK;AAAA,QAClC;AAEA,aAAK,IAAI,SAAS;AAAA,UACjB,MAAM;AAAA,UACN,IAAI,KAAK,KAAK;AAAA,UACd,OAAO;AAAA,YACN;AAAA,cACC,YAAY,CAAC,cAAc,EAAE,UAAU,OAAO,EAAE,QAAQ;AAAA,cACxD,OAAO,EAAE;AAAA,YACV;AAAA,UACD;AAAA,QACD,CAAC;AACD,aAAK,IAAI,IAAI,KAAK;AAAA,MACnB,CAAC;AAAA,IACH,OAAO;AACN,YAAM,KAAK,KAAK;AAAA,QACf,OAAO,OAAO,EAAE,aAAa,KAAK,eAAe,CAAC,GAAG,QAAQ,KAAK,MAAM,OAAO,GAAG,KAAK,YAAY,EAAE;AAAA,MACtG;AACA,WAAK,KAAK,SAAS;AAAA,IACpB;AAAA,EACD;AAEA,OAAK,eAAe,YAAY;AAC/B,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AACxC,SAAK,iBAAiB,KAAK;AAC3B,UAAM,MAAM,KAAK,IAAI,SAAS,OAAO,KAAK;AAC1C,QAAI,OAAO,MAAM,EAAE,KAAK,wBAAwB;AAChD,SAAK,oBAAoB,GAAG;AAAA,EAC7B;AAEA,OAAK,qBAAqB,MAAM;AAG/B,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AAExC,SAAK,IAAI,WAAW,KAAK,IAAI,SAAS,OAAO,KAAK;AAClD,SAAK,IAAI,WAAW,KAAK,IAAI,SAAS,OAAO,KAAK;AAElD,QAAI,KAAK,YAAY,IAAI,QAAQ,eAAe;AAE/C,WAAK,sBAAsB,KAAK,IAAI,QAAQ;AAC5C;AAAA,IACD;AAEA,UAAM,aAAa,KAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,UAAU,UAAU;AAC7E,eAAW,OAAO,OAAO,EAAE,KAAK,+BAA+B;AAC/D,SAAK,IAAI,gBAAgB,WAAW,OAAO,QAAQ,EAAE,GAAG,UAAU,MAAM;AACvE,YAAM,QAAQ,KAAK,IAAI,cAAc,SAAS,OAAO;AACrD,WAAK,IAAI,iBACP,SAAS,YAAY,SAAS,SAAS,EACvC,SAAS,SAAS,SAAS,YAAY,KAAK,YAAY,IAAI,OAAO,UAAU;AAAA,IAChF,CAAC;AACD,SAAK,IAAI,cACP,UAAU,QAAQ,EAClB,KAAK;AAAA,MACL,EAAE,OAAO,WAAW,OAAO,WAAW,UAAU,KAAK;AAAA,MACrD,EAAE,OAAO,OAAO,OAAO,MAAM;AAAA,IAC9B,CAAC,EACA,MAAM,EACN,OAAO,QAAQ,EACf,KAAK,YAAY,OAAK,EAAE,QAAQ,EAChC,KAAK,OAAK,EAAE,KAAK;AAEnB,eAAW,OAAO,MAAM,EAAE,KAAK,qBAAqB;AAEpD,QAAI,aAAa;AACjB,SAAK,IAAI,mBAAmB,WAC1B,OAAO,OAAO,EACd,KAAK,QAAQ,MAAM,EACnB,SAAS,YAAY,IAAI,EACzB,SAAS,SAAS,KAAK,YAAY,IAAI,IAAI,EAC3C,GAAG,UAAU,MAAM;AACnB,YAAM,OAAO,KAAK,IAAI,iBAAiB,SAAS,OAAO;AACvD,UAAI,QAAQ,KAAK,YAAY,IAAI,MAAM;AAAA,MACvC,OAAO;AACN,qBAAa,KAAK,IAAI,iBAAiB,SAAS,OAAO;AAAA,MACxD;AAAA,IACD,CAAC;AAEF,SAAK,oBAAoB,KAAK,IAAI,QAAQ;AAI1C,SAAK,sBAAsB,KAAK,IAAI,QAAQ;AAAA,EAC7C;AAEA,OAAK,sBAAsB,SAAU,KAAK;AACzC,UAAM,iBAAiB,IACrB,OAAO,KAAK,EACZ,MAAM,UAAU,UAAU;AAC5B,mBAAe,OAAO,KAAK,EAAE,MAAM,WAAW,cAAc,EAAE,MAAM,iBAAiB,MAAM,EAAE,KAAK,aAAa;AAE/G,UAAM,kBAAkB,eAAe,OAAO,KAAK,EAAE,MAAM,WAAW,cAAc;AAEpF,SAAK,gBAAgB,eAAe,KAAK,EAAE;AAC3C,UAAM,aAAa,gBAAgB,OAAO,OAAO;AACjD,eACE,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,KAAK,SAAS,OAAO,EACrB,SAAS,WAAW,IAAI,EACxB,KAAK,QAAQ,KAAK,aAAa;AACjC,eAAW,OAAO,MAAM,EAAE,KAAK,OAAO;AAEtC,oBAAgB,OAAO,MAAM,EAAE,KAAK,aAAa;AAEjD,UAAM,aAAa,gBAAgB,OAAO,OAAO;AACjD,eAAW,OAAO,OAAO,EAAE,KAAK,QAAQ,OAAO,EAAE,KAAK,SAAS,OAAO,EAAE,KAAK,QAAQ,KAAK,aAAa;AACvG,eAAW,OAAO,MAAM,EAAE,KAAK,aAAa;AAAA,EAC7C;AAEA,OAAK,wBAAwB,OAAM,WAAU;AAI5C,UAAM,UAAU,EAAE,QAAQ,UAAU,QAAQ,aAAa;AACzD,QAAI,KAAK,aAAa,eAAe;AACpC,UACC,KAAK,OAAO,YAAY,UAAU,yBACjC,CAAC,KAAK,eAAe,KAAK,YAAY,IAAI,QAAQ,gBAClD;AACD,gBAAQ,SAAS,UAAU;AAC3B,gBAAQ,SAAS;AAAA,MAClB,WACC,KAAK,OAAO,YAAY,UAAU,uBACjC,CAAC,KAAK,eAAe,KAAK,YAAY,IAAI,QAAQ,gBAClD;AACD,gBAAQ,SAAS,UAAU;AAC3B,gBAAQ,SAAS;AAAA,MAClB,OAAO;AACN,gBAAQ,SAAS,KAAK,YAAY,GAAG,KAAK;AAC1C,gBAAQ,SAAS;AAAA,MAClB;AAAA,IACD;AACA,UAAM,SAAS,MAAM,OAAO,mBAAa;AACzC,WAAO,UAAU,GAAG,EAAE,OAAO;AAC7B,WAAO,QAAQ;AAAA,MACd,QAAQ,OAAO,OAAO,KAAK;AAAA,MAC3B,UAAU,KAAK,IAAI;AAAA,MACnB,OAAO;AAAA,QACN,OAAO,KAAK,MAAM;AAAA,QAClB,cAAc,KAAK;AAAA,QACnB,KAAK;AAAA,UACJ,aAAa;AAAA,QACd;AAAA,QACA,MAAM;AAAA,UACL;AAAA,QACD;AAAA,QACA,GAAI,CAAC,KAAK,eAAe,KAAK,YAAY,IAAI,QAAQ,gBACnD,EAAE,eAAe,KAAK,YAAY,IAAI,IAAI,OAAK,EAAE,IAAI,EAAE,IACvD,CAAC;AAAA,MACL;AAAA,MACA,MAAM;AAAA,QACL;AAAA,MACD;AAAA,MACA,QAAQ;AAAA,QACP,mBAAmB,UAAQ,WAAW,CAAC,IAAI,CAAC;AAAA,MAC7C;AAAA,IACD,CAAC;AAAA,EACF;AAEA,iBAAe,WAAW,SAAS;AAClC,UAAM,WAAW,MAAM,QAAQ;AAAA,MAC9B,QAAQ,IAAI,OAAM,UAAS;AAC1B,cAAM,OAAO,gBAAgB,KAAK;AAClC,cAAM,KAAK,QAAQ,OAAO,EAAE,IAAI,KAAK,IAAI,KAAK,IAAI,EAAE,KAAK;AACzD,cAAM,gBAAgB,IAAI,KAAK,IAAI,QAAQ;AAC3C,eAAO;AAAA,MACR,CAAC;AAAA,IACF;AACA,UAAM,IAAI,KAAK;AACf,UAAM,aAAa,KAAK;AAExB,UAAM,4BAA4B,KAAK,OAAO,YAAY,UAAU,wBAAwB,CAAC;AAC7F,UAAM,0BAA0B,KAAK,OAAO,YAAY,UAAU,sBAAsB,CAAC;AACzF,QAAI,6BAA6B,2BAA2B,EAAE,IAAI,QAAQ,eAAe;AACxF,YAAM,MAAM,6BAA6B,0BAA0B,WAAW,CAAC,IAAI,WAAW,EAAE,QAAQ;AAExG,UAAI,IAAI,OAAO,GAAG,IAAI,IAAI,QAAQ,GAAG,QAAQ;AAC7C,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,KAAK,KAAK;AAAA,QACd,OAAO;AAAA,UACN;AAAA,YACC,YAAY,CAAC,cAAc,6BAA6B,0BAA0B,IAAI,EAAE,UAAU,KAAK;AAAA,YACvG,OAAO,IAAI;AAAA,UACZ;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF,WAAW,KAAK,IAAI,cAAc,SAAS,OAAO,KAAK,WAAW;AACjE,YAAM,MAAM,KAAK,iBAAiB,eAAO,eAAe,KAAK,aAAa,YAAY,GAAG,SAAS,OAAO;AACzG,YAAM,MAAM,WAAW,EAAE,QAAQ;AACjC,YAAM,IAAI,OAAO,UAAU,EAAE,WAAW,EAAE,WAAW;AAErD,UAAI,IAAI,OAAO,GAAG,GAAG,GAAG,QAAQ;AAChC,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,KAAK,KAAK;AAAA,QACd,OAAO;AAAA,UACN;AAAA,YACC,YAAY,CAAC,cAAc,EAAE,UAAU,KAAK;AAAA,YAC5C,OAAO,IAAI;AAAA,UACZ;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF,OAAO;AACN,YAAM,MAAM,KAAK,iBAAiB,eAAO,eAAe,KAAK,aAAa,YAAY,GAAG,SAAS,OAAO;AACzG,YAAM,IAAI,OAAO,UAAU,EAAE,WAAW,EAAE,WAAW;AACrD,iBAAW,OAAO,GAAG,GAAG;AAAA,QACvB,MAAM,KAAK,IAAI,iBAAiB,SAAS,OAAO;AAAA,QAChD,KAAK;AAAA,MACN,CAAC;AACD,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,KAAK,KAAK;AAAA,QACd,QAAQ,EAAE,WAAW;AAAA,MACtB,CAAC;AAAA,IACF;AACA,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,eAAe,MAAM;AAoBzB,UAAM,IAAI,KAAK;AACf,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AAExC,SAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM,EAAE,MAAM,cAAc,QAAQ,EAAE,KAAK,EAAE,GAAG,KAAK,IAAI;AAE7G,SAAK,YAAY;AAEjB,SAAK,gBAAgB,CAAC;AAAA,EACvB;AAEA,OAAK,sBAAsB,OAAK;AAC/B,UAAM,UAAU,KAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM;AAE1E,UAAM,YAAY,QAAQ,OAAO,OAAO;AACxC,SAAK,YAAY,UAAU,OAAO,OAAO,EAAE,KAAK,QAAQ,UAAU,EAAE,MAAM,cAAc,QAAQ;AAEhG,cAAU,OAAO,MAAM,EAAE,KAAK,2BAA2B;AAEzD,UAAM,UAAU,QAAQ,OAAO,QAAQ;AACvC,YACE,UAAU,QAAQ,EAClB,KAAK;AAAA,MACL,EAAE,OAAO,UAAU,OAAO,EAAE;AAAA,MAC5B,EAAE,OAAO,SAAS,OAAO,EAAE;AAAA,IAC5B,CAAC,EACA,MAAM,EACN,OAAO,QAAQ,EACf,KAAK,SAAS,OAAK,EAAE,KAAK,EAC1B,KAAK,OAAK,EAAE,KAAK;AAEnB,YAAQ,OAAO,MAAM,EAAE,KAAK,QAAQ;AAEpC,UAAM,kBAAkB,EAAE,IAAI,IAC5B,OAAO,QAAM,GAAG,OAAO,EAAE,GAAG,GAAG,EAC/B,IAAI,QAAM;AACV,aAAO,EAAE,OAAO,GAAG,KAAK,MAAM,OAAO,GAAG,IAAI;AAAA,IAC7C,CAAC;AACF,UAAM,aAAa,QAAQ,OAAO,QAAQ;AAC1C,eACE,UAAU,QAAQ,EAClB,KAAK,CAAC,EAAE,OAAO,OAAO,OAAO,IAAI,GAAG,GAAG,eAAe,CAAC,EACvD,MAAM,EACN,OAAO,QAAQ,EACf,KAAK,SAAS,OAAK,EAAE,KAAK,EAC1B,KAAK,OAAK,EAAE,KAAK;AAAA,EACpB;AAEA,OAAK,kBAAkB,OAAK;AAC3B,UAAM,aAAa,KAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,cAAc,MAAM;AAC7E,UAAM,eAAe,WAAW,OAAO,OAAO;AAC9C,UAAM,eAAe,aACnB,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,SAAS,WAAW,IAAI,EACxB,MAAM,cAAc,QAAQ;AAE9B,UAAM,IAAI,KAAK,SAAS,OAAO;AAC/B,iBAAa,OAAO,MAAM,EAAE,KAAK,cAAc,EAAE,OAAO,kCAAkC;AAE1F,UAAM,QAAQ,KAAK,gBAAgB,YAAY,CAAC;AAEhD,SAAK,IAAI,SACP,OAAO,QAAQ,EACf,KAAK,OAAO,EACZ,GAAG,SAAS,MAAM;AAClB,YAAM,SAAS,KAAK,MAAM,KAAK,UAAU,KAAK,OAAO,SAAS,MAAM,CAAC,KAAK,CAAC;AAC3E,aAAO,MAAM;AACb,aAAO,MAAM;AACb,aAAO,MAAM;AACb,aAAO,MAAM;AAIb,UAAI,aAAa,SAAS,SAAS,KAAK,KAAK,WAAW,SAAS,SAAS,GAAG;AAC5E,aAAK,IAAI,SAAS;AAAA,UACjB,MAAM;AAAA,UACN,IAAI,KAAK,KAAK;AAAA,UACd,OAAO;AAAA,YACN;AAAA,cACC,YAAY,CAAC,cAAc,EAAE,UAAU,OAAO,EAAE,QAAQ;AAAA,cACxD,OAAO;AAAA,YACR;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAEA,WAAK,IAAI,IAAI,KAAK;AAAA,IACnB,CAAC;AAAA,EACH;AAEA,OAAK,kBAAkB,CAAC,YAAY,MAAM;AACzC,UAAM,CAAC,OAAO,WAAW,IAAI,KAAK,eAAe,CAAC;AAClD,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,EAAE;AACZ,eACE,OAAO,KAAK,EACZ,MAAM,UAAU,KAAK,EACrB,MAAM,WAAW,UAAU,EAC3B,UAAU,KAAK,EACf,KAAK,aAAa,CAAAM,OAAKA,GAAE,GAAG,EAC5B,MAAM,EACN,OAAO,KAAK,EACZ,MAAM,SAAS,aAAa,EAC5B,MAAM,UAAU,KAAK,EACrB,MAAM,UAAU,SAAS,EACzB,MAAM,WAAW,UAAU,EAC3B,MAAM,iBAAiB,KAAK,EAC5B,MAAM,SAAS,OAAO,EACtB,MAAM,oBAAoB,oBAAoB,EAC9C,KAAK,SAAU,IAAI,GAAG;AACtB,SAAG,YAAY,WAAW;AAC1B,SAAG,MAAM,eAAO,IAAI;AACpB,YAAM,QAAQ,GAAG,OAAO,WAAW,GAAG,EAAE,MAAM,UAAU,GAAG,KAAK;AAChE,SAAG,IAAI,OAAO,MAAM,EAAE,MAAM,gBAAgB,MAAM,EAAE,KAAK,KAAK;AAC9D,SAAG,KAAK,GAAG,IACT,OAAO,MAAM,EACb,KAAK,WAAW,EAChB,MAAM,WAAW,MAAM,IAAI,SAAS,QAAQ,EAC5C,MAAM,SAAS,MAAM,EACrB,GAAG,SAAS,MAAM;AAClB,aAAK,WAAW,aAAa,MAAM,KAAK,eAAe;AACvD,oBAAY,OAAO,GAAG,UAAU,CAAC;AACjC,oBAAY,OAAO,GAAG,WAAW,GAAG,GAAG,EAAE;AACzC,8BAAsB;AAAA,MACvB,CAAC;AAEF,SAAG,OAAO,GAAG,IACX,OAAO,MAAM,EACb,KAAK,WAAW,EAChB,MAAM,WAAW,IAAI,YAAY,SAAS,IAAI,WAAW,MAAM,EAC/D,MAAM,SAAS,MAAM,EACrB,GAAG,SAAS,MAAM;AAClB,aAAK,WAAW,aAAa,MAAM,KAAK,YAAY,WAAW;AAC/D,oBAAY,OAAO,GAAG,UAAU,CAAC;AACjC,oBAAY,OAAO,GAAG,WAAW,GAAG,GAAG,EAAE;AACzC,8BAAsB;AAAA,MACvB,CAAC;AAEF,SAAG,SAAS,GAAG,IACb,OAAO,MAAM,EACb,KAAK,YAAY,EACjB,MAAM,WAAW,QAAQ,EACzB,MAAM,SAAS,oBAAoB,EACnC,GAAG,SAAS,MAAM;AAClB,WAAG,IAAI,OAAO;AACd,oBAAY,OAAO,GAAG,UAAU,CAAC;AACjC,8BAAsB;AAAA,MACvB,CAAC;AAAA,IACH,CAAC;AAEF,aAAS,wBAAwB;AAChC,iBAAW,CAAC,GAAG,EAAE,KAAK,YAAY,QAAQ,GAAG;AAC5C,WAAG,WAAW;AACd,WAAG,GAAG,MAAM,WAAW,GAAG,WAAW,IAAI,WAAW,MAAM;AAC1D,WAAG,KAAK,MAAM,WAAW,GAAG,WAAW,YAAY,SAAS,IAAI,WAAW,MAAM;AAAA,MAClF;AAAA,IACD;AAEA,WAAO;AAAA,EACR;AAEA,OAAK,iBAAiB,OAAK;AAC1B,UAAM,cAAc;AAAA,MACnB,GAAG,KAAK,UACN,OAAO,CAAAD,OAAKA,GAAE,GAAG,WAAW,EAC5B,IAAI,CAAAA,OAAK,KAAK,MAAM,KAAK,UAAUA,GAAE,EAAE,CAAC,CAAC,EACzC,KAAK,CAAC,GAAG,MAAM,EAAE,YAAY,WAAW,EAAE,YAAY,QAAQ;AAAA,MAChE,GAAG,KAAK,OAAO,SAAS,OAAO,uBAAuB,IAAI,QAAM,KAAK,MAAM,KAAK,UAAU,EAAE,CAAC,CAAC;AAAA,IAC/F;AAEA,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,eAAe,EAAE,YAAY,EAAE,aAAa;AAClD,QAAI,CAAC,cAAc;AAClB,YAAM,gCAAgC,EAAE,aAAa;AAAA,IACtD;AACA,UAAM,sBAAsB,aAAa,cAAc,KAAK,OAAK,EAAE,MAAM,SAAS,EAAE,IAAI,MAAM,IAAI,CAAC,GAAG,YAAY,CAAC;AACnH,UAAM,cAAc,sBACjB,CAAC,IACD,EAAE,IAAI,MAAM,QAAQ,iBAAiB,EAAE,IAAI,GAAG,QAAQ,WACtD;AAAA,MACA,IAAI;AAAA,MACJ,OAAO;AAAA,QACN;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA;AAAA,QAEA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,QACA;AAAA,MACD;AAAA,IACA,IACA,EAAE,IAAI,SAAS;AAElB,UAAM,IAAI,YAAY,UAAU,QAAM,GAAG,QAAQ,EAAE,IAAI,GAAG;AAC1D,UAAM,QAAQ,KAAK,MAAM,KAAK,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;AAEnD,UAAM,cAAc;AACpB,QAAI,KAAK,IAAI;AACZ,kBAAY,QAAQ,KAAK;AAAA,IAC1B,OAAO;AACN,UAAI,YAAY,MAAO,OAAM,YAAY,QAAQ,YAAY;AAAA,IAC9D;AAEA,WAAO,CAAC,OAAO,WAAW;AAAA,EAC3B;AAEA,OAAK,aAAa,MAAM;AACvB,UAAM,IAAI,KAAK;AACf,UAAM,oBAAoB,KAAK,kBAAkB,EAAE,EAAE;AACrD,UAAM,aAAa,KAAK;AACxB,UAAM,MAAM,WAAW,EAAE,QAAQ;AAEjC,QAAI,IAAI,OAAO,EAAE,UAAU,CAAC;AAC5B,QAAI,IAAI,IAAI,QAAQ;AACnB,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,KAAK,KAAK;AAAA,QACd,OAAO;AAAA,UACN;AAAA,YACC,YAAY,CAAC,cAAc,EAAE,UAAU,KAAK;AAAA,YAC5C,OAAO,IAAI;AAAA,UACZ;AAAA,UACA;AAAA,YACC,YAAY,CAAC,mBAAmB;AAAA,YAChC,OAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF,OAAO;AAEN,iBAAW,OAAO,EAAE,UAAU,CAAC;AAC/B,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,KAAK,KAAK;AAAA,QACd,QAAQ;AAAA,UACP;AAAA,UACA;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF;AACA,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,kBAAkB,MAAM;AAC5B,UAAM,IAAI,KAAK;AACf,UAAM,aAAa,KAAK;AACxB,eAAW,OAAO,EAAE,UAAU,CAAC;AAC/B,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,QAAQ,EAAE,WAAW;AAAA,IACtB,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,oBAAoB,QAAM;AAC9B,QAAI,CAAC,KAAK,OAAO,mBAAmB,IAAI,OAAQ,QAAO,KAAK,OAAO;AACnE,UAAM,MAAM,gBAAgB,KAAK,OAAO,kBAAkB,GAAG;AAC7D,UAAM,QAAQ,IAAI;AAAA,MACjB,OACC,EAAE,KAAK,KAAK,SAAS,IAAI,KAAK,UAC3B,QAAQ,EAAE,IAAI,QAAQ,QAAQ,GAAG,SAAS,EAAE,IAAI,KAAK,OAAO,GAAG,KAAK,MAAO,EAAE,IAAI,KAAK,SAAS,GAAG,KAAK;AAAA,IAC5G;AACA,QAAI,CAAC,MAAM,OAAQ,QAAO,KAAK,OAAO;AAAA,SACjC;AACJ,iBAAW,KAAK,OAAO;AACtB,cAAM,MAAM,EAAE;AACd,YAAI,IAAI,KAAK,QAAQ,GAAG,KAAK,KAAM;AACnC,aAAK,QAAQ,IAAI,QAAQ,QAAQ,GAAG,SAAS,IAAI,KAAK,OAAO,GAAG,KAAK,GAAI;AAAA,iBAChE,IAAI,KAAK,QAAQ,GAAG,KAAK,KAAM;AAGxC,cAAM,IAAI,IAAI,UAAU,CAAAA,OAAKA,OAAM,GAAG;AACtC,YAAI,OAAO,GAAG,CAAC;AAAA,MAChB;AAAA,IACD;AACA,WAAO,EAAE,IAAI,MAAM,MAAM,OAAO,MAAM,UAAU,IAAI;AAAA,EACrD;AACD;AAEA,SAAS,sBAAsB,MAAM;AACpC,OAAK,sBAAsB,SAAUL,QAAO;AAC3C,UAAM,IAAIA,OAAM,OAAO;AACvB,QAAI,CAAC,EAAG;AACR,SAAK,cAAc;AACnB,SAAK,IAAI,QAAQ,UAAU,GAAG,EAAE,OAAO;AACvC,SAAK,IAAI,SAAS,MAAM,WAAW,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO;AAE5D,UAAM,UAAU,KAAK,MAAM,KAAK,UAAU,KAAK,OAAO,UAAU,eAAe,CAAC,CAAC,CAAC,EAAE,IAAI,CAAAC,OAAK;AAC5F,MAAAA,GAAE,WAAW,KAAKA,GAAE,QAAQ;AAC5B,aAAOA;AAAA,IACR,CAAC;AACD,UAAM,cAAc,CAAC,GAAG,SAAS,EAAE,OAAO,UAAU,UAAU,KAAK,kBAAkB,CAAC;AAEtF,SAAK,IAAI,QACP,OAAO,KAAK,EACZ,UAAU,wBAAwB,EAClC,KAAK,WAAW,EAChB,MAAM,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,MAAM,WAAW,OAAO,EACxB,KAAK,CAAAA,OAAKA,GAAE,KAAK,EACjB,GAAG,SAAS,CAACD,QAAOC,OAAM;AAC1B,MAAAD,OAAM,gBAAgB;AACtB,MAAAC,GAAE,SAASA,EAAC;AAAA,IACb,CAAC;AAEF,SAAK,IAAI,IAAI,UAAUD,OAAM,MAAM;AAAA,EACpC;AAEA,OAAK,mBAAmB,MAAM;AAC7B,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AAAA,EACzC;AAEA,OAAK,qBAAqB,OAAM,YAAW;AAC1C,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AACxC,SAAK,IAAI,SACP,OAAO,KAAK,EACZ,MAAM,eAAe,MAAM,EAC3B,KAAK,WAAW,KAAK,OAAO,SAAS,KAAK,IAAI,UAAU;AAE1D,UAAM,WAAW,KAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,WAAW,QAAQ;AAE1E,UAAM,YAAY,8BAA8B;AAChD,UAAM,SAAS,SAAS,OAAO,OAAO;AACtC,WACE,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,KAAK,QAAQ,SAAS,EACtB,KAAK,SAAS,OAAO,EACrB,SAAS,WAAW,IAAI;AAC1B,WAAO,OAAO,MAAM,EAAE,KAAK,UAAU;AAErC,UAAM,SAAS,SAAS,OAAO,OAAO,EAAE,MAAM,eAAe,MAAM;AACnE,WAAO,OAAO,OAAO,EAAE,KAAK,QAAQ,OAAO,EAAE,KAAK,QAAQ,SAAS,EAAE,KAAK,SAAS,OAAO;AAC1F,WAAO,OAAO,MAAM,EAAE,KAAK,SAAS;AAEpC,SAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,kBAAkB,MAAM,EAAE,KAAK,uCAAuC;AAE5G,UAAM,SAAS,MAAM,OAAO,mBAAa;AACzC,WAAO,QAAQ;AAAA,MACd,QAAQ,KAAK,IAAI,SAAS,OAAO,KAAK;AAAA,MACtC,UAAU,KAAK,IAAI;AAAA,MACnB,OAAO;AAAA,QACN,OAAO,KAAK,MAAM;AAAA,QAClB,cAAc,KAAK,MAAM;AAAA,QACzB,KAAK;AAAA,UACJ,aAAa;AAAA,QACd;AAAA,QACA,MAAM,EAAE,SAAS,EAAE,QAAQ,YAAY,QAAQ,OAAO,EAAE;AAAA,MACzD;AAAA,MACA,MAAM;AAAA,QACL,YAAY,UAAQ;AACnB,eAAK,IAAI,IAAI,KAAK;AAClB,gBAAM,UAAU,SAAS,OAAO,eAAe,SAAS,YAAY,EAAE,SAAS,OAAO;AACtF,eAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AACxC,gBAAM,SAAS;AAAA,YACd,WAAW;AAAA,YACX;AAAA,YACA,CAAC,OAAO,GAAG,KAAK,MAAM,KAAK,UAAU,KAAK,OAAO,QAAQ,CAAC;AAAA,YAC1D,cAAc,KAAK;AAAA,UACpB;AAEA,cAAI,QAAQ,QAAQ;AACnB,mBAAO,OAAO,QAAQ,QAAQ,MAAM;AAAA,UACrC;AACA,eAAK,IAAI,SAAS,EAAE,MAAM,eAAe,OAAO,CAAC;AAAA,QAClD;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,OAAK,oBAAoB,MAAM;AAE9B,QAAI,CAAC,KAAK,OAAO,SAAU;AAE3B,UAAM,KAAK,KAAK,YAAY,IAAI;AAChC,UAAM,OAAO,GAAG;AAChB,QAAI,KAAK,QAAQ,iBAAiB,KAAK,QAAQ,YAAY;AAC1D,WAAK,MAAM,GAAG;AACd,YAAM,iBAAiB,KAAK,OAAO,kBAAkB,IAAI,UAAU,OAAK,EAAE,iBAAiB,GAAG,KAAK,EAAE;AACrG,UAAI,kBAAkB,IAAI;AACzB,cAAM,YAAY;AAAA,UACjB,eAAe,GAAG,KAAK;AAAA,UACvB,MAAM;AAAA,UACN,KAAK;AAAA,YACJ,OAAO;AAAA,YACP;AAAA,YACA,QAAQ,CAAC,EAAE,KAAK,KAAK,YAAY,IAAI,GAAG,CAAC;AAAA,UAC1C;AAAA,QACD;AACA,aAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,MACjD,OAAO;AAEN,aAAK,OAAO,kBAAkB,IAAI,cAAc,EAAE,IAAI,OAAO,KAAK,EAAE,KAAK,KAAK,YAAY,IAAI,GAAG,CAAC;AAAA,MACnG;AAAA,IACD,WAAW,cAAc,IAAI,GAAG;AAC/B,WAAK,MAAM,GAAG;AACd,YAAM,YAAY;AAAA,QACjB,eAAe,GAAG,KAAK,MAAM,GAAG,KAAK;AAAA,QACrC,MAAM;AAAA,QACN,KAAK;AAAA,UACJ,OAAO;AAAA,UACP;AAAA,UACA,QAAQ,CAAC,KAAK,KAAK,KAAK,SAAS,GAAG,GAAG,EAAE,KAAK,KAAK,OAAK,KAAK,YAAY,IAAI,MAAM,EAAE,IAAI,CAAC;AAAA,QAC3F;AAAA,MACD;AACA,WAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,IACjD;AAEA,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,QAAQ,EAAE,mBAAmB,KAAK,OAAO,kBAAkB;AAAA,IAC5D,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,0BAA0B,MAAM;AAEpC,QAAI,CAAC,KAAK,OAAO,SAAU;AAE3B,UAAM,KAAK,KAAK,aAAa,KAAK,MAAM,KAAK,OAAO;AACpD,SAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,MACrE,OAAK,EAAE,kBAAkB,GAAG,KAAK,MAAM,EAAE,iBAAiB,GAAG,KAAK;AAAA,IACnE;AAEA,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,QAAQ,EAAE,mBAAmB,KAAK,OAAO,kBAAkB;AAAA,IAC5D,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AAEA,OAAK,yBAAyB,CAACA,QAAO,QAAQ;AAC7C,UAAM,IAAI,KAAK,SAAS,OAAO;AAC/B,UAAM,IAAI,IAAI,IAAI;AAClB,SAAK,IAAI,QAAQ,UAAU,GAAG,EAAE,OAAO;AACvC,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AACxC,SAAK,IAAI,SACP,OAAO,KAAK,EACZ,MAAM,cAAc,QAAQ,EAC5B,KAAK,MAAM,IAAI,IAAI,SAAS,CAAC,IAAI,IAAI,IAAI,EAAE,SAAS,EAAE,OAAO,GAAG;AAClE,UAAM,MAAM,KAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,aAAa,OAAO,EAAE,MAAM,WAAW,KAAK;AAC9F,eAAW,OAAOA,OAAM,OAAO,SAAS,IAAI,YAAY;AACvD,YAAM,IAAIA,OAAM,OAAO,SAAS,IAAI,WAAW,GAAG;AAClD,UAAI,OAAO,KAAK,EAAE,MAAM,eAAe,MAAM,EAAE,KAAK,MAAM,EAAE,IAAI,MAAM;AACtE,YAAM,IAAI,IAAI,OAAO,OAAO;AAC5B,iBAAW,KAAK,EAAE,OAAO;AACxB,cAAM,KAAK,EAAE,OAAO,IAAI;AAExB,WAAG,OAAO,IAAI,EACZ,OAAO,KAAK,EACZ,MAAM,SAAS,MAAM,EACrB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,EAAE,KAAK,EACjC,MAAM,UAAU,cAAc,EAAE,MAAM,EAAE;AAC1C,WAAG,OAAO,IAAI,EAAE,KAAK,EAAE,IAAI;AAAA,MAC5B;AAAA,IACD;AACA,SAAK,IAAI,IAAI,KAAKA,OAAM,SAASA,OAAM,OAAO;AAAA,EAC/C;AAGA,OAAK,mBAAmB,CAAC,GAAG,MAAM;AACjC,QAAI,EAAE,SAAS,EAAE,MAAO,QAAO,EAAE,QAAQ,EAAE;AAC3C,QAAI,OAAO,SAAS,EAAE,KAAK,KAAK,EAAE,SAAS,GAAI,QAAO;AACtD,QAAI,OAAO,SAAS,EAAE,KAAK,KAAK,EAAE,SAAS,GAAI,QAAO;AACtD,QAAI,EAAE,MAAO,QAAO,EAAE,QAAQ,EAAE;AAChC,QAAI,OAAO,SAAS,EAAE,KAAK,EAAG,QAAO;AACrC,QAAI,OAAO,SAAS,EAAE,KAAK,EAAG,QAAO;AACrC,WAAO;AAAA,EACR;AAEA,OAAK,wBAAwB,OAAK;AACjC,UAAM,MAAM,gBAAgB,KAAK,OAAO,YAAY,CAAC,CAAC;AACtD,UAAM,KAAK,QAAQ,MAAM,IAAI,KAAK,IAAI;AACtC,QAAI,EAAE,UAAU,IAAI;AACnB,UAAI,CAAC,IAAI,QAAS,KAAI,UAAU,CAAC;AACjC,YAAM,IAAI,IAAI,SAAS,QAAQ,EAAE,GAAG;AACpC,UAAI,KAAK,GAAI,KAAI,QAAQ,KAAK,EAAE,GAAG;AAAA,UAC9B,KAAI,QAAQ,OAAO,GAAG,CAAC;AAC5B,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,KAAK;AAAA,QACT,QAAQ;AAAA,UACP,UAAU;AAAA,QACX;AAAA,MACD,CAAC;AAAA,IACF;AAAA,EACD;AAEA,OAAK,wBAAwB,CAACA,QAAO,MAAM;AAC1C,UAAM,MAAM,gBAAgB,KAAK,OAAO,YAAY,CAAC,CAAC;AACtD,UAAM,KAAK,QAAQ,MAAM,IAAI,KAAK,IAAI;AACtC,QAAI,EAAE,UAAU,IAAI;AACnB,WAAK,IAAI,QAAQ,UAAU,GAAG,EAAE,OAAO;AACvC,WAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AACxC,WAAK,IAAI,SAAS,KAAK,YAAY,EAAE,aAAa,SAAS,MAAM,EAAE;AACnE,WAAK,IAAI,IAAI,KAAKA,OAAM,SAASA,OAAM,OAAO;AAAA,IAC/C;AAAA,EACD;AACD;AAEA,SAAS,oBAAoB,MAAM;AAClC,qBAAmB,MAAM,SAAS;AAElC,OAAK,oBAAoB,SAAUA,QAAO;AACzC,UAAM,IAAIA,OAAM,OAAO,QAAQ,YAAY,KAAK,UAAUA,OAAM,OAAO,WAAW,WAAWA,OAAM,OAAO;AAC1G,QAAI,CAAC,EAAG;AACR,SAAK,cAAc;AACnB,SAAK,IAAI,QAAQ,MAAM,WAAW,EAAE,EAAE,UAAU,GAAG,EAAE,OAAO;AAC5D,SAAK,oBAAoB,KAAK,IAAI,QAAQ,OAAO,KAAK,CAAC;AACvD,SAAK,IAAI,IAAI,UAAUA,OAAM,MAAM;AAAA,EACpC;AAEA,OAAK,sBAAsB,SAAU,KAAK;AACzC,UAAM,SAAS;AACf,UAAM,eAAe,OAAO,OAAO,KAAK,EAAE,MAAM,cAAc,QAAQ;AACtE,iBAAa,OAAO,MAAM,EAAE,KAAK,QAAQ;AAEzC,SAAK,IAAI,eAAe,aACtB,OAAO,OAAO,EACd,KAAK,QAAQ,MAAM,EACnB,KAAK,SAAS,KAAK,YAAY,IAAI,MAAM,UAAU,KAAK,CAAC,EACzD,MAAM,WAAW,SAAS,EAC1B,MAAM,cAAc,QAAQ,EAC5B,SAAS,SAAS,KAAK,YAAY,IAAI,IAAI,EAC3C,GAAG,SAAS,MAAM;AAClB,YAAM,QAAQ,KAAK,IAAI,aAAa,SAAS,OAAO;AACpD,WAAK,IAAI,aAAa,KAAK,QAAQ,MAAM,SAAS,CAAC;AACnD,WAAK,IAAI,WAAW,MAAM,WAAW,UAAU,KAAK,YAAY,IAAI,OAAO,SAAS,EAAE;AAAA,IACvF,CAAC;AAGF,SAAK,IAAI,aAAa,aACpB,OAAO,QAAQ,EACf,MAAM,WAAW,MAAM,EACvB,MAAM,eAAe,KAAK,EAC1B,KAAK,QAAQ,EACb,GAAG,SAAS,MAAM;AAClB,WAAK,kBAAkB;AACvB,WAAK,IAAI,IAAI,KAAK;AAAA,IACnB,CAAC;AAEF,SAAK,IAAI,SAAS,MAAM,WAAW,CAAC,EAAE,UAAU,GAAG,EAAE,OAAO;AAE5D,UAAM,cAAc,CAAC,EAAE,OAAO,YAAY,UAAU,KAAK,mBAAmB,CAAC;AAE7E,QAAI,KAAK,aAAa,eAAe;AACpC,kBAAY;AAAA,QACX,EAAE,OAAO,QAAQ,UAAU,KAAK,sBAAsB;AAAA;AAAA,MAEvD;AAAA,IACD;AACA,QAAI,KAAK,YAAY,IAAI,QAAQ,eAAe;AAC/C,kBAAY,KAAK,EAAE,OAAO,UAAU,UAAU,KAAK,gBAAgB,CAAC;AAAA,IACrE;AAEA,WACE,OAAO,KAAK,EACZ,MAAM,cAAc,QAAQ,EAC5B,UAAU,wBAAwB,EAClC,KAAK,WAAW,EAChB,MAAM,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,MAAM,WAAW,cAAc,EAC/B,KAAK,OAAK,EAAE,KAAK,EACjB,GAAG,SAAS,CAACA,QAAO,MAAM;AAC1B,MAAAA,OAAM,gBAAgB;AACtB,WAAK,IAAI,QAAQ,MAAM,WAAW,MAAM;AACxC,QAAE,SAAS,CAAC;AAAA,IACb,CAAC;AAAA,EACH;AAEA,OAAK,oBAAoB,MAAM;AAC9B,UAAM,QAAQ,KAAK,IAAI,aAAa,SAAS,OAAO;AACpD,UAAM,IAAI,KAAK;AACf,QAAI,EAAE,IAAI,SAAS,MAAO;AAC1B,MAAE,IAAI,OAAO;AACb,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK,KAAK;AAAA,MACd,OAAO;AAAA,QACN;AAAA,UACC,YAAY,CAAC,cAAc,EAAE,QAAQ;AAAA,UACrC,OAAO,EAAE;AAAA,QACV;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,OAAK,wBAAwB,YAAY;AACxC,SAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AAExC,UAAM,OAAO,KAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,WAAW,KAAK;AACnE,SAAK,OAAO,KAAK,EAAE,MAAM,SAAS,MAAM,EAAE,MAAM,eAAe,GAAG,EAAE,KAAK,eAAe;AAExF,UAAM,QAAQ,KAAK,OAAO,KAAK,EAAE,OAAO,OAAO;AAC/C,UAAM,IAAI,KAAK,SAAS,OAAO;AAC/B,UACE,OAAO,MAAM,EACb;AAAA,MACA,wBAAwB,EAAE,OAAO,YAAY,EAAE,KAAK,OAAO,CAAC,EAAE,YAAY,IAAI,EAAE,KAAK,MAAM,CAAC,CAAC;AAAA,IAC9F,EACC,KAAK,cAAc,mDAAmD;AACxE,UAAM,oBAAoB,MACxB,OAAO,OAAO,EACd,KAAK,QAAQ,QAAQ,EACrB,MAAM,eAAe,KAAK,EAC1B,MAAM,SAAS,MAAM,EACrB,SAAS,SAAS,KAAK,YAAY,IAAI,UAAU,iBAAiB,CAAC;AAErE,SACE,OAAO,KAAK,EACZ,OAAO,QAAQ,EACf,KAAK,QAAQ,EACb,GAAG,SAAS,MAAM;AAClB,YAAM,WAAW,KAAK,YAAY,IAAI,YAAY,CAAC;AACnD,eAAS,gBAAgB,kBAAkB,SAAS,OAAO;AAE3D,WAAK,IAAI,SAAS;AAAA,QACjB,MAAM;AAAA,QACN,IAAI,KAAK;AAAA,QACT,OAAO;AAAA,UACN;AAAA,YACC,YAAY,CAAC,cAAc,KAAK,YAAY,UAAU,UAAU;AAAA,YAChE,OAAO;AAAA,UACR;AAAA,QACD;AAAA,MACD,CAAC;AAAA,IACF,CAAC;AAAA,EACH;AAEA,OAAK,kBAAkB,MAAM;AAC5B,UAAM,aAAa,KAAK;AACxB,eAAW,OAAO,KAAK,YAAY,UAAU,CAAC;AAC9C,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,QAAQ;AAAA,QACP;AAAA,MACD;AAAA,IACD,CAAC;AACD,SAAK,IAAI,IAAI,KAAK;AAAA,EACnB;AACA,QAAM,uBAAuB,CAAC,UAAU,gBAAgB,QAAQ,YAAY,EAC1E,IAAI,OAAK,gBAAgB,CAAC,UAAU,EACpC,KAAK,GAAG;AACV,OAAK,sBAAsB,CAAAA,WAAS;AACnC,mBAAOA,OAAM,OAAO,QAAQ,oBAAoB,CAAC,EAC/C,UAAU,yBAAyB,EAEnC,MAAM,uBAAuB,MAAM,EACnC,MAAM,oBAAoB,MAAM,EAChC,MAAM,mBAAmB,MAAM,EAC/B,MAAM,eAAe,MAAM;AAE7B,mBAAO,MAAM,EAAE,GAAG,+BAA+B,KAAK,oBAAoB;AAAA,EAC3E;AAEA,OAAK,uBAAuB,CAAAA,WAAS;AACpC,mBAAOA,OAAM,OAAO,QAAQ,oBAAoB,CAAC,EAC/C,UAAU,yBAAyB,EACnC,MAAM,uBAAuB,MAAM,EACnC,MAAM,oBAAoB,MAAM,EAChC,MAAM,mBAAmB,MAAM,EAC/B,MAAM,eAAe,MAAM;AAE7B,mBAAO,MAAM,EAAE,GAAG,+BAA+B,IAAI;AAAA,EACtD;AACD;AAGA,SAAS,mBAAmB,MAAM,QAAQ;AACzC,OAAK,GAAG,MAAM,gBAAgB,IAAI,CAACA,QAAO,MAAM;AAC/C,SAAK,UAAU,EAAE,OAAAA,QAAO,EAAE;AAAA,EAC3B;AAEA,OAAK,GAAG,MAAM,gBAAgB,IAAI,CAACA,QAAO,MAAM;AAC/C,QAAI,UAAU,UAAUA,OAAM,OAAO,UAAU,MAAMA,OAAM,OAAO,SAAS,KAAK;AAC/E,UAAIA,OAAM,OAAO,SAAS,IAAI,QAAQ,eAAe;AAEpD;AAAA,MACD;AAEA,UAAI,KAAK,eAAe,KAAK,UAAU;AAEtC;AAAA,MACD;AACA,WAAK,IAAI,QAAQ,UAAU,GAAG,EAAE,OAAO;AACvC,WAAK,IAAI,SAAS,UAAU,GAAG,EAAE,OAAO;AACxC,YAAM,YAAYA,OAAM,OAAO,SAAS,IAAI;AAC5C,YAAM,WAAWA,OAAM,OAAO,SAAS,GAAG,KAAK;AAG/C,YAAM,WAAW,KAAK,IAAI,SACxB,OAAO,KAAK,EACZ,MAAM,cAAc,MAAM,EAC1B,MAAM,aAAa,OAAO,EAC1B,KAAK,YAAY,MAAM,SAAS,KAAK,QAAQ,SAAS,MAAM,QAAQ,MAAM;AAE5E,YAAM,MAAM,KAAK,IAAI,SAAS,OAAO,KAAK,EAAE,MAAM,aAAa,OAAO;AAEtE,YAAM,OAAOA,OAAM,OAAO;AAE1B,UAAI,KAAK,GAAG,KAAK,QAAQ,iBAAiB,KAAK,GAAG,GAAG,QAAQ,UAAU;AAMtE,cAAM,eAAe,OAAO,OAAO,KAAK,OAAO,cAAc,EAAE;AAAA,UAC9D,CAAC,KAAK,SAAS,MAAM,KAAK;AAAA,UAC1B;AAAA,QACD;AAGA,iBACE,OAAO,KAAK,EACZ,MAAM,cAAc,MAAM,EAC1B,MAAM,aAAa,OAAO,EAC1B,KAAK,WAAW,KAAK,QAAQ,SAAS,YAAY,OAAO,KAAK,QAAQ,MAAM,GAAG;AAEjF,mBAAW,CAAC,SAAS,MAAM,KAAK,OAAO,QAAQ,KAAK,OAAO,cAAc,GAAG;AAC3E,gBAAM,mBAAmB,KAAK,aAAa,KAAK,OAAK,EAAE,QAAQ,OAAO,EAAE,IAAI;AAC5E,gBAAM,QACL,mBAAmB,OAAO,mBACvB,OAAO,gBAAgB,mBAAmB,OAAO,oBACjD;AACJ,cACE,OAAO,KAAK,EACZ,MAAM,eAAe,MAAM,EAC3B;AAAA,YACA,UACG,MAAM,OAAO,0BAA0B,OAAO,YAAY,OAC1D,mBAAmB,OAAO,gBAC1B,KAAK,OAAS,KAAK,EAAE,KAAK,CAAC,MAC3B,uBAAuB,OAAO,YAAY,OAC1C,mBAAmB,OAAO,gBAC1B,KAAK,OAAS,KAAK,EAAE,KAAK,CAAC;AAAA,UAC/B;AACD,gBAAMK,KAAI,IAAI,OAAO,OAAO,EAAE,MAAM,eAAe,MAAM;AACzD,qBAAW,CAAC,WAAW,GAAG,KAAK,OAAO,QAAQ,OAAO,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;AAC1F,kBAAM,KAAKA,GAAE,OAAO,IAAI;AAExB,eAAG,OAAO,IAAI,EACZ,OAAO,KAAK,EACZ,MAAM,SAAS,MAAM,EACrB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,OAAO,SAAS,EAAE,KAAK;AACnD,eAAG,OAAO,IAAI,EAAE,KAAK,GAAG,OAAO,SAAS,EAAE,KAAK,KAAK,GAAG,EAAE;AAAA,UAC1D;AACA,cAAI,OAAO,kBAAkB;AAC5B,gBAAI,OAAO,KAAK,EAAE,MAAM,eAAe,MAAM,EAAE,MAAM,eAAe,MAAM,EAAE,KAAK,sBAAsB;AACvG,kBAAMA,KAAI,IAAI,OAAO,OAAO,EAAE,MAAM,eAAe,MAAM;AACzD,uBAAW,CAAC,WAAW,GAAG,KAAK,OAAO,QAAQ,OAAO,gBAAgB,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;AACnG,oBAAM,KAAKA,GAAE,OAAO,IAAI;AAExB,iBAAG,OAAO,IAAI,EACZ,OAAO,KAAK,EACZ,MAAM,SAAS,MAAM,EACrB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,OAAO,SAAS,EAAE,KAAK;AACnD,iBAAG,OAAO,IAAI,EAAE,KAAK,GAAG,OAAO,SAAS,EAAE,KAAK,KAAK,GAAG,EAAE;AAAA,YAC1D;AAAA,UACD;AAAA,QACD;AAAA,MACD,WAAW,CAAC,KAAK,OAAO,UAAU;AAEjC,cAAM,aAAa,KAAK,WAAW,KAAK,CAAAA,OAAKA,GAAE,QAAQ,KAAK,GAAG,KAAK,IAAI;AACxE,YAAI,cAAc,WAAW,OAAO;AAEnC,gBAAMA,KAAI,IAAI,OAAO,OAAO;AAC5B,qBAAW,aAAa,WAAW,OAAO;AACzC,kBAAM,KAAKA,GAAE,OAAO,IAAI;AAExB,eAAG,OAAO,IAAI,EACZ,OAAO,KAAK,EACZ,MAAM,SAAS,MAAM,EACrB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,UAAU,KAAK;AAC3C,eAAG,OAAO,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,KAAK,UAAU,KAAK,EAAE;AAAA,UAC5D;AAAA,QACD,OAAO;AAEN,qBAAW,CAAC,SAAS,MAAM,KAAK,OAAO,QAAQ,KAAK,OAAO,cAAc,GAAG;AAC3E,kBAAM,mBAAmB,KAAK,aAAa,KAAK,OAAK,EAAE,QAAQ,OAAO,EAAE;AACxE,gBACE,OAAO,KAAK,EACZ,MAAM,eAAe,MAAM,EAC3B;AAAA,cACA,YAAY,KACT,MAAM,OAAO,SAAS,OAAO,YAAY,OAAO,gBAAgB,KAChE,MAAM,OAAO,YAAY,OAAO,gBAAgB;AAAA,YACpD;AACD,kBAAMA,KAAI,IAAI,OAAO,OAAO,EAAE,MAAM,eAAe,MAAM;AACzD,uBAAW,CAAC,WAAW,GAAG,KAAK,OAAO,QAAQ,OAAO,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;AAC1F,oBAAM,aAAa,KAAK,GAAG,KAAK,SAAS,SAAS,GAAG;AACrD,kBAAI,CAAC,WAAY;AACjB,oBAAM,KAAKA,GAAE,OAAO,IAAI;AAExB,iBAAG,OAAO,IAAI,EACZ,OAAO,KAAK,EACZ,MAAM,SAAS,MAAM,EACrB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,UAAU;AACtC,iBAAG,OAAO,IAAI,EAAE,KAAK,GAAG,SAAS,KAAK,GAAG,EAAE;AAAA,YAC5C;AAAA,UACD;AAAA,QACD;AAAA,MACD,OAAO;AAEN,mBAAW,CAAC,SAAS,MAAM,KAAK,OAAO,QAAQ,KAAK,OAAO,cAAc,GAAG;AAC3E,gBAAM,mBAAmB,KAAK,aAAa,KAAK,OAAK,EAAE,QAAQ,OAAO,EAAE;AACxE,cACE,OAAO,KAAK,EACZ,MAAM,eAAe,MAAM,EAC3B;AAAA,YACA,YAAY,KACT,MAAM,OAAO,SAAS,OAAO,YAAY,OAAO,gBAAgB,KAChE,MAAM,OAAO,YAAY,OAAO,gBAAgB;AAAA,UACpD;AACD,gBAAM,SAAS,KAAK,aAAa,KAAK,OAAK,EAAE,QAAQ,OAAO;AAC5D,gBAAM,aAAa,OAAO,WAAW,KAAK,CAAAA,OAAKA,GAAE,QAAQ,KAAK,GAAG,KAAK,IAAI;AAE1E,cAAI,cAAc,WAAW,OAAO;AAEnC,kBAAMA,KAAI,IAAI,OAAO,OAAO,EAAE,MAAM,eAAe,MAAM;AACzD,uBAAW,aAAa,WAAW,OAAO;AACzC,oBAAM,KAAKA,GAAE,OAAO,IAAI;AAExB,iBAAG,OAAO,IAAI,EACZ,OAAO,KAAK,EACZ,MAAM,SAAS,MAAM,EACrB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,UAAU,KAAK;AAC3C,iBAAG,OAAO,IAAI,EAAE,KAAK,GAAG,UAAU,GAAG,KAAK,UAAU,KAAK,EAAE;AAAA,YAC5D;AAAA,UACD,OAAO;AAEN,kBAAMA,KAAI,IAAI,OAAO,OAAO,EAAE,MAAM,eAAe,MAAM;AACzD,uBAAW,CAAC,WAAW,GAAG,KAAK,OAAO,QAAQ,OAAO,OAAO,EAAE,KAAK,CAAC,GAAG,MAAM,EAAE,CAAC,IAAI,EAAE,CAAC,CAAC,GAAG;AAC1F,oBAAM,aAAa,KAAK,GAAG,KAAK,SAAS,SAAS,GAAG;AACrD,kBAAI,CAAC,WAAY;AACjB,oBAAM,KAAKA,GAAE,OAAO,IAAI;AAExB,iBAAG,OAAO,IAAI,EACZ,OAAO,KAAK,EACZ,MAAM,SAAS,MAAM,EACrB,MAAM,UAAU,MAAM,EACtB,MAAM,oBAAoB,UAAU;AACtC,iBAAG,OAAO,IAAI,EAAE,KAAK,GAAG,SAAS,KAAK,GAAG,EAAE;AAAA,YAC5C;AAAA,UACD;AAAA,QACD;AAAA,MACD;AACA,WAAK,IAAI,IAAI,KAAKL,OAAM,SAASA,OAAM,OAAO;AAAA,IAC/C;AAEA,QAAIA,OAAM,OAAO,UAAU,SAAS,YAAY,EAAG;AACnD,QAAIA,OAAM,OAAO,YAAY,QAAQ;AACpC,qBAAOA,OAAM,MAAM,EAAE,MAAM,QAAQ,MAAM;AAAA,IAC1C;AACA,QAAI,CAAC,KAAK,QAAS;AAEnB,SAAK,UAAUA,OAAM,OAAO;AAAA,EAC7B;AAEA,OAAK,GAAG,MAAM,eAAe,IAAI,CAAAA,WAAS;AACzC,mBAAOA,OAAM,MAAM,EAAE,MAAM,QAAQ,EAAE;AAAA,EAEtC;AAEA,OAAK,GAAG,MAAM,gBAAgB,IAAI,CAACA,QAAO,SAAS;AAClD,UAAM,IAAI,KAAK,OAAO,SAAS;AAC/B,QAAI,KAAK,WAAW,CAAC,KAAK,SAAS;AAClC,WAAK,IAAI,GAAG,MAAM,QAAQ,EACxB,UAAU,MAAM,EAChB,MAAM,uBAAuB,MAAM,EACnC,MAAM,oBAAoB,MAAM,EAChC,MAAM,mBAAmB,MAAM,EAC/B,MAAM,eAAe,MAAM;AAE7B,YAAM,QAAQ,KAAK,QAAQ,MAAM,OAAO,QAAQ,oBAAoB;AACpE,YAAM,IAAI,OAAO;AACjB,UAAI,CAAC,EAAG;AACR,UAAI,KAAK,QAAQ,iBAAiB,EAAE,MAAM,EAAE,KAAK,QAAQ,KAAK,OAAO,SAAS,aAAa,cAAe;AAE1G,YAAM,CAAC,GAAG,CAAC,IAAI,eAAO,KAAK,EAAE,KAAK,WAAW,EAAE,MAAM,YAAY,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,MAAM;AACzG,YAAM,OAAO,MAAM,UAAU,IAAI;AACjC,WAAK,IAAI,GAAG,MAAM,QAAQ,EAAE,KAAK,EAAE,QAAQ,IAAI;AAC/C,WAAK,UAAU;AAAA,QACd,MAAM;AAAA,QACN,OAAO,eAAO,IAAI,EAAE,MAAM,UAAU,MAAM,EAAE,MAAM,kBAAkB,MAAM;AAAA,QAC1E;AAAA,QACA;AAAA,QACA;AAAA,QACA,SAASA,OAAM;AAAA,QACf,SAASA,OAAM;AAAA,MAChB;AACA,WAAK,QAAQ,MAAM,UAAU,MAAM,EAAE,MAAM,QAAQ,KAAK;AAAA,IACzD;AACA,QAAI,CAAC,KAAK,QAAS;AACnB,UAAM,IAAI,KAAK;AACf,UAAM,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,IAAI,EAAE,UAAUA,OAAM;AACxD,UAAM,KAAK,CAAC,EAAE,YAAY,EAAE,IAAI,EAAE,UAAUA,OAAM,UAAU,EAAE;AAC9D,MAAE,MAAM,KAAK,aAAa,aAAa,EAAE,IAAI,EAAE,GAAG;AAAA,EACnD;AAEA,OAAK,GAAG,MAAM,cAAc,IAAI,CAAAA,WAAS;AACxC,WAAO,KAAK;AACZ,UAAM,IAAI,KAAK,OAAO,SAAS;AAC/B,QAAI,KAAK,SAAS;AACjB,WAAK,QAAQ,MAAM,OAAO;AAE1B,UAAI,KAAK,SAAS;AAEjB,cAAM,IAAI,KAAK;AACf,cAAM,IAAI,EAAE,KAAK;AACjB,cAAM,IAAI,KAAK;AAEf,YAAI,UAAU,WAAW;AACxB,gBAAM,MAAM,KAAK,OAAO,WAAW,OAAO,EAAE,UAAU,CAAC,EAAE,CAAC;AAC1D,eAAK,OAAO,WAAW,OAAO,EAAE,UAAU,GAAG,GAAG;AAAA,QACjD,OAAO;AAGN,qBAAW,OAAO,KAAK,OAAO,YAAY;AACzC,gBAAI,IAAI,KAAK,CAAC,GAAG,MAAM;AACtB,oBAAM,KAAK,KAAK,UAAU,KAAK,CAAAK,OAAKA,GAAE,GAAG,QAAQ,EAAE,GAAG;AACtD,oBAAM,KAAK,KAAK,UAAU,KAAK,CAAAA,OAAKA,GAAE,GAAG,QAAQ,EAAE,GAAG;AACtD,kBAAI,CAAC,MAAM,CAAC,GAAI,QAAO;AACvB,kBAAI,CAAC,GAAI,QAAO;AAChB,kBAAI,CAAC,GAAI,QAAO;AAChB,qBAAO,GAAG,aAAa,GAAG;AAAA,YAC3B,CAAC;AAAA,UACF;AAEA,gBAAM,KAAK,KAAK,OAAO,WAAW,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,OAAO,CAAC,EAAE,CAAC;AACtE,eAAK,OAAO,WAAW,EAAE,QAAQ,EAAE,IAAI,OAAO,EAAE,OAAO,GAAG,EAAE,EAAE;AAE9D,cAAI,CAAC,KAAK,OAAO,WAAW,EAAE,QAAQ,EAAE,IAAI,OAAQ,MAAK,OAAO,WAAW,OAAO,EAAE,UAAU,CAAC;AAAA,QAChG;AAEA,cAAM,UAAU,UAAU,SAAS,gBAAgB;AACnD,aAAK,IAAI,SAAS;AAAA,UACjB,MAAM;AAAA,UACN,IAAI,KAAK;AAAA,UACT,QAAQ;AAAA,YACP,YAAY,KAAK,OAAO;AAAA,YACxB,UAAU;AAAA,cACT,QAAQ;AAAA,gBACP,CAAC,OAAO,GAAG;AAAA,cACZ;AAAA,YACD;AAAA,UACD;AAAA,QACD,CAAC;AAAA,MACF;AAEA,WAAK,IAAI,GAAG,MAAM,QAAQ,EACxB,UAAU,MAAM,EAChB,MAAM,QAAQ,EAAE,EAChB,MAAM,uBAAuB,EAAE,EAC/B,MAAM,oBAAoB,EAAE,EAC5B,MAAM,mBAAmB,EAAE,EAC3B,MAAM,eAAe,EAAE;AAEzB,aAAO,KAAK;AAAA,IACb,WAAW,UAAU,QAAQ;AAC5B,WAAK,aAAaL,MAAK;AAAA,IACxB,OAAO;AACN,WAAK,kBAAkBA,MAAK;AAAA,IAC7B;AAAA,EACD;AACD;AAEA,SAAS,kBAAkB,MAAM;AAChC,OAAK,oBAAoB,WAAY;AACpC,QAAI,KAAK,UAAU;AAClB,WAAK,SAAS,OAAO;AACrB,aAAO,KAAK;AAEZ,qBAAO,MAAM,EAAE,GAAG,sBAAsB,IAAI;AAAA,IAC7C;AACA,WAAO,KAAK;AAAA,EACb;AAEA,OAAK,qBAAqB,SAAUA,QAAO;AAC1C,IAAAA,OAAM,gBAAgB;AACtB,SAAK,kBAAkB;AACvB,UAAM,YAAY,KAAK,aAAaA,MAAK;AACzC,QAAI,CAAC,UAAW;AAChB,SAAK,oBAAoB,EAAE,OAAAA,QAAO,UAAU;AAC5C,QAAI,KAAK,SAAS,OAAO,aAAa,OAAO;AAC5C,WAAK,kBAAkB;AAAA,IACxB,OAAO;AACN,WAAK,cAAc,gBAAQA,QAAO,KAAK,IAAI,UAAU,KAAK,CAAC;AAC3D,WAAK,IAAI,UACP,GAAG,aAAa,KAAK,oBAAoB,EACzC,GAAG,WAAW,KAAK,oBAAoB,EACvC,GAAG,eAAe,KAAK,iBAAiB;AAAA,IAC3C;AACA,SAAK,IAAI,MACP,UAAU,MAAM,EAChB,MAAM,uBAAuB,MAAM,EACnC,MAAM,oBAAoB,MAAM,EAChC,MAAM,mBAAmB,MAAM,EAC/B,MAAM,eAAe,MAAM;AAAA,EAC9B;AAEA,OAAK,eAAe,SAAUA,QAAO;AACpC,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,KAAK;AACf,QAAIA,OAAM,OAAO,WAAW,QAAQ;AACnC,UAAIA,OAAM,OAAO,UAAU,OAAQ,QAAOA,OAAM,OAAO;AACvD,UAAIA,OAAM,OAAO,UAAU,IAAI;AAC9B,cAAM,QAAQA,OAAM,UAAUA,OAAM,OAAO,sBAAsB,EAAE,IAAI,EAAE;AACzE,cAAM,IAAI,KAAK,MAAM,QAAQ,EAAE,EAAE;AACjC,eAAO,KAAK,YAAY,CAAC;AAAA,MAC1B;AAAA,IACD;AACA,QAAIA,OAAM,OAAO,WAAW,WAAW,EAAE,WAAW;AACnD,aAAO,KAAK,WAAWA,MAAK;AAAA,IAC7B;AAAA,EACD;AAEA,OAAK,oBAAoB,WAAY;AAEpC,mBAAO,MAAM,EACX,GAAG,4BAA4B,KAAK,aAAa,EACjD,GAAG,0BAA0B,KAAK,mBAAmB;AACvD,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,KAAK;AACf,UAAM,IAAI,KAAK;AACf,MAAE,QAAQ;AAEV,MAAE,QAAQ,CAAC,EAAE;AACb,MAAE,WAAW,EAAE,QAAQ,EAAE;AACzB,MAAE,QAAQ,EAAE,QAAQ,EAAE,cAAc,EAAE;AACtC,MAAE,WAAW,EAAE,QAAQ,EAAE;AACzB,UAAM,QAAQ,MAAM,EAAE;AACtB,MAAE,SAAS;AAAA,MACV,KAAK,SAAS,EAAE,cAAc,EAAE;AAAA,MAChC,KAAK;AAAA,IACN;AAAA,EACD;AAEA,OAAK,gBAAgB,SAAUA,QAAO;AACrC,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,KAAK;AACf,UAAM,IAAI,KAAK;AACf,UAAM,KAAKA,OAAM,UAAU,EAAE,MAAM;AACnC,QAAI,KAAK,IAAI,EAAE,IAAI,EAAG;AACtB,QAAI,KAAK,EAAE,YAAY,KAAK,EAAE,SAAU;AACxC,SAAK,kBAAkB,KAAK;AAC5B,SAAK,eAAe,IAAI,GAAG,GAAG,CAAC;AAAA,EAChC;AAEA,OAAK,iBAAiB,SAAU,IAAI,GAAG,GAAG,GAAG;AAC5C,SAAK,IAAI,UAAU,KAAK,aAAa,aAAa,EAAE,UAAU,EAAE,gBAAgB,EAAE,IAAI,EAAE,OAAO,GAAG;AAClG,SAAK,OAAO,IAAI,KAAK,mBAAmB,EAAE;AAC1C,SAAK,OAAO,IAAI,KAAK,mBAAmB,EAAE;AAC1C,UAAM,iBAAiB,EAAE,gBAAgB,EAAE,QAAQ,EAAE,gBAAgB;AACrE,SAAK,iBAAiB,aAAa,OAAO,EAAE,YAAY,eAAe,CAAC;AAAA,EACzE;AAEA,OAAK,sBAAsB,SAAUA,QAAO;AAC3C,mBAAO,MAAM,EAAE,GAAG,4BAA4B,IAAI,EAAE,GAAG,0BAA0B,IAAI;AACrF,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,KAAK;AACf,UAAM,KAAK,KAAK;AAChB,UAAM,MAAMA,OAAM,UAAU,GAAG,MAAM;AACrC,UAAM,KAAK,KAAK,IAAI,GAAG,OAAO,KAAK,IAAI,KAAK,GAAG,KAAK,CAAC;AACrD,QAAI,KAAK,IAAI,GAAG,IAAI,KAAK,KAAK,IAAI,EAAE,IAAI,GAAG;AAC1C,WAAK,eAAe,GAAG,GAAG,GAAG,EAAE;AAC/B;AAAA,IACD;AACA,SAAK,eAAe,IAAI,GAAG,GAAG,EAAE;AAChC,UAAM,IAAI,KAAK,qBAAqB,EAAE;AACtC,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,QAAQ;AAAA,QACP,UAAU;AAAA,UACT,QAAQ;AAAA,YACP,eAAe;AAAA,YACf,WAAW,EAAE;AAAA,YACb,cAAc,EAAE;AAAA,UACjB;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAAA,EACF;AAEA,OAAK,uBAAuB,SAAUA,QAAO;AAC5C,QAAI,CAAC,KAAK,kBAAmB;AAC7B,UAAM,IAAI,KAAK,OAAO,SAAS;AAC/B,UAAM,IAAI,KAAK,kBAAkB;AAEjC,QAAI,KAAK,qBAAqB,CAAC,KAAK,UAAU;AAC7C,WAAK,WAAW,KAAK,IAAI,UAAU,OAAO,MAAM,EAAE,KAAK,QAAQ,uBAAuB;AAEtF,qBAAO,MAAM,EAAE,GAAG,sBAAsB,KAAK,OAAO;AAEpD,WAAK,IAAI,MACP,UAAU,MAAM,EAChB,MAAM,uBAAuB,MAAM,EACnC,MAAM,oBAAoB,MAAM,EAChC,MAAM,mBAAmB,MAAM,EAC/B,MAAM,eAAe,MAAM;AAAA,IAC9B;AAEA,UAAM,KAAKA,OAAM,UAAU,EAAE;AAC7B,UAAM,KAAKA,OAAM,UAAU,EAAE;AAC7B,UAAM,IAAI,KAAK,IAAI,KAAK,YAAY,CAAC,IAAI,KAAK,YAAY,CAAC,IAAI,KAAK;AACpE,SAAK,YAAY,KAAK,IAAI,EAAE;AAC5B,SAAK,SACH,KAAK,aAAa,aAAa,CAAC,KAAK,EACrC,KAAK,SAAS,KAAK,IAAI,GAAG,KAAK,YAAY,CAAC,CAAC,EAC7C,KAAK,UAAU,KAAK,WAAW,KAAK;AAEtC,QAAI,CAAC,KAAK,kBAAkB,QAAS,MAAK,kBAAkB,UAAU,KAAK,aAAaA,MAAK;AAAA,EAC9F;AAEA,OAAK,uBAAuB,SAAUA,QAAO;AAC5C,IAAAA,OAAM,gBAAgB;AACtB,SAAK,IAAI,UAAU,GAAG,aAAa,IAAI,EAAE,GAAG,WAAW,IAAI;AAE3D,mBAAO,MAAM,EAAE,GAAG,sBAAsB,IAAI;AAE5C,SAAK,IAAI,MACP,UAAU,MAAM,EAChB,MAAM,uBAAuB,EAAE,EAC/B,MAAM,oBAAoB,EAAE,EAC5B,MAAM,mBAAmB,EAAE,EAC3B,MAAM,eAAe,EAAE;AAEzB,UAAM,IAAI,KAAK;AACf,UAAM,UAAU,KAAK,aAAaA,MAAK;AACvC,QAAI,CAAC,KAAK,CAAC,EAAE,WAAW;AACvB,WAAK,IAAI,MAAM,GAAG,YAAY,IAAI;AAClC,aAAO,KAAK;AACZ;AAAA,IACD,WAAW,CAAC,EAAE,WAAW,YAAY,EAAE,WAAW;AACjD,WAAK,IAAI,MAAM,GAAG,YAAY,IAAI;AAClC,WAAK,IAAI,IAAI,KAAK;AAClB,YAAM,OAAOA,OAAM,OAAO,WAAW,SAASA,OAAM,OAAO,WAAW,EAAE;AACxE,UAAI,MAAM;AACT,YAAI,KAAK,KAAK,WAAW;AACxB,eAAK,KAAK;AAAA,YACT,gBAAgB;AAAA,cACf,YAAY,KAAK;AAAA,cACjB,MAAM,KAAK;AAAA,cACX,OAAO,KAAK;AAAA,cACZ,GAAG,KAAK;AAAA,cACR,GAAG,KAAK;AAAA,cACR,cAAc,KAAK,aACjB,OAAO,CAAAO,OAAKA,OAAM,IAAI,EACtB,IAAI,CAAAA,QAAM;AAAA,gBACV,MAAMA,GAAE;AAAA,gBACR,OAAOA,GAAE;AAAA,gBACT,GAAGA,GAAE;AAAA,gBACL,GAAGA,GAAE;AAAA,cACN,EAAE;AAAA,YACJ,CAAC;AAAA,UACF;AAAA,QACD,OAAO;AACN,eAAK,WAAWP,QAAO,IAAI;AAAA,QAC5B;AAAA,MACD;AACA,aAAO,KAAK;AACZ,aAAO,KAAK;AACZ;AAAA,IACD;AAEA,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,EAAE;AACZ,MAAE,UAAU;AACZ,UAAM,KAAK,KAAK,KAAK;AAErB,UAAM,mBAAmB,EAAE,UAAU,aAAa,EAAE,QAAQ,aAAa,EAAE,YAAY,EAAE;AACzF,UAAM,iBAAiB,EAAE,UAAU,aAAa,EAAE,QAAQ,aAAa,EAAE,UAAU,EAAE;AACrF,UAAM,aAAa,oBAAI,IAAI;AAC3B,aAAS,IAAI,iBAAiB,YAAY,KAAK,eAAe,YAAY,KAAK;AAC9E,iBAAW,IAAI,KAAK,YAAY,CAAC,EAAE,GAAG;AAAA,IACvC;AACA,UAAM,UAAU,CAAC,GAAG,UAAU;AAE9B,UAAM,YAAY;AAAA,MACjB;AAAA,QACC,OAAO;AAAA,QACP,UAAU,KAAK;AAAA,MAChB;AAAA,MACA;AAAA,QACC,OAAO,QAAQ,QAAQ,MAAM,IAAI,EAAE,OAAO;AAAA,QAC1C,UAAU,MAAM;AACf,eAAK,kBAAkB;AACvB,eAAK,IAAI,IAAI,KAAK;AAClB,oBAAU,MAAM,SAASA,OAAM,SAASA,OAAM,OAAO;AAAA,QACtD;AAAA,MACD;AAAA,IACD;AAEA,QAAI,IAAI;AACP,gBAAU,KAAK;AAAA,QACd,OAAO,GAAG,cAAc,UAAU,EAAE,OAAO;AAAA,QAC3C,UAAU,YAAY;AACrB,aAAG,SAAS;AAAA,YACX,SAAS,MAAM,KAAK,IAAI,SAAS,gBAAgB,SAAS,GAAG,UAAU;AAAA,YACvE,QAAQ,YAAY,EAAE,OAAO;AAAA,UAC9B,CAAC;AACD,eAAK,SAAS,OAAO;AACrB,iBAAO,KAAK;AACZ,iBAAO,KAAK;AAAA,QACb;AAAA,MACD,CAAC;AAAA,IACF,OAAO;AACN,UAAI,KAAK,MAAM,OAAO,KAAK,MAAM,IAAI,gBAAgB,UAAU;AAC9D,mBAAWM,MAAK,SAAS;AACxB,cAAI,CAACA,GAAE,SAAU,CAAAA,GAAE,WAAWA,GAAE;AAAA,QACjC;AACA,kBAAU,KAAK;AAAA,UACd,OAAO;AAAA,UACP,UAAU,YAAY;AACrB,iBAAK,kBAAkB;AACvB,kBAAM,QAAQ;AAAA,cACb,MAAM;AAAA,cACN,OAAO;AAAA,YACR;AACA,iBAAK,SAAS,KAAK;AAAA,UACpB;AAAA,QACD,CAAC;AAAA,MACF;AAAA,IACD;AAEA,SAAK,IAAI,gBAAgB,MAAM;AAC/B,SAAK,IAAI,UAAU,MAAM;AACzB,SAAK,SAAS;AACd,SAAK,IAAI,IAAI,KAAK;AAClB,SAAK,IAAI,UAAU,MAAM;AACzB,SAAK,IAAI,UAAU,EACjB,UAAU,KAAK,EACf,KAAK,SAAS,EACd,MAAM,EACN,OAAO,KAAK,EACZ,KAAK,SAAS,gBAAgB,EAC9B,MAAM,iBAAiB,KAAK,EAC5B,KAAK,OAAK,EAAE,KAAK,EACjB,GAAG,SAAS,CAAAN,WAAS;AACrB,WAAK,IAAI,UAAU,EAAE,UAAU,GAAG,EAAE,OAAO;AAC3C,MAAAA,OAAM,OAAO,SAAS,SAAS;AAAA,IAChC,CAAC;AACF,SAAK,IAAI,UAAU,KAAKA,OAAM,SAASA,OAAM,OAAO;AAAA,EACrD;AAGA,QAAM,YAAY,SAAUQ,OAAM,SAAS,GAAG,GAAG;AAChD,WAAOA,MAAK;AACZ,UAAM,YAAYA,MAAK,MAAM,aAAa;AAC1C,UAAM,OAAO,WAAW,SACrB,QAAQ,IAAI,OAAK,CAAC,EAAE,OAAO,EAAE,MAAM,OAAO,KAAK,GAAG,UAAU,OAAO,IAAI,GAAG,EAAE,MAAM,GAAG,CAAC,CAAC,IACvF,QAAQ,IAAI,OAAK,CAAC,EAAE,OAAO,EAAE,MAAM,MAAM,CAAC,CAAC;AAE9C,UAAM,UAAU,CAAC,EAAE,OAAOA,MAAK,SAAS,OAAO,cAAc,QAAQ,CAAC;AAEtE,QAAI,CAACA,MAAK,IAAI,eAAgB,CAAAA,MAAK,IAAI,iBAAiB,IAAI,KAAK,EAAE,SAAS,MAAM,CAAC;AAAA,QAC9E,CAAAA,MAAK,IAAI,eAAe,MAAM;AACnC,UAAM,MAAMA,MAAK,IAAI,eAAe,EAAE,OAAO,KAAK;AAElD,gBAAY;AAAA,MACX;AAAA,MACA;AAAA,MACA;AAAA,MACA,WAAW;AAAA,MACX,UAAU,QAAQ,SAAS,OAAO;AAAA,MAClC,WAAW;AAAA,MACX,QAAQ;AAAA,IACT,CAAC;AACD,IAAAA,MAAK,IAAI,eAAe,KAAK,GAAG,CAAC;AAAA,EAClC;AAGA,OAAK,WAAW,eAAgB,OAAO;AACtC,UAAM,KAAK,eAAe,CAAC,KAAK,CAAC;AACjC,UAAM,SAAS,UAAU,EAAE;AAC3B,gBAAY,KAAK,KAAK,QAAQ,KAAK,MAAM,MAAM;AAAA,EAChD;AACA,OAAK,kBAAkB,WAAY;AAClC,QAAI,KAAK,UAAU;AAClB,WAAK,SAAS,OAAO;AACrB,aAAO,KAAK;AAAA,IACb;AACA,UAAM,IAAI,KAAK;AACf,WAAO,KAAK;AACZ,UAAM,IAAI,KAAK,SAAS;AACxB,UAAM,IAAI,KAAK;AACf,UAAM,QAAQ,EAAE,UAAU,aAAa,EAAE,QAAQ,aAAa,EAAE,YAAY,EAAE;AAC9E,UAAM,YAAY,KAAK,MAAM,MAAM,aAAa,KAAK,IAAI,EAAE,QAAQ,aAAa,EAAE,UAAU,UAAU,IAAI,CAAC;AAC3G,UAAM,aAAa,KAAK,YAAY,SAAS,KAAK,KAAK,WAAW,KAAK;AACvE,UAAM,OAAO,KAAK,iBAAiB,QAAQ,KAAK,SAAS,OAAO;AAChE,UAAM,eAAe,EAAE,UAAU;AACjC,UAAM,eAAe,EAAE,UAAU;AAGjC,UAAM,qBAAuB,EAAE,YAAY,EAAE,QAAS,KAAK,YAAa;AACxE,UAAM,YAAY,KAAK,IAAI,cAAc,KAAK,IAAI,oBAAoB,YAAY,CAAC;AACnF,UAAM,aAAa,WAAW,aAAa,EAAE,MAAM,WAAW,WAAW,KAAK,EAAE,YAAY,EAAE;AAE9F,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,QAAQ;AAAA,QACP,UAAU;AAAA,UACT,QAAQ;AAAA,YACP;AAAA;AAAA;AAAA,YAGA,eAAe,YAAY,KAAK,EAAE,SAAS,EAAE,cAAc,MAAM,aAAa,EAAE;AAAA,YAChF;AAAA,YACA,cAAc,WAAW;AAAA,UAC1B;AAAA,QACD;AAAA,MACD;AAAA,IACD,CAAC;AAED,SAAK,kBAAkB;AAAA,EACxB;AACD;AAEA,SAAS,kBAAkB,MAAM;AAChC,OAAK,uBAAuB,CAAAR,WAAS;AACpC,UAAM,aAAaA,OAAM,OAAO;AAChC,QACC,CAAC,cACD,WAAW,MAAM,oBACjB,WAAW,MAAM,yBACjB,WAAW,MAAM,qBAChB;AAED;AAAA,IACD;AACA,QAAI,CAAC,WAAW,gBAAgB,CAAC,WAAW,IAAI;AAE/C;AAAA,IACD;AACA,UAAM,kBACL,KAAK,OAAO,gBAAgB,IAAI;AAAA,MAC/B,OAAK,EAAE,IAAI,SAAS,WAAW,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,WAAW;AAAA,IAC5E,KAAK;AACN,QAAI,WAAW,gBAAgB,iBAAiB;AAE/C;AAAA,IACD;AACA,UAAM,OAAO,KAAK,UAAU,KAAK,OAAK,EAAE,GAAG,OAAO,WAAW,GAAG;AAChE,QAAI,MAAM,IAAI,GAAG,QAAQ,yBAAyB,MAAM,IAAI,GAAG,QAAQ,mBAAmB;AAEzF;AAAA,IACD;AACA,QAAIA,OAAM,OAAO,YAAY,OAAQ,gBAAOA,OAAM,MAAM,EAAE,MAAM,UAAU,SAAS;AAAA,QAC9E,gBAAOA,OAAM,MAAM,EAAE,MAAM,QAAQ,MAAM,EAAE,MAAM,UAAU,SAAS;AAAA,EAC1E;AAEA,OAAK,sBAAsB,CAAAA,WAAS;AAInC,mBAAOA,OAAM,MAAM,EAAE,MAAM,QAAQ,EAAE;AAAA,EACtC;AAEA,OAAK,qBAAqB,CAAAA,WAAS;AAClC,UAAM,aAAaA,OAAM,OAAO;AAChC,QACC,CAAC,cACD,WAAW,MAAM,oBACjB,WAAW,MAAM,yBACjB,WAAW,MAAM,qBAChB;AAED;AAAA,IACD;AACA,QAAIA,OAAM,OAAO,UAAU,QAAQ,SAAS,kBAAkB,KAAK,WAAW,MAAM,OAAO;AAG1F;AAAA,IACD;AACA,UAAM,WAAW,KAAK,MAAM,aAAa,mBAAmB,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG;AAC7F,UAAM,UAAU,KAAK,IAAI,WAAW,MAAM;AAG1C,QAAI,CAAC,WAAW,cAAc;AAC7B,UAAI,CAAC,WAAW,IAAI;AAGnB;AAAA,MACD;AAGA,YAAM,uBAAuB,KAAK,OAAO,gBAAgB,IAAI;AAAA,QAC5D,OACC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MACxE,CAAC,YAAY,EAAE,UAAU,WAAW;AAAA,MACvC;AAGA,YAAMS,qBAAoB,KAAK,OAAO,kBAAkB,IAAI;AAAA,QAC3D,OACC,EAAE,iBAAiB,WAAW,QAC9B,EAAE,IAAI,OAAO,KAAK,OAAK,WAAW,GAAG,SAAS,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,WAAW,OAAO;AAAA,MACrG;AACA,YAAMC,OAAM,QAAQ,EAAE,OAAO,KAAK;AAGlC,UAAI,wBAAwB,IAAI;AAE/B,YAAI,WAAW,GAAG,SAAS,UAAU,GAAG;AACvC,UAAAA,KACE,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,gCAAgC,EACrC,GAAG,SAAS,MAAM;AAClB,0BAAc,SAAS,YAAY,IAAI;AAAA,UACxC,CAAC;AAEF,UAAAA,KACE,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,sCAAsC,EAC3C,GAAG,SAAS,MAAM;AAClB,uBAAW,SAAS,YAAY,IAAI;AAAA,UACrC,CAAC;AAAA,QACH;AACA,cAAM,qBACL,KAAK,WAAW;AAAA,UACf,OACC,EAAE,MAAM,CAAC,EAAE,eAAe,EAAE,QAAQ,WAAW,QAAQ,EAAE,MAAM,KAAK,OAAK,CAAC,EAAE,aAAa,CAAC,EAAE,UAAU;AAAA,QACxG,EAAE,UAAU;AACb,QAAAA,KACE,OAAO,KAAK,EACZ;AAAA,UACA;AAAA,UACA,qBAAqB,oDAAoD;AAAA,QAC1E,EACC,KAAK,eAAe,WAAW,IAAI,EAAE,EACrC,MAAM,WAAW,qBAAqB,QAAQ,GAAG,EACjD,GAAG,SAAS,MAAM;AAClB,cAAI,CAAC,mBAAoB,UAAS,SAAS,YAAY,IAAI;AAAA,QAC5D,CAAC;AAAA,MACH;AAEA,UAAI,yBAAyB,MAAMD,uBAAsB,IAAI;AAC5D,QAAAC,KACE,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,YAAY,WAAW,IAAI,EAAE,EAClC,GAAG,SAAS,MAAM;AAClB,kBAAQ,SAAS,YAAY,IAAI;AAAA,QAClC,CAAC;AAAA,MACH;AA8CA,cAAQ,UAAUV,OAAM,MAAM;AAC9B;AAAA,IACD;AAGA,UAAM,kBACL,KAAK,OAAO,gBAAgB,IAAI;AAAA,MAC/B,OAAK,EAAE,IAAI,SAAS,WAAW,EAAE,MAAM,CAAC,EAAE,UAAU,EAAE,UAAU,WAAW;AAAA,IAC5E,KAAK;AACN,QAAI,WAAW,gBAAgB,iBAAiB;AAE/C;AAAA,IACD;AAEA,UAAM,OAAO,KAAK,MAAM,KAAK,OAAK,EAAE,GAAG,OAAO,WAAW,GAAG;AAC5D,QAAI,MAAM,IAAI,GAAG,QAAQ,yBAAyB,MAAM,IAAI,GAAG,QAAQ,mBAAmB;AAEzF;AAAA,IACD;AAGA,QAAI;AACJ,QAAI,WAAW,IAAI;AAElB,0BAAoB,KAAK,OAAO,kBAAkB,IAAI;AAAA,QACrD,OACC,EAAE,iBAAiB,WAAW,UAC9B,EAAE,IAAI,OAAO;AAAA,UACZ,OACC,EAAE,MAAM,WAAW,OAAO,CAAC,YAAY,EAAE,UAAU,WAAW,WAAW,EAAE,UAAU,CAAC,KAAK,WAAW;AAAA,QACxG;AAAA,MACF;AAAA,IACD,OAAO;AAEN,YAAM,aAAa,KAAK,UAAU,KAAK,QAAM,GAAG,GAAG,OAAO,WAAW,GAAG,GAAG,IAAI;AAC/E,UAAI,CAAC,YAAY;AAEhB;AAAA,MACD;AACA,UAAI,WAAW,QAAQ,iBAAiB,WAAW,QAAQ,YAAY;AACtE,4BAAoB,KAAK,OAAO,kBAAkB,IAAI;AAAA,UACrD,OAAK,EAAE,iBAAiB,WAAW,UAAU,EAAE,IAAI,OAAO,KAAK,OAAK,EAAE,OAAO,WAAW,GAAG;AAAA,QAC5F;AAAA,MACD,WAAW,cAAc,UAAU,GAAG;AACrC,4BAAoB,KAAK,OAAO,kBAAkB,IAAI;AAAA,UACrD,OAAK,EAAE,iBAAiB,WAAW,UAAU,EAAE,IAAI,OAAO,KAAK,OAAK,EAAE,QAAQ,WAAW,GAAG;AAAA,QAC7F;AAAA,MACD;AAAA,IACD;AACA,UAAM,gBAAgB,KAAK,SAAS,OAAO;AAE3C,UAAM,MAAM,QAAQ,EAAE,OAAO,KAAK;AAIlC,UAAM,iBAAiB,oBAAkB;AACxC,YAAMW,QAAO,KAAK,UAAU,KAAK,OAAK,EAAE,GAAG,OAAO,eAAe,GAAG,GAAG,IAAI;AAE3E,UACCA,OAAM,SAAS,qBACd,CAAC,eAAe,MAAM,KAAK,SAAS,iBAAiB,sBAAsB,KAC3E;AAMD,YACE,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C;AAAA,UACA,eAAe,KACZ,qBAAqB,KACpB,QAAQ,cAAc,OAAO,SAAS,OAAO,eAAe,GAAG,EAAE,KAAK,KACtE,QAAQ,cAAc,OAAO,SAAS,OAAO,eAAe,GAAG,EAAE,KAAK,KACvE,qBAAqB,KACrB,SACA;AAAA,QACJ,EACC,GAAG,SAAS,MAAM;AAClB,kBAAQ,KAAK;AACb,cAAI,qBAAqB,IAAI;AAE5B,gBAAI,eAAe,IAAI;AAGtB,oBAAM,YAAY;AAAA,gBACjB,eAAe,eAAe;AAAA,gBAC9B,MAAM;AAAA,gBACN,KAAK;AAAA,kBACJ,OAAO;AAAA,kBACP,kBAAkB;AAAA;AAAA,kBAClB,MAAM,EAAE,MAAM,cAAc;AAAA,kBAC5B,QAAQ;AAAA,oBACP;AAAA,sBACC,IAAI,eAAe;AAAA,sBACnB,QAAQ,eAAe;AAAA,sBACvB,WAAW,CAAC,eAAe,GAAG;AAAA,oBAC/B;AAAA,kBACD;AAAA,gBACD;AAAA,cACD;AACA,mBAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,YACjD,OAAO;AAEN,oBAAMA,QAAO,KAAK,UAAU,KAAK,OAAK,EAAE,GAAG,OAAO,eAAe,GAAG,EAAE,GAAG;AACzE,kBAAIA,MAAK,QAAQ,iBAAiBA,MAAK,QAAQ,YAAY;AAC1D,gBAAAA,MAAK,MAAM,eAAe;AAC1B,sBAAM,iBAAiB,KAAK,OAAO,kBAAkB,IAAI;AAAA,kBACxD,OAAK,EAAE,iBAAiB,eAAe;AAAA,gBACxC;AACA,oBAAI,kBAAkB,IAAI;AACzB,wBAAM,YAAY;AAAA,oBACjB,eAAe,eAAe;AAAA,oBAC9B,MAAM;AAAA,oBACN,KAAK;AAAA,sBACJ,OAAO;AAAA,sBACP,MAAAA;AAAA,sBACA,QAAQ,CAAC,EAAE,KAAK,eAAe,IAAI,CAAC;AAAA,oBACrC;AAAA,kBACD;AACA,uBAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,gBACjD,OAAO;AAEN,uBAAK,OAAO,kBAAkB,IAAI,cAAc,EAAE,IAAI,OAAO,KAAK,EAAE,KAAK,eAAe,IAAI,CAAC;AAAA,gBAC9F;AAAA,cACD,WAAW,cAAcA,KAAI,GAAG;AAC/B,gBAAAA,MAAK,MAAM,eAAe;AAC1B,sBAAM,YAAY;AAAA,kBACjB,eAAe,eAAe;AAAA,kBAC9B,MAAM;AAAA,kBACN,KAAK;AAAA,oBACJ,OAAO;AAAA,oBACP,MAAAA;AAAA,oBACA,QAAQ,CAAC,KAAK,KAAK,KAAK,SAAS,eAAe,GAAG,EAAE,KAAK,KAAK,OAAK,eAAe,OAAO,EAAE,IAAI,CAAC;AAAA,kBAClG;AAAA,gBACD;AACA,qBAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,cACjD;AAAA,YACD;AAAA,UACD,OAAO;AAIN,gBAAI,eAAe,GAAI,MAAK,OAAO,kBAAkB,IAAI,OAAO,mBAAmB,CAAC;AAAA,iBAC/E;AACJ,oBAAMA,QAAO,KAAK,UAAU,KAAK,OAAK,EAAE,GAAG,OAAO,eAAe,GAAG,EAAE,GAAG;AACzE,kBAAIA,MAAK,QAAQ,iBAAiBA,MAAK,QAAQ,YAAY;AAC1D,sBAAM,iBAAiB,KAAK,OAAO,kBAAkB,IAAI;AAAA,kBACxD,OAAK,EAAE,iBAAiB,eAAe;AAAA,gBACxC;AACA,sBAAM,cAAc,KAAK,OAAO,kBAAkB,IAAI,cAAc,EAAE,IAAI,OAAO;AAAA,kBAChF,OAAK,EAAE,OAAO,eAAe;AAAA,gBAC9B;AACA,qBAAK,OAAO,kBAAkB,IAAI,cAAc,EAAE,IAAI,OAAO,OAAO,aAAa,CAAC;AAAA,cACnF,MAAO,MAAK,OAAO,kBAAkB,IAAI,OAAO,mBAAmB,CAAC;AAAA,YACrE;AAAA,UACD;AACA,cAAI,KAAK,MAAM,OAAO,SAAS,OAAO,yBAAyB,KAAK,cAAc,eAAe;AAChG,gBAAI,eAAe,MAAM,YAAY;AACpC,mBAAK,OAAO,SAAS,OAAO,qBAAqB;AACjD,oBAAM,KAAK,KAAK,SAAS,OAAO;AAChC,kBACC,KAAK,WAAW,KAAK,OAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,UAC1D,KAAK,OAAO,kBAAkB,IAAI,OAAO,OAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,QAC/E;AAED,qBAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,cACvD,MAAO,MAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,YAC9D;AACA,gBAAI,eAAe,MAAM,OAAO;AAC/B,mBAAK,OAAO,SAAS,OAAO,gBAAgB;AAC5C,kBACC,KAAK,WAAW,KAAK,OAAK,EAAE,QAAQ,KAAK,GAAG,OAAO,UACnD,KAAK,OAAO,kBAAkB,IAAI,OAAO,OAAK,EAAE,iBAAiB,KAAK,GAAG,QACxE;AAED,qBAAK,OAAO,SAAS,OAAO,qBAAqB;AACjD,oBAAI,KAAK,OAAO,SAAS,OAAO,gBAAgB;AAC/C,uBAAK,OAAO,SAAS,OAAO,eAAe;AAAA,cAC7C,OAAO;AACN,qBAAK,OAAO,SAAS,OAAO,qBAAqB;AACjD,oBAAI,KAAK,OAAO,SAAS,OAAO,iBAAiB;AAChD,uBAAK,OAAO,SAAS,OAAO,eAAe;AAAA,cAC7C;AAAA,YACD;AAAA,UACD;AAEA,eAAK,IAAI,SAAS;AAAA,YACjB,MAAM;AAAA,YACN,IAAI,KAAK;AAAA,YACT,QAAQ,KAAK;AAAA,UACd,CAAC;AAAA,QACF,CAAC;AAAA,MACH;AAEA,UAAI,eAAe,cAAc;AAEhC,YAAI,eAAe,MAAM,qBAAqB,MAAMA,OAAM,SAAS,kBAAkB;AAEpF,cACE,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,eAAe,OAAO,eAAe,GAAG,GAAG,KAAK,EAAE,EACvD,GAAG,SAAS,MAAM;AAClB,oBAAQ,KAAK;AAKb,kBAAM,YAAY;AAAA,cACjB,eAAe,eAAe;AAAA,cAC9B,MAAM;AAAA,cACN,KAAK;AAAA,gBACJ,OAAO;AAAA,gBACP,kBAAkB;AAAA;AAAA,gBAClB,MAAM,EAAE,MAAM,cAAc;AAAA,gBAC5B,QAAQ,CAAC,EAAE,IAAI,eAAe,IAAI,QAAQ,eAAe,QAAQ,WAAW,CAAC,eAAe,GAAG,EAAE,CAAC;AAAA,cACnG;AAAA,YACD;AACA,iBAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAEhD,gBAAI,KAAK,MAAM,OAAO,SAAS,OAAO,yBAAyB,KAAK,cAAc,eAAe;AAChG,kBAAI,eAAe,MAAM,YAAY;AACpC,qBAAK,OAAO,SAAS,OAAO,qBAAqB;AACjD,sBAAM,KAAK,KAAK,SAAS,OAAO;AAChC,oBACC,KAAK,WAAW,KAAK,OAAK,EAAE,QAAQ,GAAG,SAAS,GAAG,OAAO,UAC1D,KAAK,OAAO,kBAAkB,IAAI,OAAO,OAAK,EAAE,iBAAiB,GAAG,SAAS,GAAG,QAC/E;AAED,uBAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,gBACvD,MAAO,MAAK,OAAO,SAAS,OAAO,0BAA0B;AAAA,cAC9D;AACA,kBAAI,eAAe,MAAM,OAAO;AAC/B,qBAAK,OAAO,SAAS,OAAO,gBAAgB;AAC5C,oBACC,KAAK,WAAW,KAAK,OAAK,EAAE,QAAQ,KAAK,GAAG,OAAO,UACnD,KAAK,OAAO,kBAAkB,IAAI,OAAO,OAAK,EAAE,iBAAiB,KAAK,GAAG,QACxE;AAED,uBAAK,OAAO,SAAS,OAAO,qBAAqB;AACjD,sBAAI,KAAK,OAAO,SAAS,OAAO,gBAAgB;AAC/C,yBAAK,OAAO,SAAS,OAAO,eAAe;AAAA,gBAC7C,MAAO,MAAK,OAAO,SAAS,OAAO,qBAAqB;AAAA,cACzD;AAAA,YACD;AACA,iBAAK,IAAI,SAAS;AAAA,cACjB,MAAM;AAAA,cACN,IAAI,KAAK;AAAA,cACT,QAAQ,KAAK;AAAA,YACd,CAAC;AAAA,UACF,CAAC;AAAA,QACH;AAGA,YAAI,CAAC,eAAe,MAAMA,OAAM,SAAS,kBAAkB;AAC1D,cACE,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,WAAW,EAChB,GAAG,SAAS,MAAM;AAClB,oBAAQ,KAAK;AACb,kBAAMA,QAAO,KAAK,UAAU,KAAK,OAAK,EAAE,GAAG,OAAO,eAAe,GAAG,GAAG,IAAI;AAC3E,kBAAM,YACL,KAAK,WAAW,KAAK,QAAM,GAAG,QAAQ,eAAe,MAAM,KAC3D,KAAK,WAAW,KAAK,QAAM,GAAG,OAAO,eAAe,GAAG;AAGxD,iBAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,cACrE,OAAK,EAAE,kBAAkB,eAAe;AAAA,YACzC;AA0BA,gBAAIA,MAAK,QAAQ,iBAAiBA,MAAK,QAAQ,YAAY;AAC1D,cAAAA,MAAK,MAAM,eAAe;AAC1B,yBAAW,KAAK,UAAU,OAAO;AAChC,oBAAI,EAAE,OAAO,eAAe,IAAK;AACjC,sBAAM,iBAAiB,KAAK,OAAO,kBAAkB,IAAI;AAAA,kBACxD,CAAAC,OAAKA,GAAE,iBAAiB,eAAe;AAAA,gBACxC;AACA,oBAAI,kBAAkB,IAAI;AACzB,wBAAM,YAAY;AAAA,oBACjB,eAAe,eAAe;AAAA,oBAC9B,MAAM;AAAA,oBACN,KAAK;AAAA,sBACJ,OAAO;AAAA,sBACP,MAAAD;AAAA,sBACA,QAAQ,CAAC,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,oBACxB;AAAA,kBACD;AACA,uBAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,gBACjD,OAAO;AACN,uBAAK,OAAO,kBAAkB,IAAI,cAAc,EAAE,IAAI,OAAO,KAAK,EAAE,KAAK,EAAE,IAAI,CAAC;AAAA,gBACjF;AAAA,cACD;AAAA,YACD,WAAW,cAAcA,KAAI,GAAG;AAC/B,cAAAA,MAAK,MAAM,eAAe;AAC1B,yBAAW,KAAK,UAAU,OAAO;AAChC,oBAAI,EAAE,OAAO,eAAe,IAAK;AACjC,sBAAM,YAAY;AAAA,kBACjB,eAAe,eAAe;AAAA,kBAC9B,MAAM;AAAA,kBACN,KAAK;AAAA,oBACJ,OAAO;AAAA,oBACP,MAAAA;AAAA,oBACA,QAAQ,CAAC,KAAK,KAAK,KAAK,SAAS,eAAe,GAAG,EAAE,KAAK,KAAK,OAAK,EAAE,OAAO,EAAE,IAAI,CAAC;AAAA,kBACrF;AAAA,gBACD;AACA,oBAAI,CAAC,KAAK,OAAO,kBAAkB,IAAI,OAAQ,MAAK,OAAO,kBAAkB,MAAM,CAAC,SAAS;AAAA,oBACxF,MAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,cACtD;AAAA,YACD;AACA,iBAAK,IAAI,SAAS;AAAA,cACjB,MAAM;AAAA,cACN,IAAI,KAAK;AAAA,cACT,QAAQ,KAAK;AAAA,YACd,CAAC;AAAA,UACF,CAAC;AAAA,QACH;AAGA,YAAI,CAAC,eAAe,MAAMA,OAAM,SAAS,kBAAkB;AAC1D,cACE,OAAO,KAAK,EACZ,KAAK,SAAS,iCAAiC,EAC/C,KAAK,UAAU,EACf,GAAG,SAAS,MAAM;AAClB,oBAAQ,KAAK;AACb,iBAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,cACrE,OAAK,EAAE,kBAAkB,eAAe;AAAA,YACzC;AAEA,iBAAK,IAAI,SAAS;AAAA,cACjB,MAAM;AAAA,cACN,IAAI,KAAK;AAAA,cACT,QAAQ,KAAK;AAAA,YACd,CAAC;AAAA,UACF,CAAC;AAAA,QACH;AAGA,YAAI,CAAC,WAAW,QAAQ;AACvB,cAAI,OAAO,MAAM,EAAE,KAAK,OAAO,EAAE,MAAM,WAAW,UAAU,EAAE,MAAM,UAAU,KAAK;AACnF,eAAK,IAAI,mBAAmB,IAC1B,OAAO,OAAO,EACd,KAAK,QAAQ,OAAO,EACpB,KAAK,cAAc,sBAAsB,EACzC,KAAK,SAAS,WAAW,OAAO,WAAW,KAAK,IAAI,QAAQ,WAAW,KAAK,IAAI,WAAW,KAAK,EAChG,GAAG,UAAU,YAAY;AACzB,oBAAQ,KAAK;AACb,kBAAM,QAAQ,KAAK,IAAI,iBAAiB,KAAK,EAAE;AAC/C,gBAAI,WAAW,IAAI;AAClB,kBAAI,CAAC,OAAO,WAAW,GAAG,EAAE,UAAW,QAAO,WAAW,GAAG,EAAE,YAAY,OAAO,WAAW,GAAG,EAAE;AACjG,qBAAO,WAAW,GAAG,EAAE,QAAQ;AAC/B,mBAAK,KAAK;AACV;AAAA,YACD;AAEA,kBAAM,qBAAqB,KAAK,OAAO,SAAS,OAAO;AACvD,gBAAI,CAAC,mBAAmB,WAAW,GAAG,EAAG,oBAAmB,WAAW,GAAG,IAAI,CAAC;AAC/E,kBAAM,aAAa,mBAAmB,WAAW,GAAG;AAEpD,gBAAI,CAAC,WAAW,WAAW,GAAG,EAAG,YAAW,WAAW,GAAG,IAAI,CAAC;AAC/D,uBAAW,WAAW,GAAG,EAAE,QAAQ;AAEnC,iBAAK,IAAI,SAAS;AAAA,cACjB,MAAM;AAAA,cACN,IAAI,KAAK,KAAK;AAAA,cACd,QAAQ,EAAE,UAAU,EAAE,QAAQ,EAAE,mBAAmB,EAAE,EAAE;AAAA,YACxD,CAAC;AAAA,UACF,CAAC;AACF,cAAI,WAAW,MAAM,OAAO,WAAW,GAAG,EAAE,WAAW;AACtD,kBAAM,WAAW,IAAI,OAAO,KAAK,EAAE,MAAM,WAAW,cAAc;AAClE,kBAAM,UAAU,MAAM;AACrB,sBAAQ,KAAK;AACb,qBAAO,WAAW,GAAG,EAAE,QAAQ,OAAO,WAAW,GAAG,EAAE;AACtD,qBAAO,OAAO,WAAW,GAAG,EAAE;AAC9B,mBAAK,KAAK;AAAA,YACX;AACA,kBAAM,SAAS,EAAE,UAAU,EAAE,SAAS,OAAO,0BAA0B,CAAC;AAAA,UACzE;AAAA,QACD;AACA,gBAAQ,UAAUX,OAAM,MAAM;AAAA,MAC/B;AAAA,IACD;AACA,QAAI,WAAW,SAAS;AACvB,iBAAW,KAAK,WAAW,SAAS;AACnC,uBAAe,CAAC;AAAA,MACjB;AAAA,IACD,OAAO;AACN,qBAAe,UAAU;AAAA,IAC1B;AAAA,EACD;AACD;AAEA,SAAS,4BAA4B,MAAM;AAC1C,OAAK,2BAA2B;AAAA,IAC/B,gBAAgB;AAAA,IAChB,QAAQ;AAAA,IACR,MAAM;AAAA,IACN,KAAK;AAAA,IACL,aAAa;AAAA,EACd;AACA,OAAK,0BAA0B,uBAAqB;AACnD,UAAM,UAAU,KAAK,IAAI,WAAW,MAAM;AAC1C,UAAM,aAAa,KAAK,WAAW,KAAK,OAAK,EAAE,IAAI,SAAS,UAAU,CAAC;AACvE,SAAK,yBAAyB,iBAAiB,EAAE,SAAS,YAAY,MAAM,UAAU;AAAA,EACvF;AACA,OAAK,qBAAqB,kBAAgB;AACzC,UAAM,UAAU,KAAK,IAAI,WAAW,MAAM;AAC1C,UAAM,aAAa,KAAK,WAAW,KAAK,OAAK,EAAE,IAAI,SAAS,KAAK,CAAC;AAClE,SAAK,yBAAyB,YAAY,EAAE,SAAS,YAAY,MAAM,KAAK;AAAA,EAC7E;AAEA,OAAK,2BAA2B,oBAAkB;AACjD,UAAM,aAAa,KAAK,WAAW,KAAK,OAAK,EAAE,IAAI,SAAS,KAAK,CAAC;AAClE,QAAI,kBAAkB,GAAI,kBAAiB,YAAY,IAAI;AAAA,aAClD,kBAAkB,SAAU,iBAAgB,YAAY,IAAI;AAAA,aAC5D,kBAAkB,YAAa,oBAAmB,YAAY,IAAI;AAAA,EAC5E;AACD;AAEA,SAAS,gBAAgB,YAAY,MAAM;AAC1C,MAAI,KAAK,MAAM,OAAO,SAAS,OAAO,yBAAyB,KAAK,cAAc,eAAe;AAChG,QAAI,YAAY;AAEf,YAAM,WAAW,KAAK,MAAM,aAAa,mBAAmB,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG;AAG7F,YAAM,uBAAuB,KAAK,OAAO,gBAAgB,IAAI;AAAA,QAC5D,OACC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MACxE,CAAC,YAAY,EAAE,UAAU,WAAW;AAAA,MACvC;AACA,UAAI,wBAAwB,IAAI;AAG/B,cAAM,YAAY,EAAE,IAAI,WAAW,GAAG;AACtC,YAAI,UAAU;AAEb,oBAAU,SAAS,WAAW;AAAA,QAC/B;AAEA,aAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,UACrE,OAAK,EAAE,kBAAkB,WAAW;AAAA,QACrC;AACA,aAAK,OAAO,gBAAgB,IAAI,KAAK,SAAS;AAAA,MAC/C;AAAA,IACD;AACA,SAAK,OAAO,SAAS,OAAO,eAAe;AAAA,EAC5C;AAEA,OAAK,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,QAAQ,KAAK;AAAA,EACd,CAAC;AACF;AAEA,SAAS,mBAAmB,YAAY,MAAM;AAC7C,MAAI,KAAK,MAAM,OAAO,SAAS,OAAO,yBAAyB,KAAK,cAAc,eAAe;AAChG,QAAI,YAAY;AAEf,YAAM,WAAW,KAAK,MAAM,aAAa,mBAAmB,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG;AAG7F,YAAM,uBAAuB,KAAK,OAAO,gBAAgB,IAAI;AAAA,QAC5D,OACC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MACxE,CAAC,YAAY,EAAE,UAAU,WAAW;AAAA,MACvC;AACA,UAAI,yBAAyB,GAAI,MAAK,OAAO,gBAAgB,IAAI,OAAO,sBAAsB,CAAC;AAE/F,WAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,QACrE,OAAK,EAAE,kBAAkB,WAAW;AAAA,MACrC;AAAA,IACD;AACA,SAAK,OAAO,SAAS,OAAO,gBAAgB;AAC5C,SAAK,OAAO,SAAS,OAAO,qBAAqB;AAAA,EAClD;AACA,OAAK,OAAO,SAAS,OAAO,eAAe;AAC3C,OAAK,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,QAAQ,KAAK;AAAA,EACd,CAAC;AACF;AAEA,SAAS,iBAAiB,YAAY,MAAM;AAC3C,MAAI,KAAK,MAAM,OAAO,SAAS,OAAO,yBAAyB,KAAK,cAAc,eAAe;AAChG,QAAI,YAAY;AAEf,YAAM,WAAW,KAAK,MAAM,aAAa,mBAAmB,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG;AAG7F,YAAM,uBAAuB,KAAK,OAAO,gBAAgB,IAAI;AAAA,QAC5D,OACC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MACxE,CAAC,YAAY,EAAE,UAAU,WAAW;AAAA,MACvC;AACA,UAAI,yBAAyB,GAAI,MAAK,OAAO,gBAAgB,IAAI,OAAO,sBAAsB,CAAC;AAE/F,WAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,QACrE,OAAK,EAAE,kBAAkB,WAAW;AAAA,MACrC;AAAA,IACD;AAAA,EACD;AAEA,OAAK,OAAO,SAAS,OAAO,eAAe;AAC3C,OAAK,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,QAAQ,KAAK;AAAA,EACd,CAAC;AACF;AAEA,SAAS,cAAc,SAAS,YAAY,MAAM;AACjD,UAAQ,KAAK;AAKb,MAAI,YAAY;AAGf,SAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,MACrE,OAAK,EAAE,kBAAkB,WAAW;AAAA,IACrC;AAGA,SAAK,OAAO,gBAAgB,MAAM,KAAK,OAAO,gBAAgB,IAAI;AAAA,MACjE,OAAK,EAAE,EAAE,GAAG,SAAS,UAAU,KAAK,EAAE,UAAU,WAAW;AAAA,IAC5D;AAEA,UAAM,cAAc,KAAK,OAAO,SAAS,OAAO;AAChD,UAAM,gBAAgB,KAAK,OAAO,SAAS,OAAO;AAClD,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC5C,UAAI,YAAY,SAAS,CAAC,KAAK,EAAE,MAAM,WAAY;AACnD,YAAM,YAAY;AAAA,QACjB,eAAe,WAAW,SACvB,GAAG,WAAW,OAAO,CAAC,EAAE,YAAY,IAAI,WAAW,OAAO,MAAM,CAAC,CAAC,IAAI,cAAc,SAAS,KAC7F,cAAc;AAAA,QACjB,MAAM;AAAA,QACN,KAAK;AAAA,UACJ,OAAO;AAAA,UACP,kBAAkB;AAAA,UAClB,MAAM,EAAE,MAAM,cAAc;AAAA,UAC5B,QAAQ,CAAC,EAAE,IAAI,YAAY,QAAQ,WAAW,QAAQ,WAAW,CAAC,CAAC,EAAE,CAAC;AAAA,QACvE;AAAA,MACD;AACA,WAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,IACjD;AAAA,EACD;AAEA,OAAK,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,QAAQ,KAAK;AAAA,EACd,CAAC;AACF;AAEA,SAAS,WAAW,SAAS,YAAY,MAAM;AAC9C,UAAQ,KAAK;AAKb,MAAI,YAAY;AAGf,SAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,MACrE,OAAK,EAAE,kBAAkB,WAAW;AAAA,IACrC;AAGA,SAAK,OAAO,gBAAgB,MAAM,KAAK,OAAO,gBAAgB,IAAI;AAAA,MACjE,OAAK,EAAE,EAAE,GAAG,SAAS,UAAU,KAAK,EAAE,UAAU,WAAW;AAAA,IAC5D;AAEA,UAAM,2BAA2B,KAAK,OAAO,SAAS,OAAO;AAC7D,UAAM,gBAAgB,KAAK,OAAO,SAAS,OAAO;AAClD,eAAW,CAAC,GAAG,CAAC,KAAK,OAAO,QAAQ,MAAM,GAAG;AAC5C,UAAI,yBAAyB,SAAS,CAAC,KAAK,EAAE,MAAM,WAAY;AAChE,YAAM,YAAY;AAAA,QACjB,eAAe,WAAW,SACvB,GAAG,WAAW,OAAO,CAAC,EAAE,YAAY,IAAI,WAAW,OAAO,MAAM,CAAC,CAAC,IAAI,cAAc,SAAS,KAC7F,cAAc;AAAA,QACjB,MAAM;AAAA,QACN,KAAK;AAAA,UACJ,OAAO;AAAA,UACP,kBAAkB;AAAA,UAClB,MAAM,EAAE,MAAM,cAAc;AAAA,UAC5B,QAAQ,CAAC,EAAE,IAAI,YAAY,QAAQ,WAAW,QAAQ,WAAW,CAAC,CAAC,EAAE,CAAC;AAAA,QACvE;AAAA,MACD;AACA,WAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,IACjD;AAAA,EACD;AAEA,OAAK,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,QAAQ,KAAK;AAAA,EACd,CAAC;AACF;AAEA,SAAS,SAAS,SAAS,YAAY,MAAM,QAAQ;AACpD,UAAQ,KAAK;AACb,MAAI,YAAY;AAEf,UAAM,WAAW,KAAK,MAAM,aAAa,mBAAmB,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG;AAK7F,UAAM,uBAAuB,KAAK,OAAO,gBAAgB,IAAI;AAAA,MAC5D,OACC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MACxE,CAAC,YAAY,EAAE,UAAU,WAAW;AAAA,IACvC;AACA,QAAI,wBAAwB,IAAI;AAC/B,YAAM,YAAY,EAAE,IAAI,WAAW,GAAG;AACtC,UAAI,UAAU;AAEb,kBAAU,SAAS,WAAW;AAAA,MAC/B;AAEA,WAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,QACrE,OAAK,EAAE,kBAAkB,WAAW;AAAA,MACrC;AACA,WAAK,OAAO,gBAAgB,IAAI,KAAK,SAAS;AAAA,IAC/C;AAAA,EACD;AAEA,MACC,KAAK,MAAM,OAAO,SAAS,OAAO,yBAClC,KAAK,cAAc,kBAClB,UAAU,SAAS,YAAY,IAAI,SAAS,KAAK,MAClD,KAAK,OAAO,SAAS,OAAO,gBAAgB,aAC3C;AACD,SAAK,OAAO,SAAS,OAAO,eAAe;AAAA,EAC5C;AAEA,OAAK,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,QAAQ,KAAK;AAAA,EACd,CAAC;AACF;AAEO,SAAS,oBAAoB,MAAM,YAAY,QAAQ;AAC7D,MAAI,YAAY;AAEf,UAAM,WAAW,KAAK,MAAM,aAAa,mBAAmB,OAAO,SAAS,WAAW,EAAE,CAAC,GAAG;AAG7F,UAAM,uBAAuB,KAAK,OAAO,gBAAgB,IAAI;AAAA,MAC5D,OACC,EAAE,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MAAM,WAAW,GAAG,MAAM,EAAE,KAAK,EAAE,SAAS,MACxE,CAAC,YAAY,EAAE,UAAU,WAAW;AAAA,IACvC;AAGA,UAAM,oBAAoB,KAAK,OAAO,kBAAkB,IAAI;AAAA,MAC3D,OACC,EAAE,iBAAiB,WAAW,QAC9B,EAAE,IAAI,OAAO,KAAK,OAAK,WAAW,GAAG,SAAS,EAAE,EAAE,MAAM,CAAC,YAAY,EAAE,UAAU,WAAW,OAAO;AAAA,IACrG;AAEA,QAAI,yBAAyB,GAAI,MAAK,OAAO,gBAAgB,IAAI,OAAO,sBAAsB,CAAC;AAC/F,QAAI,sBAAsB;AACzB,WAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,QACrE,OAAK,EAAE,iBAAiB,WAAW;AAAA,MACpC;AAAA,EACF;AAEA,QAAM,IAAI,KAAK,OAAO,SAAS;AAC/B,MACC,EAAE,yBACF,KAAK,cAAc,kBAClB,UAAU,SAAS,YAAY,IAAI,SAAS,KAAK,MAClD,EAAE,iBAAiB,IAClB;AACD,MAAE,eAAe;AAAA,EAClB;AAEA,SAAO,KAAK;AACb;AAEO,SAAS,QAAQ,SAAS,YAAY,MAAM,QAAQ;AAC1D,UAAQ,KAAK;AAEb,OAAK,IAAI,SAAS;AAAA,IACjB,MAAM;AAAA,IACN,IAAI,KAAK;AAAA,IACT,QAAQ,oBAAoB,MAAM,YAAY,MAAM;AAAA,EACrD,CAAC;AACF;AAEA,SAAS,mBAAmB,SAAS,YAAY,MAAM,QAAQ;AAC9D,UAAQ,KAAK;AACb,QAAM,IAAI,KAAK,OAAO,SAAS;AAC/B,MAAI,CAAC,YAAY;AAEhB,QAAI,EAAE,yBAAyB,KAAK,cAAc,iBAAiB,UAAU,YAAY;AACxF,QAAE,qBAAqB;AAAA,IACxB,WAAW,EAAE,yBAAyB,KAAK,cAAc,iBAAiB,UAAU,OAAO;AAC1F,QAAE,gBAAgB;AAAA,IACnB;AAEA,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,QAAQ,KAAK;AAAA,IACd,CAAC;AACD;AAAA,EACD;AACA,OAAK,IAAI,IAAI,EAAE,UAAU,eAAe,EAAE,OAAO;AACjD,QAAM,WAAW,KAAK,IAAI,IAAI,EAAE,OAAO,KAAK,EAAE,KAAK,SAAS,cAAc;AAE1E,QAAM,eAAe,KAAK,OAAO,EAAE,SAAS;AAC5C,QAAM,YAAY,SAChB,UAAU,YAAY,EACtB,KAAK,UAAU,aAAa,EAAE,kBAAkB,EAAE,UAAU,EAC5D,MAAM,EACN,OAAO,OAAO,EACd,MAAM,UAAU,KAAK,EACrB,MAAM,eAAe,MAAM,EAC3B,MAAM,WAAW,OAAO,EACxB,KAAK,SAAU,GAAG;AAClB,UAAM,iBAAiB,KAAK,OAAO,kBAAkB,IAAI;AAAA,MACxD,OACC,EAAE,IAAI,oBAAoB,sBAC1B,EAAE,IAAI,OAAO,CAAC,EAAE,MAAM,OAAO,CAAC,EAAE,MAChC,EAAE,IAAI,OAAO,CAAC,EAAE,UAAU,SAAS,CAAC;AAAA,IACtC;AACA,UAAM,eAAe,UAAU,aAAa,EAAE,gBAAgB,SAAS,CAAC,IAAI,EAAE,WAAW,SAAS,CAAC;AAEnG,UAAM,cAAc,eAAO,IAAI,EAAE,KAAK,SAAS,kBAAkB;AACjE,gBACE,OAAO,OAAO,EACd,KAAK,QAAQ,UAAU,EACvB,KAAK,QAAQ,YAAY,EACzB,SAAS,YAAY,iBAAiB,OAAO,KAAK,EAClD,SAAS,WAAW,kBAAkB,eAAe,QAAQ,IAAI,EACjE,MAAM,kBAAkB,KAAK,EAC7B,MAAM,gBAAgB,KAAK,EAC3B,GAAG,UAAU,WAAY;AACzB,YAAM,aAAa,UAAU,UAAU,gCAAgC,YAAY,YAAY,EAAE,MAAM;AACvG,eAAS,SAAS,YAAY,UAAU;AAAA,IACzC,CAAC;AACF,gBACE,OAAO,MAAM,EACb,MAAM,eAAe,KAAK,EAC1B,KAAK,OAAO,CAAC,EAAE,KAAK,EAEpB,MAAM,mBAAmB,iBAAiB,iBAAiB,EAAE;AAAA,EAChE,CAAC;AAEF,QAAM,WAAW,SACf,OAAO,QAAQ,EACf,SAAS,YAAY,IAAI,EACzB,MAAM,cAAc,KAAK,EACzB,KAAK,OAAO,EACZ,GAAG,SAAS,MAAM;AAClB,UAAM,oBAAoB,UAAU,UAAU,gCAAgC,YAAY,YAAY;AACtG,UAAM,eAAe,kBAAkB,MAAM,EAAE,IAAI,OAAK,eAAO,CAAC,EAAE,MAAM,CAAC;AACzE,YAAQ,KAAK;AAGb,SAAK,OAAO,kBAAkB,MAAM,KAAK,OAAO,kBAAkB,IAAI;AAAA,MACrE,OAAK,EAAE,kBAAkB,WAAW,QAAQ,EAAE,IAAI,oBAAoB;AAAA,IACvE;AAGA,SAAK,OAAO,gBAAgB,MAAM,KAAK,OAAO,gBAAgB,IAAI;AAAA,MACjE,OACC,EACE,EAAE,GAAG,SAAS,UAAU,KAAK,WAAW,GAAG,SAAS,UAAU,KAC9D,EAAE,GAAG,SAAS,KAAK,KAAK,WAAW,GAAG,SAAS,KAAK;AAAA,IAExD;AAEA,eAAW,QAAQ,UAAU,aAAa,EAAE,kBAAkB,EAAE,YAAY;AAC3E,UAAI,aAAa,SAAS,IAAI,EAAG;AAIjC,YAAM,YAAY;AAAA,QACjB,eAAe,WAAW;AAAA,QAC1B,MAAM;AAAA,QACN,KAAK;AAAA,UACJ,OAAO;AAAA,UACP,kBAAkB;AAAA;AAAA,UAClB,MAAM,EAAE,MAAM,cAAc;AAAA,UAC5B,QAAQ,CAAC,EAAE,IAAI,OAAO,IAAI,EAAE,IAAI,QAAQ,WAAW,QAAQ,WAAW,CAAC,IAAI,EAAE,CAAC;AAAA,QAC/E;AAAA,MACD;AACA,WAAK,OAAO,kBAAkB,IAAI,KAAK,SAAS;AAAA,IACjD;AAEA,QACC,KAAK,MAAM,OAAO,SAAS,OAAO,yBAClC,KAAK,cAAc,kBAClB,UAAU,SAAS,YAAY,IAAI,SAAS,KAAK,IACjD;AACD,UAAI,aAAa,UAAU,KAAK,KAAK,OAAO,SAAS,OAAO,gBAAgB,aAAa;AAExF,aAAK,OAAO,SAAS,OAAO,eAAe;AAAA,MAC5C,WAAW,aAAa,SAAS,KAAK,KAAK,OAAO,SAAS,OAAO,gBAAgB,UAAU;AAC3F,aAAK,OAAO,SAAS,OAAO,eAAe;AAAA,MAC5C;AAAA,IACD;AACA,SAAK,IAAI,SAAS;AAAA,MACjB,MAAM;AAAA,MACN,IAAI,KAAK;AAAA,MACT,QAAQ,KAAK;AAAA,IACd,CAAC;AAAA,EACF,CAAC;AACH;AAGA,SAAS,SAAS,GAAG,GAAG,GAAG;AAC1B,MAAI;AACJ,MAAI;AACH,kBACC,EAAE,CAAC,EAAE,EAAE,QAAQ,EAAE,CAAC,EAAE,EAAE,OACnB,EAAE,CAAC,EAAE,EAAE,OAAO,OAAO,EAAE,CAAC,EAAE,EAAE,OAC5B,EAAE,CAAC,EAAE,EAAE,OACP,EAAE,CAAC,EAAE,EAAE,OAAO,QACd,EAAE,CAAC,EAAE,EAAE,OACP,QAAa,EAAE,CAAC,EAAE,EAAE,OACpB;AACL,QAAM,QACL,EAAE,EAAE,IAAI,QAAQ,gBACb,EAAE,QACF,KAAK,EAAE,MAAM,SAAS,EAAE,QACxB,GAAG,OAAO,EAAE,KAAK,EAAE,KAAK,KAAK,EAAE,MAAM,QAAQ,CAAC,CAAC,MAC/C,IACA,cACA,EAAE,QACF,GAAG,EAAE,KAAK,IAAI,OAAO,EAAE,KAAK,EAAE,KAAK,KACnC,OAAO,EAAE,KAAK,EAAE;AAEpB,SAAO;AACR;AAIA,SAAS,cAAc,KAAK,GAAG;AAC9B,MAAI,CAAC,EAAE,IAAI,YAAa;AACxB,QAAM,UACL;AACD,MAAI,UAAU;AACf;",
6
+ "names": ["event", "d", "c1", "c2", "data", "t", "s", "c", "self", "legendFilterIndex", "div", "term", "l"]
7
+ }