@sjcrh/proteinpaint-client 2.193.0 → 2.195.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/2dmaf-GTD3AXGT.js +1373 -0
- package/dist/AIProjectAdmin-ALMSVHFX.js +958 -0
- package/dist/AppHeader-RK2YRITI.js +835 -0
- package/dist/BoxPlot-6ZXLPA5Q.js +1217 -0
- package/dist/CorrelationVolcano-PJB3QCXB.js +619 -0
- package/dist/DE-MEWV5RTV.js +95 -0
- package/dist/DEinput-I62VHD2U.js +301 -0
- package/dist/DEinput-I62VHD2U.js.map +7 -0
- package/dist/DifferentialAnalysis-7L3CDPVB.js +245 -0
- package/dist/Disco-FCS7B5DO.js +3297 -0
- package/dist/Disco.UI-BFJ5XFAT.js +249 -0
- package/dist/DmrPlot-362PCE7L.js +642 -0
- package/dist/GB-SX4JENAW.js +1353 -0
- package/dist/GB-SX4JENAW.js.map +7 -0
- package/dist/GeneExpInput-EHWHQTRV.js +367 -0
- package/dist/HicApp-UE4DCUKX.js +2250 -0
- package/dist/IDCViewer-EDF5XJ63.js +10455 -0
- package/dist/IDCViewer-EDF5XJ63.js.map +7 -0
- package/dist/NumBinaryEditor-3TAAJNYY.js +271 -0
- package/dist/NumBinaryEditor.unit.spec-6776472M.js +286 -0
- package/dist/NumContEditor-WLFXTY4M.js +109 -0
- package/dist/NumContEditor.unit.spec-KG5SCOIQ.js +169 -0
- package/dist/NumCustomBinEditor-EKKNCLKI.js +38 -0
- package/dist/NumCustomBinEditor.unit.spec-LSLSKQDW.js +284 -0
- package/dist/NumDiscreteEditor-X2MLECNT.js +179 -0
- package/dist/NumDiscreteEditor.unit.spec-BZG7P4C7.js +202 -0
- package/dist/NumRegularBinEditor-CAGJ4ZWD.js +38 -0
- package/dist/NumRegularBinEditor.unit.spec-GJSJC4DK.js +227 -0
- package/dist/NumSplineEditor-ND3RC7R6.js +198 -0
- package/dist/NumSplineEditor.unit.spec-F67JQKPY.js +199 -0
- package/dist/NumericDensity-VW7NIZU7.js +38 -0
- package/dist/NumericDensity.unit.spec-YHIMU23C.js +221 -0
- package/dist/NumericHandler-HCU6B2XV.js +39 -0
- package/dist/NumericHandler.unit.spec-6GVWAUED.js +219 -0
- package/dist/ProteomeInput-SONQSTVD.js +396 -0
- package/dist/RunChart2-ZLBNG4JF.js +758 -0
- package/dist/SC-YDRE37LP.js +1127 -0
- package/dist/Volcano-27ZERHXI.js +1379 -0
- package/dist/WSIViewer-2P7ANPBV.js +48562 -0
- package/dist/WsiSamplesPlot-FM4B657P.js +165 -0
- package/dist/adSandbox-M6TBRE5W.js +38 -0
- package/dist/animatedBubbleChart-VYSSX52K.js +555 -0
- package/dist/app-BLJT7ZDG.js +49 -0
- package/dist/app-LSFSUJHF.js +37 -0
- package/dist/app.js +13 -13
- package/dist/bam-ZMHBTBB4.js +860 -0
- package/dist/barchart-EF75MNTN.js +47 -0
- package/dist/barchart.data-VWZB3R2Z.js +22 -0
- package/dist/barchart.events-AMYQOMBQ.js +47 -0
- package/dist/barchart.integration.spec-TCTQ5PKN.js +2196 -0
- package/dist/barchart.integration.spec-TCTQ5PKN.js.map +7 -0
- package/dist/barchart2-LOHN6NSE.js +314 -0
- package/dist/block-23BH5TZ3.js +6226 -0
- package/dist/block.init-3BF6L23D.js +38 -0
- package/dist/block.mds.expressionrank-DSHATA2M.js +359 -0
- package/dist/block.mds.geneboxplot-RXQUOE3Y.js +828 -0
- package/dist/block.mds.junction-PN776TCD.js +1545 -0
- package/dist/block.mds.svcnv-SOWUBH4K.js +6801 -0
- package/dist/block.svg-ZPYMFAGC.js +164 -0
- package/dist/block.tk.aicheck-E22ZJJFP.js +283 -0
- package/dist/block.tk.ase-S54Z5A4G.js +365 -0
- package/dist/block.tk.bam-YOELFYXU.js +1906 -0
- package/dist/block.tk.bedgraphdot-VFUWXPSL.js +384 -0
- package/dist/block.tk.bigwig.ui-2SJYUPR3.js +212 -0
- package/dist/block.tk.hicstraw-GZVE4HQG.js +823 -0
- package/dist/block.tk.junction-RRFX4CAT.js +2364 -0
- package/dist/block.tk.junction-RRFX4CAT.js.map +7 -0
- package/dist/block.tk.junction.textmatrixui-A726SAAL.js +199 -0
- package/dist/block.tk.ld-THUOBW72.js +99 -0
- package/dist/block.tk.menu-V3VGODVI.js +1029 -0
- package/dist/block.tk.pgv-CNUGIK5J.js +944 -0
- package/dist/brainImaging-4PF74IEK.js +423 -0
- package/dist/brainRegions-U5K3KEQF.js +221 -0
- package/dist/bubbleHeatmap-6NL4PUFY.js +383 -0
- package/dist/bubbleHeatmap-6NL4PUFY.js.map +7 -0
- package/dist/chunk-2FTXOPE2.js +368 -0
- package/dist/chunk-2MCUT32T.js +254 -0
- package/dist/chunk-2SZ2VLOG.js +1102 -0
- package/dist/chunk-2XBWB6P2.js +37 -0
- package/dist/chunk-34VSTY2U.js +234 -0
- package/dist/chunk-3DS4HIEH.js +1230 -0
- package/dist/chunk-3DS4HIEH.js.map +7 -0
- package/dist/chunk-42FSM477.js +272 -0
- package/dist/chunk-42FSM477.js.map +7 -0
- package/dist/chunk-44VQIATQ.js +6364 -0
- package/dist/chunk-5B5FZPZI.js +148 -0
- package/dist/chunk-5DSLFEAN.js +276 -0
- package/dist/chunk-5DSQOV7M.js +50 -0
- package/dist/chunk-7CZI6SE7.js +222 -0
- package/dist/chunk-7NABQ2JU.js +54 -0
- package/dist/chunk-7VMFUE64.js +117 -0
- package/dist/chunk-7WBS7ZUI.js +54 -0
- package/dist/chunk-7XSDY2FN.js +1220 -0
- package/dist/chunk-7XSDY2FN.js.map +7 -0
- package/dist/chunk-AK5Z4PLV.js +230 -0
- package/dist/chunk-B3XMNPZY.js +448 -0
- package/dist/chunk-B4VBTVVQ.js +815 -0
- package/dist/chunk-CHUE5Y7Y.js +194 -0
- package/dist/chunk-CNBLRB4P.js +170 -0
- package/dist/chunk-CPMOBFFR.js +190 -0
- package/dist/chunk-D3TU3RDU.js +299 -0
- package/dist/chunk-E2KY2IZS.js +446 -0
- package/dist/chunk-FBMDK2UA.js +514 -0
- package/dist/chunk-FSWSZZTG.js +102 -0
- package/dist/chunk-GPGCGFFS.js +399 -0
- package/dist/chunk-H5DR6OYM.js +217 -0
- package/dist/chunk-HVZQYGQN.js +98 -0
- package/dist/chunk-HYIDLSEL.js +833 -0
- package/dist/chunk-IDX6WU4U.js +14 -0
- package/dist/chunk-IPGYIEPM.js +263 -0
- package/dist/chunk-IPGYIEPM.js.map +7 -0
- package/dist/chunk-IQTEW3SK.js +119 -0
- package/dist/chunk-J7W2DGAL.js +226 -0
- package/dist/chunk-J7W2DGAL.js.map +7 -0
- package/dist/chunk-JVVOJREJ.js +55 -0
- package/dist/chunk-KIGAMN3Z.js +216 -0
- package/dist/chunk-LAQZX5PA.js +13624 -0
- package/dist/chunk-LRPQBMQE.js +2786 -0
- package/dist/chunk-LYULXXGR.js +20896 -0
- package/dist/chunk-LYULXXGR.js.map +7 -0
- package/dist/chunk-M7JGRSFA.js +5067 -0
- package/dist/chunk-MAACMLMN.js +142 -0
- package/dist/chunk-MNPTPENH.js +1825 -0
- package/dist/chunk-MU3ZC4RW.js +102 -0
- package/dist/chunk-N6ALTSJ2.js +176 -0
- package/dist/chunk-N7326KA3.js +1943 -0
- package/dist/chunk-O64WQLAV.js +2327 -0
- package/dist/chunk-OEOYTMMY.js +203 -0
- package/dist/chunk-P3QPMVML.js +736 -0
- package/dist/chunk-PJM6MUTT.js +1289 -0
- package/dist/chunk-QPAZPA3N.js +4269 -0
- package/dist/chunk-RG222M4S.js +272 -0
- package/dist/chunk-S46UPZFM.js +158 -0
- package/dist/chunk-S4L4JCMA.js +102 -0
- package/dist/chunk-S4L4JCMA.js.map +7 -0
- package/dist/chunk-TUMA63WX.js +11194 -0
- package/dist/chunk-TUMA63WX.js.map +7 -0
- package/dist/chunk-UAALI7MC.js +315 -0
- package/dist/chunk-UAALI7MC.js.map +7 -0
- package/dist/chunk-UDTNSJY2.js +34 -0
- package/dist/chunk-UFLSI6EW.js +2681 -0
- package/dist/chunk-UFLSI6EW.js.map +7 -0
- package/dist/chunk-UKABZJQ7.js +480 -0
- package/dist/chunk-UKABZJQ7.js.map +7 -0
- package/dist/chunk-UPNKFGTN.js +100 -0
- package/dist/chunk-UZKHBBWY.js +617 -0
- package/dist/chunk-VG6GVF6D.js +302 -0
- package/dist/chunk-VO4FCZOR.js +448 -0
- package/dist/chunk-VVDFRJVN.js +306 -0
- package/dist/chunk-VVDFRJVN.js.map +7 -0
- package/dist/chunk-VZBMCJBR.js +534 -0
- package/dist/chunk-WR4UATTO.js +182 -0
- package/dist/chunk-XNYATA6C.js +2833 -0
- package/dist/chunk-Y5FH3TEH.js +129 -0
- package/dist/chunk-YIFCXFWE.js +343 -0
- package/dist/chunk-YRXB3MKU.js +477 -0
- package/dist/chunk-Z7UVDJKK.js +1275 -0
- package/dist/chunk-ZDEMAKRA.js +386 -0
- package/dist/chunk-ZTJLENGZ.js +292 -0
- package/dist/chunk-ZTJLENGZ.js.map +7 -0
- package/dist/condition-6UUQ3AAI.js +332 -0
- package/dist/controls-N2NIGPHY.js +41 -0
- package/dist/controls.config-YYIMJHWN.js +39 -0
- package/dist/correlation-DYUMFMTU.js +102 -0
- package/dist/cuminc-EUXCL53V.js +1149 -0
- package/dist/cuminc.integration.spec-ZQFMIBF6.js +678 -0
- package/dist/customdata.inputui-U2VXVWJ3.js +289 -0
- package/dist/dataDownload-QK2VYWYW.js +330 -0
- package/dist/dataDownload.integration.spec-NG4ZASWC.js +193 -0
- package/dist/databrowser.ui-ALW4LSLA.js +433 -0
- package/dist/dictionary-F7BPXOBO.js +118 -0
- package/dist/dnaMethylation-XNRJIBAH.js +38 -0
- package/dist/dnaMethylation.integration.spec-F5ODQTVL.js +203 -0
- package/dist/dofetch-IYEI7WSH.js +51 -0
- package/dist/e2pca-BHB7UMS5.js +350 -0
- package/dist/ep-QRFUVFSK.js +1256 -0
- package/dist/expclust.gdc.spec-LMH7QAU4.js +307 -0
- package/dist/facet-34HXG7MO.js +521 -0
- package/dist/forms2-ZQUPKXE5.js +539 -0
- package/dist/gb-HWZ5KZXX.js +88 -0
- package/dist/geneExpClustering-KFMP553E.js +249 -0
- package/dist/geneExpression-E2GIRM6Z.js +313 -0
- package/dist/geneExpression-QODFRNS4.js +38 -0
- package/dist/geneExpression.unit.spec-HV44ABGV.js +102 -0
- package/dist/geneORA-MJ6MFW2K.js +278 -0
- package/dist/geneRanking-ODKGLJX2.js +553 -0
- package/dist/geneRanking-ODKGLJX2.js.map +7 -0
- package/dist/geneVariant-QT6E7YZN.js +39 -0
- package/dist/geneVariant-UYQ4XIOQ.js +41 -0
- package/dist/geneVariant.integration.spec-HQ5GJ7UM.js +198 -0
- package/dist/genefusion.ui-5KYGD7JL.js +309 -0
- package/dist/geneset-M6T24ZYZ.js +208 -0
- package/dist/genomeBrowser.spec-CVH4S5KZ.js +281 -0
- package/dist/grin2-GI2WNWJO.js +968 -0
- package/dist/grin2-GI2WNWJO.js.map +7 -0
- package/dist/grin2-QU2UCKKE.js +75 -0
- package/dist/gsea-EGWJAATJ.js +47 -0
- package/dist/hierCluster-4OJ7BHAB.js +59 -0
- package/dist/hierCluster-P4HGGVK7.js +63 -0
- package/dist/hierCluster.config-5DGS5EH4.js +40 -0
- package/dist/hierCluster.integration.spec-OL4FLSBS.js +488 -0
- package/dist/hierCluster.integration.spec-OL4FLSBS.js.map +7 -0
- package/dist/hierCluster.interactivity-VEHJHBKY.js +54 -0
- package/dist/hierCluster.renderers-OEVSBUBK.js +21 -0
- package/dist/imagePlot-MMJYC4DX.js +163 -0
- package/dist/importPlot-4HJ6VR4P.js +8 -0
- package/dist/isoformExpression-EISYQF2S.js +40 -0
- package/dist/isoformExpression.unit.spec-YKBWVL7C.js +208 -0
- package/dist/jspdf.es.min-NXISJ3W7.js +40 -0
- package/dist/launch.adhoc-U3KOGDIC.js +42 -0
- package/dist/leftlabel.sample-LVF5WLMZ.js +264 -0
- package/dist/lollipop-HX2WLD5J.js +171 -0
- package/dist/maf-MBX3S3LS.js +459 -0
- package/dist/maf-MBX3S3LS.js.map +7 -0
- package/dist/maftimeline-VN6SYUPQ.js +593 -0
- package/dist/matrix-6UASVMIW.js +58 -0
- package/dist/matrix-FYYLVW7O.js +63 -0
- package/dist/matrix.cells-3RUGV7XG.js +28 -0
- package/dist/matrix.config-ELBFN3JN.js +41 -0
- package/dist/matrix.data-MHFF47ZY.js +25 -0
- package/dist/matrix.groups-UJRFFG5J.js +27 -0
- package/dist/matrix.integration.spec-5DUNUOQ3.js +3072 -0
- package/dist/matrix.interactivity-2TZ3ON4H.js +42 -0
- package/dist/matrix.layout-IGUBUCB2.js +44 -0
- package/dist/matrix.legend-UBQF6LMD.js +22 -0
- package/dist/matrix.renderers-ON2EXXIS.js +38 -0
- package/dist/matrix.serieses-5XH7NO23.js +21 -0
- package/dist/matrix.sort-QSWTVRJT.js +27 -0
- package/dist/matrix.sort.unit.spec-7Y6D456I.js +472 -0
- package/dist/matrix.sorterUi.unit.spec-3XNGEZZ2.js +342 -0
- package/dist/mavb-J4AUXBHZ.js +732 -0
- package/dist/mds.fimo-I6OALZRX.js +518 -0
- package/dist/mds.samplescatterplot-XSWR37S5.js +1550 -0
- package/dist/mds.survivalplot-Q3TE4A5P.js +483 -0
- package/dist/numericDictTermCluster-N3GM6YVP.js +65 -0
- package/dist/numericDictTermCluster-N3GM6YVP.js.map +7 -0
- package/dist/oncomatrix-C4RDUA2C.js +295 -0
- package/dist/oncomatrix.spec-QVD3XUTH.js +448 -0
- package/dist/plot.2dvaf-MNONDWFA.js +377 -0
- package/dist/plot.app-3T275PW5.js +41 -0
- package/dist/plot.barplot-LOLIPHXG.js +102 -0
- package/dist/plot.boxplot-I6CAYXPV.js +152 -0
- package/dist/plot.brainImaging-Y76KB6IC.js +51 -0
- package/dist/plot.disco-N5ISUUNQ.js +102 -0
- package/dist/plot.dzi-Q6K542P6.js +33 -0
- package/dist/plot.ssgq-OGLNOY4Q.js +139 -0
- package/dist/plot.vaf2cov-NXQ5D3KA.js +259 -0
- package/dist/plot.wsi-YMDUOZ57.js +36 -0
- package/dist/polar2-AQ2W3SNH.js +231 -0
- package/dist/profileForms-TCPZPI22.js +446 -0
- package/dist/profilePlot-4RKKICKC.js +54 -0
- package/dist/proteinView-5VJ6E2XT.js +1568 -0
- package/dist/proteinView-5VJ6E2XT.js.map +7 -0
- package/dist/purify.es-PPNYMKMJ.js +1457 -0
- package/dist/purify.es-PPNYMKMJ.js.map +7 -0
- package/dist/qualitative-NCFIVW6S.js +43 -0
- package/dist/radar2-UJFFZE7T.js +326 -0
- package/dist/radarFacility2-ATQBCF3N.js +334 -0
- package/dist/regression-4RSS7447.js +56 -0
- package/dist/regression.inputs-5XGUGNWV.js +48 -0
- package/dist/regression.inputs.term-LSJAZWE4.js +48 -0
- package/dist/regression.inputs.values.table-GNIJZETG.js +45 -0
- package/dist/regression.integration.spec-MV652K47.js +784 -0
- package/dist/regression.results-M3YH6ZD3.js +40 -0
- package/dist/regression.spec-455WPZHP.js +708 -0
- package/dist/report-MH3V7SHZ.js +222 -0
- package/dist/sampleScatter.spec-OTIL3JDG.js +202 -0
- package/dist/sampleView-DHACOCEG.js +48 -0
- package/dist/samplelst-F3AXOE2D.js +111 -0
- package/dist/samplematrix-M6CKKVNE.js +2198 -0
- package/dist/sc-S5XA37JJ.js +86 -0
- package/dist/scatter-IRPFNDHW.js +851 -0
- package/dist/scatter.integration.spec-5FWVHMVJ.js +1206 -0
- package/dist/selectGenomeWithTklst-NIOUX6MV.js +134 -0
- package/dist/singleCellCellType-FTGLNH2J.js +38 -0
- package/dist/singleCellCellType.unit.spec-BJ5YZAXF.js +160 -0
- package/dist/singleCellGeneExpression-56EDDG5H.js +38 -0
- package/dist/singleCellGeneExpression.unit.spec-XSQRWAI3.js +153 -0
- package/dist/singleCellPlot-TH77EJZ4.js +54 -0
- package/dist/singlecell-3QZQZM32.js +86 -0
- package/dist/singlecell-7KJMBASC.js +1572 -0
- package/dist/snp-YXG5O4U4.js +38 -0
- package/dist/snp.unit.spec-O27J7OOK.js +176 -0
- package/dist/snplocus-CQZSC7P6.js +208 -0
- package/dist/spliceevent.a53ss.diagram-K5ZDPZE6.js +151 -0
- package/dist/spliceevent.exonskip.diagram-A2VZ3TTF.js +277 -0
- package/dist/spliceevent.noeventdiagram-DJDA6ENK.js +460 -0
- package/dist/ssGSEA-3FTGRUTC.js +38 -0
- package/dist/ssGSEA.unit.spec-GF35KBTX.js +88 -0
- package/dist/summarizeCnvGeneexp-6IDTNOYE.js +163 -0
- package/dist/summarizeGeneexpSurvival-OWLUX2HO.js +114 -0
- package/dist/summarizeGeneexpSurvival-OWLUX2HO.js.map +7 -0
- package/dist/summarizeMutationCnv-BMEN3XNV.js +164 -0
- package/dist/summarizeMutationDiagnosis-LW6K6373.js +40 -0
- package/dist/summarizeMutationSurvival-E7REF2VY.js +99 -0
- package/dist/summary-MKA7OJKE.js +49 -0
- package/dist/summary.integration.spec-IV6I6SNJ.js +414 -0
- package/dist/summaryInput-NET6SPM4.js +235 -0
- package/dist/sunburst-CO3MXFTJ.js +284 -0
- package/dist/survival-MIPCEBS3.js +46 -0
- package/dist/survival-QQXTCNDU.js +58 -0
- package/dist/survival.integration.spec-6FH4S3EH.js +915 -0
- package/dist/survival.integration.spec-6FH4S3EH.js.map +7 -0
- package/dist/svg2pdf.es.min-P2F6SSVJ.js +3157 -0
- package/dist/svgraph-YF7BS7TN.js +1387 -0
- package/dist/svmr-J2JLQGEE.js +3842 -0
- package/dist/table-7YL7I4GH.js +200 -0
- package/dist/termCollection-LNEN72IV.js +38 -0
- package/dist/termCollection-SOLNYAZ4.js +179 -0
- package/dist/termCollection.unit.spec-LTX7UVYP.js +208 -0
- package/dist/tk-RZDP2YT5.js +46 -0
- package/dist/tp.ui-T6XXBHHD.js +1459 -0
- package/dist/tvs.dt-7APM37Y3.js +39 -0
- package/dist/tvs.dtcnv.categorical-YIPXQSIL.js +40 -0
- package/dist/tvs.dtcnv.continuous-ITNZE3SH.js +72 -0
- package/dist/tvs.dtfusion-2JIIPDTN.js +40 -0
- package/dist/tvs.dtsnvindel-HO2PUFN2.js +40 -0
- package/dist/tvs.dtsv-7KCWSUYO.js +40 -0
- package/dist/tvs.samplelst-KKWJQNLW.js +104 -0
- package/dist/tvs.termCollection-R2IGRG2U.js +159 -0
- package/dist/violin-OTPZQTGA.js +46 -0
- package/dist/violin.integration.spec-KESWDSBM.js +1425 -0
- package/dist/violin.interactivity-Q2WALZO3.js +38 -0
- package/dist/violin.renderer-WIRIV7QY.js +40 -0
- package/dist/vocabulary-XXDHHHPJ.js +41 -0
- package/package.json +9 -3
- package/dist/2dmaf-US2ZAJJJ.js +0 -1373
- package/dist/AIProjectAdmin-QQO2PNAJ.js +0 -958
- package/dist/AppHeader-UKB344GC.js +0 -835
- package/dist/BoxPlot-JEBLRKBY.js +0 -1217
- package/dist/CorrelationVolcano-J3IFVSZB.js +0 -619
- package/dist/DE-PAPJP6AH.js +0 -95
- package/dist/DEinput-YON466QQ.js +0 -301
- package/dist/DEinput-YON466QQ.js.map +0 -7
- package/dist/DifferentialAnalysis-DEUODXGG.js +0 -245
- package/dist/Disco-OZM4S7HF.js +0 -3297
- package/dist/Disco.UI-VIHYJGYU.js +0 -249
- package/dist/DmrPlot-DSELMC4E.js +0 -642
- package/dist/GB-MUPI6RL5.js +0 -1151
- package/dist/GB-MUPI6RL5.js.map +0 -7
- package/dist/GeneExpInput-3AQEPTFZ.js +0 -367
- package/dist/HicApp-BP7PSXY2.js +0 -2250
- package/dist/NumBinaryEditor-CHWQT445.js +0 -271
- package/dist/NumBinaryEditor.unit.spec-MXRNK7XH.js +0 -286
- package/dist/NumContEditor-XS3RA7GY.js +0 -109
- package/dist/NumContEditor.unit.spec-662MHSP4.js +0 -169
- package/dist/NumCustomBinEditor-LUVIAXMZ.js +0 -38
- package/dist/NumCustomBinEditor.unit.spec-3D3GY3F4.js +0 -284
- package/dist/NumDiscreteEditor-24W2A5IN.js +0 -179
- package/dist/NumDiscreteEditor.unit.spec-B5T42Z5S.js +0 -202
- package/dist/NumRegularBinEditor-AING4HZ5.js +0 -38
- package/dist/NumRegularBinEditor.unit.spec-UKSVZH2S.js +0 -227
- package/dist/NumSplineEditor-54KNKHJX.js +0 -198
- package/dist/NumSplineEditor.unit.spec-5FTST3Y5.js +0 -199
- package/dist/NumericDensity-C7DQZ5Q5.js +0 -38
- package/dist/NumericDensity.unit.spec-HV6SD3ZS.js +0 -221
- package/dist/NumericHandler-FV3L23EC.js +0 -39
- package/dist/NumericHandler.unit.spec-E72DXVBB.js +0 -219
- package/dist/ProteomeInput-3XTK74SN.js +0 -396
- package/dist/RunChart2-X5FBZVRX.js +0 -758
- package/dist/SC-WE5DG2CQ.js +0 -1127
- package/dist/Volcano-2USCTLKO.js +0 -1379
- package/dist/WSIViewer-U6VSJUFF.js +0 -48562
- package/dist/WsiSamplesPlot-VIKSG63U.js +0 -165
- package/dist/adSandbox-VXUJGPD3.js +0 -38
- package/dist/animatedBubbleChart-4P7XLKSB.js +0 -555
- package/dist/app-KHZT2BVF.js +0 -49
- package/dist/app-XLYH3YPL.js +0 -37
- package/dist/bam-C23ZARYE.js +0 -860
- package/dist/barchart-KGXLYEIP.js +0 -47
- package/dist/barchart.data-7OI5GZZ6.js +0 -22
- package/dist/barchart.events-3KDNIFBG.js +0 -47
- package/dist/barchart.integration.spec-OQYY54AQ.js +0 -2010
- package/dist/barchart.integration.spec-OQYY54AQ.js.map +0 -7
- package/dist/barchart2-AT5FXOUY.js +0 -314
- package/dist/block-TCWYUB4R.js +0 -6226
- package/dist/block.init-7FHXQJNE.js +0 -38
- package/dist/block.mds.expressionrank-UGZQK7Z3.js +0 -359
- package/dist/block.mds.geneboxplot-2CQLB4YN.js +0 -828
- package/dist/block.mds.junction-JHPHWVOS.js +0 -1545
- package/dist/block.mds.svcnv-E7P2SVKK.js +0 -6801
- package/dist/block.svg-MVRR3C6V.js +0 -164
- package/dist/block.tk.aicheck-KX46G4TR.js +0 -283
- package/dist/block.tk.ase-WMXI47BF.js +0 -365
- package/dist/block.tk.bam-KFEGVEQQ.js +0 -1906
- package/dist/block.tk.bedgraphdot-P4DBCWFK.js +0 -384
- package/dist/block.tk.bigwig.ui-WJPH2Z7F.js +0 -212
- package/dist/block.tk.hicstraw-RSD6I2NX.js +0 -823
- package/dist/block.tk.junction-VZS2DEDO.js +0 -2364
- package/dist/block.tk.junction-VZS2DEDO.js.map +0 -7
- package/dist/block.tk.junction.textmatrixui-UCWGHZDI.js +0 -199
- package/dist/block.tk.ld-ERSIIBM2.js +0 -99
- package/dist/block.tk.menu-2ZNXE7CE.js +0 -1029
- package/dist/block.tk.pgv-EJLACCFR.js +0 -944
- package/dist/brainImaging-BMZJY6OT.js +0 -423
- package/dist/brainRegions-RZEBXPAS.js +0 -221
- package/dist/bubbleHeatmap-ERJFMLPK.js +0 -383
- package/dist/bubbleHeatmap-ERJFMLPK.js.map +0 -7
- package/dist/chunk-27FPMFP2.js +0 -54
- package/dist/chunk-455XZIIA.js +0 -222
- package/dist/chunk-474DTKP7.js +0 -263
- package/dist/chunk-474DTKP7.js.map +0 -7
- package/dist/chunk-4AP3O3JW.js +0 -226
- package/dist/chunk-4AP3O3JW.js.map +0 -7
- package/dist/chunk-4JWN7E7Q.js +0 -117
- package/dist/chunk-55MOHL3P.js +0 -158
- package/dist/chunk-5TJQ6633.js +0 -291
- package/dist/chunk-5TJQ6633.js.map +0 -7
- package/dist/chunk-5X5LI5YM.js +0 -254
- package/dist/chunk-634MOGE3.js +0 -314
- package/dist/chunk-634MOGE3.js.map +0 -7
- package/dist/chunk-6G4YOMWW.js +0 -1825
- package/dist/chunk-6SCBPP4C.js +0 -95
- package/dist/chunk-6SCBPP4C.js.map +0 -7
- package/dist/chunk-6YVEYTNH.js +0 -4269
- package/dist/chunk-73R5BVCY.js +0 -5067
- package/dist/chunk-74XVBQF7.js +0 -55
- package/dist/chunk-7I3LST7R.js +0 -272
- package/dist/chunk-ATUYZWHV.js +0 -1289
- package/dist/chunk-B6U3EDAF.js +0 -448
- package/dist/chunk-BO47H3VP.js +0 -477
- package/dist/chunk-BOO4W7WD.js +0 -482
- package/dist/chunk-BOO4W7WD.js.map +0 -7
- package/dist/chunk-C6YT5EM2.js +0 -217
- package/dist/chunk-CDUNE45Q.js +0 -534
- package/dist/chunk-CLN7ANNL.js +0 -216
- package/dist/chunk-CLNSNNQU.js +0 -302
- package/dist/chunk-COYULNJF.js +0 -119
- package/dist/chunk-DBFKUPM6.js +0 -1275
- package/dist/chunk-DNVSEW6P.js +0 -170
- package/dist/chunk-E6XLLQCG.js +0 -299
- package/dist/chunk-EC3SKPQT.js +0 -446
- package/dist/chunk-EDXQKDVQ.js +0 -368
- package/dist/chunk-EY253UB7.js +0 -448
- package/dist/chunk-F5ONTCHE.js +0 -13624
- package/dist/chunk-FABY3ISP.js +0 -176
- package/dist/chunk-FOPHIWFD.js +0 -100
- package/dist/chunk-FVX76DZS.js +0 -203
- package/dist/chunk-FXGE233W.js +0 -2681
- package/dist/chunk-FXGE233W.js.map +0 -7
- package/dist/chunk-GBXX3AHJ.js +0 -343
- package/dist/chunk-GVCQGWN7.js +0 -34
- package/dist/chunk-HXNUQOGN.js +0 -234
- package/dist/chunk-HXZSSHEB.js +0 -37
- package/dist/chunk-IKDWQJZE.js +0 -736
- package/dist/chunk-IVXCWCKS.js +0 -317
- package/dist/chunk-IVXCWCKS.js.map +0 -7
- package/dist/chunk-JEZUPG4J.js +0 -617
- package/dist/chunk-JWHFMFF2.js +0 -142
- package/dist/chunk-K3OJJZCQ.js +0 -230
- package/dist/chunk-KM4JBR26.js +0 -815
- package/dist/chunk-KNOFEVOJ.js +0 -54
- package/dist/chunk-L7VDSIM7.js +0 -20881
- package/dist/chunk-L7VDSIM7.js.map +0 -7
- package/dist/chunk-LLX3NKB4.js +0 -148
- package/dist/chunk-MQJVDIQK.js +0 -2786
- package/dist/chunk-N25ENPO3.js +0 -14
- package/dist/chunk-N3JT3KCV.js +0 -399
- package/dist/chunk-N6QEVQZV.js +0 -194
- package/dist/chunk-NJDW6ZQP.js +0 -102
- package/dist/chunk-NLQQIVTC.js +0 -276
- package/dist/chunk-NU2W6B7I.js +0 -833
- package/dist/chunk-OR43PGBV.js +0 -98
- package/dist/chunk-PWUERAAF.js +0 -182
- package/dist/chunk-PXCFA4ZQ.js +0 -2327
- package/dist/chunk-QSEGY3U5.js +0 -129
- package/dist/chunk-QWOE5YTB.js +0 -11194
- package/dist/chunk-QWOE5YTB.js.map +0 -7
- package/dist/chunk-SC6IPDJR.js +0 -6364
- package/dist/chunk-SDMOLIEU.js +0 -1205
- package/dist/chunk-SDMOLIEU.js.map +0 -7
- package/dist/chunk-T46LHXJW.js +0 -283
- package/dist/chunk-T46LHXJW.js.map +0 -7
- package/dist/chunk-UDL2DEBB.js +0 -50
- package/dist/chunk-UXDVUCXU.js +0 -190
- package/dist/chunk-VDIVDU3T.js +0 -386
- package/dist/chunk-VRLC7DAU.js +0 -2833
- package/dist/chunk-XQSQQSGB.js +0 -1102
- package/dist/chunk-XVXAQ3FI.js +0 -1943
- package/dist/chunk-Y45JIQ5Y.js +0 -1219
- package/dist/chunk-Y45JIQ5Y.js.map +0 -7
- package/dist/chunk-YQMENK5H.js +0 -102
- package/dist/chunk-ZUC4XNWU.js +0 -514
- package/dist/condition-ZPFBPMEZ.js +0 -332
- package/dist/controls-LIVMV2GV.js +0 -41
- package/dist/controls.config-2EOMBN5E.js +0 -39
- package/dist/correlation-D6GAPOP5.js +0 -102
- package/dist/cuminc-GPFDRNUP.js +0 -1149
- package/dist/cuminc.integration.spec-V4JYKLA6.js +0 -678
- package/dist/customdata.inputui-DSEUS3CT.js +0 -289
- package/dist/dataDownload-KT6K3M7Q.js +0 -330
- package/dist/dataDownload.integration.spec-VEX2RTSA.js +0 -193
- package/dist/databrowser.ui-VJKNMIXA.js +0 -433
- package/dist/dictionary-B27BMR5H.js +0 -118
- package/dist/dnaMethylation-BWQGUXVR.js +0 -38
- package/dist/dnaMethylation.integration.spec-YMGT2HYZ.js +0 -203
- package/dist/dofetch-BMSZZAAQ.js +0 -51
- package/dist/e2pca-KSY4DP53.js +0 -350
- package/dist/ep-4PAYGMWK.js +0 -1256
- package/dist/expclust.gdc.spec-XXFP2HHE.js +0 -307
- package/dist/facet-VCJQ7QPE.js +0 -521
- package/dist/forms2-IUD2SNOQ.js +0 -539
- package/dist/gb-JDH242LG.js +0 -88
- package/dist/geneExpClustering-L23JB7XA.js +0 -249
- package/dist/geneExpression-P2ERCRXO.js +0 -313
- package/dist/geneExpression-QGPVFAN4.js +0 -38
- package/dist/geneExpression.unit.spec-6BQBM6VL.js +0 -102
- package/dist/geneORA-XIMJP665.js +0 -278
- package/dist/geneRanking-AJH5G22J.js +0 -551
- package/dist/geneRanking-AJH5G22J.js.map +0 -7
- package/dist/geneVariant-AUUZ7S2B.js +0 -41
- package/dist/geneVariant-H6BGRRON.js +0 -39
- package/dist/geneVariant.integration.spec-FRCH6VI4.js +0 -198
- package/dist/genefusion.ui-AAJ37VFA.js +0 -309
- package/dist/geneset-5ARBBUYH.js +0 -208
- package/dist/genomeBrowser.spec-RV7YBSMZ.js +0 -281
- package/dist/grin2-4MYLICII.js +0 -75
- package/dist/grin2-RBK4NI6W.js +0 -967
- package/dist/grin2-RBK4NI6W.js.map +0 -7
- package/dist/gsea-XUMCVLFK.js +0 -47
- package/dist/hierCluster-HXOTNMC5.js +0 -63
- package/dist/hierCluster-PEDY7OTZ.js +0 -59
- package/dist/hierCluster.config-RKYCGNWW.js +0 -40
- package/dist/hierCluster.integration.spec-YKMAT7UU.js +0 -395
- package/dist/hierCluster.integration.spec-YKMAT7UU.js.map +0 -7
- package/dist/hierCluster.interactivity-LPTHVWHR.js +0 -54
- package/dist/hierCluster.renderers-4XWKHCNW.js +0 -21
- package/dist/imagePlot-3DF7ZH3U.js +0 -163
- package/dist/importPlot-N74SV3TL.js +0 -8
- package/dist/isoformExpression-FU7Y4OGU.js +0 -40
- package/dist/isoformExpression.unit.spec-BLQDKV37.js +0 -208
- package/dist/jspdf.es.min-TFJHKUF5.js +0 -40
- package/dist/launch.adhoc-Y35FZV6H.js +0 -42
- package/dist/leftlabel.sample-ERJGAYTF.js +0 -264
- package/dist/lollipop-DU37Q5E2.js +0 -171
- package/dist/maf-NRLSNDOT.js +0 -452
- package/dist/maf-NRLSNDOT.js.map +0 -7
- package/dist/maftimeline-GRXGOOSJ.js +0 -593
- package/dist/matrix-G3BULZ7Y.js +0 -58
- package/dist/matrix-TCTX26A4.js +0 -63
- package/dist/matrix.cells-ED6RS5EC.js +0 -28
- package/dist/matrix.config-QHO2YNOT.js +0 -41
- package/dist/matrix.data-KQFMXWRX.js +0 -25
- package/dist/matrix.groups-RE74EFLY.js +0 -27
- package/dist/matrix.integration.spec-Y4FCZ2Q2.js +0 -3072
- package/dist/matrix.interactivity-3DW5WAM3.js +0 -42
- package/dist/matrix.layout-W57D765I.js +0 -44
- package/dist/matrix.legend-ZST44PIB.js +0 -22
- package/dist/matrix.renderers-NFRKXO7Y.js +0 -38
- package/dist/matrix.serieses-6ZKTFVWY.js +0 -21
- package/dist/matrix.sort-2UE47IOC.js +0 -27
- package/dist/matrix.sort.unit.spec-5CMWEXPE.js +0 -472
- package/dist/matrix.sorterUi.unit.spec-Y2HXWHJN.js +0 -342
- package/dist/mavb-BI4XKI5P.js +0 -732
- package/dist/mds.fimo-UJYESPNC.js +0 -518
- package/dist/mds.samplescatterplot-JKU5B4QR.js +0 -1550
- package/dist/mds.survivalplot-OP7Y4D3L.js +0 -483
- package/dist/numericDictTermCluster-DRIEJJSP.js +0 -72
- package/dist/numericDictTermCluster-DRIEJJSP.js.map +0 -7
- package/dist/oncomatrix-A3IE47HV.js +0 -295
- package/dist/oncomatrix.spec-TDWB2ROF.js +0 -448
- package/dist/plot.2dvaf-XY34TDSM.js +0 -377
- package/dist/plot.app-WRCBLYGO.js +0 -41
- package/dist/plot.barplot-RXGOUNHM.js +0 -102
- package/dist/plot.boxplot-GBZGSS3D.js +0 -152
- package/dist/plot.brainImaging-DYPKMNHL.js +0 -51
- package/dist/plot.disco-5K2SCKJ4.js +0 -102
- package/dist/plot.dzi-THJIFHIS.js +0 -33
- package/dist/plot.ssgq-FSIUIV3A.js +0 -139
- package/dist/plot.vaf2cov-HP6KEBVJ.js +0 -259
- package/dist/plot.wsi-MR6JMOXW.js +0 -36
- package/dist/polar2-IT3OF5DX.js +0 -231
- package/dist/profileForms-XXGJVF2T.js +0 -446
- package/dist/profilePlot-J2C35OEY.js +0 -54
- package/dist/proteinView-7FDCILPH.js +0 -1556
- package/dist/proteinView-7FDCILPH.js.map +0 -7
- package/dist/purify.es-OGN7FDEQ.js +0 -1038
- package/dist/purify.es-OGN7FDEQ.js.map +0 -7
- package/dist/qualitative-N7S2JHZM.js +0 -43
- package/dist/radar2-CDDOQGQX.js +0 -326
- package/dist/radarFacility2-ZQTHO2ON.js +0 -334
- package/dist/regression-PBGAMZAV.js +0 -56
- package/dist/regression.inputs-54E5YKI4.js +0 -48
- package/dist/regression.inputs.term-52MBTMVM.js +0 -48
- package/dist/regression.inputs.values.table-F3FOAYFV.js +0 -45
- package/dist/regression.integration.spec-M4RPJUE4.js +0 -784
- package/dist/regression.results-JOK6I2ZD.js +0 -40
- package/dist/regression.spec-O4HZB2HQ.js +0 -708
- package/dist/report-BDDTM7SV.js +0 -222
- package/dist/sampleScatter.spec-272GLYEK.js +0 -202
- package/dist/sampleView-E6OHEEP4.js +0 -48
- package/dist/samplelst-3LNF3DBG.js +0 -111
- package/dist/samplematrix-HL445X7I.js +0 -2198
- package/dist/sc-4LELHVIS.js +0 -86
- package/dist/scatter-IZIZURQD.js +0 -851
- package/dist/scatter.integration.spec-BBEWMA7M.js +0 -1206
- package/dist/selectGenomeWithTklst-5LQGT4Z7.js +0 -134
- package/dist/singleCellCellType-T3ZT64EK.js +0 -38
- package/dist/singleCellCellType.unit.spec-AE4IAHOF.js +0 -160
- package/dist/singleCellGeneExpression-SRJXSDEB.js +0 -38
- package/dist/singleCellGeneExpression.unit.spec-EPL73UUO.js +0 -153
- package/dist/singleCellPlot-P2BHFTYZ.js +0 -54
- package/dist/singlecell-32SSD7VN.js +0 -1572
- package/dist/singlecell-7KRD5DP7.js +0 -86
- package/dist/snp-LE5R377N.js +0 -38
- package/dist/snp.unit.spec-UY6KQ5NJ.js +0 -176
- package/dist/snplocus-CP34ABUJ.js +0 -208
- package/dist/spliceevent.a53ss.diagram-JWLWQDNJ.js +0 -151
- package/dist/spliceevent.exonskip.diagram-C5526P7P.js +0 -277
- package/dist/spliceevent.noeventdiagram-352M63YB.js +0 -460
- package/dist/ssGSEA-BFTCECV3.js +0 -38
- package/dist/ssGSEA.unit.spec-4OUCKRDQ.js +0 -88
- package/dist/summarizeCnvGeneexp-Y3AWFIZA.js +0 -163
- package/dist/summarizeGeneexpSurvival-U5JSPG22.js +0 -108
- package/dist/summarizeGeneexpSurvival-U5JSPG22.js.map +0 -7
- package/dist/summarizeMutationCnv-KCOVQEBC.js +0 -164
- package/dist/summarizeMutationDiagnosis-EQXEQABW.js +0 -40
- package/dist/summarizeMutationSurvival-4VGLG4SC.js +0 -99
- package/dist/summary-DXYCBNI4.js +0 -49
- package/dist/summary.integration.spec-MZTJISLP.js +0 -414
- package/dist/summaryInput-5Z3XVIL6.js +0 -235
- package/dist/sunburst-WVSQJYP2.js +0 -284
- package/dist/survival-3R3J2JBE.js +0 -46
- package/dist/survival-XQWFVGCJ.js +0 -58
- package/dist/survival.integration.spec-EBDPIBYM.js +0 -821
- package/dist/survival.integration.spec-EBDPIBYM.js.map +0 -7
- package/dist/svg2pdf.es.min-H4DXBG4O.js +0 -3157
- package/dist/svgraph-SY2HVMYL.js +0 -1387
- package/dist/svmr-TIIMFKG7.js +0 -3842
- package/dist/table-5RFTXIQL.js +0 -200
- package/dist/termCollection-23QXTZDN.js +0 -38
- package/dist/termCollection-7KXABWVW.js +0 -179
- package/dist/termCollection.unit.spec-4AN2Z4PQ.js +0 -208
- package/dist/tk-WW6PJGPQ.js +0 -46
- package/dist/tp.ui-S5PO3MPH.js +0 -1459
- package/dist/tvs.dt-O7LUM5TK.js +0 -39
- package/dist/tvs.dtcnv.categorical-2OUFOD3W.js +0 -40
- package/dist/tvs.dtcnv.continuous-NOOUY5SZ.js +0 -72
- package/dist/tvs.dtfusion-KXQMP3UF.js +0 -40
- package/dist/tvs.dtsnvindel-PWHFTWZU.js +0 -40
- package/dist/tvs.dtsv-25FLS572.js +0 -40
- package/dist/tvs.samplelst-FLXNJFIV.js +0 -104
- package/dist/tvs.termCollection-PSVOMJE4.js +0 -159
- package/dist/violin-SWMEFWRA.js +0 -46
- package/dist/violin.integration.spec-6EQ6GC2N.js +0 -1425
- package/dist/violin.interactivity-WBIWPLSM.js +0 -38
- package/dist/violin.renderer-3WARZUOH.js +0 -40
- package/dist/vocabulary-WLHYHDX7.js +0 -41
- /package/dist/{2dmaf-US2ZAJJJ.js.map → 2dmaf-GTD3AXGT.js.map} +0 -0
- /package/dist/{AIProjectAdmin-QQO2PNAJ.js.map → AIProjectAdmin-ALMSVHFX.js.map} +0 -0
- /package/dist/{AppHeader-UKB344GC.js.map → AppHeader-RK2YRITI.js.map} +0 -0
- /package/dist/{BoxPlot-JEBLRKBY.js.map → BoxPlot-6ZXLPA5Q.js.map} +0 -0
- /package/dist/{CorrelationVolcano-J3IFVSZB.js.map → CorrelationVolcano-PJB3QCXB.js.map} +0 -0
- /package/dist/{DE-PAPJP6AH.js.map → DE-MEWV5RTV.js.map} +0 -0
- /package/dist/{DifferentialAnalysis-DEUODXGG.js.map → DifferentialAnalysis-7L3CDPVB.js.map} +0 -0
- /package/dist/{Disco-OZM4S7HF.js.map → Disco-FCS7B5DO.js.map} +0 -0
- /package/dist/{Disco.UI-VIHYJGYU.js.map → Disco.UI-BFJ5XFAT.js.map} +0 -0
- /package/dist/{DmrPlot-DSELMC4E.js.map → DmrPlot-362PCE7L.js.map} +0 -0
- /package/dist/{GeneExpInput-3AQEPTFZ.js.map → GeneExpInput-EHWHQTRV.js.map} +0 -0
- /package/dist/{HicApp-BP7PSXY2.js.map → HicApp-UE4DCUKX.js.map} +0 -0
- /package/dist/{NumBinaryEditor-CHWQT445.js.map → NumBinaryEditor-3TAAJNYY.js.map} +0 -0
- /package/dist/{NumBinaryEditor.unit.spec-MXRNK7XH.js.map → NumBinaryEditor.unit.spec-6776472M.js.map} +0 -0
- /package/dist/{NumContEditor-XS3RA7GY.js.map → NumContEditor-WLFXTY4M.js.map} +0 -0
- /package/dist/{NumContEditor.unit.spec-662MHSP4.js.map → NumContEditor.unit.spec-KG5SCOIQ.js.map} +0 -0
- /package/dist/{NumCustomBinEditor-LUVIAXMZ.js.map → NumCustomBinEditor-EKKNCLKI.js.map} +0 -0
- /package/dist/{NumCustomBinEditor.unit.spec-3D3GY3F4.js.map → NumCustomBinEditor.unit.spec-LSLSKQDW.js.map} +0 -0
- /package/dist/{NumDiscreteEditor-24W2A5IN.js.map → NumDiscreteEditor-X2MLECNT.js.map} +0 -0
- /package/dist/{NumDiscreteEditor.unit.spec-B5T42Z5S.js.map → NumDiscreteEditor.unit.spec-BZG7P4C7.js.map} +0 -0
- /package/dist/{NumRegularBinEditor-AING4HZ5.js.map → NumRegularBinEditor-CAGJ4ZWD.js.map} +0 -0
- /package/dist/{NumRegularBinEditor.unit.spec-UKSVZH2S.js.map → NumRegularBinEditor.unit.spec-GJSJC4DK.js.map} +0 -0
- /package/dist/{NumSplineEditor-54KNKHJX.js.map → NumSplineEditor-ND3RC7R6.js.map} +0 -0
- /package/dist/{NumSplineEditor.unit.spec-5FTST3Y5.js.map → NumSplineEditor.unit.spec-F67JQKPY.js.map} +0 -0
- /package/dist/{NumericDensity-C7DQZ5Q5.js.map → NumericDensity-VW7NIZU7.js.map} +0 -0
- /package/dist/{NumericDensity.unit.spec-HV6SD3ZS.js.map → NumericDensity.unit.spec-YHIMU23C.js.map} +0 -0
- /package/dist/{NumericHandler-FV3L23EC.js.map → NumericHandler-HCU6B2XV.js.map} +0 -0
- /package/dist/{NumericHandler.unit.spec-E72DXVBB.js.map → NumericHandler.unit.spec-6GVWAUED.js.map} +0 -0
- /package/dist/{ProteomeInput-3XTK74SN.js.map → ProteomeInput-SONQSTVD.js.map} +0 -0
- /package/dist/{RunChart2-X5FBZVRX.js.map → RunChart2-ZLBNG4JF.js.map} +0 -0
- /package/dist/{SC-WE5DG2CQ.js.map → SC-YDRE37LP.js.map} +0 -0
- /package/dist/{Volcano-2USCTLKO.js.map → Volcano-27ZERHXI.js.map} +0 -0
- /package/dist/{WSIViewer-U6VSJUFF.js.map → WSIViewer-2P7ANPBV.js.map} +0 -0
- /package/dist/{WsiSamplesPlot-VIKSG63U.js.map → WsiSamplesPlot-FM4B657P.js.map} +0 -0
- /package/dist/{adSandbox-VXUJGPD3.js.map → adSandbox-M6TBRE5W.js.map} +0 -0
- /package/dist/{animatedBubbleChart-4P7XLKSB.js.map → animatedBubbleChart-VYSSX52K.js.map} +0 -0
- /package/dist/{app-KHZT2BVF.js.map → app-BLJT7ZDG.js.map} +0 -0
- /package/dist/{app-XLYH3YPL.js.map → app-LSFSUJHF.js.map} +0 -0
- /package/dist/{bam-C23ZARYE.js.map → bam-ZMHBTBB4.js.map} +0 -0
- /package/dist/{barchart-KGXLYEIP.js.map → barchart-EF75MNTN.js.map} +0 -0
- /package/dist/{barchart.data-7OI5GZZ6.js.map → barchart.data-VWZB3R2Z.js.map} +0 -0
- /package/dist/{barchart.events-3KDNIFBG.js.map → barchart.events-AMYQOMBQ.js.map} +0 -0
- /package/dist/{barchart2-AT5FXOUY.js.map → barchart2-LOHN6NSE.js.map} +0 -0
- /package/dist/{block-TCWYUB4R.js.map → block-23BH5TZ3.js.map} +0 -0
- /package/dist/{block.init-7FHXQJNE.js.map → block.init-3BF6L23D.js.map} +0 -0
- /package/dist/{block.mds.expressionrank-UGZQK7Z3.js.map → block.mds.expressionrank-DSHATA2M.js.map} +0 -0
- /package/dist/{block.mds.geneboxplot-2CQLB4YN.js.map → block.mds.geneboxplot-RXQUOE3Y.js.map} +0 -0
- /package/dist/{block.mds.junction-JHPHWVOS.js.map → block.mds.junction-PN776TCD.js.map} +0 -0
- /package/dist/{block.mds.svcnv-E7P2SVKK.js.map → block.mds.svcnv-SOWUBH4K.js.map} +0 -0
- /package/dist/{block.svg-MVRR3C6V.js.map → block.svg-ZPYMFAGC.js.map} +0 -0
- /package/dist/{block.tk.aicheck-KX46G4TR.js.map → block.tk.aicheck-E22ZJJFP.js.map} +0 -0
- /package/dist/{block.tk.ase-WMXI47BF.js.map → block.tk.ase-S54Z5A4G.js.map} +0 -0
- /package/dist/{block.tk.bam-KFEGVEQQ.js.map → block.tk.bam-YOELFYXU.js.map} +0 -0
- /package/dist/{block.tk.bedgraphdot-P4DBCWFK.js.map → block.tk.bedgraphdot-VFUWXPSL.js.map} +0 -0
- /package/dist/{block.tk.bigwig.ui-WJPH2Z7F.js.map → block.tk.bigwig.ui-2SJYUPR3.js.map} +0 -0
- /package/dist/{block.tk.hicstraw-RSD6I2NX.js.map → block.tk.hicstraw-GZVE4HQG.js.map} +0 -0
- /package/dist/{block.tk.junction.textmatrixui-UCWGHZDI.js.map → block.tk.junction.textmatrixui-A726SAAL.js.map} +0 -0
- /package/dist/{block.tk.ld-ERSIIBM2.js.map → block.tk.ld-THUOBW72.js.map} +0 -0
- /package/dist/{block.tk.menu-2ZNXE7CE.js.map → block.tk.menu-V3VGODVI.js.map} +0 -0
- /package/dist/{block.tk.pgv-EJLACCFR.js.map → block.tk.pgv-CNUGIK5J.js.map} +0 -0
- /package/dist/{brainImaging-BMZJY6OT.js.map → brainImaging-4PF74IEK.js.map} +0 -0
- /package/dist/{brainRegions-RZEBXPAS.js.map → brainRegions-U5K3KEQF.js.map} +0 -0
- /package/dist/{chunk-EDXQKDVQ.js.map → chunk-2FTXOPE2.js.map} +0 -0
- /package/dist/{chunk-5X5LI5YM.js.map → chunk-2MCUT32T.js.map} +0 -0
- /package/dist/{chunk-XQSQQSGB.js.map → chunk-2SZ2VLOG.js.map} +0 -0
- /package/dist/{chunk-HXZSSHEB.js.map → chunk-2XBWB6P2.js.map} +0 -0
- /package/dist/{chunk-HXNUQOGN.js.map → chunk-34VSTY2U.js.map} +0 -0
- /package/dist/{chunk-SC6IPDJR.js.map → chunk-44VQIATQ.js.map} +0 -0
- /package/dist/{chunk-LLX3NKB4.js.map → chunk-5B5FZPZI.js.map} +0 -0
- /package/dist/{chunk-NLQQIVTC.js.map → chunk-5DSLFEAN.js.map} +0 -0
- /package/dist/{chunk-UDL2DEBB.js.map → chunk-5DSQOV7M.js.map} +0 -0
- /package/dist/{chunk-455XZIIA.js.map → chunk-7CZI6SE7.js.map} +0 -0
- /package/dist/{chunk-KNOFEVOJ.js.map → chunk-7NABQ2JU.js.map} +0 -0
- /package/dist/{chunk-4JWN7E7Q.js.map → chunk-7VMFUE64.js.map} +0 -0
- /package/dist/{chunk-27FPMFP2.js.map → chunk-7WBS7ZUI.js.map} +0 -0
- /package/dist/{chunk-K3OJJZCQ.js.map → chunk-AK5Z4PLV.js.map} +0 -0
- /package/dist/{chunk-B6U3EDAF.js.map → chunk-B3XMNPZY.js.map} +0 -0
- /package/dist/{chunk-KM4JBR26.js.map → chunk-B4VBTVVQ.js.map} +0 -0
- /package/dist/{chunk-N6QEVQZV.js.map → chunk-CHUE5Y7Y.js.map} +0 -0
- /package/dist/{chunk-DNVSEW6P.js.map → chunk-CNBLRB4P.js.map} +0 -0
- /package/dist/{chunk-UXDVUCXU.js.map → chunk-CPMOBFFR.js.map} +0 -0
- /package/dist/{chunk-E6XLLQCG.js.map → chunk-D3TU3RDU.js.map} +0 -0
- /package/dist/{chunk-EC3SKPQT.js.map → chunk-E2KY2IZS.js.map} +0 -0
- /package/dist/{chunk-ZUC4XNWU.js.map → chunk-FBMDK2UA.js.map} +0 -0
- /package/dist/{chunk-YQMENK5H.js.map → chunk-FSWSZZTG.js.map} +0 -0
- /package/dist/{chunk-N3JT3KCV.js.map → chunk-GPGCGFFS.js.map} +0 -0
- /package/dist/{chunk-C6YT5EM2.js.map → chunk-H5DR6OYM.js.map} +0 -0
- /package/dist/{chunk-OR43PGBV.js.map → chunk-HVZQYGQN.js.map} +0 -0
- /package/dist/{chunk-NU2W6B7I.js.map → chunk-HYIDLSEL.js.map} +0 -0
- /package/dist/{chunk-N25ENPO3.js.map → chunk-IDX6WU4U.js.map} +0 -0
- /package/dist/{chunk-COYULNJF.js.map → chunk-IQTEW3SK.js.map} +0 -0
- /package/dist/{chunk-74XVBQF7.js.map → chunk-JVVOJREJ.js.map} +0 -0
- /package/dist/{chunk-CLN7ANNL.js.map → chunk-KIGAMN3Z.js.map} +0 -0
- /package/dist/{chunk-F5ONTCHE.js.map → chunk-LAQZX5PA.js.map} +0 -0
- /package/dist/{chunk-MQJVDIQK.js.map → chunk-LRPQBMQE.js.map} +0 -0
- /package/dist/{chunk-73R5BVCY.js.map → chunk-M7JGRSFA.js.map} +0 -0
- /package/dist/{chunk-JWHFMFF2.js.map → chunk-MAACMLMN.js.map} +0 -0
- /package/dist/{chunk-6G4YOMWW.js.map → chunk-MNPTPENH.js.map} +0 -0
- /package/dist/{chunk-NJDW6ZQP.js.map → chunk-MU3ZC4RW.js.map} +0 -0
- /package/dist/{chunk-FABY3ISP.js.map → chunk-N6ALTSJ2.js.map} +0 -0
- /package/dist/{chunk-XVXAQ3FI.js.map → chunk-N7326KA3.js.map} +0 -0
- /package/dist/{chunk-PXCFA4ZQ.js.map → chunk-O64WQLAV.js.map} +0 -0
- /package/dist/{chunk-FVX76DZS.js.map → chunk-OEOYTMMY.js.map} +0 -0
- /package/dist/{chunk-IKDWQJZE.js.map → chunk-P3QPMVML.js.map} +0 -0
- /package/dist/{chunk-ATUYZWHV.js.map → chunk-PJM6MUTT.js.map} +0 -0
- /package/dist/{chunk-6YVEYTNH.js.map → chunk-QPAZPA3N.js.map} +0 -0
- /package/dist/{chunk-7I3LST7R.js.map → chunk-RG222M4S.js.map} +0 -0
- /package/dist/{chunk-55MOHL3P.js.map → chunk-S46UPZFM.js.map} +0 -0
- /package/dist/{chunk-GVCQGWN7.js.map → chunk-UDTNSJY2.js.map} +0 -0
- /package/dist/{chunk-FOPHIWFD.js.map → chunk-UPNKFGTN.js.map} +0 -0
- /package/dist/{chunk-JEZUPG4J.js.map → chunk-UZKHBBWY.js.map} +0 -0
- /package/dist/{chunk-CLNSNNQU.js.map → chunk-VG6GVF6D.js.map} +0 -0
- /package/dist/{chunk-EY253UB7.js.map → chunk-VO4FCZOR.js.map} +0 -0
- /package/dist/{chunk-CDUNE45Q.js.map → chunk-VZBMCJBR.js.map} +0 -0
- /package/dist/{chunk-PWUERAAF.js.map → chunk-WR4UATTO.js.map} +0 -0
- /package/dist/{chunk-VRLC7DAU.js.map → chunk-XNYATA6C.js.map} +0 -0
- /package/dist/{chunk-QSEGY3U5.js.map → chunk-Y5FH3TEH.js.map} +0 -0
- /package/dist/{chunk-GBXX3AHJ.js.map → chunk-YIFCXFWE.js.map} +0 -0
- /package/dist/{chunk-BO47H3VP.js.map → chunk-YRXB3MKU.js.map} +0 -0
- /package/dist/{chunk-DBFKUPM6.js.map → chunk-Z7UVDJKK.js.map} +0 -0
- /package/dist/{chunk-VDIVDU3T.js.map → chunk-ZDEMAKRA.js.map} +0 -0
- /package/dist/{condition-ZPFBPMEZ.js.map → condition-6UUQ3AAI.js.map} +0 -0
- /package/dist/{controls-LIVMV2GV.js.map → controls-N2NIGPHY.js.map} +0 -0
- /package/dist/{controls.config-2EOMBN5E.js.map → controls.config-YYIMJHWN.js.map} +0 -0
- /package/dist/{correlation-D6GAPOP5.js.map → correlation-DYUMFMTU.js.map} +0 -0
- /package/dist/{cuminc-GPFDRNUP.js.map → cuminc-EUXCL53V.js.map} +0 -0
- /package/dist/{cuminc.integration.spec-V4JYKLA6.js.map → cuminc.integration.spec-ZQFMIBF6.js.map} +0 -0
- /package/dist/{customdata.inputui-DSEUS3CT.js.map → customdata.inputui-U2VXVWJ3.js.map} +0 -0
- /package/dist/{dataDownload-KT6K3M7Q.js.map → dataDownload-QK2VYWYW.js.map} +0 -0
- /package/dist/{dataDownload.integration.spec-VEX2RTSA.js.map → dataDownload.integration.spec-NG4ZASWC.js.map} +0 -0
- /package/dist/{databrowser.ui-VJKNMIXA.js.map → databrowser.ui-ALW4LSLA.js.map} +0 -0
- /package/dist/{dictionary-B27BMR5H.js.map → dictionary-F7BPXOBO.js.map} +0 -0
- /package/dist/{dnaMethylation-BWQGUXVR.js.map → dnaMethylation-XNRJIBAH.js.map} +0 -0
- /package/dist/{dnaMethylation.integration.spec-YMGT2HYZ.js.map → dnaMethylation.integration.spec-F5ODQTVL.js.map} +0 -0
- /package/dist/{dofetch-BMSZZAAQ.js.map → dofetch-IYEI7WSH.js.map} +0 -0
- /package/dist/{e2pca-KSY4DP53.js.map → e2pca-BHB7UMS5.js.map} +0 -0
- /package/dist/{ep-4PAYGMWK.js.map → ep-QRFUVFSK.js.map} +0 -0
- /package/dist/{expclust.gdc.spec-XXFP2HHE.js.map → expclust.gdc.spec-LMH7QAU4.js.map} +0 -0
- /package/dist/{facet-VCJQ7QPE.js.map → facet-34HXG7MO.js.map} +0 -0
- /package/dist/{forms2-IUD2SNOQ.js.map → forms2-ZQUPKXE5.js.map} +0 -0
- /package/dist/{gb-JDH242LG.js.map → gb-HWZ5KZXX.js.map} +0 -0
- /package/dist/{geneExpClustering-L23JB7XA.js.map → geneExpClustering-KFMP553E.js.map} +0 -0
- /package/dist/{geneExpression-P2ERCRXO.js.map → geneExpression-E2GIRM6Z.js.map} +0 -0
- /package/dist/{geneExpression-QGPVFAN4.js.map → geneExpression-QODFRNS4.js.map} +0 -0
- /package/dist/{geneExpression.unit.spec-6BQBM6VL.js.map → geneExpression.unit.spec-HV44ABGV.js.map} +0 -0
- /package/dist/{geneORA-XIMJP665.js.map → geneORA-MJ6MFW2K.js.map} +0 -0
- /package/dist/{geneVariant-AUUZ7S2B.js.map → geneVariant-QT6E7YZN.js.map} +0 -0
- /package/dist/{geneVariant-H6BGRRON.js.map → geneVariant-UYQ4XIOQ.js.map} +0 -0
- /package/dist/{geneVariant.integration.spec-FRCH6VI4.js.map → geneVariant.integration.spec-HQ5GJ7UM.js.map} +0 -0
- /package/dist/{genefusion.ui-AAJ37VFA.js.map → genefusion.ui-5KYGD7JL.js.map} +0 -0
- /package/dist/{geneset-5ARBBUYH.js.map → geneset-M6T24ZYZ.js.map} +0 -0
- /package/dist/{genomeBrowser.spec-RV7YBSMZ.js.map → genomeBrowser.spec-CVH4S5KZ.js.map} +0 -0
- /package/dist/{grin2-4MYLICII.js.map → grin2-QU2UCKKE.js.map} +0 -0
- /package/dist/{gsea-XUMCVLFK.js.map → gsea-EGWJAATJ.js.map} +0 -0
- /package/dist/{hierCluster-HXOTNMC5.js.map → hierCluster-4OJ7BHAB.js.map} +0 -0
- /package/dist/{hierCluster-PEDY7OTZ.js.map → hierCluster-P4HGGVK7.js.map} +0 -0
- /package/dist/{hierCluster.config-RKYCGNWW.js.map → hierCluster.config-5DGS5EH4.js.map} +0 -0
- /package/dist/{hierCluster.interactivity-LPTHVWHR.js.map → hierCluster.interactivity-VEHJHBKY.js.map} +0 -0
- /package/dist/{hierCluster.renderers-4XWKHCNW.js.map → hierCluster.renderers-OEVSBUBK.js.map} +0 -0
- /package/dist/{imagePlot-3DF7ZH3U.js.map → imagePlot-MMJYC4DX.js.map} +0 -0
- /package/dist/{importPlot-N74SV3TL.js.map → importPlot-4HJ6VR4P.js.map} +0 -0
- /package/dist/{isoformExpression-FU7Y4OGU.js.map → isoformExpression-EISYQF2S.js.map} +0 -0
- /package/dist/{isoformExpression.unit.spec-BLQDKV37.js.map → isoformExpression.unit.spec-YKBWVL7C.js.map} +0 -0
- /package/dist/{jspdf.es.min-TFJHKUF5.js.map → jspdf.es.min-NXISJ3W7.js.map} +0 -0
- /package/dist/{launch.adhoc-Y35FZV6H.js.map → launch.adhoc-U3KOGDIC.js.map} +0 -0
- /package/dist/{leftlabel.sample-ERJGAYTF.js.map → leftlabel.sample-LVF5WLMZ.js.map} +0 -0
- /package/dist/{lollipop-DU37Q5E2.js.map → lollipop-HX2WLD5J.js.map} +0 -0
- /package/dist/{maftimeline-GRXGOOSJ.js.map → maftimeline-VN6SYUPQ.js.map} +0 -0
- /package/dist/{matrix-G3BULZ7Y.js.map → matrix-6UASVMIW.js.map} +0 -0
- /package/dist/{matrix-TCTX26A4.js.map → matrix-FYYLVW7O.js.map} +0 -0
- /package/dist/{matrix.cells-ED6RS5EC.js.map → matrix.cells-3RUGV7XG.js.map} +0 -0
- /package/dist/{matrix.config-QHO2YNOT.js.map → matrix.config-ELBFN3JN.js.map} +0 -0
- /package/dist/{matrix.data-KQFMXWRX.js.map → matrix.data-MHFF47ZY.js.map} +0 -0
- /package/dist/{matrix.groups-RE74EFLY.js.map → matrix.groups-UJRFFG5J.js.map} +0 -0
- /package/dist/{matrix.integration.spec-Y4FCZ2Q2.js.map → matrix.integration.spec-5DUNUOQ3.js.map} +0 -0
- /package/dist/{matrix.interactivity-3DW5WAM3.js.map → matrix.interactivity-2TZ3ON4H.js.map} +0 -0
- /package/dist/{matrix.layout-W57D765I.js.map → matrix.layout-IGUBUCB2.js.map} +0 -0
- /package/dist/{matrix.legend-ZST44PIB.js.map → matrix.legend-UBQF6LMD.js.map} +0 -0
- /package/dist/{matrix.renderers-NFRKXO7Y.js.map → matrix.renderers-ON2EXXIS.js.map} +0 -0
- /package/dist/{matrix.serieses-6ZKTFVWY.js.map → matrix.serieses-5XH7NO23.js.map} +0 -0
- /package/dist/{matrix.sort-2UE47IOC.js.map → matrix.sort-QSWTVRJT.js.map} +0 -0
- /package/dist/{matrix.sort.unit.spec-5CMWEXPE.js.map → matrix.sort.unit.spec-7Y6D456I.js.map} +0 -0
- /package/dist/{matrix.sorterUi.unit.spec-Y2HXWHJN.js.map → matrix.sorterUi.unit.spec-3XNGEZZ2.js.map} +0 -0
- /package/dist/{mavb-BI4XKI5P.js.map → mavb-J4AUXBHZ.js.map} +0 -0
- /package/dist/{mds.fimo-UJYESPNC.js.map → mds.fimo-I6OALZRX.js.map} +0 -0
- /package/dist/{mds.samplescatterplot-JKU5B4QR.js.map → mds.samplescatterplot-XSWR37S5.js.map} +0 -0
- /package/dist/{mds.survivalplot-OP7Y4D3L.js.map → mds.survivalplot-Q3TE4A5P.js.map} +0 -0
- /package/dist/{oncomatrix-A3IE47HV.js.map → oncomatrix-C4RDUA2C.js.map} +0 -0
- /package/dist/{oncomatrix.spec-TDWB2ROF.js.map → oncomatrix.spec-QVD3XUTH.js.map} +0 -0
- /package/dist/{plot.2dvaf-XY34TDSM.js.map → plot.2dvaf-MNONDWFA.js.map} +0 -0
- /package/dist/{plot.app-WRCBLYGO.js.map → plot.app-3T275PW5.js.map} +0 -0
- /package/dist/{plot.barplot-RXGOUNHM.js.map → plot.barplot-LOLIPHXG.js.map} +0 -0
- /package/dist/{plot.boxplot-GBZGSS3D.js.map → plot.boxplot-I6CAYXPV.js.map} +0 -0
- /package/dist/{plot.brainImaging-DYPKMNHL.js.map → plot.brainImaging-Y76KB6IC.js.map} +0 -0
- /package/dist/{plot.disco-5K2SCKJ4.js.map → plot.disco-N5ISUUNQ.js.map} +0 -0
- /package/dist/{plot.dzi-THJIFHIS.js.map → plot.dzi-Q6K542P6.js.map} +0 -0
- /package/dist/{plot.ssgq-FSIUIV3A.js.map → plot.ssgq-OGLNOY4Q.js.map} +0 -0
- /package/dist/{plot.vaf2cov-HP6KEBVJ.js.map → plot.vaf2cov-NXQ5D3KA.js.map} +0 -0
- /package/dist/{plot.wsi-MR6JMOXW.js.map → plot.wsi-YMDUOZ57.js.map} +0 -0
- /package/dist/{polar2-IT3OF5DX.js.map → polar2-AQ2W3SNH.js.map} +0 -0
- /package/dist/{profileForms-XXGJVF2T.js.map → profileForms-TCPZPI22.js.map} +0 -0
- /package/dist/{profilePlot-J2C35OEY.js.map → profilePlot-4RKKICKC.js.map} +0 -0
- /package/dist/{qualitative-N7S2JHZM.js.map → qualitative-NCFIVW6S.js.map} +0 -0
- /package/dist/{radar2-CDDOQGQX.js.map → radar2-UJFFZE7T.js.map} +0 -0
- /package/dist/{radarFacility2-ZQTHO2ON.js.map → radarFacility2-ATQBCF3N.js.map} +0 -0
- /package/dist/{regression-PBGAMZAV.js.map → regression-4RSS7447.js.map} +0 -0
- /package/dist/{regression.inputs-54E5YKI4.js.map → regression.inputs-5XGUGNWV.js.map} +0 -0
- /package/dist/{regression.inputs.term-52MBTMVM.js.map → regression.inputs.term-LSJAZWE4.js.map} +0 -0
- /package/dist/{regression.inputs.values.table-F3FOAYFV.js.map → regression.inputs.values.table-GNIJZETG.js.map} +0 -0
- /package/dist/{regression.integration.spec-M4RPJUE4.js.map → regression.integration.spec-MV652K47.js.map} +0 -0
- /package/dist/{regression.results-JOK6I2ZD.js.map → regression.results-M3YH6ZD3.js.map} +0 -0
- /package/dist/{regression.spec-O4HZB2HQ.js.map → regression.spec-455WPZHP.js.map} +0 -0
- /package/dist/{report-BDDTM7SV.js.map → report-MH3V7SHZ.js.map} +0 -0
- /package/dist/{sampleScatter.spec-272GLYEK.js.map → sampleScatter.spec-OTIL3JDG.js.map} +0 -0
- /package/dist/{sampleView-E6OHEEP4.js.map → sampleView-DHACOCEG.js.map} +0 -0
- /package/dist/{samplelst-3LNF3DBG.js.map → samplelst-F3AXOE2D.js.map} +0 -0
- /package/dist/{samplematrix-HL445X7I.js.map → samplematrix-M6CKKVNE.js.map} +0 -0
- /package/dist/{sc-4LELHVIS.js.map → sc-S5XA37JJ.js.map} +0 -0
- /package/dist/{scatter-IZIZURQD.js.map → scatter-IRPFNDHW.js.map} +0 -0
- /package/dist/{scatter.integration.spec-BBEWMA7M.js.map → scatter.integration.spec-5FWVHMVJ.js.map} +0 -0
- /package/dist/{selectGenomeWithTklst-5LQGT4Z7.js.map → selectGenomeWithTklst-NIOUX6MV.js.map} +0 -0
- /package/dist/{singleCellCellType-T3ZT64EK.js.map → singleCellCellType-FTGLNH2J.js.map} +0 -0
- /package/dist/{singleCellCellType.unit.spec-AE4IAHOF.js.map → singleCellCellType.unit.spec-BJ5YZAXF.js.map} +0 -0
- /package/dist/{singleCellGeneExpression-SRJXSDEB.js.map → singleCellGeneExpression-56EDDG5H.js.map} +0 -0
- /package/dist/{singleCellGeneExpression.unit.spec-EPL73UUO.js.map → singleCellGeneExpression.unit.spec-XSQRWAI3.js.map} +0 -0
- /package/dist/{singleCellPlot-P2BHFTYZ.js.map → singleCellPlot-TH77EJZ4.js.map} +0 -0
- /package/dist/{singlecell-7KRD5DP7.js.map → singlecell-3QZQZM32.js.map} +0 -0
- /package/dist/{singlecell-32SSD7VN.js.map → singlecell-7KJMBASC.js.map} +0 -0
- /package/dist/{snp-LE5R377N.js.map → snp-YXG5O4U4.js.map} +0 -0
- /package/dist/{snp.unit.spec-UY6KQ5NJ.js.map → snp.unit.spec-O27J7OOK.js.map} +0 -0
- /package/dist/{snplocus-CP34ABUJ.js.map → snplocus-CQZSC7P6.js.map} +0 -0
- /package/dist/{spliceevent.a53ss.diagram-JWLWQDNJ.js.map → spliceevent.a53ss.diagram-K5ZDPZE6.js.map} +0 -0
- /package/dist/{spliceevent.exonskip.diagram-C5526P7P.js.map → spliceevent.exonskip.diagram-A2VZ3TTF.js.map} +0 -0
- /package/dist/{spliceevent.noeventdiagram-352M63YB.js.map → spliceevent.noeventdiagram-DJDA6ENK.js.map} +0 -0
- /package/dist/{ssGSEA-BFTCECV3.js.map → ssGSEA-3FTGRUTC.js.map} +0 -0
- /package/dist/{ssGSEA.unit.spec-4OUCKRDQ.js.map → ssGSEA.unit.spec-GF35KBTX.js.map} +0 -0
- /package/dist/{summarizeCnvGeneexp-Y3AWFIZA.js.map → summarizeCnvGeneexp-6IDTNOYE.js.map} +0 -0
- /package/dist/{summarizeMutationCnv-KCOVQEBC.js.map → summarizeMutationCnv-BMEN3XNV.js.map} +0 -0
- /package/dist/{summarizeMutationDiagnosis-EQXEQABW.js.map → summarizeMutationDiagnosis-LW6K6373.js.map} +0 -0
- /package/dist/{summarizeMutationSurvival-4VGLG4SC.js.map → summarizeMutationSurvival-E7REF2VY.js.map} +0 -0
- /package/dist/{summary-DXYCBNI4.js.map → summary-MKA7OJKE.js.map} +0 -0
- /package/dist/{summary.integration.spec-MZTJISLP.js.map → summary.integration.spec-IV6I6SNJ.js.map} +0 -0
- /package/dist/{summaryInput-5Z3XVIL6.js.map → summaryInput-NET6SPM4.js.map} +0 -0
- /package/dist/{sunburst-WVSQJYP2.js.map → sunburst-CO3MXFTJ.js.map} +0 -0
- /package/dist/{survival-3R3J2JBE.js.map → survival-MIPCEBS3.js.map} +0 -0
- /package/dist/{survival-XQWFVGCJ.js.map → survival-QQXTCNDU.js.map} +0 -0
- /package/dist/{svg2pdf.es.min-H4DXBG4O.js.map → svg2pdf.es.min-P2F6SSVJ.js.map} +0 -0
- /package/dist/{svgraph-SY2HVMYL.js.map → svgraph-YF7BS7TN.js.map} +0 -0
- /package/dist/{svmr-TIIMFKG7.js.map → svmr-J2JLQGEE.js.map} +0 -0
- /package/dist/{table-5RFTXIQL.js.map → table-7YL7I4GH.js.map} +0 -0
- /package/dist/{termCollection-23QXTZDN.js.map → termCollection-LNEN72IV.js.map} +0 -0
- /package/dist/{termCollection-7KXABWVW.js.map → termCollection-SOLNYAZ4.js.map} +0 -0
- /package/dist/{termCollection.unit.spec-4AN2Z4PQ.js.map → termCollection.unit.spec-LTX7UVYP.js.map} +0 -0
- /package/dist/{tk-WW6PJGPQ.js.map → tk-RZDP2YT5.js.map} +0 -0
- /package/dist/{tp.ui-S5PO3MPH.js.map → tp.ui-T6XXBHHD.js.map} +0 -0
- /package/dist/{tvs.dt-O7LUM5TK.js.map → tvs.dt-7APM37Y3.js.map} +0 -0
- /package/dist/{tvs.dtcnv.categorical-2OUFOD3W.js.map → tvs.dtcnv.categorical-YIPXQSIL.js.map} +0 -0
- /package/dist/{tvs.dtcnv.continuous-NOOUY5SZ.js.map → tvs.dtcnv.continuous-ITNZE3SH.js.map} +0 -0
- /package/dist/{tvs.dtfusion-KXQMP3UF.js.map → tvs.dtfusion-2JIIPDTN.js.map} +0 -0
- /package/dist/{tvs.dtsnvindel-PWHFTWZU.js.map → tvs.dtsnvindel-HO2PUFN2.js.map} +0 -0
- /package/dist/{tvs.dtsv-25FLS572.js.map → tvs.dtsv-7KCWSUYO.js.map} +0 -0
- /package/dist/{tvs.samplelst-FLXNJFIV.js.map → tvs.samplelst-KKWJQNLW.js.map} +0 -0
- /package/dist/{tvs.termCollection-PSVOMJE4.js.map → tvs.termCollection-R2IGRG2U.js.map} +0 -0
- /package/dist/{violin-SWMEFWRA.js.map → violin-OTPZQTGA.js.map} +0 -0
- /package/dist/{violin.integration.spec-6EQ6GC2N.js.map → violin.integration.spec-KESWDSBM.js.map} +0 -0
- /package/dist/{violin.interactivity-WBIWPLSM.js.map → violin.interactivity-Q2WALZO3.js.map} +0 -0
- /package/dist/{violin.renderer-3WARZUOH.js.map → violin.renderer-WIRIV7QY.js.map} +0 -0
- /package/dist/{vocabulary-WLHYHDX7.js.map → vocabulary-XXDHHHPJ.js.map} +0 -0
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 3,
|
|
3
|
+
"sources": ["../../node_modules/semver/internal/constants.js", "../../node_modules/semver/internal/debug.js", "../../node_modules/semver/internal/re.js", "../../node_modules/semver/internal/parse-options.js", "../../node_modules/semver/internal/identifiers.js", "../../node_modules/semver/classes/semver.js", "../../node_modules/semver/functions/parse.js", "../../node_modules/semver/functions/valid.js", "../../node_modules/semver/functions/clean.js", "../../node_modules/semver/functions/inc.js", "../../node_modules/semver/functions/diff.js", "../../node_modules/semver/functions/major.js", "../../node_modules/semver/functions/minor.js", "../../node_modules/semver/functions/patch.js", "../../node_modules/semver/functions/prerelease.js", "../../node_modules/semver/functions/compare.js", "../../node_modules/semver/functions/rcompare.js", "../../node_modules/semver/functions/compare-loose.js", "../../node_modules/semver/functions/compare-build.js", "../../node_modules/semver/functions/sort.js", "../../node_modules/semver/functions/rsort.js", "../../node_modules/semver/functions/gt.js", "../../node_modules/semver/functions/lt.js", "../../node_modules/semver/functions/eq.js", "../../node_modules/semver/functions/neq.js", "../../node_modules/semver/functions/gte.js", "../../node_modules/semver/functions/lte.js", "../../node_modules/semver/functions/cmp.js", "../../node_modules/semver/functions/coerce.js", "../../node_modules/semver/functions/truncate.js", "../../node_modules/semver/internal/lrucache.js", "../../node_modules/semver/classes/range.js", "../../node_modules/semver/classes/comparator.js", "../../node_modules/semver/functions/satisfies.js", "../../node_modules/semver/ranges/to-comparators.js", "../../node_modules/semver/ranges/max-satisfying.js", "../../node_modules/semver/ranges/min-satisfying.js", "../../node_modules/semver/ranges/min-version.js", "../../node_modules/semver/ranges/valid.js", "../../node_modules/semver/ranges/outside.js", "../../node_modules/semver/ranges/gtr.js", "../../node_modules/semver/ranges/ltr.js", "../../node_modules/semver/ranges/intersects.js", "../../node_modules/semver/ranges/simplify.js", "../../node_modules/semver/ranges/subset.js", "../../node_modules/semver/index.js", "../../node_modules/fzstd/esm/index.mjs", "../../node_modules/hysnappy/hysnappy.js", "../../node_modules/hyparquet-compressors/src/brotli.bitreader.js", "../../node_modules/hyparquet-compressors/src/brotli.huffman.js", "../../node_modules/hyparquet-compressors/src/brotli.prefix.js", "../../node_modules/hyparquet-compressors/src/gzip.huffman.js", "../../node_modules/hyparquet-compressors/src/brotli.blocks.js", "../../node_modules/hyparquet-compressors/src/brotli.context.js", "../../node_modules/hyparquet-compressors/src/brotli.contextmap.js", "../../node_modules/hyparquet-compressors/src/brotli.streams.js", "../../node_modules/hyparquet-compressors/src/gzip.js", "../../node_modules/hyparquet-compressors/src/brotli.dictionary.js", "../../node_modules/hyparquet-compressors/src/brotli.transform.js", "../../node_modules/hyparquet-compressors/src/brotli.js", "../../node_modules/hyparquet-compressors/src/lz4.js", "../../node_modules/hyparquet-compressors/src/compressors.js", "../../node_modules/hyparquet/src/constants.js", "../../node_modules/hyparquet/src/wkb.js", "../../node_modules/hyparquet/src/convert.js", "../../node_modules/hyparquet/src/schema.js", "../../node_modules/hyparquet/src/thrift.js", "../../node_modules/hyparquet/src/geoparquet.js", "../../node_modules/hyparquet/src/metadata.js", "../../node_modules/hyparquet/src/indexes.js", "../../node_modules/hyparquet/src/xxhash.js", "../../node_modules/hyparquet/src/bloom.js", "../../node_modules/hyparquet/src/utils.js", "../../node_modules/hyparquet/src/filter.js", "../../node_modules/hyparquet/src/plan.js", "../../node_modules/hyparquet/src/variant.js", "../../node_modules/hyparquet/src/assemble.js", "../../node_modules/hyparquet/src/delta.js", "../../node_modules/hyparquet/src/encoding.js", "../../node_modules/hyparquet/src/plain.js", "../../node_modules/hyparquet/src/snappy.js", "../../node_modules/hyparquet/src/datapage.js", "../../node_modules/hyparquet/src/column.js", "../../node_modules/hyparquet/src/rowgroup.js", "../../node_modules/hyparquet/src/read.js", "../gdc/idcviewer/model/IDCModel.ts", "../gdc/idcviewer/settings/defaults.ts", "../gdc/idcviewer/viewModel/IDCViewModel.ts", "../gdc/idcviewer/utils.ts", "../gdc/idcviewer/view/IDCTableView.ts", "../gdc/idcviewer/view/IDCSearchView.ts", "../gdc/idcviewer/IDCViewer.ts"],
|
|
4
|
+
"sourcesContent": ["'use strict'\n\n// Note: this is the semver.org version of the spec that it implements\n// Not necessarily the package version of this code.\nconst SEMVER_SPEC_VERSION = '2.0.0'\n\nconst MAX_LENGTH = 256\nconst MAX_SAFE_INTEGER = Number.MAX_SAFE_INTEGER ||\n/* istanbul ignore next */ 9007199254740991\n\n// Max safe segment length for coercion.\nconst MAX_SAFE_COMPONENT_LENGTH = 16\n\n// Max safe length for a build identifier. The max length minus 6 characters for\n// the shortest version with a build 0.0.0+BUILD.\nconst MAX_SAFE_BUILD_LENGTH = MAX_LENGTH - 6\n\nconst RELEASE_TYPES = [\n 'major',\n 'premajor',\n 'minor',\n 'preminor',\n 'patch',\n 'prepatch',\n 'prerelease',\n]\n\nmodule.exports = {\n MAX_LENGTH,\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_SAFE_INTEGER,\n RELEASE_TYPES,\n SEMVER_SPEC_VERSION,\n FLAG_INCLUDE_PRERELEASE: 0b001,\n FLAG_LOOSE: 0b010,\n}\n", "'use strict'\n\nconst debug = (\n typeof process === 'object' &&\n process.env &&\n process.env.NODE_DEBUG &&\n /\\bsemver\\b/i.test(process.env.NODE_DEBUG)\n) ? (...args) => console.error('SEMVER', ...args)\n : () => {}\n\nmodule.exports = debug\n", "'use strict'\n\nconst {\n MAX_SAFE_COMPONENT_LENGTH,\n MAX_SAFE_BUILD_LENGTH,\n MAX_LENGTH,\n} = require('./constants')\nconst debug = require('./debug')\nexports = module.exports = {}\n\n// The actual regexps go on exports.re\nconst re = exports.re = []\nconst safeRe = exports.safeRe = []\nconst src = exports.src = []\nconst safeSrc = exports.safeSrc = []\nconst t = exports.t = {}\nlet R = 0\n\nconst LETTERDASHNUMBER = '[a-zA-Z0-9-]'\n\n// Replace some greedy regex tokens to prevent regex dos issues. These regex are\n// used internally via the safeRe object since all inputs in this library get\n// normalized first to trim and collapse all extra whitespace. The original\n// regexes are exported for userland consumption and lower level usage. A\n// future breaking change could export the safer regex only with a note that\n// all input should have extra whitespace removed.\nconst safeRegexReplacements = [\n ['\\\\s', 1],\n ['\\\\d', MAX_LENGTH],\n [LETTERDASHNUMBER, MAX_SAFE_BUILD_LENGTH],\n]\n\nconst makeSafeRegex = (value) => {\n for (const [token, max] of safeRegexReplacements) {\n value = value\n .split(`${token}*`).join(`${token}{0,${max}}`)\n .split(`${token}+`).join(`${token}{1,${max}}`)\n }\n return value\n}\n\nconst createToken = (name, value, isGlobal) => {\n const safe = makeSafeRegex(value)\n const index = R++\n debug(name, index, value)\n t[name] = index\n src[index] = value\n safeSrc[index] = safe\n re[index] = new RegExp(value, isGlobal ? 'g' : undefined)\n safeRe[index] = new RegExp(safe, isGlobal ? 'g' : undefined)\n}\n\n// The following Regular Expressions can be used for tokenizing,\n// validating, and parsing SemVer version strings.\n\n// ## Numeric Identifier\n// A single `0`, or a non-zero digit followed by zero or more digits.\n\ncreateToken('NUMERICIDENTIFIER', '0|[1-9]\\\\d*')\ncreateToken('NUMERICIDENTIFIERLOOSE', '\\\\d+')\n\n// ## Non-numeric Identifier\n// Zero or more digits, followed by a letter or hyphen, and then zero or\n// more letters, digits, or hyphens.\n\ncreateToken('NONNUMERICIDENTIFIER', `\\\\d*[a-zA-Z-]${LETTERDASHNUMBER}*`)\n\n// ## Main Version\n// Three dot-separated numeric identifiers.\n\ncreateToken('MAINVERSION', `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('MAINVERSIONLOOSE', `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})\\\\.` +\n `(${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version Identifier\n// A numeric identifier, or a non-numeric identifier.\n// Non-numeric identifiers include numeric identifiers but can be longer.\n// Therefore non-numeric identifiers must go first.\n\ncreateToken('PRERELEASEIDENTIFIER', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIER]})`)\n\ncreateToken('PRERELEASEIDENTIFIERLOOSE', `(?:${src[t.NONNUMERICIDENTIFIER]\n}|${src[t.NUMERICIDENTIFIERLOOSE]})`)\n\n// ## Pre-release Version\n// Hyphen, followed by one or more dot-separated pre-release version\n// identifiers.\n\ncreateToken('PRERELEASE', `(?:-(${src[t.PRERELEASEIDENTIFIER]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIER]})*))`)\n\ncreateToken('PRERELEASELOOSE', `(?:-?(${src[t.PRERELEASEIDENTIFIERLOOSE]\n}(?:\\\\.${src[t.PRERELEASEIDENTIFIERLOOSE]})*))`)\n\n// ## Build Metadata Identifier\n// Any combination of digits, letters, or hyphens.\n\ncreateToken('BUILDIDENTIFIER', `${LETTERDASHNUMBER}+`)\n\n// ## Build Metadata\n// Plus sign, followed by one or more period-separated build metadata\n// identifiers.\n\ncreateToken('BUILD', `(?:\\\\+(${src[t.BUILDIDENTIFIER]\n}(?:\\\\.${src[t.BUILDIDENTIFIER]})*))`)\n\n// ## Full Version String\n// A main version, followed optionally by a pre-release version and\n// build metadata.\n\n// Note that the only major, minor, patch, and pre-release sections of\n// the version string are capturing groups. The build metadata is not a\n// capturing group, because it should not ever be used in version\n// comparison.\n\ncreateToken('FULLPLAIN', `v?${src[t.MAINVERSION]\n}${src[t.PRERELEASE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('FULL', `^${src[t.FULLPLAIN]}$`)\n\n// like full, but allows v1.2.3 and =1.2.3, which people do sometimes.\n// also, 1.0.0alpha1 (prerelease without the hyphen) which is pretty\n// common in the npm registry.\ncreateToken('LOOSEPLAIN', `[v=\\\\s]*${src[t.MAINVERSIONLOOSE]\n}${src[t.PRERELEASELOOSE]}?${\n src[t.BUILD]}?`)\n\ncreateToken('LOOSE', `^${src[t.LOOSEPLAIN]}$`)\n\ncreateToken('GTLT', '((?:<|>)?=?)')\n\n// Something like \"2.*\" or \"1.2.x\".\n// Note that \"x.x\" is a valid xRange identifier, meaning \"any version\"\n// Only the first item is strictly required.\ncreateToken('XRANGEIDENTIFIERLOOSE', `${src[t.NUMERICIDENTIFIERLOOSE]}|x|X|\\\\*`)\ncreateToken('XRANGEIDENTIFIER', `${src[t.NUMERICIDENTIFIER]}|x|X|\\\\*`)\n\ncreateToken('XRANGEPLAIN', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIER]})` +\n `(?:${src[t.PRERELEASE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGEPLAINLOOSE', `[v=\\\\s]*(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:\\\\.(${src[t.XRANGEIDENTIFIERLOOSE]})` +\n `(?:${src[t.PRERELEASELOOSE]})?${\n src[t.BUILD]}?` +\n `)?)?`)\n\ncreateToken('XRANGE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAIN]}$`)\ncreateToken('XRANGELOOSE', `^${src[t.GTLT]}\\\\s*${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Coercion.\n// Extract anything that could conceivably be a part of a valid semver\ncreateToken('COERCEPLAIN', `${'(^|[^\\\\d])' +\n '(\\\\d{1,'}${MAX_SAFE_COMPONENT_LENGTH}})` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?` +\n `(?:\\\\.(\\\\d{1,${MAX_SAFE_COMPONENT_LENGTH}}))?`)\ncreateToken('COERCE', `${src[t.COERCEPLAIN]}(?:$|[^\\\\d])`)\ncreateToken('COERCEFULL', src[t.COERCEPLAIN] +\n `(?:${src[t.PRERELEASE]})?` +\n `(?:${src[t.BUILD]})?` +\n `(?:$|[^\\\\d])`)\ncreateToken('COERCERTL', src[t.COERCE], true)\ncreateToken('COERCERTLFULL', src[t.COERCEFULL], true)\n\n// Tilde ranges.\n// Meaning is \"reasonably at or greater than\"\ncreateToken('LONETILDE', '(?:~>?)')\n\ncreateToken('TILDETRIM', `(\\\\s*)${src[t.LONETILDE]}\\\\s+`, true)\nexports.tildeTrimReplace = '$1~'\n\ncreateToken('TILDE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('TILDELOOSE', `^${src[t.LONETILDE]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// Caret ranges.\n// Meaning is \"at least and backwards compatible with\"\ncreateToken('LONECARET', '(?:\\\\^)')\n\ncreateToken('CARETTRIM', `(\\\\s*)${src[t.LONECARET]}\\\\s+`, true)\nexports.caretTrimReplace = '$1^'\n\ncreateToken('CARET', `^${src[t.LONECARET]}${src[t.XRANGEPLAIN]}$`)\ncreateToken('CARETLOOSE', `^${src[t.LONECARET]}${src[t.XRANGEPLAINLOOSE]}$`)\n\n// A simple gt/lt/eq thing, or just \"\" to indicate \"any version\"\ncreateToken('COMPARATORLOOSE', `^${src[t.GTLT]}\\\\s*(${src[t.LOOSEPLAIN]})$|^$`)\ncreateToken('COMPARATOR', `^${src[t.GTLT]}\\\\s*(${src[t.FULLPLAIN]})$|^$`)\n\n// An expression to strip any whitespace between the gtlt and the thing\n// it modifies, so that `> 1.2.3` ==> `>1.2.3`\ncreateToken('COMPARATORTRIM', `(\\\\s*)${src[t.GTLT]\n}\\\\s*(${src[t.LOOSEPLAIN]}|${src[t.XRANGEPLAIN]})`, true)\nexports.comparatorTrimReplace = '$1$2$3'\n\n// Something like `1.2.3 - 1.2.4`\n// Note that these all use the loose form, because they'll be\n// checked against either the strict or loose comparator form\n// later.\ncreateToken('HYPHENRANGE', `^\\\\s*(${src[t.XRANGEPLAIN]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAIN]})` +\n `\\\\s*$`)\n\ncreateToken('HYPHENRANGELOOSE', `^\\\\s*(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s+-\\\\s+` +\n `(${src[t.XRANGEPLAINLOOSE]})` +\n `\\\\s*$`)\n\n// Star ranges basically just allow anything at all.\ncreateToken('STAR', '(<|>)?=?\\\\s*\\\\*')\n// >=0.0.0 is like a star\ncreateToken('GTE0', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0\\\\s*$')\ncreateToken('GTE0PRE', '^\\\\s*>=\\\\s*0\\\\.0\\\\.0-0\\\\s*$')\n", "'use strict'\n\n// parse out just the options we care about\nconst looseOption = Object.freeze({ loose: true })\nconst emptyOpts = Object.freeze({ })\nconst parseOptions = options => {\n if (!options) {\n return emptyOpts\n }\n\n if (typeof options !== 'object') {\n return looseOption\n }\n\n return options\n}\nmodule.exports = parseOptions\n", "'use strict'\n\nconst numeric = /^[0-9]+$/\nconst compareIdentifiers = (a, b) => {\n if (typeof a === 'number' && typeof b === 'number') {\n return a === b ? 0 : a < b ? -1 : 1\n }\n\n const anum = numeric.test(a)\n const bnum = numeric.test(b)\n\n if (anum && bnum) {\n a = +a\n b = +b\n }\n\n return a === b ? 0\n : (anum && !bnum) ? -1\n : (bnum && !anum) ? 1\n : a < b ? -1\n : 1\n}\n\nconst rcompareIdentifiers = (a, b) => compareIdentifiers(b, a)\n\nmodule.exports = {\n compareIdentifiers,\n rcompareIdentifiers,\n}\n", "'use strict'\n\nconst debug = require('../internal/debug')\nconst { MAX_LENGTH, MAX_SAFE_INTEGER } = require('../internal/constants')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst parseOptions = require('../internal/parse-options')\nconst { compareIdentifiers } = require('../internal/identifiers')\n\nconst isPrereleaseIdentifier = (prerelease, identifier) => {\n const identifiers = identifier.split('.')\n if (identifiers.length > prerelease.length) {\n return false\n }\n\n for (let i = 0; i < identifiers.length; i++) {\n if (compareIdentifiers(prerelease[i], identifiers[i]) !== 0) {\n return false\n }\n }\n\n return true\n}\n\nclass SemVer {\n constructor (version, options) {\n options = parseOptions(options)\n\n if (version instanceof SemVer) {\n if (version.loose === !!options.loose &&\n version.includePrerelease === !!options.includePrerelease) {\n return version\n } else {\n version = version.version\n }\n } else if (typeof version !== 'string') {\n throw new TypeError(`Invalid version. Must be a string. Got type \"${typeof version}\".`)\n }\n\n if (version.length > MAX_LENGTH) {\n throw new TypeError(\n `version is longer than ${MAX_LENGTH} characters`\n )\n }\n\n debug('SemVer', version, options)\n this.options = options\n this.loose = !!options.loose\n // this isn't actually relevant for versions, but keep it so that we\n // don't run into trouble passing this.options around.\n this.includePrerelease = !!options.includePrerelease\n\n const m = version.trim().match(options.loose ? re[t.LOOSE] : re[t.FULL])\n\n if (!m) {\n throw new TypeError(`Invalid Version: ${version}`)\n }\n\n this.raw = version\n\n // these are actually numbers\n this.major = +m[1]\n this.minor = +m[2]\n this.patch = +m[3]\n\n if (this.major > MAX_SAFE_INTEGER || this.major < 0) {\n throw new TypeError('Invalid major version')\n }\n\n if (this.minor > MAX_SAFE_INTEGER || this.minor < 0) {\n throw new TypeError('Invalid minor version')\n }\n\n if (this.patch > MAX_SAFE_INTEGER || this.patch < 0) {\n throw new TypeError('Invalid patch version')\n }\n\n // numberify any prerelease numeric ids\n if (!m[4]) {\n this.prerelease = []\n } else {\n this.prerelease = m[4].split('.').map((id) => {\n if (/^[0-9]+$/.test(id)) {\n const num = +id\n if (num >= 0 && num < MAX_SAFE_INTEGER) {\n return num\n }\n }\n return id\n })\n }\n\n this.build = m[5] ? m[5].split('.') : []\n this.format()\n }\n\n format () {\n this.version = `${this.major}.${this.minor}.${this.patch}`\n if (this.prerelease.length) {\n this.version += `-${this.prerelease.join('.')}`\n }\n return this.version\n }\n\n toString () {\n return this.version\n }\n\n compare (other) {\n debug('SemVer.compare', this.version, this.options, other)\n if (!(other instanceof SemVer)) {\n if (typeof other === 'string' && other === this.version) {\n return 0\n }\n other = new SemVer(other, this.options)\n }\n\n if (other.version === this.version) {\n return 0\n }\n\n return this.compareMain(other) || this.comparePre(other)\n }\n\n compareMain (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n if (this.major < other.major) {\n return -1\n }\n if (this.major > other.major) {\n return 1\n }\n if (this.minor < other.minor) {\n return -1\n }\n if (this.minor > other.minor) {\n return 1\n }\n if (this.patch < other.patch) {\n return -1\n }\n if (this.patch > other.patch) {\n return 1\n }\n return 0\n }\n\n comparePre (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n // NOT having a prerelease is > having one\n if (this.prerelease.length && !other.prerelease.length) {\n return -1\n } else if (!this.prerelease.length && other.prerelease.length) {\n return 1\n } else if (!this.prerelease.length && !other.prerelease.length) {\n return 0\n }\n\n let i = 0\n do {\n const a = this.prerelease[i]\n const b = other.prerelease[i]\n debug('prerelease compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n compareBuild (other) {\n if (!(other instanceof SemVer)) {\n other = new SemVer(other, this.options)\n }\n\n let i = 0\n do {\n const a = this.build[i]\n const b = other.build[i]\n debug('build compare', i, a, b)\n if (a === undefined && b === undefined) {\n return 0\n } else if (b === undefined) {\n return 1\n } else if (a === undefined) {\n return -1\n } else if (a === b) {\n continue\n } else {\n return compareIdentifiers(a, b)\n }\n } while (++i)\n }\n\n // preminor will bump the version up to the next minor release, and immediately\n // down to pre-release. premajor and prepatch work the same way.\n inc (release, identifier, identifierBase) {\n if (release.startsWith('pre')) {\n if (!identifier && identifierBase === false) {\n throw new Error('invalid increment argument: identifier is empty')\n }\n // Avoid an invalid semver results\n if (identifier) {\n const match = `-${identifier}`.match(this.options.loose ? re[t.PRERELEASELOOSE] : re[t.PRERELEASE])\n if (!match || match[1] !== identifier) {\n throw new Error(`invalid identifier: ${identifier}`)\n }\n }\n }\n\n switch (release) {\n case 'premajor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor = 0\n this.major++\n this.inc('pre', identifier, identifierBase)\n break\n case 'preminor':\n this.prerelease.length = 0\n this.patch = 0\n this.minor++\n this.inc('pre', identifier, identifierBase)\n break\n case 'prepatch':\n // If this is already a prerelease, it will bump to the next version\n // drop any prereleases that might already exist, since they are not\n // relevant at this point.\n this.prerelease.length = 0\n this.inc('patch', identifier, identifierBase)\n this.inc('pre', identifier, identifierBase)\n break\n // If the input is a non-prerelease version, this acts the same as\n // prepatch.\n case 'prerelease':\n if (this.prerelease.length === 0) {\n this.inc('patch', identifier, identifierBase)\n }\n this.inc('pre', identifier, identifierBase)\n break\n case 'release':\n if (this.prerelease.length === 0) {\n throw new Error(`version ${this.raw} is not a prerelease`)\n }\n this.prerelease.length = 0\n break\n\n case 'major':\n // If this is a pre-major version, bump up to the same major version.\n // Otherwise increment major.\n // 1.0.0-5 bumps to 1.0.0\n // 1.1.0 bumps to 2.0.0\n if (\n this.minor !== 0 ||\n this.patch !== 0 ||\n this.prerelease.length === 0\n ) {\n this.major++\n }\n this.minor = 0\n this.patch = 0\n this.prerelease = []\n break\n case 'minor':\n // If this is a pre-minor version, bump up to the same minor version.\n // Otherwise increment minor.\n // 1.2.0-5 bumps to 1.2.0\n // 1.2.1 bumps to 1.3.0\n if (this.patch !== 0 || this.prerelease.length === 0) {\n this.minor++\n }\n this.patch = 0\n this.prerelease = []\n break\n case 'patch':\n // If this is not a pre-release version, it will increment the patch.\n // If it is a pre-release it will bump up to the same patch version.\n // 1.2.0-5 patches to 1.2.0\n // 1.2.0 patches to 1.2.1\n if (this.prerelease.length === 0) {\n this.patch++\n }\n this.prerelease = []\n break\n // This probably shouldn't be used publicly.\n // 1.0.0 'pre' would become 1.0.0-0 which is the wrong direction.\n case 'pre': {\n const base = Number(identifierBase) ? 1 : 0\n\n if (this.prerelease.length === 0) {\n this.prerelease = [base]\n } else {\n let i = this.prerelease.length\n while (--i >= 0) {\n if (typeof this.prerelease[i] === 'number') {\n this.prerelease[i]++\n i = -2\n }\n }\n if (i === -1) {\n // didn't increment anything\n if (identifier === this.prerelease.join('.') && identifierBase === false) {\n throw new Error('invalid increment argument: identifier already exists')\n }\n this.prerelease.push(base)\n }\n }\n if (identifier) {\n // 1.2.0-beta.1 bumps to 1.2.0-beta.2,\n // 1.2.0-beta.fooblz or 1.2.0-beta bumps to 1.2.0-beta.0\n let prerelease = [identifier, base]\n if (identifierBase === false) {\n prerelease = [identifier]\n }\n if (isPrereleaseIdentifier(this.prerelease, identifier)) {\n const prereleaseBase = this.prerelease[identifier.split('.').length]\n if (isNaN(prereleaseBase)) {\n this.prerelease = prerelease\n }\n } else {\n this.prerelease = prerelease\n }\n }\n break\n }\n default:\n throw new Error(`invalid increment argument: ${release}`)\n }\n this.raw = this.format()\n if (this.build.length) {\n this.raw += `+${this.build.join('.')}`\n }\n return this\n }\n}\n\nmodule.exports = SemVer\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = (version, options, throwErrors = false) => {\n if (version instanceof SemVer) {\n return version\n }\n try {\n return new SemVer(version, options)\n } catch (er) {\n if (!throwErrors) {\n return null\n }\n throw er\n }\n}\n\nmodule.exports = parse\n", "'use strict'\n\nconst parse = require('./parse')\nconst valid = (version, options) => {\n const v = parse(version, options)\n return v ? v.version : null\n}\nmodule.exports = valid\n", "'use strict'\n\nconst parse = require('./parse')\nconst clean = (version, options) => {\n const s = parse(version.trim().replace(/^[=v]+/, ''), options)\n return s ? s.version : null\n}\nmodule.exports = clean\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\n\nconst inc = (version, release, options, identifier, identifierBase) => {\n if (typeof (options) === 'string') {\n identifierBase = identifier\n identifier = options\n options = undefined\n }\n\n try {\n return new SemVer(\n version instanceof SemVer ? version.version : version,\n options\n ).inc(release, identifier, identifierBase).version\n } catch (er) {\n return null\n }\n}\nmodule.exports = inc\n", "'use strict'\n\nconst parse = require('./parse.js')\n\nconst diff = (version1, version2) => {\n const v1 = parse(version1, null, true)\n const v2 = parse(version2, null, true)\n const comparison = v1.compare(v2)\n\n if (comparison === 0) {\n return null\n }\n\n const v1Higher = comparison > 0\n const highVersion = v1Higher ? v1 : v2\n const lowVersion = v1Higher ? v2 : v1\n const highHasPre = !!highVersion.prerelease.length\n const lowHasPre = !!lowVersion.prerelease.length\n\n if (lowHasPre && !highHasPre) {\n // Going from prerelease -> no prerelease requires some special casing\n\n // If the low version has only a major, then it will always be a major\n // Some examples:\n // 1.0.0-1 -> 1.0.0\n // 1.0.0-1 -> 1.1.1\n // 1.0.0-1 -> 2.0.0\n if (!lowVersion.patch && !lowVersion.minor) {\n return 'major'\n }\n\n // If the main part has no difference\n if (lowVersion.compareMain(highVersion) === 0) {\n if (lowVersion.minor && !lowVersion.patch) {\n return 'minor'\n }\n return 'patch'\n }\n }\n\n // add the `pre` prefix if we are going to a prerelease version\n const prefix = highHasPre ? 'pre' : ''\n\n if (v1.major !== v2.major) {\n return prefix + 'major'\n }\n\n if (v1.minor !== v2.minor) {\n return prefix + 'minor'\n }\n\n if (v1.patch !== v2.patch) {\n return prefix + 'patch'\n }\n\n // high and low are prereleases\n return 'prerelease'\n}\n\nmodule.exports = diff\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst major = (a, loose) => new SemVer(a, loose).major\nmodule.exports = major\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst minor = (a, loose) => new SemVer(a, loose).minor\nmodule.exports = minor\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst patch = (a, loose) => new SemVer(a, loose).patch\nmodule.exports = patch\n", "'use strict'\n\nconst parse = require('./parse')\nconst prerelease = (version, options) => {\n const parsed = parse(version, options)\n return (parsed && parsed.prerelease.length) ? parsed.prerelease : null\n}\nmodule.exports = prerelease\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compare = (a, b, loose) =>\n new SemVer(a, loose).compare(new SemVer(b, loose))\n\nmodule.exports = compare\n", "'use strict'\n\nconst compare = require('./compare')\nconst rcompare = (a, b, loose) => compare(b, a, loose)\nmodule.exports = rcompare\n", "'use strict'\n\nconst compare = require('./compare')\nconst compareLoose = (a, b) => compare(a, b, true)\nmodule.exports = compareLoose\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst compareBuild = (a, b, loose) => {\n const versionA = new SemVer(a, loose)\n const versionB = new SemVer(b, loose)\n return versionA.compare(versionB) || versionA.compareBuild(versionB)\n}\nmodule.exports = compareBuild\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst sort = (list, loose) => list.sort((a, b) => compareBuild(a, b, loose))\nmodule.exports = sort\n", "'use strict'\n\nconst compareBuild = require('./compare-build')\nconst rsort = (list, loose) => list.sort((a, b) => compareBuild(b, a, loose))\nmodule.exports = rsort\n", "'use strict'\n\nconst compare = require('./compare')\nconst gt = (a, b, loose) => compare(a, b, loose) > 0\nmodule.exports = gt\n", "'use strict'\n\nconst compare = require('./compare')\nconst lt = (a, b, loose) => compare(a, b, loose) < 0\nmodule.exports = lt\n", "'use strict'\n\nconst compare = require('./compare')\nconst eq = (a, b, loose) => compare(a, b, loose) === 0\nmodule.exports = eq\n", "'use strict'\n\nconst compare = require('./compare')\nconst neq = (a, b, loose) => compare(a, b, loose) !== 0\nmodule.exports = neq\n", "'use strict'\n\nconst compare = require('./compare')\nconst gte = (a, b, loose) => compare(a, b, loose) >= 0\nmodule.exports = gte\n", "'use strict'\n\nconst compare = require('./compare')\nconst lte = (a, b, loose) => compare(a, b, loose) <= 0\nmodule.exports = lte\n", "'use strict'\n\nconst eq = require('./eq')\nconst neq = require('./neq')\nconst gt = require('./gt')\nconst gte = require('./gte')\nconst lt = require('./lt')\nconst lte = require('./lte')\n\nconst cmp = (a, op, b, loose) => {\n switch (op) {\n case '===':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a === b\n\n case '!==':\n if (typeof a === 'object') {\n a = a.version\n }\n if (typeof b === 'object') {\n b = b.version\n }\n return a !== b\n\n case '':\n case '=':\n case '==':\n return eq(a, b, loose)\n\n case '!=':\n return neq(a, b, loose)\n\n case '>':\n return gt(a, b, loose)\n\n case '>=':\n return gte(a, b, loose)\n\n case '<':\n return lt(a, b, loose)\n\n case '<=':\n return lte(a, b, loose)\n\n default:\n throw new TypeError(`Invalid operator: ${op}`)\n }\n}\nmodule.exports = cmp\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst parse = require('./parse')\nconst { safeRe: re, t } = require('../internal/re')\n\nconst coerce = (version, options) => {\n if (version instanceof SemVer) {\n return version\n }\n\n if (typeof version === 'number') {\n version = String(version)\n }\n\n if (typeof version !== 'string') {\n return null\n }\n\n options = options || {}\n\n let match = null\n if (!options.rtl) {\n match = version.match(options.includePrerelease ? re[t.COERCEFULL] : re[t.COERCE])\n } else {\n // Find the right-most coercible string that does not share\n // a terminus with a more left-ward coercible string.\n // Eg, '1.2.3.4' wants to coerce '2.3.4', not '3.4' or '4'\n // With includePrerelease option set, '1.2.3.4-rc' wants to coerce '2.3.4-rc', not '2.3.4'\n //\n // Walk through the string checking with a /g regexp\n // Manually set the index so as to pick up overlapping matches.\n // Stop when we get a match that ends at the string end, since no\n // coercible string can be more right-ward without the same terminus.\n const coerceRtlRegex = options.includePrerelease ? re[t.COERCERTLFULL] : re[t.COERCERTL]\n let next\n while ((next = coerceRtlRegex.exec(version)) &&\n (!match || match.index + match[0].length !== version.length)\n ) {\n if (!match ||\n next.index + next[0].length !== match.index + match[0].length) {\n match = next\n }\n coerceRtlRegex.lastIndex = next.index + next[1].length + next[2].length\n }\n // leave it in a clean state\n coerceRtlRegex.lastIndex = -1\n }\n\n if (match === null) {\n return null\n }\n\n const major = match[2]\n const minor = match[3] || '0'\n const patch = match[4] || '0'\n const prerelease = options.includePrerelease && match[5] ? `-${match[5]}` : ''\n const build = options.includePrerelease && match[6] ? `+${match[6]}` : ''\n\n return parse(`${major}.${minor}.${patch}${prerelease}${build}`, options)\n}\nmodule.exports = coerce\n", "'use strict'\n\nconst parse = require('./parse')\nconst constants = require('../internal/constants')\nconst SemVer = require('../classes/semver')\n\nconst truncate = (version, truncation, options) => {\n if (!constants.RELEASE_TYPES.includes(truncation)) {\n return null\n }\n\n const clonedVersion = cloneInputVersion(version, options)\n return clonedVersion && doTruncation(clonedVersion, truncation)\n}\n\nconst cloneInputVersion = (version, options) => {\n const versionStringToParse = (\n version instanceof SemVer ? version.version : version\n )\n\n return parse(versionStringToParse, options)\n}\n\nconst doTruncation = (version, truncation) => {\n if (isPrerelease(truncation)) {\n return version.version\n }\n\n version.prerelease = []\n\n switch (truncation) {\n case 'major':\n version.minor = 0\n version.patch = 0\n break\n case 'minor':\n version.patch = 0\n break\n }\n\n return version.format()\n}\n\nconst isPrerelease = (type) => {\n return type.startsWith('pre')\n}\n\nmodule.exports = truncate\n", "'use strict'\n\nclass LRUCache {\n constructor () {\n this.max = 1000\n this.map = new Map()\n }\n\n get (key) {\n const value = this.map.get(key)\n if (value === undefined) {\n return undefined\n } else {\n // Remove the key from the map and add it to the end\n this.map.delete(key)\n this.map.set(key, value)\n return value\n }\n }\n\n delete (key) {\n return this.map.delete(key)\n }\n\n set (key, value) {\n const deleted = this.delete(key)\n\n if (!deleted && value !== undefined) {\n // If cache is full, delete the least recently used item\n if (this.map.size >= this.max) {\n const firstKey = this.map.keys().next().value\n this.delete(firstKey)\n }\n\n this.map.set(key, value)\n }\n\n return this\n }\n}\n\nmodule.exports = LRUCache\n", "'use strict'\n\nconst SPACE_CHARACTERS = /\\s+/g\n\n// hoisted class for cyclic dependency\nclass Range {\n constructor (range, options) {\n options = parseOptions(options)\n\n if (range instanceof Range) {\n if (\n range.loose === !!options.loose &&\n range.includePrerelease === !!options.includePrerelease\n ) {\n return range\n } else {\n return new Range(range.raw, options)\n }\n }\n\n if (range instanceof Comparator) {\n // just put it in the set and return\n this.raw = range.value\n this.set = [[range]]\n this.formatted = undefined\n return this\n }\n\n this.options = options\n this.loose = !!options.loose\n this.includePrerelease = !!options.includePrerelease\n\n // First reduce all whitespace as much as possible so we do not have to rely\n // on potentially slow regexes like \\s*. This is then stored and used for\n // future error messages as well.\n this.raw = range.trim().replace(SPACE_CHARACTERS, ' ')\n\n // First, split on ||\n this.set = this.raw\n .split('||')\n // map the range to a 2d array of comparators\n .map(r => this.parseRange(r.trim()))\n // throw out any comparator lists that are empty\n // this generally means that it was not a valid range, which is allowed\n // in loose mode, but will still throw if the WHOLE range is invalid.\n .filter(c => c.length)\n\n if (!this.set.length) {\n throw new TypeError(`Invalid SemVer Range: ${this.raw}`)\n }\n\n // if we have any that are not the null set, throw out null sets.\n if (this.set.length > 1) {\n // keep the first one, in case they're all null sets\n const first = this.set[0]\n this.set = this.set.filter(c => !isNullSet(c[0]))\n if (this.set.length === 0) {\n this.set = [first]\n } else if (this.set.length > 1) {\n // if we have any that are *, then the range is just *\n for (const c of this.set) {\n if (c.length === 1 && isAny(c[0])) {\n this.set = [c]\n break\n }\n }\n }\n }\n\n this.formatted = undefined\n }\n\n get range () {\n if (this.formatted === undefined) {\n this.formatted = ''\n for (let i = 0; i < this.set.length; i++) {\n if (i > 0) {\n this.formatted += '||'\n }\n const comps = this.set[i]\n for (let k = 0; k < comps.length; k++) {\n if (k > 0) {\n this.formatted += ' '\n }\n this.formatted += comps[k].toString().trim()\n }\n }\n }\n return this.formatted\n }\n\n format () {\n return this.range\n }\n\n toString () {\n return this.range\n }\n\n parseRange (range) {\n // strip build metadata so it can't bleed into the version\n range = range.replace(BUILDSTRIPRE, '')\n\n // memoize range parsing for performance.\n // this is a very hot path, and fully deterministic.\n const memoOpts =\n (this.options.includePrerelease && FLAG_INCLUDE_PRERELEASE) |\n (this.options.loose && FLAG_LOOSE)\n const memoKey = memoOpts + ':' + range\n const cached = cache.get(memoKey)\n if (cached) {\n return cached\n }\n\n const loose = this.options.loose\n // `1.2.3 - 1.2.4` => `>=1.2.3 <=1.2.4`\n const hr = loose ? re[t.HYPHENRANGELOOSE] : re[t.HYPHENRANGE]\n range = range.replace(hr, hyphenReplace(this.options.includePrerelease))\n debug('hyphen replace', range)\n\n // `> 1.2.3 < 1.2.5` => `>1.2.3 <1.2.5`\n range = range.replace(re[t.COMPARATORTRIM], comparatorTrimReplace)\n debug('comparator trim', range)\n\n // `~ 1.2.3` => `~1.2.3`\n range = range.replace(re[t.TILDETRIM], tildeTrimReplace)\n debug('tilde trim', range)\n\n // `^ 1.2.3` => `^1.2.3`\n range = range.replace(re[t.CARETTRIM], caretTrimReplace)\n debug('caret trim', range)\n\n // At this point, the range is completely trimmed and\n // ready to be split into comparators.\n\n let rangeList = range\n .split(' ')\n .map(comp => parseComparator(comp, this.options))\n .join(' ')\n .split(/\\s+/)\n // >=0.0.0 is equivalent to *\n .map(comp => replaceGTE0(comp, this.options))\n\n if (loose) {\n // in loose mode, throw out any that are not valid comparators\n rangeList = rangeList.filter(comp => {\n debug('loose invalid filter', comp, this.options)\n return !!comp.match(re[t.COMPARATORLOOSE])\n })\n }\n debug('range list', rangeList)\n\n // if any comparators are the null set, then replace with JUST null set\n // if more than one comparator, remove any * comparators\n // also, don't include the same comparator more than once\n const rangeMap = new Map()\n const comparators = rangeList.map(comp => new Comparator(comp, this.options))\n for (const comp of comparators) {\n if (isNullSet(comp)) {\n return [comp]\n }\n rangeMap.set(comp.value, comp)\n }\n if (rangeMap.size > 1 && rangeMap.has('')) {\n rangeMap.delete('')\n }\n\n const result = [...rangeMap.values()]\n cache.set(memoKey, result)\n return result\n }\n\n intersects (range, options) {\n if (!(range instanceof Range)) {\n throw new TypeError('a Range is required')\n }\n\n return this.set.some((thisComparators) => {\n return (\n isSatisfiable(thisComparators, options) &&\n range.set.some((rangeComparators) => {\n return (\n isSatisfiable(rangeComparators, options) &&\n thisComparators.every((thisComparator) => {\n return rangeComparators.every((rangeComparator) => {\n return thisComparator.intersects(rangeComparator, options)\n })\n })\n )\n })\n )\n })\n }\n\n // if ANY of the sets match ALL of its comparators, then pass\n test (version) {\n if (!version) {\n return false\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n for (let i = 0; i < this.set.length; i++) {\n if (testSet(this.set[i], version, this.options)) {\n return true\n }\n }\n return false\n }\n}\n\nmodule.exports = Range\n\nconst LRU = require('../internal/lrucache')\nconst cache = new LRU()\n\nconst parseOptions = require('../internal/parse-options')\nconst Comparator = require('./comparator')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst {\n safeRe: re,\n src,\n t,\n comparatorTrimReplace,\n tildeTrimReplace,\n caretTrimReplace,\n} = require('../internal/re')\nconst { FLAG_INCLUDE_PRERELEASE, FLAG_LOOSE } = require('../internal/constants')\n\n// unbounded global build-metadata stripper used by parseRange\nconst BUILDSTRIPRE = new RegExp(src[t.BUILD], 'g')\n\nconst isNullSet = c => c.value === '<0.0.0-0'\nconst isAny = c => c.value === ''\n\n// take a set of comparators and determine whether there\n// exists a version which can satisfy it\nconst isSatisfiable = (comparators, options) => {\n let result = true\n const remainingComparators = comparators.slice()\n let testComparator = remainingComparators.pop()\n\n while (result && remainingComparators.length) {\n result = remainingComparators.every((otherComparator) => {\n return testComparator.intersects(otherComparator, options)\n })\n\n testComparator = remainingComparators.pop()\n }\n\n return result\n}\n\n// comprised of xranges, tildes, stars, and gtlt's at this point.\n// already replaced the hyphen ranges\n// turn into a set of JUST comparators.\nconst parseComparator = (comp, options) => {\n comp = comp.replace(re[t.BUILD], '')\n debug('comp', comp, options)\n comp = replaceCarets(comp, options)\n debug('caret', comp)\n comp = replaceTildes(comp, options)\n debug('tildes', comp)\n comp = replaceXRanges(comp, options)\n debug('xrange', comp)\n comp = replaceStars(comp, options)\n debug('stars', comp)\n return comp\n}\n\nconst isX = id => !id || id.toLowerCase() === 'x' || id === '*'\n\nconst invalidXRangeOrder = (M, m, p) => (\n (isX(M) && !isX(m)) ||\n (isX(m) && p && !isX(p))\n)\n\n// ~, ~> --> * (any, kinda silly)\n// ~2, ~2.x, ~2.x.x, ~>2, ~>2.x ~>2.x.x --> >=2.0.0 <3.0.0-0\n// ~2.0, ~2.0.x, ~>2.0, ~>2.0.x --> >=2.0.0 <2.1.0-0\n// ~1.2, ~1.2.x, ~>1.2, ~>1.2.x --> >=1.2.0 <1.3.0-0\n// ~1.2.3, ~>1.2.3 --> >=1.2.3 <1.3.0-0\n// ~1.2.0, ~>1.2.0 --> >=1.2.0 <1.3.0-0\n// ~0.0.1 --> >=0.0.1 <0.1.0-0\nconst replaceTildes = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceTilde(c, options))\n .join(' ')\n}\n\nconst replaceTilde = (comp, options) => {\n const r = options.loose ? re[t.TILDELOOSE] : re[t.TILDE]\n // if we're including prereleases in the match, then the lower bound is\n // -0, the lowest possible prerelease value, just like x-ranges and carets.\n // this keeps `~1.2` equivalent to the `1.2.x` x-range it's documented as.\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('tilde', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n // ~1.2 == >=1.2.0 <1.3.0-0\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else if (pr) {\n debug('replaceTilde pr', pr)\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n } else {\n // ~1.2.3 == >=1.2.3 <1.3.0-0\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('tilde return', ret)\n return ret\n })\n}\n\n// ^ --> * (any, kinda silly)\n// ^2, ^2.x, ^2.x.x --> >=2.0.0 <3.0.0-0\n// ^2.0, ^2.0.x --> >=2.0.0 <3.0.0-0\n// ^1.2, ^1.2.x --> >=1.2.0 <2.0.0-0\n// ^1.2.3 --> >=1.2.3 <2.0.0-0\n// ^1.2.0 --> >=1.2.0 <2.0.0-0\n// ^0.0.1 --> >=0.0.1 <0.0.2-0\n// ^0.1.0 --> >=0.1.0 <0.2.0-0\nconst replaceCarets = (comp, options) => {\n return comp\n .trim()\n .split(/\\s+/)\n .map((c) => replaceCaret(c, options))\n .join(' ')\n}\n\nconst replaceCaret = (comp, options) => {\n debug('caret', comp, options)\n const r = options.loose ? re[t.CARETLOOSE] : re[t.CARET]\n const z = options.includePrerelease ? '-0' : ''\n return comp.replace(r, (_, M, m, p, pr) => {\n debug('caret', comp, _, M, m, p, pr)\n let ret\n\n if (isX(M)) {\n ret = ''\n } else if (isX(m)) {\n ret = `>=${M}.0.0${z} <${+M + 1}.0.0-0`\n } else if (isX(p)) {\n if (M === '0') {\n ret = `>=${M}.${m}.0${z} <${M}.${+m + 1}.0-0`\n } else {\n ret = `>=${M}.${m}.0${z} <${+M + 1}.0.0-0`\n }\n } else if (pr) {\n debug('replaceCaret pr', pr)\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p}-${pr\n } <${+M + 1}.0.0-0`\n }\n } else {\n debug('no pr')\n if (M === '0') {\n if (m === '0') {\n ret = `>=${M}.${m}.${p\n } <${M}.${m}.${+p + 1}-0`\n } else {\n ret = `>=${M}.${m}.${p\n } <${M}.${+m + 1}.0-0`\n }\n } else {\n ret = `>=${M}.${m}.${p\n } <${+M + 1}.0.0-0`\n }\n }\n\n debug('caret return', ret)\n return ret\n })\n}\n\nconst replaceXRanges = (comp, options) => {\n debug('replaceXRanges', comp, options)\n return comp\n .split(/\\s+/)\n .map((c) => replaceXRange(c, options))\n .join(' ')\n}\n\nconst replaceXRange = (comp, options) => {\n comp = comp.trim()\n const r = options.loose ? re[t.XRANGELOOSE] : re[t.XRANGE]\n return comp.replace(r, (ret, gtlt, M, m, p, pr) => {\n debug('xRange', comp, ret, gtlt, M, m, p, pr)\n if (invalidXRangeOrder(M, m, p)) {\n return comp\n }\n\n const xM = isX(M)\n const xm = xM || isX(m)\n const xp = xm || isX(p)\n const anyX = xp\n\n if (gtlt === '=' && anyX) {\n gtlt = ''\n }\n\n // if we're including prereleases in the match, then we need\n // to fix this to -0, the lowest possible prerelease value\n pr = options.includePrerelease ? '-0' : ''\n\n if (xM) {\n if (gtlt === '>' || gtlt === '<') {\n // nothing is allowed\n ret = '<0.0.0-0'\n } else {\n // nothing is forbidden\n ret = '*'\n }\n } else if (gtlt && anyX) {\n // we know patch is an x, because we have any x at all.\n // replace X with 0\n if (xm) {\n m = 0\n }\n p = 0\n\n if (gtlt === '>') {\n // >1 => >=2.0.0\n // >1.2 => >=1.3.0\n gtlt = '>='\n if (xm) {\n M = +M + 1\n m = 0\n p = 0\n } else {\n m = +m + 1\n p = 0\n }\n } else if (gtlt === '<=') {\n // <=0.7.x is actually <0.8.0, since any 0.7.x should\n // pass. Similarly, <=7.x is actually <8.0.0, etc.\n gtlt = '<'\n if (xm) {\n M = +M + 1\n } else {\n m = +m + 1\n }\n }\n\n if (gtlt === '<') {\n pr = '-0'\n }\n\n ret = `${gtlt + M}.${m}.${p}${pr}`\n } else if (xm) {\n ret = `>=${M}.0.0${pr} <${+M + 1}.0.0-0`\n } else if (xp) {\n ret = `>=${M}.${m}.0${pr\n } <${M}.${+m + 1}.0-0`\n }\n\n debug('xRange return', ret)\n\n return ret\n })\n}\n\n// Because * is AND-ed with everything else in the comparator,\n// and '' means \"any version\", just remove the *s entirely.\nconst replaceStars = (comp, options) => {\n debug('replaceStars', comp, options)\n // Looseness is ignored here. star is always as loose as it gets!\n return comp\n .trim()\n .replace(re[t.STAR], '')\n}\n\nconst replaceGTE0 = (comp, options) => {\n debug('replaceGTE0', comp, options)\n return comp\n .trim()\n .replace(re[options.includePrerelease ? t.GTE0PRE : t.GTE0], '')\n}\n\n// This function is passed to string.replace(re[t.HYPHENRANGE])\n// M, m, patch, prerelease, build\n// 1.2 - 3.4.5 => >=1.2.0 <=3.4.5\n// 1.2.3 - 3.4 => >=1.2.0 <3.5.0-0 Any 3.4.x will do\n// 1.2 - 3.4 => >=1.2.0 <3.5.0-0\n// TODO build?\nconst hyphenReplace = incPr => ($0,\n from, fM, fm, fp, fpr, fb,\n to, tM, tm, tp, tpr) => {\n if (isX(fM)) {\n from = ''\n } else if (isX(fm)) {\n from = `>=${fM}.0.0${incPr ? '-0' : ''}`\n } else if (isX(fp)) {\n from = `>=${fM}.${fm}.0${incPr ? '-0' : ''}`\n } else if (fpr) {\n from = `>=${from}`\n } else {\n from = `>=${from}${incPr ? '-0' : ''}`\n }\n\n if (isX(tM)) {\n to = ''\n } else if (isX(tm)) {\n to = `<${+tM + 1}.0.0-0`\n } else if (isX(tp)) {\n to = `<${tM}.${+tm + 1}.0-0`\n } else if (tpr) {\n to = `<=${tM}.${tm}.${tp}-${tpr}`\n } else if (incPr) {\n to = `<${tM}.${tm}.${+tp + 1}-0`\n } else {\n to = `<=${to}`\n }\n\n return `${from} ${to}`.trim()\n}\n\nconst testSet = (set, version, options) => {\n for (let i = 0; i < set.length; i++) {\n if (!set[i].test(version)) {\n return false\n }\n }\n\n if (version.prerelease.length && !options.includePrerelease) {\n // Find the set of versions that are allowed to have prereleases\n // For example, ^1.2.3-pr.1 desugars to >=1.2.3-pr.1 <2.0.0\n // That should allow `1.2.3-pr.2` to pass.\n // However, `1.2.4-alpha.notready` should NOT be allowed,\n // even though it's within the range set by the comparators.\n for (let i = 0; i < set.length; i++) {\n debug(set[i].semver)\n if (set[i].semver === Comparator.ANY) {\n continue\n }\n\n if (set[i].semver.prerelease.length > 0) {\n const allowed = set[i].semver\n if (allowed.major === version.major &&\n allowed.minor === version.minor &&\n allowed.patch === version.patch) {\n return true\n }\n }\n }\n\n // Version has a -pre, but it's not one of the ones we like.\n return false\n }\n\n return true\n}\n", "'use strict'\n\nconst ANY = Symbol('SemVer ANY')\n// hoisted class for cyclic dependency\nclass Comparator {\n static get ANY () {\n return ANY\n }\n\n constructor (comp, options) {\n options = parseOptions(options)\n\n if (comp instanceof Comparator) {\n if (comp.loose === !!options.loose) {\n return comp\n } else {\n comp = comp.value\n }\n }\n\n comp = comp.trim().split(/\\s+/).join(' ')\n debug('comparator', comp, options)\n this.options = options\n this.loose = !!options.loose\n this.parse(comp)\n\n if (this.semver === ANY) {\n this.value = ''\n } else {\n this.value = this.operator + this.semver.version\n }\n\n debug('comp', this)\n }\n\n parse (comp) {\n const r = this.options.loose ? re[t.COMPARATORLOOSE] : re[t.COMPARATOR]\n const m = comp.match(r)\n\n if (!m) {\n throw new TypeError(`Invalid comparator: ${comp}`)\n }\n\n this.operator = m[1] !== undefined ? m[1] : ''\n if (this.operator === '=') {\n this.operator = ''\n }\n\n // if it literally is just '>' or '' then allow anything.\n if (!m[2]) {\n this.semver = ANY\n } else {\n this.semver = new SemVer(m[2], this.options.loose)\n }\n }\n\n toString () {\n return this.value\n }\n\n test (version) {\n debug('Comparator.test', version, this.options.loose)\n\n if (this.semver === ANY || version === ANY) {\n return true\n }\n\n if (typeof version === 'string') {\n try {\n version = new SemVer(version, this.options)\n } catch (er) {\n return false\n }\n }\n\n return cmp(version, this.operator, this.semver, this.options)\n }\n\n intersects (comp, options) {\n if (!(comp instanceof Comparator)) {\n throw new TypeError('a Comparator is required')\n }\n\n if (this.operator === '') {\n if (this.value === '') {\n return true\n }\n return new Range(comp.value, options).test(this.value)\n } else if (comp.operator === '') {\n if (comp.value === '') {\n return true\n }\n return new Range(this.value, options).test(comp.semver)\n }\n\n options = parseOptions(options)\n\n // Special cases where nothing can possibly be lower\n if (options.includePrerelease &&\n (this.value === '<0.0.0-0' || comp.value === '<0.0.0-0')) {\n return false\n }\n if (!options.includePrerelease &&\n (this.value.startsWith('<0.0.0') || comp.value.startsWith('<0.0.0'))) {\n return false\n }\n\n // Same direction increasing (> or >=)\n if (this.operator.startsWith('>') && comp.operator.startsWith('>')) {\n return true\n }\n // Same direction decreasing (< or <=)\n if (this.operator.startsWith('<') && comp.operator.startsWith('<')) {\n return true\n }\n // same SemVer and both sides are inclusive (<= or >=)\n if (\n (this.semver.version === comp.semver.version) &&\n this.operator.includes('=') && comp.operator.includes('=')) {\n return true\n }\n // opposite directions less than\n if (cmp(this.semver, '<', comp.semver, options) &&\n this.operator.startsWith('>') && comp.operator.startsWith('<')) {\n return true\n }\n // opposite directions greater than\n if (cmp(this.semver, '>', comp.semver, options) &&\n this.operator.startsWith('<') && comp.operator.startsWith('>')) {\n return true\n }\n return false\n }\n}\n\nmodule.exports = Comparator\n\nconst parseOptions = require('../internal/parse-options')\nconst { safeRe: re, t } = require('../internal/re')\nconst cmp = require('../functions/cmp')\nconst debug = require('../internal/debug')\nconst SemVer = require('./semver')\nconst Range = require('./range')\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst satisfies = (version, range, options) => {\n try {\n range = new Range(range, options)\n } catch (er) {\n return false\n }\n return range.test(version)\n}\nmodule.exports = satisfies\n", "'use strict'\n\nconst Range = require('../classes/range')\n\n// Mostly just for testing and legacy API reasons\nconst toComparators = (range, options) =>\n new Range(range, options).set\n .map(comp => comp.map(c => c.value).join(' ').trim().split(' '))\n\nmodule.exports = toComparators\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\n\nconst maxSatisfying = (versions, range, options) => {\n let max = null\n let maxSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!max || maxSV.compare(v) === -1) {\n // compare(max, v, true)\n max = v\n maxSV = new SemVer(max, options)\n }\n }\n })\n return max\n}\nmodule.exports = maxSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst minSatisfying = (versions, range, options) => {\n let min = null\n let minSV = null\n let rangeObj = null\n try {\n rangeObj = new Range(range, options)\n } catch (er) {\n return null\n }\n versions.forEach((v) => {\n if (rangeObj.test(v)) {\n // satisfies(v, range, options)\n if (!min || minSV.compare(v) === 1) {\n // compare(min, v, true)\n min = v\n minSV = new SemVer(min, options)\n }\n }\n })\n return min\n}\nmodule.exports = minSatisfying\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Range = require('../classes/range')\nconst gt = require('../functions/gt')\n\nconst minVersion = (range, loose) => {\n range = new Range(range, loose)\n\n let minver = new SemVer('0.0.0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = new SemVer('0.0.0-0')\n if (range.test(minver)) {\n return minver\n }\n\n minver = null\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let setMin = null\n comparators.forEach((comparator) => {\n // Clone to avoid manipulating the comparator's semver object.\n const compver = new SemVer(comparator.semver.version)\n switch (comparator.operator) {\n case '>':\n if (compver.prerelease.length === 0) {\n compver.patch++\n } else {\n compver.prerelease.push(0)\n }\n compver.raw = compver.format()\n /* fallthrough */\n case '':\n case '>=':\n if (!setMin || gt(compver, setMin)) {\n setMin = compver\n }\n break\n case '<':\n case '<=':\n /* Ignore maximum versions */\n break\n /* istanbul ignore next */\n default:\n throw new Error(`Unexpected operation: ${comparator.operator}`)\n }\n })\n if (setMin && (!minver || gt(minver, setMin))) {\n minver = setMin\n }\n }\n\n if (minver && range.test(minver)) {\n return minver\n }\n\n return null\n}\nmodule.exports = minVersion\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst validRange = (range, options) => {\n try {\n // Return '*' instead of '' so that truthiness works.\n // This will throw if it's invalid anyway\n return new Range(range, options).range || '*'\n } catch (er) {\n return null\n }\n}\nmodule.exports = validRange\n", "'use strict'\n\nconst SemVer = require('../classes/semver')\nconst Comparator = require('../classes/comparator')\nconst { ANY } = Comparator\nconst Range = require('../classes/range')\nconst satisfies = require('../functions/satisfies')\nconst gt = require('../functions/gt')\nconst lt = require('../functions/lt')\nconst lte = require('../functions/lte')\nconst gte = require('../functions/gte')\n\nconst outside = (version, range, hilo, options) => {\n version = new SemVer(version, options)\n range = new Range(range, options)\n\n let gtfn, ltefn, ltfn, comp, ecomp\n switch (hilo) {\n case '>':\n gtfn = gt\n ltefn = lte\n ltfn = lt\n comp = '>'\n ecomp = '>='\n break\n case '<':\n gtfn = lt\n ltefn = gte\n ltfn = gt\n comp = '<'\n ecomp = '<='\n break\n default:\n throw new TypeError('Must provide a hilo val of \"<\" or \">\"')\n }\n\n // If it satisfies the range it is not outside\n if (satisfies(version, range, options)) {\n return false\n }\n\n // From now on, variable terms are as if we're in \"gtr\" mode.\n // but note that everything is flipped for the \"ltr\" function.\n\n for (let i = 0; i < range.set.length; ++i) {\n const comparators = range.set[i]\n\n let high = null\n let low = null\n\n comparators.forEach((comparator) => {\n if (comparator.semver === ANY) {\n comparator = new Comparator('>=0.0.0')\n }\n high = high || comparator\n low = low || comparator\n if (gtfn(comparator.semver, high.semver, options)) {\n high = comparator\n } else if (ltfn(comparator.semver, low.semver, options)) {\n low = comparator\n }\n })\n\n // If the edge version comparator has a operator then our version\n // isn't outside it\n if (high.operator === comp || high.operator === ecomp) {\n return false\n }\n\n // If the lowest version comparator has an operator and our version\n // is less than it then it isn't higher than the range\n if ((!low.operator || low.operator === comp) &&\n ltefn(version, low.semver)) {\n return false\n } else if (low.operator === ecomp && ltfn(version, low.semver)) {\n return false\n }\n }\n return true\n}\n\nmodule.exports = outside\n", "'use strict'\n\n// Determine if version is greater than all the versions possible in the range.\nconst outside = require('./outside')\nconst gtr = (version, range, options) => outside(version, range, '>', options)\nmodule.exports = gtr\n", "'use strict'\n\nconst outside = require('./outside')\n// Determine if version is less than all the versions possible in the range\nconst ltr = (version, range, options) => outside(version, range, '<', options)\nmodule.exports = ltr\n", "'use strict'\n\nconst Range = require('../classes/range')\nconst intersects = (r1, r2, options) => {\n r1 = new Range(r1, options)\n r2 = new Range(r2, options)\n return r1.intersects(r2, options)\n}\nmodule.exports = intersects\n", "'use strict'\n\n// given a set of versions and a range, create a \"simplified\" range\n// that includes the same versions that the original range does\n// If the original range is shorter than the simplified one, return that.\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\nmodule.exports = (versions, range, options) => {\n const set = []\n let first = null\n let prev = null\n const v = versions.sort((a, b) => compare(a, b, options))\n for (const version of v) {\n const included = satisfies(version, range, options)\n if (included) {\n prev = version\n if (!first) {\n first = version\n }\n } else {\n if (prev) {\n set.push([first, prev])\n }\n prev = null\n first = null\n }\n }\n if (first) {\n set.push([first, null])\n }\n\n const ranges = []\n for (const [min, max] of set) {\n if (min === max) {\n ranges.push(min)\n } else if (!max && min === v[0]) {\n ranges.push('*')\n } else if (!max) {\n ranges.push(`>=${min}`)\n } else if (min === v[0]) {\n ranges.push(`<=${max}`)\n } else {\n ranges.push(`${min} - ${max}`)\n }\n }\n const simplified = ranges.join(' || ')\n const original = typeof range.raw === 'string' ? range.raw : String(range)\n return simplified.length < original.length ? simplified : range\n}\n", "'use strict'\n\nconst Range = require('../classes/range.js')\nconst Comparator = require('../classes/comparator.js')\nconst { ANY } = Comparator\nconst satisfies = require('../functions/satisfies.js')\nconst compare = require('../functions/compare.js')\n\n// Complex range `r1 || r2 || ...` is a subset of `R1 || R2 || ...` iff:\n// - Every simple range `r1, r2, ...` is a null set, OR\n// - Every simple range `r1, r2, ...` which is not a null set is a subset of\n// some `R1, R2, ...`\n//\n// Simple range `c1 c2 ...` is a subset of simple range `C1 C2 ...` iff:\n// - If c is only the ANY comparator\n// - If C is only the ANY comparator, return true\n// - Else if in prerelease mode, return false\n// - else replace c with `[>=0.0.0]`\n// - If C is only the ANY comparator\n// - if in prerelease mode, return true\n// - else replace C with `[>=0.0.0]`\n// - Let EQ be the set of = comparators in c\n// - If EQ is more than one, return true (null set)\n// - Let GT be the highest > or >= comparator in c\n// - Let LT be the lowest < or <= comparator in c\n// - If GT and LT, and GT.semver > LT.semver, return true (null set)\n// - If any C is a = range, and GT or LT are set, return false\n// - If EQ\n// - If GT, and EQ does not satisfy GT, return true (null set)\n// - If LT, and EQ does not satisfy LT, return true (null set)\n// - If EQ satisfies every C, return true\n// - Else return false\n// - If GT\n// - If GT.semver is lower than any > or >= comp in C, return false\n// - If GT is >=, and GT.semver does not satisfy every C, return false\n// - If GT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the GT.semver tuple, return false\n// - If LT\n// - If LT.semver is greater than any < or <= comp in C, return false\n// - If LT is <=, and LT.semver does not satisfy every C, return false\n// - If LT.semver has a prerelease, and not in prerelease mode\n// - If no C has a prerelease and the LT.semver tuple, return false\n// - Else return true\n\nconst subset = (sub, dom, options = {}) => {\n if (sub === dom) {\n return true\n }\n\n sub = new Range(sub, options)\n dom = new Range(dom, options)\n let sawNonNull = false\n\n OUTER: for (const simpleSub of sub.set) {\n for (const simpleDom of dom.set) {\n const isSub = simpleSubset(simpleSub, simpleDom, options)\n sawNonNull = sawNonNull || isSub !== null\n if (isSub) {\n continue OUTER\n }\n }\n // the null set is a subset of everything, but null simple ranges in\n // a complex range should be ignored. so if we saw a non-null range,\n // then we know this isn't a subset, but if EVERY simple range was null,\n // then it is a subset.\n if (sawNonNull) {\n return false\n }\n }\n return true\n}\n\nconst minimumVersionWithPreRelease = [new Comparator('>=0.0.0-0')]\nconst minimumVersion = [new Comparator('>=0.0.0')]\n\nconst simpleSubset = (sub, dom, options) => {\n if (sub === dom) {\n return true\n }\n\n if (sub.length === 1 && sub[0].semver === ANY) {\n if (dom.length === 1 && dom[0].semver === ANY) {\n return true\n } else if (options.includePrerelease) {\n sub = minimumVersionWithPreRelease\n } else {\n sub = minimumVersion\n }\n }\n\n if (dom.length === 1 && dom[0].semver === ANY) {\n if (options.includePrerelease) {\n return true\n } else {\n dom = minimumVersion\n }\n }\n\n const eqSet = new Set()\n let gt, lt\n for (const c of sub) {\n if (c.operator === '>' || c.operator === '>=') {\n gt = higherGT(gt, c, options)\n } else if (c.operator === '<' || c.operator === '<=') {\n lt = lowerLT(lt, c, options)\n } else {\n eqSet.add(c.semver)\n }\n }\n\n if (eqSet.size > 1) {\n return null\n }\n\n let gtltComp\n if (gt && lt) {\n gtltComp = compare(gt.semver, lt.semver, options)\n if (gtltComp > 0) {\n return null\n } else if (gtltComp === 0 && (gt.operator !== '>=' || lt.operator !== '<=')) {\n return null\n }\n }\n\n // will iterate one or zero times\n for (const eq of eqSet) {\n if (gt && !satisfies(eq, String(gt), options)) {\n return null\n }\n\n if (lt && !satisfies(eq, String(lt), options)) {\n return null\n }\n\n for (const c of dom) {\n if (!satisfies(eq, String(c), options)) {\n return false\n }\n }\n\n return true\n }\n\n let higher, lower\n let hasDomLT, hasDomGT\n // if the subset has a prerelease, we need a comparator in the superset\n // with the same tuple and a prerelease, or it's not a subset\n let needDomLTPre = lt &&\n !options.includePrerelease &&\n lt.semver.prerelease.length ? lt.semver : false\n let needDomGTPre = gt &&\n !options.includePrerelease &&\n gt.semver.prerelease.length ? gt.semver : false\n // exception: <1.2.3-0 is the same as <1.2.3\n if (needDomLTPre && needDomLTPre.prerelease.length === 1 &&\n lt.operator === '<' && needDomLTPre.prerelease[0] === 0) {\n needDomLTPre = false\n }\n\n for (const c of dom) {\n hasDomGT = hasDomGT || c.operator === '>' || c.operator === '>='\n hasDomLT = hasDomLT || c.operator === '<' || c.operator === '<='\n if (gt) {\n if (needDomGTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomGTPre.major &&\n c.semver.minor === needDomGTPre.minor &&\n c.semver.patch === needDomGTPre.patch) {\n needDomGTPre = false\n }\n }\n if (c.operator === '>' || c.operator === '>=') {\n higher = higherGT(gt, c, options)\n if (higher === c && higher !== gt) {\n return false\n }\n } else if (gt.operator === '>=' && !c.test(gt.semver)) {\n return false\n }\n }\n if (lt) {\n if (needDomLTPre) {\n if (c.semver.prerelease && c.semver.prerelease.length &&\n c.semver.major === needDomLTPre.major &&\n c.semver.minor === needDomLTPre.minor &&\n c.semver.patch === needDomLTPre.patch) {\n needDomLTPre = false\n }\n }\n if (c.operator === '<' || c.operator === '<=') {\n lower = lowerLT(lt, c, options)\n if (lower === c && lower !== lt) {\n return false\n }\n } else if (lt.operator === '<=' && !c.test(lt.semver)) {\n return false\n }\n }\n if (!c.operator && (lt || gt) && gtltComp !== 0) {\n return false\n }\n }\n\n // if there was a < or >, and nothing in the dom, then must be false\n // UNLESS it was limited by another range in the other direction.\n // Eg, >1.0.0 <1.0.1 is still a subset of <2.0.0\n if (gt && hasDomLT && !lt && gtltComp !== 0) {\n return false\n }\n\n if (lt && hasDomGT && !gt && gtltComp !== 0) {\n return false\n }\n\n // we needed a prerelease range in a specific tuple, but didn't get one\n // then this isn't a subset. eg >=1.2.3-pre is not a subset of >=1.0.0,\n // because it includes prereleases in the 1.2.3 tuple\n if (needDomGTPre || needDomLTPre) {\n return false\n }\n\n return true\n}\n\n// >=1.2.3 is lower than >1.2.3\nconst higherGT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp > 0 ? a\n : comp < 0 ? b\n : b.operator === '>' && a.operator === '>=' ? b\n : a\n}\n\n// <=1.2.3 is higher than <1.2.3\nconst lowerLT = (a, b, options) => {\n if (!a) {\n return b\n }\n const comp = compare(a.semver, b.semver, options)\n return comp < 0 ? a\n : comp > 0 ? b\n : b.operator === '<' && a.operator === '<=' ? b\n : a\n}\n\nmodule.exports = subset\n", "'use strict'\n\n// just pre-load all the stuff that index.js lazily exports\nconst internalRe = require('./internal/re')\nconst constants = require('./internal/constants')\nconst SemVer = require('./classes/semver')\nconst identifiers = require('./internal/identifiers')\nconst parse = require('./functions/parse')\nconst valid = require('./functions/valid')\nconst clean = require('./functions/clean')\nconst inc = require('./functions/inc')\nconst diff = require('./functions/diff')\nconst major = require('./functions/major')\nconst minor = require('./functions/minor')\nconst patch = require('./functions/patch')\nconst prerelease = require('./functions/prerelease')\nconst compare = require('./functions/compare')\nconst rcompare = require('./functions/rcompare')\nconst compareLoose = require('./functions/compare-loose')\nconst compareBuild = require('./functions/compare-build')\nconst sort = require('./functions/sort')\nconst rsort = require('./functions/rsort')\nconst gt = require('./functions/gt')\nconst lt = require('./functions/lt')\nconst eq = require('./functions/eq')\nconst neq = require('./functions/neq')\nconst gte = require('./functions/gte')\nconst lte = require('./functions/lte')\nconst cmp = require('./functions/cmp')\nconst coerce = require('./functions/coerce')\nconst truncate = require('./functions/truncate')\nconst Comparator = require('./classes/comparator')\nconst Range = require('./classes/range')\nconst satisfies = require('./functions/satisfies')\nconst toComparators = require('./ranges/to-comparators')\nconst maxSatisfying = require('./ranges/max-satisfying')\nconst minSatisfying = require('./ranges/min-satisfying')\nconst minVersion = require('./ranges/min-version')\nconst validRange = require('./ranges/valid')\nconst outside = require('./ranges/outside')\nconst gtr = require('./ranges/gtr')\nconst ltr = require('./ranges/ltr')\nconst intersects = require('./ranges/intersects')\nconst simplifyRange = require('./ranges/simplify')\nconst subset = require('./ranges/subset')\nmodule.exports = {\n parse,\n valid,\n clean,\n inc,\n diff,\n major,\n minor,\n patch,\n prerelease,\n compare,\n rcompare,\n compareLoose,\n compareBuild,\n sort,\n rsort,\n gt,\n lt,\n eq,\n neq,\n gte,\n lte,\n cmp,\n coerce,\n truncate,\n Comparator,\n Range,\n satisfies,\n toComparators,\n maxSatisfying,\n minSatisfying,\n minVersion,\n validRange,\n outside,\n gtr,\n ltr,\n intersects,\n simplifyRange,\n subset,\n SemVer,\n re: internalRe.re,\n src: internalRe.src,\n tokens: internalRe.t,\n SEMVER_SPEC_VERSION: constants.SEMVER_SPEC_VERSION,\n RELEASE_TYPES: constants.RELEASE_TYPES,\n compareIdentifiers: identifiers.compareIdentifiers,\n rcompareIdentifiers: identifiers.rcompareIdentifiers,\n}\n", "// Some numerical data is initialized as -1 even when it doesn't need initialization to help the JIT infer types\n// aliases for shorter compressed code (most minifers don't do this)\nvar ab = ArrayBuffer, u8 = Uint8Array, u16 = Uint16Array, i16 = Int16Array, u32 = Uint32Array, i32 = Int32Array;\nvar slc = function (v, s, e) {\n if (u8.prototype.slice)\n return u8.prototype.slice.call(v, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n var n = new u8(e - s);\n n.set(v.subarray(s, e));\n return n;\n};\nvar fill = function (v, n, s, e) {\n if (u8.prototype.fill)\n return u8.prototype.fill.call(v, n, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n for (; s < e; ++s)\n v[s] = n;\n return v;\n};\nvar cpw = function (v, t, s, e) {\n if (u8.prototype.copyWithin)\n return u8.prototype.copyWithin.call(v, t, s, e);\n if (s == null || s < 0)\n s = 0;\n if (e == null || e > v.length)\n e = v.length;\n while (s < e) {\n v[t++] = v[s++];\n }\n};\n/**\n * Codes for errors generated within this library\n */\nexport var ZstdErrorCode = {\n InvalidData: 0,\n WindowSizeTooLarge: 1,\n InvalidBlockType: 2,\n FSEAccuracyTooHigh: 3,\n DistanceTooFarBack: 4,\n UnexpectedEOF: 5\n};\n// error codes\nvar ec = [\n 'invalid zstd data',\n 'window size too large (>2046MB)',\n 'invalid block type',\n 'FSE accuracy too high',\n 'match distance too far back',\n 'unexpected EOF'\n];\nvar err = function (ind, msg, nt) {\n var e = new Error(msg || ec[ind]);\n e.code = ind;\n if (Error.captureStackTrace)\n Error.captureStackTrace(e, err);\n if (!nt)\n throw e;\n return e;\n};\nvar rb = function (d, b, n) {\n var i = 0, o = 0;\n for (; i < n; ++i)\n o |= d[b++] << (i << 3);\n return o;\n};\nvar b4 = function (d, b) { return (d[b] | (d[b + 1] << 8) | (d[b + 2] << 16) | (d[b + 3] << 24)) >>> 0; };\n// read Zstandard frame header\nvar rzfh = function (dat, w) {\n var n3 = dat[0] | (dat[1] << 8) | (dat[2] << 16);\n if (n3 == 0x2FB528 && dat[3] == 253) {\n // Zstandard\n var flg = dat[4];\n // single segment checksum dict flag frame content flag\n var ss = (flg >> 5) & 1, cc = (flg >> 2) & 1, df = flg & 3, fcf = flg >> 6;\n if (flg & 8)\n err(0);\n // byte\n var bt = 6 - ss;\n // dict bytes\n var db = df == 3 ? 4 : df;\n // dictionary id\n var di = rb(dat, bt, db);\n bt += db;\n // frame size bytes\n var fsb = fcf ? (1 << fcf) : ss;\n // frame source size\n var fss = rb(dat, bt, fsb) + ((fcf == 1) && 256);\n // window size\n var ws = fss;\n if (!ss) {\n // window descriptor\n var wb = 1 << (10 + (dat[5] >> 3));\n ws = wb + (wb >> 3) * (dat[5] & 7);\n }\n if (ws > 2145386496)\n err(1);\n var buf = new u8((w == 1 ? (fss || ws) : w ? 0 : ws) + 12);\n buf[0] = 1, buf[4] = 4, buf[8] = 8;\n return {\n b: bt + fsb,\n y: 0,\n l: 0,\n d: di,\n w: (w && w != 1) ? w : buf.subarray(12),\n e: ws,\n o: new i32(buf.buffer, 0, 3),\n u: fss,\n c: cc,\n m: Math.min(131072, ws)\n };\n }\n else if (((n3 >> 4) | (dat[3] << 20)) == 0x184D2A5) {\n // skippable\n return b4(dat, 4) + 8;\n }\n err(0);\n};\n// most significant bit for nonzero\nvar msb = function (val) {\n var bits = 0;\n for (; (1 << bits) <= val; ++bits)\n ;\n return bits - 1;\n};\n// read finite state entropy\nvar rfse = function (dat, bt, mal) {\n // table pos\n var tpos = (bt << 3) + 4;\n // accuracy log\n var al = (dat[bt] & 15) + 5;\n if (al > mal)\n err(3);\n // size\n var sz = 1 << al;\n // probabilities symbols repeat index high threshold\n var probs = sz, sym = -1, re = -1, i = -1, ht = sz;\n // optimization: single allocation is much faster\n var buf = new ab(512 + (sz << 2));\n var freq = new i16(buf, 0, 256);\n // same view as freq\n var dstate = new u16(buf, 0, 256);\n var nstate = new u16(buf, 512, sz);\n var bb1 = 512 + (sz << 1);\n var syms = new u8(buf, bb1, sz);\n var nbits = new u8(buf, bb1 + sz);\n while (sym < 255 && probs > 0) {\n var bits = msb(probs + 1);\n var cbt = tpos >> 3;\n // mask\n var msk = (1 << (bits + 1)) - 1;\n var val = ((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (tpos & 7)) & msk;\n // mask (1 fewer bit)\n var msk1fb = (1 << bits) - 1;\n // max small value\n var msv = msk - probs - 1;\n // small value\n var sval = val & msk1fb;\n if (sval < msv)\n tpos += bits, val = sval;\n else {\n tpos += bits + 1;\n if (val > msk1fb)\n val -= msv;\n }\n freq[++sym] = --val;\n if (val == -1) {\n probs += val;\n syms[--ht] = sym;\n }\n else\n probs -= val;\n if (!val) {\n do {\n // repeat byte\n var rbt = tpos >> 3;\n re = ((dat[rbt] | (dat[rbt + 1] << 8)) >> (tpos & 7)) & 3;\n tpos += 2;\n sym += re;\n } while (re == 3);\n }\n }\n if (sym > 255 || probs)\n err(0);\n var sympos = 0;\n // sym step (coprime with sz - formula from zstd source)\n var sstep = (sz >> 1) + (sz >> 3) + 3;\n // sym mask\n var smask = sz - 1;\n for (var s = 0; s <= sym; ++s) {\n var sf = freq[s];\n if (sf < 1) {\n dstate[s] = -sf;\n continue;\n }\n // This is split into two loops in zstd to avoid branching, but as JS is higher-level that is unnecessary\n for (i = 0; i < sf; ++i) {\n syms[sympos] = s;\n do {\n sympos = (sympos + sstep) & smask;\n } while (sympos >= ht);\n }\n }\n // After spreading symbols, should be zero again\n if (sympos)\n err(0);\n for (i = 0; i < sz; ++i) {\n // next state\n var ns = dstate[syms[i]]++;\n // num bits\n var nb = nbits[i] = al - msb(ns);\n nstate[i] = (ns << nb) - sz;\n }\n return [(tpos + 7) >> 3, {\n b: al,\n s: syms,\n n: nbits,\n t: nstate\n }];\n};\n// read huffman\nvar rhu = function (dat, bt) {\n // index weight count\n var i = 0, wc = -1;\n // buffer header byte\n var buf = new u8(292), hb = dat[bt];\n // huffman weights\n var hw = buf.subarray(0, 256);\n // rank count\n var rc = buf.subarray(256, 268);\n // rank index\n var ri = new u16(buf.buffer, 268);\n // NOTE: at this point bt is 1 less than expected\n if (hb < 128) {\n // end byte, fse decode table\n var _a = rfse(dat, bt + 1, 6), ebt = _a[0], fdt = _a[1];\n bt += hb;\n var epos = ebt << 3;\n // last byte\n var lb = dat[bt];\n if (!lb)\n err(0);\n // state1 state2 state1 bits state2 bits\n var st1 = 0, st2 = 0, btr1 = fdt.b, btr2 = btr1;\n // fse pos\n // pre-increment to account for original deficit of 1\n var fpos = (++bt << 3) - 8 + msb(lb);\n for (;;) {\n fpos -= btr1;\n if (fpos < epos)\n break;\n var cbt = fpos >> 3;\n st1 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr1) - 1);\n hw[++wc] = fdt.s[st1];\n fpos -= btr2;\n if (fpos < epos)\n break;\n cbt = fpos >> 3;\n st2 += ((dat[cbt] | (dat[cbt + 1] << 8)) >> (fpos & 7)) & ((1 << btr2) - 1);\n hw[++wc] = fdt.s[st2];\n btr1 = fdt.n[st1];\n st1 = fdt.t[st1];\n btr2 = fdt.n[st2];\n st2 = fdt.t[st2];\n }\n if (++wc > 255)\n err(0);\n }\n else {\n wc = hb - 127;\n for (; i < wc; i += 2) {\n var byte = dat[++bt];\n hw[i] = byte >> 4;\n hw[i + 1] = byte & 15;\n }\n ++bt;\n }\n // weight exponential sum\n var wes = 0;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n // bits must be at most 11, same as weight\n if (wt > 11)\n err(0);\n wes += wt && (1 << (wt - 1));\n }\n // max bits\n var mb = msb(wes) + 1;\n // table size\n var ts = 1 << mb;\n // remaining sum\n var rem = ts - wes;\n // must be power of 2\n if (rem & (rem - 1))\n err(0);\n hw[wc++] = msb(rem) + 1;\n for (i = 0; i < wc; ++i) {\n var wt = hw[i];\n ++rc[hw[i] = wt && (mb + 1 - wt)];\n }\n // huf buf\n var hbuf = new u8(ts << 1);\n // symbols num bits\n var syms = hbuf.subarray(0, ts), nb = hbuf.subarray(ts);\n ri[mb] = 0;\n for (i = mb; i > 0; --i) {\n var pv = ri[i];\n fill(nb, i, pv, ri[i - 1] = pv + rc[i] * (1 << (mb - i)));\n }\n if (ri[0] != ts)\n err(0);\n for (i = 0; i < wc; ++i) {\n var bits = hw[i];\n if (bits) {\n var code = ri[bits];\n fill(syms, i, code, ri[bits] = code + (1 << (mb - bits)));\n }\n }\n return [bt, {\n n: nb,\n b: mb,\n s: syms\n }];\n};\n// Tables generated using this:\n// https://gist.github.com/101arrowz/a979452d4355992cbf8f257cbffc9edd\n// default literal length table\nvar dllt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 81, 16, 99, 140, 49, 198, 24, 99, 12, 33, 196, 24, 99, 102, 102, 134, 70, 146, 4\n]), 0, 6)[1];\n// default match length table\nvar dmlt = /*#__PURE__*/ rfse(/*#__PURE__*/ new u8([\n 33, 20, 196, 24, 99, 140, 33, 132, 16, 66, 8, 33, 132, 16, 66, 8, 33, 68, 68, 68, 68, 68, 68, 68, 68, 36, 9\n]), 0, 6)[1];\n// default offset code table\nvar doct = /*#__PURE__ */ rfse(/*#__PURE__*/ new u8([\n 32, 132, 16, 66, 102, 70, 68, 68, 68, 68, 36, 73, 2\n]), 0, 5)[1];\n// bits to baseline\nvar b2bl = function (b, s) {\n var len = b.length, bl = new i32(len);\n for (var i = 0; i < len; ++i) {\n bl[i] = s;\n s += 1 << b[i];\n }\n return bl;\n};\n// literal length bits\nvar llb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 16843009, 50528770, 134678020, 202050057, 269422093\n])).buffer, 0, 36);\n// literal length baseline\nvar llbl = /*#__PURE__ */ b2bl(llb, 0);\n// match length bits\nvar mlb = /*#__PURE__ */ new u8(( /*#__PURE__ */new i32([\n 0, 0, 0, 0, 0, 0, 0, 0, 16843009, 50528770, 117769220, 185207048, 252579084, 16\n])).buffer, 0, 53);\n// match length baseline\nvar mlbl = /*#__PURE__ */ b2bl(mlb, 3);\n// decode huffman stream\nvar dhu = function (dat, out, hu) {\n var len = dat.length, ss = out.length, lb = dat[len - 1], msk = (1 << hu.b) - 1, eb = -hu.b;\n if (!lb)\n err(0);\n var st = 0, btr = hu.b, pos = (len << 3) - 8 + msb(lb) - btr, i = -1;\n for (; pos > eb && i < ss;) {\n var cbt = pos >> 3;\n var val = (dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (pos & 7);\n st = ((st << btr) | val) & msk;\n out[++i] = hu.s[st];\n pos -= (btr = hu.n[st]);\n }\n if (pos != eb || i + 1 != ss)\n err(0);\n};\n// decode huffman stream 4x\n// TODO: use workers to parallelize\nvar dhu4 = function (dat, out, hu) {\n var bt = 6;\n var ss = out.length, sz1 = (ss + 3) >> 2, sz2 = sz1 << 1, sz3 = sz1 + sz2;\n dhu(dat.subarray(bt, bt += dat[0] | (dat[1] << 8)), out.subarray(0, sz1), hu);\n dhu(dat.subarray(bt, bt += dat[2] | (dat[3] << 8)), out.subarray(sz1, sz2), hu);\n dhu(dat.subarray(bt, bt += dat[4] | (dat[5] << 8)), out.subarray(sz2, sz3), hu);\n dhu(dat.subarray(bt), out.subarray(sz3), hu);\n};\n// read Zstandard block\nvar rzb = function (dat, st, out) {\n var _a;\n var bt = st.b;\n // byte 0 block type\n var b0 = dat[bt], btype = (b0 >> 1) & 3;\n st.l = b0 & 1;\n var sz = (b0 >> 3) | (dat[bt + 1] << 5) | (dat[bt + 2] << 13);\n // end byte for block\n var ebt = (bt += 3) + sz;\n if (btype == 1) {\n if (bt >= dat.length)\n return;\n st.b = bt + 1;\n if (out) {\n fill(out, dat[bt], st.y, st.y += sz);\n return out;\n }\n return fill(new u8(sz), dat[bt]);\n }\n if (ebt > dat.length)\n return;\n if (btype == 0) {\n st.b = ebt;\n if (out) {\n out.set(dat.subarray(bt, ebt), st.y);\n st.y += sz;\n return out;\n }\n return slc(dat, bt, ebt);\n }\n if (btype == 2) {\n // byte 3 lit btype size format\n var b3 = dat[bt], lbt = b3 & 3, sf = (b3 >> 2) & 3;\n // lit src size lit cmp sz 4 streams\n var lss = b3 >> 4, lcs = 0, s4 = 0;\n if (lbt < 2) {\n if (sf & 1)\n lss |= (dat[++bt] << 4) | ((sf & 2) && (dat[++bt] << 12));\n else\n lss = b3 >> 3;\n }\n else {\n s4 = sf;\n if (sf < 2)\n lss |= ((dat[++bt] & 63) << 4), lcs = (dat[bt] >> 6) | (dat[++bt] << 2);\n else if (sf == 2)\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 3) << 12), lcs = (dat[bt] >> 2) | (dat[++bt] << 6);\n else\n lss |= (dat[++bt] << 4) | ((dat[++bt] & 63) << 12), lcs = (dat[bt] >> 6) | (dat[++bt] << 2) | (dat[++bt] << 10);\n }\n ++bt;\n // add literals to end - can never overlap with backreferences because unused literals always appended\n var buf = out ? out.subarray(st.y, st.y + st.m) : new u8(st.m);\n // starting point for literals\n var spl = buf.length - lss;\n if (lbt == 0)\n buf.set(dat.subarray(bt, bt += lss), spl);\n else if (lbt == 1)\n fill(buf, dat[bt++], spl);\n else {\n // huffman table\n var hu = st.h;\n if (lbt == 2) {\n var hud = rhu(dat, bt);\n // subtract description length\n lcs += bt - (bt = hud[0]);\n st.h = hu = hud[1];\n }\n else if (!hu)\n err(0);\n (s4 ? dhu4 : dhu)(dat.subarray(bt, bt += lcs), buf.subarray(spl), hu);\n }\n // num sequences\n var ns = dat[bt++];\n if (ns) {\n if (ns == 255)\n ns = (dat[bt++] | (dat[bt++] << 8)) + 0x7F00;\n else if (ns > 127)\n ns = ((ns - 128) << 8) | dat[bt++];\n // symbol compression modes\n var scm = dat[bt++];\n if (scm & 3)\n err(0);\n var dts = [dmlt, doct, dllt];\n for (var i = 2; i > -1; --i) {\n var md = (scm >> ((i << 1) + 2)) & 3;\n if (md == 1) {\n // rle buf\n var rbuf = new u8([0, 0, dat[bt++]]);\n dts[i] = {\n s: rbuf.subarray(2, 3),\n n: rbuf.subarray(0, 1),\n t: new u16(rbuf.buffer, 0, 1),\n b: 0\n };\n }\n else if (md == 2) {\n // accuracy log 8 for offsets, 9 for others\n _a = rfse(dat, bt, 9 - (i & 1)), bt = _a[0], dts[i] = _a[1];\n }\n else if (md == 3) {\n if (!st.t)\n err(0);\n dts[i] = st.t[i];\n }\n }\n var _b = st.t = dts, mlt = _b[0], oct = _b[1], llt = _b[2];\n var lb = dat[ebt - 1];\n if (!lb)\n err(0);\n var spos = (ebt << 3) - 8 + msb(lb) - llt.b, cbt = spos >> 3, oubt = 0;\n var lst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << llt.b) - 1);\n cbt = (spos -= oct.b) >> 3;\n var ost = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << oct.b) - 1);\n cbt = (spos -= mlt.b) >> 3;\n var mst = ((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mlt.b) - 1);\n for (++ns; --ns;) {\n var llc = llt.s[lst];\n var lbtr = llt.n[lst];\n var mlc = mlt.s[mst];\n var mbtr = mlt.n[mst];\n var ofc = oct.s[ost];\n var obtr = oct.n[ost];\n cbt = (spos -= ofc) >> 3;\n var ofp = 1 << ofc;\n var off = ofp + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16) | (dat[cbt + 3] << 24)) >>> (spos & 7)) & (ofp - 1));\n cbt = (spos -= mlb[mlc]) >> 3;\n var ml = mlbl[mlc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << mlb[mlc]) - 1));\n cbt = (spos -= llb[llc]) >> 3;\n var ll = llbl[llc] + (((dat[cbt] | (dat[cbt + 1] << 8) | (dat[cbt + 2] << 16)) >> (spos & 7)) & ((1 << llb[llc]) - 1));\n cbt = (spos -= lbtr) >> 3;\n lst = llt.t[lst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << lbtr) - 1));\n cbt = (spos -= mbtr) >> 3;\n mst = mlt.t[mst] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << mbtr) - 1));\n cbt = (spos -= obtr) >> 3;\n ost = oct.t[ost] + (((dat[cbt] | (dat[cbt + 1] << 8)) >> (spos & 7)) & ((1 << obtr) - 1));\n if (off > 3) {\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off -= 3;\n }\n else {\n var idx = off - (ll != 0);\n if (idx) {\n off = idx == 3 ? st.o[0] - 1 : st.o[idx];\n if (idx > 1)\n st.o[2] = st.o[1];\n st.o[1] = st.o[0];\n st.o[0] = off;\n }\n else\n off = st.o[0];\n }\n for (var i = 0; i < ll; ++i) {\n buf[oubt + i] = buf[spl + i];\n }\n oubt += ll, spl += ll;\n var stin = oubt - off;\n if (stin < 0) {\n var len = -stin;\n var bs = st.e + stin;\n if (len > ml)\n len = ml;\n for (var i = 0; i < len; ++i) {\n buf[oubt + i] = st.w[bs + i];\n }\n oubt += len, ml -= len, stin = 0;\n }\n for (var i = 0; i < ml; ++i) {\n buf[oubt + i] = buf[stin + i];\n }\n oubt += ml;\n }\n if (oubt != spl) {\n while (spl < buf.length) {\n buf[oubt++] = buf[spl++];\n }\n }\n else\n oubt = buf.length;\n if (out)\n st.y += oubt;\n else\n buf = slc(buf, 0, oubt);\n }\n else if (out) {\n st.y += lss;\n if (spl) {\n for (var i = 0; i < lss; ++i) {\n buf[i] = buf[spl + i];\n }\n }\n }\n else if (spl)\n buf = slc(buf, spl);\n st.b = ebt;\n return buf;\n }\n err(2);\n};\n// concat\nvar cct = function (bufs, ol) {\n if (bufs.length == 1)\n return bufs[0];\n var buf = new u8(ol);\n for (var i = 0, b = 0; i < bufs.length; ++i) {\n var chk = bufs[i];\n buf.set(chk, b);\n b += chk.length;\n }\n return buf;\n};\n/**\n * Decompresses Zstandard data\n * @param dat The input data\n * @param buf The output buffer. If unspecified, the function will allocate\n * exactly enough memory to fit the decompressed data. If your\n * data has multiple frames and you know the output size, specifying\n * it will yield better performance.\n * @returns The decompressed data\n */\nexport function decompress(dat, buf) {\n var bufs = [], nb = +!buf;\n var bt = 0, ol = 0;\n for (; dat.length;) {\n var st = rzfh(dat, nb || buf);\n if (typeof st == 'object') {\n if (nb) {\n buf = null;\n if (st.w.length == st.u) {\n bufs.push(buf = st.w);\n ol += st.u;\n }\n }\n else {\n bufs.push(buf);\n st.e = 0;\n }\n for (; !st.l;) {\n var blk = rzb(dat, st, buf);\n if (!blk)\n err(5);\n if (buf)\n st.e = st.y;\n else {\n bufs.push(blk);\n ol += blk.length;\n cpw(st.w, 0, blk.length);\n st.w.set(blk, st.w.length - blk.length);\n }\n }\n bt = st.b + (st.c * 4);\n }\n else\n bt = st;\n dat = dat.subarray(bt);\n }\n return cct(bufs, ol);\n}\n/**\n * Decompressor for Zstandard streamed data\n */\nvar Decompress = /*#__PURE__*/ (function () {\n /**\n * Creates a Zstandard decompressor\n * @param ondata The handler for stream data\n */\n function Decompress(ondata) {\n this.ondata = ondata;\n this.c = [];\n this.l = 0;\n this.z = 0;\n }\n /**\n * Pushes data to be decompressed\n * @param chunk The chunk of data to push\n * @param final Whether or not this is the last chunk in the stream\n */\n Decompress.prototype.push = function (chunk, final) {\n if (typeof this.s == 'number') {\n var sub = Math.min(chunk.length, this.s);\n chunk = chunk.subarray(sub);\n this.s -= sub;\n }\n var sl = chunk.length;\n var ncs = sl + this.l;\n if (!this.s) {\n if (final) {\n if (!ncs) {\n this.ondata(new u8(0), true);\n return;\n }\n // min for frame + one block\n if (ncs < 5)\n err(5);\n }\n else if (ncs < 18) {\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (typeof (this.s = rzfh(chunk)) == 'number')\n return this.push(chunk, final);\n }\n if (typeof this.s != 'number') {\n if (ncs < (this.z || 3)) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n if (this.l) {\n this.c.push(chunk);\n chunk = cct(this.c, ncs);\n this.c = [];\n this.l = 0;\n }\n if (!this.z && ncs < (this.z = (chunk[this.s.b] & 2) ? 4 : 3 + ((chunk[this.s.b] >> 3) | (chunk[this.s.b + 1] << 5) | (chunk[this.s.b + 2] << 13)))) {\n if (final)\n err(5);\n this.c.push(chunk);\n this.l = ncs;\n return;\n }\n else\n this.z = 0;\n for (;;) {\n var blk = rzb(chunk, this.s);\n if (!blk) {\n if (final)\n err(5);\n var adc = chunk.subarray(this.s.b);\n this.s.b = 0;\n this.c.push(adc), this.l += adc.length;\n return;\n }\n else {\n this.ondata(blk, false);\n cpw(this.s.w, 0, blk.length);\n this.s.w.set(blk, this.s.w.length - blk.length);\n }\n if (this.s.l) {\n var rest = chunk.subarray(this.s.b);\n this.s = this.s.c * 4;\n this.push(rest, final);\n return;\n }\n }\n }\n else if (final)\n err(5);\n };\n return Decompress;\n}());\nexport { Decompress };\n", "/**\n * Uncompress a snappy compressed buffer.\n *\n * @param {Uint8Array} input\n * @param {number} outputLength\n * @returns {Uint8Array}\n */\nexport function snappyUncompress(input, outputLength) {\n return snappyUncompressor()(input, outputLength)\n}\n\n/**\n * Load wasm and return uncompressor function.\n *\n * @returns {(input: Uint8Array, outputLength: number) => Uint8Array}\n */\nexport function snappyUncompressor() {\n // Instantiate wasm module\n const wasm = instantiateWasm()\n\n return (input, outputLength) => {\n /** @type {any} */\n const { memory, uncompress } = wasm.exports\n\n // Input data is passed into wasm memory at inputStart\n // Output data is expected to be written to wasm memory at outputStart\n // clang uses some wasm memory, so we need to skip past that\n const inputStart = 68000 // 68 kb\n const outputStart = inputStart + input.byteLength\n\n // WebAssembly memory\n const totalSize = inputStart + input.byteLength + outputLength\n if (memory.buffer.byteLength < totalSize) {\n // Calculate the number of pages needed, rounding up\n const pageSize = 64 * 1024 // 64KiB per page\n const currentPages = memory.buffer.byteLength / pageSize\n const requiredPages = Math.ceil(totalSize / pageSize)\n const pagesToGrow = requiredPages - currentPages\n memory.grow(pagesToGrow)\n }\n\n // Copy the compressed data to WASM memory\n const byteArray = new Uint8Array(memory.buffer)\n byteArray.set(input, inputStart)\n\n // Call wasm uncompress function\n const result = uncompress(inputStart, input.byteLength, outputStart)\n\n // Check for errors\n if (result === -1) throw new Error('invalid snappy length header')\n if (result === -2) throw new Error('missing eof marker')\n if (result === -3) throw new Error('premature end of input')\n if (result) throw new Error(`failed to uncompress data ${result}`)\n\n // Get uncompressed data from WASM memory\n return byteArray.slice(outputStart, outputStart + outputLength)\n }\n}\n\n/**\n * Instantiate WASM module from a base64 string.\n *\n * @returns {WebAssembly.Instance}\n */\nfunction instantiateWasm() {\n const binaryString = atob(wasm64)\n const byteArray = new Uint8Array(binaryString.length)\n for (let i = 0; i < binaryString.length; i += 1) {\n byteArray[i] = binaryString.charCodeAt(i)\n }\n // only works for payload less than 4kb:\n const mod = new WebAssembly.Module(byteArray)\n return new WebAssembly.Instance(mod)\n}\n\n// Base64 encoded hysnappy.wasm\nconst wasm64 = 'AGFzbQEAAAABEANgAABgA39/fwF/YAF/AX8DBgUAAQEBAgUDAQACBj8KfwFBoIwEC38AQYAIC38AQaAMC38AQaAMC38AQaCMBAt/AEGACAt/AEGgjAQLfwBBgIAIC38AQQALfwBBAQsHwQEOBm1lbW9yeQIAEV9fd2FzbV9jYWxsX2N0b3JzAAAGbWVtY3B5AAEHbWVtbW92ZQACCnVuY29tcHJlc3MAAwxfX2Rzb19oYW5kbGUDAQpfX2RhdGFfZW5kAwILX19zdGFja19sb3cDAwxfX3N0YWNrX2hpZ2gDBA1fX2dsb2JhbF9iYXNlAwULX19oZWFwX2Jhc2UDBgpfX2hlYXBfZW5kAwcNX19tZW1vcnlfYmFzZQMIDF9fdGFibGVfYmFzZQMJCuASBQIAC8sBAQN/AkAgAkUNAAJAAkAgAkEHcSIDDQAgACEEIAIhBQwBCyAAIQQgAiEFA0AgBCABLQAAOgAAIARBAWohBCABQQFqIQEgBUF/aiEFIANBf2oiAw0ACwsgAkEISQ0AA0AgBCABLQAAOgAAIAQgAS0AAToAASAEIAEtAAI6AAIgBCABLQADOgADIAQgAS0ABDoABCAEIAEtAAU6AAUgBCABLQAGOgAGIAQgAS0ABzoAByAEQQhqIQQgAUEIaiEBIAVBeGoiBQ0ACwsgAAugAwEEfwJAIAAgAUYNAAJAAkAgACABSQ0AIAEgAmoiAyAASw0BCyACRQ0BAkACQCACQQdxIgMNACAAIQQgAiEFDAELIAAhBCACIQUDQCAEIAEtAAA6AAAgBEEBaiEEIAFBAWohASAFQX9qIQUgA0F/aiIDDQALCyACQQhJDQEDQCAEIAEtAAA6AAAgBCABLQABOgABIAQgAS0AAjoAAiAEIAEtAAM6AAMgBCABLQAEOgAEIAQgAS0ABToABSAEIAEtAAY6AAYgBCABLQAHOgAHIARBCGohBCABQQhqIQEgBUF4aiIFDQAMAgsLIAJFDQACQAJAIAJBA3EiBA0AIAAgAmohBiACIQUMAQsgAiEFA0AgBUF/aiIFIABqIgYgBSABaiIDLQAAOgAAIARBf2oiBA0ACwsgAkEESQ0AIAZBfGohASADQXxqIQQDQCABQQNqIARBA2otAAA6AAAgAUECaiAEQQJqLQAAOgAAIAFBAWogBEEBai0AADoAACABIAQtAAA6AAAgAUF8aiEBIARBfGohBCAFQXxqIgUNAAsLIAALswoBCX8jgICAgABBIGsiAySAgICAACADQQlqQgA3AAAgA0IANwIEIAMgA0EYajYCAEF/IQQCQCABRQ0AIAMgAUF/aiIFNgIcIAMgAEEBajYCGCAALAAAIgZB/wBxIQcCQCAGQX9KDQAgBUUNASADIAFBfmoiBTYCHCADIABBAmo2AhggACwAASIGQf8AcUEHdCAHciEHQX8hBCAGQX9KDQAgBUUNASADIAFBfWoiBTYCHCADIABBA2o2AhggACwAAiIGQf8AcUEOdCAHciEHQX8hBCAGQX9KDQAgBUUNASADIAFBfGoiBTYCHCADIABBBGo2AhggACwAAyIGQf8AcUEVdCAHciEHQX8hBCAGQX9KDQAgBUUNASADIAFBe2o2AhwgAyAAQQVqNgIYIAAsAAQiAUEASA0BIAFBHHQgB3IhBwsgAiAHaiEIAkACQCADEISAgIAADQAgAiEADAELIAMoAgQhASACIQADQAJAIAMoAgggAWtBBEoNACADIAE2AgQgAxCEgICAAEUNAiADKAIEIQELIAFBAWohBQJAAkAgAS0AACIGQQNxDQAgCCAAayEJIAMoAggiCiAFayEEIAZBAnYiC0EBaiEHAkAgBkE/Sw0AIARBEEkNACAJQRBIDQAgACABKAIBNgIAIAAgASgCBTYCBCAAIAEoAgk2AgggACABKAINNgIMIAAgB2ohACADKAIIIAUgB2oiAWtBBEoNAyADIAE2AgQgAxCEgICAAEUNBAwCCwJAAkAgBkHwAU8NACAFIQYMAQsgCiAFIAtBRWoiAWoiBmshBCABQQJ0QYCIgIAAaigCACAFKAIAcUEBaiEHCwJAIAcgBE0NAANAIAggAGsgBEkNBSAAIAYgBBCBgICAACEAIAMoAgAiASABKAIAIgkgAygCDCIFaiIGNgIAIAFBBGoiASABKAIAIgogBWsiATYCACADIAE2AgwgACAEaiEAIAFFDQUgAyAJIApqNgIIIAcgBGshByABIQQgByABSw0ACyAIIABrIQkLIAkgB0kNAyAAIAYgBxCBgICAACAHaiEAIAMoAgggBiAHaiIBa0EESg0CIAMgATYCBCADEISAgIAADQEMAwsgACACayAGQQF0QaCIgIAAai8BACIBQQt2IgpBAnRBgIiAgABqKAIAIAUoAgBxIAFBgA5xaiIHQX9qTQ0CIAggAGshBAJAAkAgAUH/AXEiCUEQSw0AIAdBCEkNACAEQRBJDQAgACAAIAdrIgEoAgA2AgAgACABKAIENgIEIAAgASgCCDYCCCAAIAFBDGooAgA2AgwMAQsCQAJAAkAgBCAJQQpqSQ0AIAAgB2shBCAAIQEgCSEGIAdBB0wNAQwCCyAEIAlJDQUgCUEBaiEEQQAgB2shByAAIQEDQCABIAEgB2otAAA6AAAgAUEBaiEBIARBf2oiBEEBSw0ADAMLCwNAIAEgBCgCADYCACABIAQoAgQ2AgQgBiAHayEGIAEgB2oiASAEayIHQQhIDQALCyAGQQFIDQAgBkEIaiEHA0AgASAEKAIANgIAIAEgBCgCBDYCBCABQQhqIQEgBEEIaiEEIAdBeGoiB0EISw0ACwsgACAJaiEAIAMoAgggBSAKaiIBa0EESg0BIAMgATYCBCADEISAgIAARQ0CCyADKAIEIQEMAAsLIAMoAgAiASABKAIEIAMoAgwiBGs2AgQgASAEIAEoAgBqNgIAAkAgAy0AEA0AQX4hBAwBC0EAQX0gCCAARhshBAsgA0EgaiSAgICAACAEC7YDAQd/AkAgACgCBCIBIAAoAggiAkcNACAAKAIAIgIgAigCACIDIAAoAgwiBGoiATYCACACQQRqIgIgAigCACICIARrIgU2AgAgACAFNgIMAkAgAiAERw0AIABBAToAEEEADwsgACADIAJqIgI2AggLAkACQAJAIAIgAWsiAiABLQAAQQF0QaCIgIAAai8BAEELdkEBaiIFTw0AIABBEWogASACEIKAgIAAIQYgACgCDCEEQQAhByAAQQA2AgwgACgCACIBIAEoAgQgBGs2AgQgASAEIAEoAgBqIgM2AgADQCABQQRqKAIAIgFFDQMgBiACaiADIAUgAmsiBCABIAQgAUkbIgQQgYCAgAAaIAAoAgAiASABKAIEIARrNgIEIAEgASgCACAEaiIDNgIAIAQgAmoiAiAFSQ0ACyAAIAY2AgQgACAGIAVqNgIIDAELAkAgAkEESw0AIAAgAEERaiABIAIQgoCAgAAiASACajYCCCAAIAE2AgQgACgCDCECIABBADYCDCAAKAIAIgEgASgCBCACazYCBCABIAIgASgCAGo2AgAMAQsgACABNgIEC0EBIQcLIAcLC6gEAQBBgAgLoAQAAAAA/wAAAP//AAD///8A/////wAAAAAAAAAAAAAAAAEABAgBEAEgAgAFCAIQAiADAAYIAxADIAQABwgEEAQgBQAICAUQBSAGAAkIBhAGIAcACggHEAcgCAALCAgQCCAJAAQJCRAJIAoABQkKEAogCwAGCQsQCyAMAAcJDBAMIA0ACAkNEA0gDgAJCQ4QDiAPAAoJDxAPIBAACwkQEBAgEQAEChEQESASAAUKEhASIBMABgoTEBMgFAAHChQQFCAVAAgKFRAVIBYACQoWEBYgFwAKChcQFyAYAAsKGBAYIBkABAsZEBkgGgAFCxoQGiAbAAYLGxAbIBwABwscEBwgHQAICx0QHSAeAAkLHhAeIB8ACgsfEB8gIAALCyAQICAhAAQMIRAhICIABQwiECIgIwAGDCMQIyAkAAcMJBAkICUACAwlECUgJgAJDCYQJiAnAAoMJxAnICgACwwoECggKQAEDSkQKSAqAAUNKhAqICsABg0rECsgLAAHDSwQLCAtAAgNLRAtIC4ACQ0uEC4gLwAKDS8QLyAwAAsNMBAwIDEABA4xEDEgMgAFDjIQMiAzAAYOMxAzIDQABw40EDQgNQAIDjUQNSA2AAkONhA2IDcACg43EDcgOAALDjgQOCA5AAQPORA5IDoABQ86EDogOwAGDzsQOyA8AAcPPBA8IAEICA89ED0gARAJDz4QPiABGAoPPxA/IAEgCw9AEEAgAGQEbmFtZQE9BQARX193YXNtX2NhbGxfY3RvcnMBBm1lbWNweQIHbWVtbW92ZQMKdW5jb21wcmVzcwQKcmVmaWxsX3RhZwcSAQAPX19zdGFja19wb2ludGVyCQoBAAcucm9kYXRhADIJcHJvZHVjZXJzAQxwcm9jZXNzZWQtYnkBDFVidW50dSBjbGFuZwsxNi4wLjYgKDE1KQAsD3RhcmdldF9mZWF0dXJlcwIrD211dGFibGUtZ2xvYmFscysIc2lnbi1leHQ='\n", "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Bit reading helpers\n*/\n\nconst BROTLI_READ_SIZE = 4096\nconst BROTLI_IBUF_SIZE = 2 * BROTLI_READ_SIZE + 32\nconst BROTLI_IBUF_MASK = 2 * BROTLI_READ_SIZE - 1\n\nconst kBitMask = new Uint32Array([\n 0, 1, 3, 7, 15, 31, 63, 127, 255, 511, 1023, 2047, 4095, 8191, 16383, 32767,\n 65535, 131071, 262143, 524287, 1048575, 2097151, 4194303, 8388607, 16777215,\n])\n\n/**\n * Input byte buffer, consist of a ringbuffer and a \"slack\" region where\n * bytes from the start of the ringbuffer are copied.\n *\n * @typedef {import('./brotli.streams.js').BrotliInput} BrotliInput\n * @param {BrotliInput} input\n */\nexport function BrotliBitReader(input) {\n this.buf_ = new Uint8Array(BROTLI_IBUF_SIZE)\n this.input_ = input /* input callback */\n\n this.buf_ptr_ = 0 /* next input will write here */\n this.val_ = 0 /* pre-fetched bits */\n this.pos_ = 0 /* byte position in stream */\n\n this.reset()\n}\n\nBrotliBitReader.READ_SIZE = BROTLI_READ_SIZE\nBrotliBitReader.IBUF_MASK = BROTLI_IBUF_MASK\n\nBrotliBitReader.prototype.reset = function() {\n this.buf_ptr_ = 0 /* next input will write here */\n this.val_ = 0 /* pre-fetched bits */\n this.pos_ = 0 /* byte position in stream */\n this.bit_pos_ = 0 /* current bit-reading position in val_ */\n this.bit_end_pos_ = 0 /* bit-reading end position from LSB of val_ */\n this.eos_ = 0 /* input stream is finished */\n\n this.readMoreInput()\n for (let i = 0; i < 4; i++) {\n this.val_ |= this.buf_[this.pos_] << 8 * i\n this.pos_++\n }\n\n return this.bit_end_pos_ > 0\n}\n\n/**\n * Fills up the input ringbuffer by calling the input callback.\n *\n * Does nothing if there are at least 32 bytes present after current position.\n *\n * Returns 0 if either:\n * - the input callback returned an error, or\n * - there is no more input and the position is past the end of the stream.\n *\n * After encountering the end of the input stream, 32 additional zero bytes are\n * copied to the ringbuffer, therefore it is safe to call this function after\n * every 32 bytes of input is read.\n */\nBrotliBitReader.prototype.readMoreInput = function() {\n if (this.bit_end_pos_ > 256) {\n // return\n } else if (this.eos_) {\n if (this.bit_pos_ > this.bit_end_pos_)\n throw new Error('Unexpected end of input ' + this.bit_pos_ + ' ' + this.bit_end_pos_)\n } else {\n const dst = this.buf_ptr_\n const bytes_read = this.input_.read(this.buf_, dst, BROTLI_READ_SIZE)\n if (bytes_read < 0) {\n throw new Error('Unexpected end of input')\n }\n\n if (bytes_read < BROTLI_READ_SIZE) {\n this.eos_ = 1\n /* Store 32 bytes of zero after the stream end. */\n for (let p = 0; p < 32; p++)\n this.buf_[dst + bytes_read + p] = 0\n }\n\n if (dst === 0) {\n /* Copy the head of the ringbuffer to the slack region. */\n for (let p = 0; p < 32; p++)\n this.buf_[(BROTLI_READ_SIZE << 1) + p] = this.buf_[p]\n\n this.buf_ptr_ = BROTLI_READ_SIZE\n } else {\n this.buf_ptr_ = 0\n }\n\n this.bit_end_pos_ += bytes_read << 3\n }\n}\n\n/* Guarantees that there are at least 24 bits in the buffer. */\nBrotliBitReader.prototype.fillBitWindow = function() {\n while (this.bit_pos_ >= 8) {\n this.val_ >>>= 8\n this.val_ |= this.buf_[this.pos_ & BROTLI_IBUF_MASK] << 24\n this.pos_++\n this.bit_pos_ = this.bit_pos_ - 8 >>> 0\n this.bit_end_pos_ = this.bit_end_pos_ - 8 >>> 0\n }\n}\n\n/**\n * Reads the specified number of bits from Read Buffer.\n *\n * @param {number} n_bits\n * @returns {number}\n */\nBrotliBitReader.prototype.readBits = function(n_bits) {\n if (32 - this.bit_pos_ < n_bits) this.fillBitWindow()\n const val = this.val_ >>> this.bit_pos_ & kBitMask[n_bits]\n this.bit_pos_ += n_bits\n return val\n}\n", "\nconst kDefaultCodeLength = 8\n\nconst HUFFMAN_TABLE_BITS = 8\nconst HUFFMAN_TABLE_MASK = 0xff\n\nconst CODE_LENGTH_CODES = 18\nconst kCodeLengthCodeOrder = new Uint8Array([\n 1, 2, 3, 4, 0, 5, 17, 6, 16, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n])\n\nconst kMaxHuffmanTableSize = new Uint16Array([\n 256, 402, 436, 468, 500, 534, 566, 598, 630, 662, 694, 726, 758, 790, 822,\n 854, 886, 920, 952, 984, 1016, 1048, 1080,\n])\n\n/**\n * @param {number} bits\n * @param {number} value\n */\nexport function HuffmanCode(bits, value) {\n this.bits = bits // number of bits used for this symbol\n this.value = value // symbol value or table offset\n}\n\nconst kCodeLengthRepeatCode = 16\nconst MAX_LENGTH = 15\n\n/**\n * Returns reverse(reverse(key, len) + 1, len), where reverse(key, len) is the\n * bit-wise reversal of the len least significant bits of key.\n * @param {number} key\n * @param {number} len\n * @returns {number}\n */\nfunction getNextKey(key, len) {\n let step = 1 << len - 1\n while (key & step) {\n step >>= 1\n }\n return (key & step - 1) + step\n}\n\n/**\n * Stores code in table[0], table[step], table[2*step], ..., table[end]\n * Assumes that end is an integer multiple of step\n * @param {HuffmanCode[]} table\n * @param {number} i\n * @param {number} step\n * @param {number} end\n * @param {HuffmanCode} code\n */\nfunction replicateValue(table, i, step, end, code) {\n do {\n end -= step\n table[i + end] = new HuffmanCode(code.bits, code.value)\n } while (end > 0)\n}\n\n/**\n * Returns the table width of the next 2nd level table. count is the histogram\n * of bit lengths for the remaining symbols, len is the code length of the next\n * processed symbol\n * @param {Int32Array} count\n * @param {number} len\n * @param {number} root_bits\n * @returns {number}\n */\nfunction nextTableBitSize(count, len, root_bits) {\n let left = 1 << len - root_bits\n while (len < MAX_LENGTH) {\n left -= count[len]\n if (left <= 0) break\n ++len\n left <<= 1\n }\n return len - root_bits\n}\n\n/**\n * @param {HuffmanCode[]} root_table\n * @param {number} table\n * @param {number} root_bits\n * @param {Uint8Array} code_lengths\n * @param {number} code_lengths_size\n * @returns {number}\n */\nfunction buildHuffmanTable(root_table, table, root_bits, code_lengths, code_lengths_size) {\n const start_table = table\n const count = new Int32Array(MAX_LENGTH + 1) // number of codes of each length\n const offset = new Int32Array(MAX_LENGTH + 1) // offsets in sorted table for each length\n const sorted = new Int32Array(code_lengths_size) // symbols sorted by code length\n\n // build histogram of code lengths\n for (let i = 0; i < code_lengths_size; i++) {\n count[code_lengths[i]]++\n }\n\n // generate offsets into sorted symbol table by code length\n offset[1] = 0\n for (let i = 1; i < MAX_LENGTH; i++) {\n offset[i + 1] = offset[i] + count[i]\n }\n\n // sort symbols by length, by symbol order within each length\n for (let i = 0; i < code_lengths_size; i++) {\n if (code_lengths[i] !== 0) {\n sorted[offset[code_lengths[i]]++] = i\n }\n }\n\n let table_bits = root_bits // key length of current table\n let table_size = 1 << table_bits\n let total_size = table_size // sum of root table size and 2nd level table sizes\n\n // special case code with only one value\n if (offset[MAX_LENGTH] === 1) {\n for (let key = 0; key < total_size; ++key) {\n root_table[table + key] = new HuffmanCode(0, sorted[0] & 0xffff)\n }\n\n return total_size\n }\n\n // fill in root table\n let key = 0 // reversed prefix code\n let symbol = 0 // symbol index in original or sorted table\n for (let len = 1, step = 2; len <= root_bits; ++len, step <<= 1) {\n for (; count[len] > 0; --count[len]) {\n const code = new HuffmanCode(len & 0xff, sorted[symbol++] & 0xffff)\n replicateValue(root_table, table + key, step, table_size, code)\n key = getNextKey(key, len)\n }\n }\n\n // fill in 2nd level tables and add pointers to root table\n const mask = total_size - 1\n let low = -1 // low bits for current root entry\n for (let len = root_bits + 1, step = 2; len <= MAX_LENGTH; ++len, step <<= 1) {\n for (; count[len] > 0; --count[len]) {\n if ((key & mask) !== low) {\n table += table_size\n table_bits = nextTableBitSize(count, len, root_bits)\n table_size = 1 << table_bits\n total_size += table_size\n low = key & mask\n root_table[start_table + low] = new HuffmanCode(table_bits + root_bits & 0xff, table - start_table - low & 0xffff)\n }\n const code = new HuffmanCode(len - root_bits & 0xff, sorted[symbol++] & 0xffff)\n replicateValue(root_table, table + (key >> root_bits), step, table_size, code)\n key = getNextKey(key, len)\n }\n }\n\n return total_size\n}\n\n/**\n * @import {BrotliBitReader} from './brotli.bitreader.js'\n * @param {number} alphabet_size\n * @param {HuffmanCode[]} tables\n * @param {number} table\n * @param {BrotliBitReader} br\n * @returns {number}\n */\nexport function readHuffmanCode(alphabet_size, tables, table, br) {\n const code_lengths = new Uint8Array(alphabet_size)\n\n br.readMoreInput()\n\n // simple_code_or_skip is used as follows:\n // - 1 for simple code;\n // - 0 for no skipping, 2 skips 2 code lengths, 3 skips 3 code lengths\n const simple_code_or_skip = br.readBits(2)\n if (simple_code_or_skip === 1) {\n // Read symbols, codes & code lengths directly\n let max_bits_counter = alphabet_size - 1\n let max_bits = 0\n const symbols = new Int32Array(4)\n const num_symbols = br.readBits(2) + 1\n while (max_bits_counter) {\n max_bits_counter >>= 1\n max_bits++\n }\n\n for (let i = 0; i < num_symbols; i++) {\n symbols[i] = br.readBits(max_bits) % alphabet_size\n code_lengths[symbols[i]] = 2\n }\n code_lengths[symbols[0]] = 1\n switch (num_symbols) {\n case 1:\n break\n case 3:\n if (symbols[0] === symbols[1] ||\n symbols[0] === symbols[2] ||\n symbols[1] === symbols[2]) {\n throw new Error('[ReadHuffmanCode] invalid symbols')\n }\n break\n case 2:\n if (symbols[0] === symbols[1]) {\n throw new Error('[ReadHuffmanCode] invalid symbols')\n }\n\n code_lengths[symbols[1]] = 1\n break\n case 4:\n if (symbols[0] === symbols[1] ||\n symbols[0] === symbols[2] ||\n symbols[0] === symbols[3] ||\n symbols[1] === symbols[2] ||\n symbols[1] === symbols[3] ||\n symbols[2] === symbols[3]) {\n throw new Error('[ReadHuffmanCode] invalid symbols')\n }\n\n if (br.readBits(1)) {\n code_lengths[symbols[2]] = 3\n code_lengths[symbols[3]] = 3\n } else {\n code_lengths[symbols[0]] = 2\n }\n break\n }\n } else { // Decode Huffman-coded code lengths\n const code_length_code_lengths = new Uint8Array(CODE_LENGTH_CODES)\n let space = 32\n let num_codes = 0\n // Static Huffman code for the code length code lengths\n const huff = [\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 1),\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(3, 2),\n new HuffmanCode(2, 0), new HuffmanCode(2, 4), new HuffmanCode(2, 3), new HuffmanCode(4, 5),\n ]\n for (let i = simple_code_or_skip; i < CODE_LENGTH_CODES && space > 0; i++) {\n const code_len_idx = kCodeLengthCodeOrder[i]\n let p = 0\n br.fillBitWindow()\n p += br.val_ >>> br.bit_pos_ & 15\n br.bit_pos_ += huff[p].bits\n const v = huff[p].value\n code_length_code_lengths[code_len_idx] = v\n if (v !== 0) {\n space -= 32 >> v\n num_codes++\n }\n }\n\n if (!(num_codes === 1 || space === 0))\n throw new Error('[ReadHuffmanCode] invalid num_codes or space')\n\n readHuffmanCodeLengths(code_length_code_lengths, alphabet_size, code_lengths, br)\n }\n\n const table_size = buildHuffmanTable(tables, table, HUFFMAN_TABLE_BITS, code_lengths, alphabet_size)\n if (!table_size) throw new Error('brotli BuildHuffmanTable failed')\n return table_size\n}\n\n/**\n * Decodes the next Huffman code from bit-stream.\n * @param {HuffmanCode[]} table\n * @param {number} index\n * @param {BrotliBitReader} br\n * @returns {number}\n\n */\nexport function readSymbol(table, index, br) {\n br.fillBitWindow()\n index += br.val_ >>> br.bit_pos_ & HUFFMAN_TABLE_MASK\n const nbits = table[index].bits - HUFFMAN_TABLE_BITS\n if (nbits > 0) {\n br.bit_pos_ += HUFFMAN_TABLE_BITS\n index += table[index].value\n index += br.val_ >>> br.bit_pos_ & (1 << nbits) - 1\n }\n br.bit_pos_ += table[index].bits\n return table[index].value\n}\n\n/**\n * @param {Uint8Array} code_length_code_lengths\n * @param {number} num_symbols\n * @param {Uint8Array} code_lengths\n * @param {BrotliBitReader} br\n */\nfunction readHuffmanCodeLengths(code_length_code_lengths, num_symbols, code_lengths, br) {\n let symbol = 0\n let prev_code_len = kDefaultCodeLength\n let repeat = 0\n let repeat_code_len = 0\n let space = 32768\n\n const table = []\n for (let i = 0; i < 32; i++)\n table.push(new HuffmanCode(0, 0))\n\n buildHuffmanTable(table, 0, 5, code_length_code_lengths, CODE_LENGTH_CODES)\n\n while (symbol < num_symbols && space > 0) {\n let p = 0\n\n br.readMoreInput()\n br.fillBitWindow()\n p += br.val_ >>> br.bit_pos_ & 31\n br.bit_pos_ += table[p].bits\n const code_len = table[p].value & 0xff\n if (code_len < kCodeLengthRepeatCode) {\n repeat = 0\n code_lengths[symbol++] = code_len\n if (code_len !== 0) {\n prev_code_len = code_len\n space -= 32768 >> code_len\n }\n } else {\n const extra_bits = code_len - 14\n let new_len = 0\n if (code_len === kCodeLengthRepeatCode) {\n new_len = prev_code_len\n }\n if (repeat_code_len !== new_len) {\n repeat = 0\n repeat_code_len = new_len\n }\n const old_repeat = repeat\n if (repeat > 0) {\n repeat -= 2\n repeat <<= extra_bits\n }\n repeat += br.readBits(extra_bits) + 3\n const repeat_delta = repeat - old_repeat\n if (symbol + repeat_delta > num_symbols) {\n throw new Error('[ReadHuffmanCodeLengths] symbol + repeat_delta > num_symbols')\n }\n\n for (let x = 0; x < repeat_delta; x++)\n code_lengths[symbol + x] = repeat_code_len\n\n symbol += repeat_delta\n\n if (repeat_code_len !== 0) {\n space -= repeat_delta << 15 - repeat_code_len\n }\n }\n }\n if (space !== 0) {\n throw new Error('[ReadHuffmanCodeLengths] space = ' + space)\n }\n\n for (; symbol < num_symbols; symbol++)\n code_lengths[symbol] = 0\n}\n\n\n/**\n * Contains a collection of huffman trees with the same alphabet size.\n *\n * @param {number} alphabet_size\n * @param {number} num_htrees\n */\nexport function HuffmanTreeGroup(alphabet_size, num_htrees) {\n this.alphabet_size = alphabet_size\n this.num_htrees = num_htrees\n this.codes = new Array(num_htrees + num_htrees * kMaxHuffmanTableSize[alphabet_size + 31 >>> 5])\n this.htrees = new Uint32Array(num_htrees)\n}\n\n/**\n * @param {BrotliBitReader} br\n */\nHuffmanTreeGroup.prototype.decode = function(br) {\n let next = 0\n for (let i = 0; i < this.num_htrees; i++) {\n this.htrees[i] = next\n next += readHuffmanCode(this.alphabet_size, this.codes, next, br)\n }\n}\n", "/* Copyright 2013 Google Inc. All Rights Reserved.\n Lookup tables to map prefix codes to value ranges. This is used during\n decoding of the block lengths, literal insertion lengths and copy lengths.\n*/\n\n/**\n * Represents the range of values belonging to a prefix code:\n * [offset, offset + 2^nbits)\n * @param {number[]} pair\n * @returns {{offset: number, nbits: number}}\n */\nfunction prefix([ offset, nbits ]) {\n return { offset, nbits }\n}\n\nexport const kBlockLengthPrefixCode = [\n [1, 2], [5, 2], [9, 2], [13, 2],\n [17, 3], [25, 3], [33, 3], [41, 3],\n [49, 4], [65, 4], [81, 4], [97, 4],\n [113, 5], [145, 5], [177, 5], [209, 5],\n [241, 6], [305, 6], [369, 7], [497, 8],\n [753, 9], [1265, 10], [2289, 11], [4337, 12],\n [8433, 13], [16625, 24],\n].map(prefix)\n\nexport const kInsertLengthPrefixCode = [\n [0, 0], [1, 0], [2, 0], [3, 0],\n [4, 0], [5, 0], [6, 1], [8, 1],\n [10, 2], [14, 2], [18, 3], [26, 3],\n [34, 4], [50, 4], [66, 5], [98, 5],\n [130, 6], [194, 7], [322, 8], [578, 9],\n [1090, 10], [2114, 12], [6210, 14], [22594, 24],\n].map(prefix)\n\nexport const kCopyLengthPrefixCode = [\n [2, 0], [3, 0], [4, 0], [5, 0],\n [6, 0], [7, 0], [8, 0], [9, 0],\n [10, 1], [12, 1], [14, 2], [18, 2],\n [22, 3], [30, 3], [38, 4], [54, 4],\n [70, 5], [102, 5], [134, 6], [198, 7],\n [326, 8], [582, 9], [1094, 10], [2118, 24],\n].map(prefix)\n\nexport const kInsertRangeLut = [\n 0, 0, 8, 8, 0, 16, 8, 16, 16,\n]\n\nexport const kCopyRangeLut = [\n 0, 8, 0, 8, 16, 0, 16, 8, 16,\n]\n", "// Adapted from https://github.com/101arrowz/fflate Copyright (c) 2023 Arjun Barrett\n// https://tools.ietf.org/html/rfc1951\n\n/* Maximum possible Huffman table size for an alphabet size of 704, max code\n * length 15 and root table bits 8. */\nexport const HUFFMAN_MAX_TABLE_SIZE = 1080\n\n// fixed length extra bits\nexport const fixedLengthExtraBits = new Uint8Array([\n 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0, /* unused */ 0, 0, /* impossible */ 0,\n])\nexport const fixedDistanceExtraBits = new Uint8Array([\n 0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6, 7, 7, 8, 8, 9, 9, 10, 10, 11, 11, 12, 12, 13, 13, /* unused */ 0, 0,\n])\n\n/**\n * get base, reverse index map from extra bits\n * @param {Uint8Array} eb\n * @param {number} start\n * @returns {{base: Uint16Array, rev: Int32Array}}\n */\nfunction freb(eb, start) {\n const base = new Uint16Array(31)\n for (let i = 0; i < 31; i++) {\n base[i] = start += 1 << eb[i - 1]\n }\n // numbers here are max 18 bits\n const rev = new Int32Array(base[30])\n for (let i = 1; i < 30; i++) {\n for (let j = base[i]; j < base[i + 1]; ++j) {\n rev[j] = j - base[i] << 5 | i\n }\n }\n return { base, rev }\n}\n\nconst { base: fixedLength, rev: revfl } = freb(fixedLengthExtraBits, 2)\n// we can ignore the fact that the other numbers are wrong; they never happen anyway\nfixedLength[28] = 258\nrevfl[258] = 28\nconst { base: fixedDistance } = freb(fixedDistanceExtraBits, 0)\n\n// map of value to reverse (assuming 16 bits)\nconst rev = new Uint16Array(32768)\nfor (let i = 0; i < 32768; i++) {\n // reverse table algorithm from SO\n let x = (i & 0xAAAA) >> 1 | (i & 0x5555) << 1\n x = (x & 0xCCCC) >> 2 | (x & 0x3333) << 2\n x = (x & 0xF0F0) >> 4 | (x & 0x0F0F) << 4\n rev[i] = ((x & 0xFF00) >> 8 | (x & 0x00FF) << 8) >> 1\n}\n\n/**\n * create huffman tree from Uint8Array \"map\": index -> code length for code index\n * maxBits must be at most 15\n * @param {Uint8Array} cd\n * @param {number} maxBits\n * @param {0 | 1} r\n * @returns {Uint16Array}\n */\nexport function huffMap(cd, maxBits, r) {\n // u16 \"map\": index -> # of codes with bit length = index\n const l = new Uint16Array(maxBits)\n // length of cd must be 288 (total # of codes)\n for (let i = 0; i < cd.length; i++) {\n if (cd[i]) ++l[cd[i] - 1]\n }\n // u16 \"map\": index -> minimum code for bit length = index\n const le = new Uint16Array(maxBits)\n for (let i = 1; i < maxBits; i++) {\n le[i] = le[i - 1] + l[i - 1] << 1\n }\n let co\n if (r) {\n // u16 \"map\": index -> number of actual bits, symbol for code\n co = new Uint16Array(1 << maxBits)\n // bits to remove for reverser\n const rvb = 15 - maxBits\n for (let i = 0; i < cd.length; i++) {\n // ignore 0 lengths\n if (cd[i]) {\n // num encoding both symbol and bits read\n const sv = i << 4 | cd[i]\n const freeBits = maxBits - cd[i]\n let startValue = le[cd[i] - 1]++ << freeBits\n for (const endValue = startValue | (1 << freeBits) - 1; startValue <= endValue; startValue++) {\n // every 16 bit value starting with the code yields the same result\n co[rev[startValue] >> rvb] = sv\n }\n }\n }\n } else {\n co = new Uint16Array(cd.length)\n for (let i = 0; i < cd.length; i++) {\n if (cd[i]) {\n co[i] = rev[le[cd[i] - 1]++] >> 15 - cd[i]\n }\n }\n }\n return co\n}\n\n// construct huffman trees\nconst fixedLengthTree = new Uint8Array(288)\nfor (let i = 0; i < 144; i++) fixedLengthTree[i] = 8\nfor (let i = 144; i < 256; i++) fixedLengthTree[i] = 9\nfor (let i = 256; i < 280; i++) fixedLengthTree[i] = 7\nfor (let i = 280; i < 288; i++) fixedLengthTree[i] = 8\nconst fixedDistanceTree = new Uint8Array(32)\nfor (let i = 0; i < 32; i++) fixedDistanceTree[i] = 5\n\nexport const fixedLengthMap = /*#__PURE__*/ huffMap(fixedLengthTree, 9, 1)\nexport const fixedDistanceMap = /*#__PURE__*/ huffMap(fixedDistanceTree, 5, 1)\nexport { fixedLength, fixedDistance }\n", "import { readSymbol } from './brotli.huffman.js'\nimport { BrotliBitReader } from './brotli.bitreader.js'\nimport { kBlockLengthPrefixCode } from './brotli.prefix.js'\nimport { HUFFMAN_MAX_TABLE_SIZE } from './gzip.huffman.js'\n\n/**\n * @import {HuffmanCode} from './brotli.huffman.js'\n * @param {number} max_block_type\n * @param {HuffmanCode[]} trees\n * @param {number} tree_type\n * @param {number[]} block_types\n * @param {number[]} ringbuffers\n * @param {number[]} indexes\n * @param {BrotliBitReader} br\n */\nexport function decodeBlockType(max_block_type, trees, tree_type, block_types, ringbuffers, indexes, br) {\n const ringbuffer = tree_type * 2\n const index = tree_type\n const type_code = readSymbol(trees, tree_type * HUFFMAN_MAX_TABLE_SIZE, br)\n let block_type\n if (type_code === 0) {\n block_type = ringbuffers[ringbuffer + (indexes[index] & 1)]\n } else if (type_code === 1) {\n block_type = ringbuffers[ringbuffer + (indexes[index] - 1 & 1)] + 1\n } else {\n block_type = type_code - 2\n }\n if (block_type >= max_block_type) {\n block_type -= max_block_type\n }\n block_types[tree_type] = block_type\n ringbuffers[ringbuffer + (indexes[index] & 1)] = block_type\n indexes[index]++\n}\n\n/**\n * @typedef {{ input_end: number, is_metadata: boolean, meta_block_length: number, is_uncompressed: number }} MetaBlockLength\n * @param {BrotliBitReader} br\n * @returns {MetaBlockLength}\n */\nexport function decodeMetaBlockLength(br) {\n const out = {\n meta_block_length: 0,\n input_end: 0,\n is_uncompressed: 0,\n is_metadata: false,\n }\n\n out.input_end = br.readBits(1)\n if (out.input_end && br.readBits(1)) {\n return out\n }\n\n const size_nibbles = br.readBits(2) + 4\n if (size_nibbles === 7) {\n out.is_metadata = true\n\n if (br.readBits(1) !== 0)\n throw new Error('Invalid reserved bit')\n\n const size_bytes = br.readBits(2)\n if (size_bytes === 0)\n return out\n\n for (let i = 0; i < size_bytes; i++) {\n const next_byte = br.readBits(8)\n if (i + 1 === size_bytes && size_bytes > 1 && next_byte === 0)\n throw new Error('Invalid size byte')\n\n out.meta_block_length |= next_byte << i * 8\n }\n } else {\n for (let i = 0; i < size_nibbles; i++) {\n const next_nibble = br.readBits(4)\n if (i + 1 === size_nibbles && size_nibbles > 4 && next_nibble === 0)\n throw new Error('Invalid size nibble')\n\n out.meta_block_length |= next_nibble << i * 4\n }\n }\n\n out.meta_block_length++\n\n if (!out.input_end && !out.is_metadata) {\n out.is_uncompressed = br.readBits(1)\n }\n\n return out\n}\n\n\n/**\n * @import {BrotliOutput} from './brotli.streams.js'\n * @param {BrotliOutput} output\n * @param {number} len\n * @param {number} pos\n * @param {Uint8Array} ringbuffer\n * @param {number} ringbuffer_mask\n * @param {BrotliBitReader} br\n */\nexport function copyUncompressedBlockToOutput(output, len, pos, ringbuffer, ringbuffer_mask, br) {\n const rb_size = ringbuffer_mask + 1\n let rb_pos = pos & ringbuffer_mask\n let br_pos = br.pos_ & BrotliBitReader.IBUF_MASK\n\n // For short lengths copy byte-by-byte\n if (len < 8 || br.bit_pos_ + (len << 3) < br.bit_end_pos_) {\n while (len-- > 0) {\n br.readMoreInput()\n ringbuffer[rb_pos++] = br.readBits(8)\n if (rb_pos === rb_size) {\n output.write(ringbuffer, rb_size)\n rb_pos = 0\n }\n }\n return\n }\n\n if (br.bit_end_pos_ < 32) {\n throw new Error('copyUncompressedBlockToOutput: br.bit_end_pos_ < 32')\n }\n\n // Copy remaining 0-4 bytes from br.val_ to ringbuffer\n while (br.bit_pos_ < 32) {\n ringbuffer[rb_pos] = br.val_ >>> br.bit_pos_\n br.bit_pos_ += 8\n rb_pos++\n len--\n }\n\n // Copy remaining bytes from br.buf_ to ringbuffer\n let nbytes = br.bit_end_pos_ - br.bit_pos_ >> 3\n if (br_pos + nbytes > BrotliBitReader.IBUF_MASK) {\n const tail = BrotliBitReader.IBUF_MASK + 1 - br_pos\n for (let x = 0; x < tail; x++)\n ringbuffer[rb_pos + x] = br.buf_[br_pos + x]\n\n nbytes -= tail\n rb_pos += tail\n len -= tail\n br_pos = 0\n }\n\n for (let x = 0; x < nbytes; x++)\n ringbuffer[rb_pos + x] = br.buf_[br_pos + x]\n\n rb_pos += nbytes\n len -= nbytes\n\n // If we wrote past the logical end of the ringbuffer, copy the tail of the\n // ringbuffer to its beginning and flush the ringbuffer to the output\n if (rb_pos >= rb_size) {\n output.write(ringbuffer, rb_size)\n rb_pos -= rb_size\n for (let x = 0; x < rb_pos; x++)\n ringbuffer[x] = ringbuffer[rb_size + x]\n }\n\n // If we have more to copy than the remaining size of the ringbuffer, then we\n // first fill the ringbuffer from the input and then flush the ringbuffer\n while (rb_pos + len >= rb_size) {\n nbytes = rb_size - rb_pos\n if (br.input_.read(ringbuffer, rb_pos, nbytes) < nbytes) {\n throw new Error('copyUncompressedBlockToOutput: not enough bytes')\n }\n output.write(ringbuffer, rb_size)\n len -= nbytes\n rb_pos = 0\n }\n\n // Copy straight from the input onto the ringbuffer\n // Ringbuffer will be flushed to output later\n if (br.input_.read(ringbuffer, rb_pos, len) < len) {\n throw new Error('copyUncompressedBlockToOutput: not enough bytes')\n }\n\n // Restore the state of the bit reader\n br.reset()\n}\n\n/**\n * Decodes a number in the range [0..255], by reading 1 - 11 bits.\n * @param {BrotliBitReader} br\n * @returns {number}\n */\nexport function decodeVarLenUint8(br) {\n if (br.readBits(1)) {\n const nbits = br.readBits(3)\n if (nbits === 0) {\n return 1\n } else {\n return br.readBits(nbits) + (1 << nbits)\n }\n }\n return 0\n}\n\n/**\n * @param {BrotliBitReader} br\n * @returns {number}\n */\nexport function decodeWindowBits(br) {\n if (br.readBits(1) === 0) return 16\n\n let n = br.readBits(3)\n if (n > 0) return 17 + n\n\n n = br.readBits(3)\n if (n > 0) return 8 + n\n\n return 17\n}\n\n/**\n * Advances the bit reader position to the next byte boundary and verifies\n * that any skipped bits are set to zero.\n * @param {BrotliBitReader} br\n * @returns {boolean}\n */\nexport function jumpToByteBoundary(br) {\n const new_bit_pos = br.bit_pos_ + 7 & ~7\n return !br.readBits(new_bit_pos - br.bit_pos_)\n}\n\n/**\n * @param {HuffmanCode[]} table\n * @param {number} index\n * @param {BrotliBitReader} br\n * @returns {number}\n */\nexport function readBlockLength(table, index, br) {\n const code = readSymbol(table, index, br)\n const { offset, nbits } = kBlockLengthPrefixCode[code]\n return offset + br.readBits(nbits)\n}\n", "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Lookup table to map the previous two bytes to a context id.\n\n There are four different context modeling modes defined here:\n CONTEXT_LSB6: context id is the least significant 6 bits of the last byte,\n CONTEXT_MSB6: context id is the most significant 6 bits of the last byte,\n CONTEXT_UTF8: second-order context model tuned for UTF8-encoded text,\n CONTEXT_SIGNED: second-order context model tuned for signed integers.\n\n The context id for the UTF8 context model is calculated as follows. If p1\n and p2 are the previous two bytes, we calcualte the context as\n\n context = kContextLookup[p1] | kContextLookup[p2 + 256].\n\n If the previous two bytes are ASCII characters (i.e. < 128), this will be\n equivalent to\n\n context = 4 * context1(p1) + context2(p2),\n\n where context1 is based on the previous byte in the following way:\n\n 0 : non-ASCII control\n 1 : \\t, \\n, \\r\n 2 : space\n 3 : other punctuation\n 4 : \" '\n 5 : %\n 6 : ( < [ {\n 7 : ) > ] }\n 8 : , ; :\n 9 : .\n 10 : =\n 11 : number\n 12 : upper-case vowel\n 13 : upper-case consonant\n 14 : lower-case vowel\n 15 : lower-case consonant\n\n and context2 is based on the second last byte:\n\n 0 : control, space\n 1 : punctuation\n 2 : upper-case letter, number\n 3 : lower-case letter\n\n If the last byte is ASCII, and the second last byte is not (in a valid UTF8\n stream it will be a continuation byte, value between 128 and 191), the\n context is the same as if the second last byte was an ASCII control or space.\n\n If the last byte is a UTF8 lead byte (value >= 192), then the next byte will\n be a continuation byte and the context id is 2 or 3 depending on the LSB of\n the last byte and to a lesser extent on the second last byte if it is ASCII.\n\n If the last byte is a UTF8 continuation byte, the second last byte can be:\n - continuation byte: the next byte is probably ASCII or lead byte (assuming\n 4-byte UTF8 characters are rare) and the context id is 0 or 1.\n - lead byte (192 - 207): next byte is ASCII or lead byte, context is 0 or 1\n - lead byte (208 - 255): next byte is continuation byte, context is 2 or 3\n\n The possible value combinations of the previous two bytes, the range of\n context ids and the type of the next byte is summarized in the table below:\n\n |--------\\-----------------------------------------------------------------|\n | \\ Last byte |\n | Second \\---------------------------------------------------------------|\n | last byte \\ ASCII | cont. byte | lead byte |\n | \\ (0-127) | (128-191) | (192-) |\n |=============|===================|=====================|==================|\n | ASCII | next: ASCII/lead | not valid | next: cont. |\n | (0-127) | context: 4 - 63 | | context: 2 - 3 |\n |-------------|-------------------|---------------------|------------------|\n | cont. byte | next: ASCII/lead | next: ASCII/lead | next: cont. |\n | (128-191) | context: 4 - 63 | context: 0 - 1 | context: 2 - 3 |\n |-------------|-------------------|---------------------|------------------|\n | lead byte | not valid | next: ASCII/lead | not valid |\n | (192-207) | | context: 0 - 1 | |\n |-------------|-------------------|---------------------|------------------|\n | lead byte | not valid | next: cont. | not valid |\n | (208-) | | context: 2 - 3 | |\n |-------------|-------------------|---------------------|------------------|\n\n The context id for the signed context mode is calculated as:\n\n context = (kContextLookup[512 + p1] << 3) | kContextLookup[512 + p2].\n\n For any context modeling modes, the context ids can be calculated by |-ing\n together two lookups from one table using context model dependent offsets:\n\n context = kContextLookup[offset1 + p1] | kContextLookup[offset2 + p2].\n\n where offset1 and offset2 are dependent on the context mode.\n*/\n\n/* Common context lookup table for all context modes. */\nexport const lookup = new Uint8Array([\n /* CONTEXT_UTF8, last byte. */\n /* ASCII range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 4, 4, 0, 0, 4, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 8, 12, 16, 12, 12, 20, 12, 16, 24, 28, 12, 12, 32, 12, 36, 12,\n 44, 44, 44, 44, 44, 44, 44, 44, 44, 44, 32, 32, 24, 40, 28, 12,\n 12, 48, 52, 52, 52, 48, 52, 52, 52, 48, 52, 52, 52, 52, 52, 48,\n 52, 52, 52, 52, 52, 48, 52, 52, 52, 52, 52, 24, 12, 28, 12, 12,\n 12, 56, 60, 60, 60, 56, 60, 60, 60, 56, 60, 60, 60, 60, 60, 56,\n 60, 60, 60, 60, 60, 56, 60, 60, 60, 60, 60, 24, 12, 28, 12, 0,\n /* UTF8 continuation byte range. */\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1, 0, 1,\n /* UTF8 lead byte range. */\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3, 2, 3,\n /* CONTEXT_UTF8 second last byte. */\n /* ASCII range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1,\n 1, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1,\n 1, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 1, 1, 1, 1, 0,\n /* UTF8 continuation byte range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n /* UTF8 lead byte range. */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n /* CONTEXT_SIGNED, second last byte. */\n 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4, 4,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5, 5,\n 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 6, 7,\n /* CONTEXT_SIGNED, last byte, same as the above values shifted by 3 bits. */\n 0, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8, 8,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16, 16,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24, 24,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32, 32,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40, 40,\n 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 48, 56,\n /* CONTEXT_LSB6, last byte. */\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,\n 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,\n 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47,\n 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63,\n /* CONTEXT_MSB6, last byte. */\n 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2, 3, 3, 3, 3,\n 4, 4, 4, 4, 5, 5, 5, 5, 6, 6, 6, 6, 7, 7, 7, 7,\n 8, 8, 8, 8, 9, 9, 9, 9, 10, 10, 10, 10, 11, 11, 11, 11,\n 12, 12, 12, 12, 13, 13, 13, 13, 14, 14, 14, 14, 15, 15, 15, 15,\n 16, 16, 16, 16, 17, 17, 17, 17, 18, 18, 18, 18, 19, 19, 19, 19,\n 20, 20, 20, 20, 21, 21, 21, 21, 22, 22, 22, 22, 23, 23, 23, 23,\n 24, 24, 24, 24, 25, 25, 25, 25, 26, 26, 26, 26, 27, 27, 27, 27,\n 28, 28, 28, 28, 29, 29, 29, 29, 30, 30, 30, 30, 31, 31, 31, 31,\n 32, 32, 32, 32, 33, 33, 33, 33, 34, 34, 34, 34, 35, 35, 35, 35,\n 36, 36, 36, 36, 37, 37, 37, 37, 38, 38, 38, 38, 39, 39, 39, 39,\n 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 43, 43, 43, 43,\n 44, 44, 44, 44, 45, 45, 45, 45, 46, 46, 46, 46, 47, 47, 47, 47,\n 48, 48, 48, 48, 49, 49, 49, 49, 50, 50, 50, 50, 51, 51, 51, 51,\n 52, 52, 52, 52, 53, 53, 53, 53, 54, 54, 54, 54, 55, 55, 55, 55,\n 56, 56, 56, 56, 57, 57, 57, 57, 58, 58, 58, 58, 59, 59, 59, 59,\n 60, 60, 60, 60, 61, 61, 61, 61, 62, 62, 62, 62, 63, 63, 63, 63,\n /* CONTEXT_{M,L}SB6, second last byte, */\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,\n])\n\nexport const lookupOffsets = new Uint16Array([\n /* CONTEXT_LSB6 */\n 1024, 1536,\n /* CONTEXT_MSB6 */\n 1280, 1536,\n /* CONTEXT_UTF8 */\n 0, 256,\n /* CONTEXT_SIGNED */\n 768, 512,\n])\n", "import { decodeVarLenUint8 } from './brotli.blocks.js'\nimport { HuffmanCode, readHuffmanCode, readSymbol } from './brotli.huffman.js'\nimport { HUFFMAN_MAX_TABLE_SIZE } from './gzip.huffman.js'\n\n/**\n * @import {BrotliBitReader} from './brotli.bitreader.js'\n * @param {number} context_map_size\n * @param {BrotliBitReader} br\n * @returns {[number, Uint8Array]} // num_htrees, context_map\n */\nexport function decodeContextMap(context_map_size, br) {\n let max_run_length_prefix = 0\n\n br.readMoreInput()\n const num_htrees = decodeVarLenUint8(br) + 1\n\n const context_map = new Uint8Array(context_map_size)\n if (num_htrees <= 1) {\n return [num_htrees, context_map]\n }\n\n const use_rle_for_zeros = br.readBits(1)\n if (use_rle_for_zeros) {\n max_run_length_prefix = br.readBits(4) + 1\n }\n\n const table = []\n for (let i = 0; i < HUFFMAN_MAX_TABLE_SIZE; i++) {\n table[i] = new HuffmanCode(0, 0)\n }\n\n readHuffmanCode(num_htrees + max_run_length_prefix, table, 0, br)\n\n for (let i = 0; i < context_map_size;) {\n br.readMoreInput()\n const code = readSymbol(table, 0, br)\n if (code === 0) {\n context_map[i] = 0\n i++\n } else if (code <= max_run_length_prefix) {\n let reps = 1 + (1 << code) + br.readBits(code)\n while (--reps) {\n if (i >= context_map_size) {\n throw new Error('[DecodeContextMap] i >= context_map_size')\n }\n context_map[i] = 0\n i++\n }\n } else {\n context_map[i] = code - max_run_length_prefix\n i++\n }\n }\n if (br.readBits(1)) {\n inverseMoveToFrontTransform(context_map, context_map_size)\n }\n\n return [num_htrees, context_map]\n}\n\n/**\n * @param {Uint8Array} v\n * @param {number} index\n */\nfunction moveToFront(v, index) {\n const value = v[index]\n for (let i = index; i; i--) v[i] = v[i - 1]\n v[0] = value\n}\n\n/**\n * @param {Uint8Array} v\n * @param {number} v_len\n */\nfunction inverseMoveToFrontTransform(v, v_len) {\n const mtf = new Uint8Array(256)\n for (let i = 0; i < 256; i++) {\n mtf[i] = i\n }\n for (let i = 0; i < v_len; i++) {\n const index = v[i]\n v[i] = mtf[index]\n if (index) moveToFront(mtf, index)\n }\n}\n", "/**\n * @param {Uint8Array} buffer\n */\nexport function BrotliInput(buffer) {\n this.buffer = buffer\n this.pos = 0\n}\n\n/**\n * @param {Uint8Array} buf\n * @param {number} i\n * @param {number} count\n * @returns {number}\n */\nBrotliInput.prototype.read = function(buf, i, count) {\n if (this.pos + count > this.buffer.length) {\n count = this.buffer.length - this.pos\n }\n\n for (let p = 0; p < count; p++)\n buf[i + p] = this.buffer[this.pos + p]\n\n this.pos += count\n return count\n}\n\n/**\n * @param {Uint8Array} buf\n */\nexport function BrotliOutput(buf) {\n this.buffer = buf\n this.pos = 0\n}\n\n/**\n * @param {Uint8Array} buf\n * @param {number} count\n * @returns {number}\n */\nBrotliOutput.prototype.write = function(buf, count) {\n if (this.pos + count > this.buffer.length) throw new Error('brotli output buffer is not large enough')\n\n this.buffer.set(buf.subarray(0, count), this.pos)\n this.pos += count\n return count\n}\n", "// Adapted from https://github.com/101arrowz/fflate Copyright (c) 2023 Arjun Barrett\n// https://tools.ietf.org/html/rfc1951\n\nimport { fixedDistance, fixedDistanceExtraBits, fixedDistanceMap, fixedLength, fixedLengthExtraBits, fixedLengthMap, huffMap } from './gzip.huffman.js'\n\nconst codeLengthIndexMap = new Uint8Array([16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15])\n\n/**\n * read d, starting at bit p and mask with m\n * @param {Uint8Array} input\n * @param {number} pos\n * @param {number} mask\n * @returns {number}\n */\nfunction bits(input, pos, mask) {\n const o = pos / 8 | 0\n return (input[o] | input[o + 1] << 8) >> (pos & 7) & mask\n}\n\n/**\n * read d, starting at bit p continuing for at least 16 bits\n * @param {Uint8Array} d\n * @param {number} p\n * @returns {number}\n */\nfunction bits16(d, p) {\n const o = p / 8 | 0\n return (d[o] | d[o + 1] << 8 | d[o + 2] << 16) >> (p & 7)\n}\n\n/**\n * get end of byte\n * @param {number} p\n * @returns {number}\n */\nfunction shft(p) {\n return (p + 7) / 8 | 0\n}\n\n/**\n * return start of gzip payload index\n * @param {Uint8Array} input\n * @param {number} i inputIndex\n * @returns {number}\n */\nfunction gzipStart(input, i) {\n // if missing gzip header, assume raw deflate stream\n if (input[i++] !== 31 || input[i++] !== 139 || input[i++] !== 8) return 0\n const flag = input[i++]\n i += 6 // skip header\n if (flag & 4) i += (input[i + 10] | input[i + 11] << 8) + 2 // skip extra\n // skip name and comment\n for (let zs = (flag >> 3 & 1) + (flag >> 4 & 1); zs > 0; zs -= Number(!input[i++]));\n return i + (flag & 2)\n}\n\n/**\n * GZip decompression\n * @param {Uint8Array} input\n * @param {Uint8Array} [output]\n * @param {number} [inputIndex]\n * @param {number} [outputIndex]\n * @returns {Uint8Array}\n */\nexport function gunzip(input, output, inputIndex = 0, outputIndex = 0) {\n let out = output ?? new Uint8Array(1024) // initial size\n if (!(input.length - inputIndex)) return out\n const payloadStart = gzipStart(input, inputIndex)\n if (payloadStart === input.length - 8) return out\n if (payloadStart > input.length - 8) throw new Error('unexpected EOF')\n let pos = payloadStart * 8 // position in bits\n let final = 0 // last chunk?\n let lengthBits = 0\n let distBits = 0\n let lengthMap\n let distMap\n const totalBits = input.length * 8\n\n /** @param {number} length */\n function ensureSize(length) {\n if (!output && length > out.length) {\n const old = out\n out = new Uint8Array(Math.max(old.length * 2, length))\n out.set(old)\n }\n }\n\n do {\n if (!lengthMap) {\n // final chunk is next?\n final = bits(input, pos, 1)\n const type = bits(input, pos + 1, 3)\n pos += 3\n if (!type) {\n // no compression\n // go to end of byte boundary\n const s = shft(pos) + 4\n const l = input[s - 4] | input[s - 3] << 8\n const t = s + l\n if (t > input.length) throw new Error('unexpected EOF')\n // copy uncompressed data\n ensureSize(outputIndex + l)\n out.set(input.subarray(s, t), outputIndex)\n outputIndex += l\n pos = t * 8\n continue\n } else if (type === 1) {\n // fixed huffman\n lengthMap = fixedLengthMap\n distMap = fixedDistanceMap\n lengthBits = 9\n distBits = 5\n } else if (type === 2) {\n // dynamic huffman\n const hLiteral = bits(input, pos, 31) + 257\n const hcLengths = bits(input, pos + 10, 15) + 4\n const tl = hLiteral + bits(input, pos + 5, 31) + 1\n pos += 14\n // length+distance tree\n const lengthDistanceTree = new Uint8Array(tl)\n const codeLengthTree = new Uint8Array(19)\n for (let i = 0; i < hcLengths; ++i) {\n // use index map to get real code\n codeLengthTree[codeLengthIndexMap[i]] = bits(input, pos + i * 3, 7)\n }\n pos += hcLengths * 3\n const codeLengthBits = Math.max(...codeLengthTree)\n const clbMask = (1 << codeLengthBits) - 1\n const codeLengthMap = huffMap(codeLengthTree, codeLengthBits, 1)\n for (let i = 0; i < tl;) {\n const r = codeLengthMap[bits(input, pos, clbMask)]\n // bits read\n pos += r & 15\n const symbol = r >> 4\n // code length to copy\n if (symbol < 16) {\n lengthDistanceTree[i++] = symbol\n } else {\n let copy = 0\n let n = 0 // count\n if (symbol === 16) {\n n = 3 + bits(input, pos, 3)\n pos += 2\n copy = lengthDistanceTree[i - 1]\n } else if (symbol === 17) {\n n = 3 + bits(input, pos, 7)\n pos += 3\n } else if (symbol === 18) {\n n = 11 + bits(input, pos, 127)\n pos += 7\n }\n while (n--) lengthDistanceTree[i++] = copy\n }\n }\n const lengthTree = lengthDistanceTree.subarray(0, hLiteral)\n const distanceTree = lengthDistanceTree.subarray(hLiteral)\n // max length/dist bits\n lengthBits = Math.max(...lengthTree)\n distBits = Math.max(...distanceTree)\n lengthMap = huffMap(lengthTree, lengthBits, 1)\n distMap = huffMap(distanceTree, distBits, 1)\n } else throw new Error('invalid block type')\n if (pos > totalBits) throw new Error('unexpected EOF')\n }\n\n ensureSize(outputIndex + 131072) // max chunk size?\n const lms = (1 << lengthBits) - 1\n const dms = (1 << distBits) - 1\n let lpos = pos\n for (;; lpos = pos) {\n // bits read, code\n const code = lengthMap[bits16(input, pos) & lms]\n const sym = code >> 4\n pos += code & 15\n if (pos > totalBits) throw new Error('unexpected EOF')\n if (!code) throw new Error('invalid length/literal')\n if (sym < 256) out[outputIndex++] = sym\n else if (sym === 256) {\n lpos = pos\n lengthMap = undefined\n break\n } else {\n let add = sym - 254\n // no extra bits needed if less\n if (sym > 264) {\n const index = sym - 257\n const b = fixedLengthExtraBits[index]\n add = bits(input, pos, (1 << b) - 1) + fixedLength[index]\n pos += b\n }\n // dist\n if (!distMap) throw new Error('invalid distance map')\n const d = distMap[bits16(input, pos) & dms]\n const dsym = d >> 4\n if (!d) throw new Error('invalid distance')\n pos += d & 15\n let dt = fixedDistance[dsym]\n if (dsym > 3) {\n const b = fixedDistanceExtraBits[dsym]\n dt += bits16(input, pos) & (1 << b) - 1\n pos += b\n }\n if (pos > totalBits) throw new Error('unexpected EOF')\n const end = outputIndex + add\n if (outputIndex < dt) throw new Error('unexpected dictionary case')\n ensureSize(end)\n for (; outputIndex < end; outputIndex++) out[outputIndex] = out[outputIndex - dt]\n }\n }\n pos = lpos\n if (lengthMap) final = 1\n } while (!final)\n\n if (outputIndex < out.length) {\n // multiple gzip blocks\n const nextBlock = Math.ceil(pos / 8) + 8 // 8 byte gzip footer\n gunzip(input, out, nextBlock, outputIndex)\n }\n\n if (!output) return out.subarray(0, outputIndex)\n return out\n}\n", "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Collection of static dictionary words.\n*/\n\nimport { gunzip } from './gzip.js'\n\nconst dictionaryGz64 = `\n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\nXH/9kw/e+uTa937x6JlPn7j+86ee/PnpG7e/+yefvfzM7ddetBc/+977t3/83mcf/PknV4/fPvfq7e+/\n+cm7P/z0/F/84uwzn7154uc/PvHp69//9I9/+Ml7P7r9/IXbz57/9Pqf3r7y5GdvX/vs+KlPn/7LT0+9\n8en505+dP/PZ+eufPnP99jtvffripU+vnrz9J+duf/+GtefTZ37wyfU37JVPT7/+6bnXfv79lz678vTt\nv3jV/v25Pc73HsfFP3j59ok3rc0BJ2xs7t08Zz7DAKYbJnK5UgK2jQzJmCC4augYsG4CCZp91RPMCbYW\n8rY2w92psSU9JsJr5eZ15HTJPhdaiJXaqRIg7wbBWKEHHX5adwdhvA2PhJOVkIQAXgHUR5kUgqH6MGbJ\nTde53MIZEy6yqT3ANRAzmtC71THhd+I63zxX1ps3X4Z9ESjZchjwqiFzLkBagm7Pm5oZd/Ona2Dpo0SW\nY7IEIhOZVrcgTg4z9eUeatU7/9w2XQdQNR4xq0vb/pGqKBvnbA8aB2VF1VrreWvMzZdXR+KVEBjpfVg7\nksxeQS+zV7Fw2NR4Ckd5E65GGF/Zc94LlRfsBWghULUSXnoJFac+6hn2H7HmV49EANm8/B5nSxkwvsbN\nMkyBIZCVfSDxXmYmA5BcYsTQZk6SrdK/FWjBJmCS0fODJopqn2RJ7A+85DaKjp9kYWwVBb/Kf1/lu5f5\n1gV+7ImoRK4i5Sf+9vSf+1v4/Bv89zVW7L4W11FV8mv88HNxneNshm76GptxJr5+ultDqWKw2ngJcDTp\nwt++epL1y8/wM+f5+2n+/jN+/QKLo1/li6ejSRejbLnu/njc4kJUDb8Sb1lLXuArF3k7Nen5uJeKlL/B\neurHvan45Ud8imd4R/XYxahQ/gILnD8Vdcpf4/9Oq846r6BOuBL1zk/xuz/gTc/FXX4Q5d7Vkxeyeu0a\nuKeiSDwHzvvZOuqElznHWy95b+MBv8NC7M9HJ5yKe/0gCrefZm+kausvRUed5IfVnu/FTc9Hj6nlN2LQ\n7c+no0r9j+Je34su0gVVEv4Dvqjevsi+0nx4IwZaj6O5eiN69Tg74Q027wxbq68/EQ17HK97XXnNZ81V\njc5TbO25KGN/IZ7iRZ8q3s/n/bnw7ln++2I84Ktxr+Ns/7Woaq9G/jj+1IdP8JG1gk7zxTRbTkfzXmOb\n9ftZbzDa/Awf4Uq057WYWm/GTdXUNzm4vJG3+bjrd6DAF8rHkOwS2fXtM/sDx1I8XB4pRVlMABZWZpOa\nxdJWYHOYWGPJNdhAqt2wVMa7UpTEFuZ1ab60azeufFBXDhBQA7WI7upwvLkCa9I2ZLOugfR5BLtTT44q\nrrIfJV1QIbN0vY2aSGgP/TygkFbNI6AvW9mj2fZbP72r+GiZPfnSZvAsOkVKYkfFRH2jFKjEq0yYmTiG\n0Hxxx9f27RwmtnxCITUIOiiSzbbQUf56SQ3i0aANvs0XyUisySDANxBUWBkio6H8LnU05W3XSXl3b+eL\ngbmnzpsbcm4q4Hmro43KIrtmCPoKidta2BpVp6q3DqURfAjFrEtHgG2VjFiPezGW83SMH1yb7cBV7hFL\n4ulr9rMnYRtV4INf+NWUVfxGwoQx/W8u06DbHzgldokRbF4F5Di5pBSF2qI3C9lNu8vezlIW4KRzgc40\nQ3meprenxOwq+wd99+noXsH/HWHQdtLCT4lx1LQYi84ZKRM9kZ0z1lQoZoh1PRvn8Bx1M0tfPcOoIA7g\nCN6+M60ArzCJFE6fA1A31SwLtUC+OmWgOqGy0ikcxWDndzLpFxJaZSZqj7NlZucB2751bNFdzS1zGcHw\n2JhEYnc18u6SswOYhhx5Twh2txL0A0JhUnqNcGLFOMEKjI3JxmQLo9GgJBez0bM7FqnSxRA2USNePRga\nnXjee9hD7NPAoHUoaLnlKjCujwG+wVjcvIjuok+RLRkpFyoxxW696flEmwf7BaQKDiPSPXDiaCKtro63\nNKwDOGxrpHOBI8nS9sOBo8ycD15LIQEkB2iLxC617sCcerWTmEysIseyVinHvtCtYvRX01zbGkMZBVep\netR+EIvYx4PVbAUY2Ao/nhsJ5yRZqWxBchW7G7tj5UFRXKgShx+sSq2T06BB3HaFueAvp31yZuYueqnF\nKOUJ4XHU8v+QjiE/aeSxnBF4u5u+BhmJ4HMspYyAwkqIGT2AAj6siLZSTQYa89BKqrrOCrS/HEkkxRJf\nC1IEqPqdhA7YPhO6KIuFY3TI6WTZYrBOqe0KIf0Efoq4FrSWmMFnSx2Ltn2mSJCPwGMUhSJofLYV192l\nKp3CRRT9ZP+FZkHVf4js+TFoTciYMlEPrIT5MeCDboZ6FHEhzICWPQZ2wOQ8VjQg4xZfZDiE8QxXbYD6\nZb9wWJGjEh/BTATgEYEJsI9Z2LKJKBsUHZB1w+Mx5klA6caXYm7YbuE41dkU1KaqKOYRTjCWj4cOUce1\n07ueZh5OiHTbEkYoduq1dv0eS9ocgkOsjXuBoxo24KNBaWy8SXgJc6ton+IT/YEdinbIjhZd/wOBXSl+\n1STGCTfkVcAxPcb9iE4EoG91kkJzEBFHMgWDZPszqykPsX5lmPgcpzpHb1VBaWozcp33bHZ6IhtjSbn7\nXQlbHIAn23N6vbGyh2tQPGZ4l7OPW/9D2s3sy7vTd7caxKNxchKZxRyK6KJ4IpvZeAGZ5wFrAdgGBhnX\nimsmAY6byDP0JssJRDigWjKUjRF8G7J3601iZlHce61QIYK5UsUj7B73JUvha/3AYSIOqmTjTII+1wo+\n2rv7B5EYJRiApR4eUuFTYu4oC4QsZ6ARioMRhZ+TygP5sILl2FW2p5vA7hGAcyQpVmsf5hfQKbYPKXvv\nQDJdWfq70OP5n1I2PKDLq5CcdHdXQV/YNLG6lxaSXXJHbcbUrsWiLpYCjrtKZJPALwn82ygajPUWake9\nyWggnV6issEBGyHcvNPFf789EzuW889hq4hR/Qg1hCrtBwCx89GWfc0QzzHwkOT9Vdkn63Yu1kIlDAI5\n6Ag4q3CGMBkIJR5KViSgjMK5rpTN4YpabgQ8UtbbY6GMSxYeg11KqUxBDjDXWCOO9hUCDRuVFI485d0o\neovN1VX3bI9QYquhKChLAEMdNuWS0hnffEU7P09sx6+F5UF1I2w0xPygFylCs62dkwgosU+XkwOSMP8N\nw7ZMkkSGp2ruSntYAtM3ylOOWTdG9FH0SeHZBUoxUmo6YYm3MaBAFIybp9g7q6hT2iKZXOubo0OWIpZ3\ngnUrjY9MTkI7F46GsY6+b3zMbDfrnPVQGikRxSk0sZRZQsatI2O4s2PRgRRHS6HRWMmdFAozv/Z2BJu4\nG1FjV+ix+eU7Z2/iEDR4HYMtP3XHaT9IzIr+g9npEnvsjMNUkRCmnUitXyJ7bZLDpNE6csi8beQqV43O\n35dm2BpAF9w7Z1Jy1BEhDPmDD0pQ4u/GLqqTriGqqOcemmBO9N+Y0sY+PhvzZTahghsVgsCukPIwzRI1\naWFC6whCnoTqKcRyy7OhlCOzIHhflZp4+vktcFoRWEbr5oiDzr3+H3Zvyh/jvk5JeQS23pqLDFB8mZYi\ndla7uu3unH8IXFZbARIqqCZDMVhA1nXlhHP9UihPDNaaow64mnfvybq/z6QB7I2jQ2Rz+8XKJIFpmgQL\n3Y19pzssj5a9td6gHO2BmG+NkjbEvST8eQvrb1RJGyfSXcm6XkENMVqqW8lHhC0gkAHtqz4J5a4iCZil\nEyIKgcawyrDDCdQHj7REDqV0XbUe5poTUxqqUdq0J2hYp333oeSL9+qYOQflOUC9Sy+Y2YFdngZTk7CJ\nrN+nIgz3gcWsCAGS8YIKqBAj0+VEyAuiIbxWd19atSnDu3mfwJyD4STBXb+USCuoPux2DjzNiiOovkdZ\nvrDLcTdobKAnCUtcMVcRiJqeKg0dTPa9K/lZx0DazE9dV8foIOFbKE8AAWZPSgvNVAlCS/jQnNdJ40x0\ncMfMFqtVAs0hGw6Z55QPt7kWGnLJsCxaclVZIJg+JEnD4eAdwIVQAEsroE/L13ZgV+RI2ctCSHvgQhKB\noVClVB4HUrUwC57oprJYq45CP18YJ80f9J9QyECzJGTE8j5UpWdptiJNCe0RFIR3TcyKCsc19TpSFGJG\nMX/k6YX+xz3uZsXkolpfT8BvKBsgHWs7yEMpJrM/WUEBIe4spytvX2ghBarEZDNi58NN0z18x44di151\nhb5Bq26L9Qmf3V/BPQKY0iQMclESog89nYStNMsc8TvMqYdSLMjOEy/S+VCKFUhJkDGFiiW8rQVeYoFg\nlaOsk7hRJWBxwrMTjA3Rn127dkEUbVCsg2WVPEjHDMAep9iKz3YBrLqNPcFOABLXBv3D1YR7yGLUXd1z\nbxX2qYgiLAEcZJRCNWHpBw1Xvah5WFpHqgTqKBJmq3B9SlhGUnpE/ERVQeGRMrOKTQLoPoGWQmFn2zb2\nPaIiYV/ZRHX9O6CPaQMhr4MCE5LB644rr3Snks0YVVhk0vIzWwoSTw4TUzkuLy9nrx0KktIc0lmyn7/q\nap1lX4gBkD/uTlbBYRtK+XlpXQbzj5GxSt8YwnNdB56/aRmZ8IVq81uHVKbcqkGgkQYqK4b1u47qK9Hm\nLi23wA77CsDFV5MPAe4O4khmbbpHD2tki1qU8mHp+ZRh/R+pVNiZmjSusdubyFNCqMdzctY+9uQqWkDf\nlGNEK9Lszmpkq2esdcZjUQdzcj9nE51qf+aHFo5y4AzjVoUiDSO6bTZaLtkUsAtMQV++v59grzNel9hG\nFWejIouhDVSUnSJoBvfVlfUFFHtmEvJOgHGiETTMhGJ0UTxXQMhKT8ldXuXEhuvjyrEktgRowQdQ5I7G\nNXfpaQ435f+KSTHegiITELjr9CEUhRisJRQ6dbDlp8wnFNmdQkRw9K1XWFg8sSpZkJS8zKppz99gpM2v\nqogzoJv9QnXBZNDvPOpzUvbAQYL48eRuD9UwRXx27mHdUBRwGHg1FKzXB6qjxf8KWFwZZklTJ9ZnN52r\n4+CNBjbHtg4AEXnAlhEBP1IR/QcRb/Fwqfq2XwAoe/xgtcIWKbuTg4SfOLaYZZRifTSBIyHcUJQOmCw6\nrZKlQLtzBB8RzAbhuOaKUGMS1wLnfoLKYh9x0UnX8Mb4AhvC430hRSHWq4i3M0EjH6zqydKpEgG4AINM\nOxzkHJNYmdnAe80gI3CVw4WKcTVL2kH7RSBx2AcAHUBvkWsVKx5I4VQrT/6M9pzxEP58KIZysnKPdXAj\nIp/BNikSqXouMjXcqcfaDwivI/Yb91DZr8TQbhJIrbhL+y4QxgIV7t61i9Bp3txLmAUmhgrFXjEbG/Kg\n8FsnVgOhN/fA5tpwzDBqFbqSemcZVbdkwkQUp+y5H9Udb3ohOSz6InY2wN21+osEb04c23kkJHaS90Jr\nrlfaoeX4InvsbqLI91RKryhHUofGZUqWryIIC5vwQMUGRHYUPl4oZj8Ei4HAmTyZEjI1eeBHKmHnYGM2\n2G0pB69RRpFNL4VcwKZC1RTMAWhx8soofk60J9AHgy1HQQqJrLXPiVr2BaTGOcNcDAOAybpR4USWsFNc\niqrEE+JjmRiCQYF1wOLjLFMqwhTeXRkGdN3jrHAxyP/gLrrqcTgW7ml0FZ+TUnwV2AyzHdVtoIaPmdaF\ndoAKPWudrwo3u6vYXW3i/4t3ppjMQgpw4CSBs0QH0jMSC0lVAMVmZBeOUqzAds6RbS3D9Y1ko28P3djZ\nNelroqCj15tlhI+2yvaZwryEUtGmFSHxYYRAI90pQapuwBgjMZKFw7wwRvtjb59rCSegYKN1VP6mqTNu\nkgRB4bhV+2U5nWqJn77kQTOUvkMchdC1eZX+6ywsQOncc6QUugPMMdTe7ayFD7ZaOutRCPpuEUDDfso+\nSN8Wyod/85O/+eO/OfM3f/Y3Zz8+QZW3S//nMxBQGsKthL9fqcImdxrCcxp4ao5ooqqZTVeePXx3vFL7\n52R71a6GRiRNiwxq0s5aqfYFXkuoLrA46f5i7jswC/lGVyljdIv3CAhvPWDVFd4tuGb1gHoHastgxcFX\niXZdJfBWwwgkvtAoH48dOuyXVLODalrKGDNrbrYBziMp7+spFQuqUcurZ89jr65ApxCudyn0l+BWqr1h\nbQ48WhM6dKD9OGipceZf9UgZogpV9AvgV9b8m5dQdCGJS6DeizXTbJ1HFIusmXZ32Jhnm1k8JW28a0hX\nSIENHAlprIWsQsUiqXRZqFd0hUpEb0ld6qOT/hp+uwgNpg/f++g5qihd56tPUBMJulNv2c937f3LH96g\nHlPSpaIq0nX+hI7VB9SZejepSV1q9aik5MS7vBPaSR+dTO9CA+sqtZWuUrXpCjWw2FJ87sOXXLvqun3m\nbVdKcoUoaVt99Jy9Az2sR/WUSUfqmitO4Te07zj74D3+K00vaU9dSwpZp5IG1AXvDehlvSfFL3yCLcS3\nvM3WllB5wt0etZ6DwtQH/rxv25Nf4Hevxm+u7yS9LHwPqlTtfdH6G+x1tVmKYlQQ452fYF+8y7/5XXvt\nUbxCJSqNyLvU/pKG1NvpOS77qMVoPUH9q5di3PxzV7MrX4unpuYW34Wal/Sp7H4vU6PquiuOQQvrvQ9/\nlO5xnSN6ydt7A33qilYYj/d99EOV7Kr0xzCW1qcYN/ZB6r8bvO9l6of9iPpZ6JPTcV/omaEtPlLSJPsg\nZo61ECphz9nVNJbPffS4q4edtG+e5DXepsLaBSqLnUrXu/DhX6TeYFv4JDEjLtiTQ9fsGY7RBVzLR/k4\nnzY+p3l2nb+7qpeN+XuatVI3Y79f1W8ffdfnxnucR5c4d6FBxvZRrezZpFqGsX0fT5Pm/Xtst+bu96xN\np+yqF6GidevsrTc/furWqzgpXBVMP6Uhdg2qUFKXku4XVbhO3XqDylpPf/wklLbsc9LDCpWx+O4Ve/VV\n6lWd0Gsfn7x1yb9xzfW4zkG5jApSj/HEOovf7N+T1iqodb1J/TB8421qT0FZi2pW9u47dv+n7TdXCbMr\n23PgKnafd6CqRY0yapndum4tOItv2TfO8DXoWulZoRl2PvXG096+t/xzJ29dtv/aM7Adp5KmGvXP+Pmf\nhR5bPBufxvuN6mJSLXtUuma4EpTU+GzooTf5PD+l5tdbaIv6FIpo9hoUwrwP7HlPUnvrcfvuKbZGCl34\n3GX25CnrobfwROwHqsDZ+3waKYlRse0MtM3SKOBzl6gldgpKZlAdY9/jjk9JzwzqaP453O0N9YSPtLXU\n78bWuLKZ971r0r2exvgVzAyoxoXKmV/lPMeS8+/Wa/68JzWKVFR709p+yp7/9VvvoIcxE601j3Hc3rHX\nNcPU55rJb1Dp7G2Mu/rePvWmK+W9gxnT3Dk5VK5DFWlWpUaYIdzdghbm1+s1f1XnMoFvUeVaWLieO92d\nNguWGGMw/iXyZaab8FO8WNU/Ug8HRKd4jo2wGIRktwDIqogr2uyWzcZiYpWDFuGpxqUFpcHpSSJm5ulu\nT/4Haq0aMcjMyP4Gi2S32eg9Saars7yrBfhUEiGA5+AAHwFxwF316K7EeWqVw3G/e59HNAlrCmgIdYS3\n3IusRl4veXY87M06/GITT8F0SCNMz05ILdMJYUoGZDWa/HbdHW0kq82zN/NfeejL36LG1reSlTSqlLxb\ngph2m+lZXGqzJRtmKVl3we2ambk3aJOqFyOoJMJNe5BUXlwdJCSj6i8Xyrybiwqzfm9HohpsOsIy/1tV\nwipPQiVVd2tjMHKRo1CQQdihN1psxluANirxA1zO5AGyo2jWhy6Tdd9meUz8vb2dxhrxiD5xVzvcSWWq\nB/V+F5UplhaiZNPyaIMRvpV62B1WSe1K+DXOM4xU5Bk9glVXDQAjjWf8Uqy1mdmWPJ0WKdINxhv8W1ci\nQ2jYderq0OkFnKD7v7RTro2BLzLYS1YyCM9RvoR9pjhpeP1ruKLChuZ/71tbZz5ipNCwO3P32+RCZeTB\ncLYxpw4ePFExfXlsK5XKZLkgBgUVShasVu1au/FSCy1iZEWUx5olQxlCq/tH6Ghag3fMr2uKz+6gGU5P\nq3dXhYpkjCt0Wu+wVpCZnXqsjHyrqiv5qwh8aJG1wQWFI+jkRkUQ0ncDltOspFhlgcryvsjuatdQ6FbZ\nyppvAUACmgqhmXCAjacgmfJ2VBg7qj8pFAfqpjhTocJLij0OCA9AyuV+lokokDdaagGu7b5j12GZbFwi\nGDLcQIoQcwOdoy80IiNJClSFM4eKcR5XAxMPSXn50klvsDdhbUGbaP3RZGeb7IP4ug+syrRydqD3bWPp\ngRs7AJygj5lIMGXN2IDQiAQ5fdUmS424hm3bRcI5OSQM01O1JDyBTwiBj3G3EnmTkJRmuLq3s7DUwhs9\nxREiLT5T3VNFZn1pISX4onwi9oeaalTiLZMcSDk4HFSrnjvwfEFVqEg1g4HzOtAeABd4fVir/l21r913\nUgVLwJQZ+yb7UVE9BtoSb7aYbSHY6F9PurvIzu5du34bMRTXvFhqIQ+keWKU93Z2zCchobTmB/0H+5Gh\nKqJgH3ITrkqEAPRQ+B3RDbPEgiJn1HrqlTEWAaZoDrTHeMDSOX/lsbMsZ8GdnSiflPFuN67dbfS/UKkc\nXmHHoi1STfYkCIIah1B+Q2n3vgNIETEC0rmv7TOhwjvLLU6fwVcv34QvOL7ht1K8ZXHr2GLhZ2eUwUOk\n0XMpjOduuj5Et80LFA6gUza/GXjIemnjf45h6VKuYlV95jICK5OWfdDyQbEFFZH8PyqBQcXjtgBJQ4St\nXP1v49oPVsXDGNxlxaKxUIvCn9iv32RpDWDJ9sQBUACNhEg0EDFVy9XoclMAogeoli62NereJCB+cM44\ngRJyfT5p4vUmB7LNfFSE5qMT5yaMnZKRD6ihlyXj0wPrWBKErmJ2juhWKIbQ0WHkzrDe7C+cIBgsT+5y\n21SsEaFxV7QpKblD2yeKeSAWmlCRBQq9KDjdRLVQKWR4l6gmHKT5qMaRsmeVAM/U6yxT3DMS9GYQ2ZSG\not8A1aFUbVQAoTWvLcQotoabPFyhK7T5s2qFNTXwOs2AN2XTlTIA5TiqdEIxh6hcUuij5g8hOyyWzn6Q\nAim6+sDBB6NOEsVvBkOA5Np0ViF1EaqJeMEuipTaR0NAjYxlTss9SepwFhOOXWK2sqPGYyeQhNDCw00U\n2rCLBSEakXtgvXDnNi4MaUc3RtqjbsZj05hc22eiCM2Sw4IP6dzcqrXvALblibkomwn5mEAosFicK3jQ\nIOoLfiixQuVAieYS6GpQNOWEg3B3a5SVRQIihUYqjroED21ci4O6PslkbaJqnF3hXhX6wmqKbDxTY5IE\nrXsTKaII7hpyO71J1AVDmhT+QElc5Zrv75i/Dt+zr22I6iCwWUDCmqjcaustivfYwHL5yyhrNrB0RHEv\nJVUKESAmyfhy1BTDkiZIkVmpTgszJqYAG2izhxJ6+prNdUn/bVQtertweVzkHwY88ZnvpcZBNJ0VX6WG\nK9AqsrsuqWbN25A1CY0NO8oPeEG6Tth31qp+yvG2YElOGCdbzMxk9mSSTG3PniVxF+4+QsiaSnXZXTsF\nEuiVHV/fQJnHWk/BsmwO51PRJywaZl5rvrO/PZ2CG2NPoUQVp+f942RE4pBCqsL+bA/LL2FH9w+49Yq/\nNutjIeSxUo2OVhLPiEJvmBpJaLqXXNojMGICBBoJAqJt/cw6Ui3cdeiu4r9AFcDFWgnp4bLpr06EuqNW\noH3NIWJYv93WXm8T+kU4QdbQ+aQ2UFB4QqbEvtZ4wh7l9X8CYsVThKrUwJJx35Q+xVzr+gTVxdr50FRE\nwMl5TaiB1i6WoRuXKys4G5SWXo+IQJNyREXrjRdRDTXsVOEzmZ+XuRhgbx5fcQbvjiLe9rV7200X2Sov\nu6qNnhMFZYKpWzR0S4GbGAdAULUWY54BnRstSOpywEwi1G2lavl5dtcv339INeD2tdY2DGi3Vu5OIYM5\neoA0KFPdX9wL03CFGWHNEhDHNijWskFbLNhY7rxWQi3eT/NWgEjATryjEmqmL2E/msMtspJwQ8/Q22ok\n1sKOoAOtPRloQsrwoD5iF7sctjBP+CW/+0jG5WuKllfKvU+nq2YUc6qjkLyhfU+hiyrnH1FRppCPxgdy\nCNGGsuAUdENqt2ZZrY2EpliZpDEOwhlWuDn2o50QQk0l5My4cEsXi0Dp6xqcwEFrxeOcA0ig7CocYreU\nGjHFA8A5EboAU641OOeWFtLJWsk/p1uddpjfPdD6Fy1DtKEPsJN5uvkiRUaiRNdog9qObrWJysTjK2pq\nQ0EKgGQZcBnT0faf4OHwFlp6XgoT452E0UEldpE9a4Tz4ezSVLgTlj5EnmVM2+olDoBF24I6CcMmUE+K\ncBQlMYb2v62tOinz91BTNSo4r5DzypZRUIgz46j4BOyAzcrMT1UtPhScEHMIEnS+OdS6RgGio0KPM1KR\nEk6zpOV3NkE+Qs67TN6inYiYWBTyUQ1llExtIaG/n7BxdT/p7lddx0HCUdFPzp3E+iOMjdoWdt37mUOm\njRJywhkWDEZ64xqMNmlbOmOoDpIOl0inQa97BDaXamdjX3ddTOIZu4UjjQha0zqBzF0jaIicE47bQ1So\nYN1takc5L3OU7D4uaSwDILILmmjQHSRJj62jCqSEN0Mo1WyuA4kRNNdCEJsR5YzouNlMDSMkxeXKXgpq\nlr2UIzY3itpJNp05jUBFP6w5SYfNRjJVmyjK4thmr9/sGazvNbsl0dwTF/7YaH/iGrqIOLsNKEXINALw\nSToVQcktinsminBgT7XmuI/C7qQEbRmoDurfbla+DSqqxhOnJelBmAsWDHZ6xvDUvzSbGx5cOHAchtSG\nKhZbKv+cHHVieKwNh6tqS2McTOcGG2DBGuiNZjJqgnT2uxNv4xV1Mm00GXAlCHPRMbhYUkKeMSrm4TSU\ny7QGQTwQUyMqytKU4EQkx9r7ARBlwkeocRtVyP9bh3UORLIblIXQGgQaSZ2rWAB6S5CH3uTuNiexvaW/\n+BDadJhbbg3OXS2nArd1GUSH7mOMgsngjq7L50T98SmgIxC0UJJ3AKFTOZo9fTsxFikRuEQHtICMOWVd\nBRKV3Ye1NYAngJllHppgXDQoeLgLNuaUcUyYKJqALiFUc8CK84mXVhyI+P6IHFMnqCbtWrAMtFXYzq1n\nYyy9XtPZimC7bQprYhSVNvFHClhtn9kmt3v7DPrXT7I1gerzarnYXrkuaPA5R4drflAk21uhCPbZUXm/\nOCSGCQhJn0aJiSFr43puRohw+N3ALzXyg6hiSJXAlpFRrLZnVsjmYaGE+7wji9MUFGgc9B2F5d7vEmsr\niMHRKmjsCWgodAhC+c3OYFQ6rFeG9XiTDHkddbUrpNqShqqo76ktAZbxB+DmUJ97WAX6lAaknjVKYmMT\ngxCgb69w4hVxCcWMutU9RQC+u578IXOWWVUZk1YxLLu2j/rObjlJqv4gTuqABPpurDrw0PJoU2byybSO\nG28MEOHAkAuunbTxvVYE1d25Ban6h7wAjB+Bt461H/Tvxwp4ECcRYGRiYEZdV+s+6EQhb2J+gSYtKxyH\nZ6kTMk4ynbyMD5RF0s1G/3obks5oPXJyAfXPqZtHUwhT3adBoB8ZxqL0Rrt42bJUcUeHj6MWA9Btn32o\n9ZpVs8NXS8K6H4Va6DrZ8SsTdY3D9h1+6spcjiLeAhHJHj74/l69YyTyDW9FMfBeG1Wb59ITcdAlp2GM\nhC9WiKwC35QwP66fr80fDI2EKTQmxIF7kWlbawUB8B0/x1MZDsDtiw0ImBJRyqrtXWpvelSGmUYdgoM1\nYVrd0PLYymiw27rgbttUgdaUiwrjNKmfIavsHNBCO5jmHdVTld7xy8PniwrCFImtQvTdjULuRt3uPVIZ\nq2K336i3uC49lukBQWVSw+4V7pgShkp92292QrJ+NmcJu5RbVJEwuxvaaUU+jI0Jo9mLCFDSosGkdTfB\nzi50KvxXFLNIxLjSoz8cIYeDKvaqCHLdD63qUXe575ZTLelpihdDRjGp+NADZPYlZZpWRn0UJfeOCgQ1\nNokNGVRMgyk9zIi3rDds0JDlbWeJh8jus13QX000ShzCDZYlRGnvbkMnUYkci6EN9bQKM3Ne+2DoC8ct\nLApoKlWUYvHKZ/HIqfvAYR7WlgULzwsXj6LMzh2ob1ogeEz2whrOYJA2vPA1xqJ18KD90/d+kK0iF63F\nx7eaQVQPdQoHooY+uZbjhN22zXlX7DNPgpjR7IEwirmatyM9Prvbw7EbJbXM/qTVcpiLQixj1J3ZiogA\nyE1eMwQKsz4EbtaFartYEBC2OewhRfD1EYLv1ctaVAVqjdMYYf21rsrjfh0GliOycbf72ohACuPixJGc\nKpWDm9jBsSZ83GCHx5TTUcuRl63DuevxKkxWhU1IHFESgpOLs5CGFf8RI225dZNo/evXUVKsmovKNgUm\nbRmlj0atk8kERyKbhn1Kjku1H9t/CtnasFTJhzzYWvytvtOcszSEiw6tp8ZF2OnlU4Cf+5kI+HyHpruT\nV0Q+wwQN1gf6zItAmXmQYCI4/b02BhQcML+5YrnIjjG+lR6+ppHjdgmWk1srkqfhesMguEyBG/kQrW77\ndAEfkEzkxD1UnGvSzmXWSziIJHnraXX44f7ELnQPi1g6E25ahpjZPFcsFRBkG03C/IpcBA0SGadaklAF\nhqPb9+7jBwhN7iXpWTC5FD+zWQ7D2EfInwKmz+bnU8lpl/u6mnOojWipOgONp4Ot7x8aN18qvsV4VMEA\nTJhATIZsRYBCMjPcBoMXQtcoES6iKpDsM5Qc6SlWDPeFIhRi//Qpgc8FYwYkNdn9SfqDIhJzrsjSKMGh\nIKqdItwtUdm+Iu1hE9z9BTfr4LS7wwQHVuEQ9larfjZHQ1YuDT+rIAWnUV/V36K9qD6SdntxpzjtAYyK\npVck/e7NNoTvOzh8/1Zmbo7y9MizmbmVtu1514Fo8ohL3d+WQYRGLWvHxbqxGJrkMKWEF2I3KXXolfjY\ndNvUPWfpq5BdonMFv27LhMJQVoEk3a7bGioWROuC9S24TyIm22C1eHQaT+w7EmzEgXYOj1iC1tgelvP7\nnaFh7pHfQlVxyp7LgzB8o4gL7mZbNQI+ZVteS6F5VYorx326BNxWjvi+48AarMnETJJn6TZXypYcHbji\nBhMn8lZh4bWre4496jIafRp7Xp7B9+p5J/JiTiSY4+okXEVkPQcF5HqUBmO6V/mhFDTjuuj5cko6JMqj\nI84ygDz5AYnTRE5tA5q0RezyjC9X0LRrtO8wWeyyg9zX19O5eahNnrORipM6KZflSZPpPufm+NdVCGni\ndOimZ1O1/1fPQog+sWKaEIrrluo+UTxa0d5WJxIpl1UGiG6eKzV/nSbTDzZLSdiFCqarH1A7vOWfNEG4\nAY+QRRR4LAIMUm7WFCSr7OpCh0QFKd7NTfcQZeQtWgZOIuNYI+GxIp7dLbtuWuITq1DO1S2ScK/tNmMv\nL9/AHYVOL+V7EzemkdzPqnNOxt26FJGHcAG4htJ+5AdslXfNFnq4hPZ68IqagedK2b+eTIVMClPNa/Zs\nYLkN1RxEjs0awhOHfiR7En4WB4DerUZIgFto8pCK5JgbRbb4a9+2gPU0FhS1sZtAXCzkvxnNkOzDnk6x\nJymEZQjfBuHiqI8VpRawoywsJKGmmQdVE1ZYosA72u/QrfNUxZ5UuNNco24FdfWdDKdxxwwtswxgGj1I\nPGCbBZlZyMKNLpwJAuJskeGDsvYvtACs1Wph4ejRo/Prg8F6zyvsqM0YgbCWsyy2Ys9D50XS4VOUUZnN\nSl0tHBLAtnt2/57ZlyquOIFwXjQoA/q12UviHNtsnlf8ERYV4hTett3/Obtm1CixEzHLf3e/tKv9zM4M\nU8XjGVmvFRuv5RYEg1I7a95BdyT5jjt23DNmMg2ewhxxEUc8JJXyv3sRRRkM/QTqQujbfTChK2qvlyre\nMIfbDixn1zcsa1Wg6Am4923A+qGq328mvSPWAeW+1iyeW8IouyYfkMMLDh2GSkrI/AMtYkunZz/LFiDT\nm2SItBmHHwlondCeZc/ciH0h9pXhmJoUCK+liRVJvL1ZJNBLWqtO8Xx31EUlHWtwqyBZ9vYP2oG/Yy6D\n4UQ1UqDWUhodZl3biAwU2WRRx91l0arKLLWU1c7ddnitstx1XQrdIaBlhrbryt8SSD/pg9oz3mWf8UY3\nWb8tpWJqNqapzDcOHRiia4q2tJphiKq0RkucyrNfO7gDfnS/S/9m1sFGyifOF5mDEWiB1aqToYyEZWea\nYHE/Y4dH6WkAJBvRvWSd06Vx3wTF1jJvqcr6ZzFL9T88NjM4JBFHbojZ/MjTOwegGyDDYi5D5/+O60o6\nfpw66gryNEUqpT3stNq8CYTuSHhQATCf/VWx5ROP1/oT+4MnHVr1YmAlN1EPW/fdKDe3fF8laWJvx75q\nxmewbGn3O9qJEQkVPBqOq8WDZGsvLNz9gPU4xsWLrUhHSkk1hIljr8jQo0VSebP5sz9rQ9Iugbbdb/0R\nSsut/dedO5e/3cb/Z5LrwUruCTQ45yWl5Ck7l1xpZ6ZmOTiyLRUVnA35BBqK9KEJpB33W2VQrNtU1CQ0\nF61PsnOkSKXMC2Zn+zHumZO/EFgJNEg6R64nJnkqto3nhVfbWcqyzF8e08KVW3qEgNEeQrsewI3Ug1xJ\nW25zM/N95EPpm7SAfWoFOrp0Jsd2KrRkm8PWsSJLUexO1cnteTO+y+5NAODSmLbnI2Ez7ouvMxyouLN5\nATgLVFo3eD7W/q8kJe9O0ccypoPSNC3McLW6M6qo2+eXs2hidkzNZMNYJBWwIkq0aHfBZhbo/mwtmKPT\nW4v9OTOGi7gVobihF5flPiZK7ARpwXzLEVygHmGvcNSl0mt70bHN3h6dQa2qBlRtkb5UyZYknkpHqkoD\nloNnU9Fte8Kv2PHWuAP+ULbPg/8R4haIYe3kTfYMs6Njh7tCXF9waW27xRxGVjNJtKDcH4qSEybQFEkD\nR/o89L4XsshDwSrKG3XXJsGiDaldf4U4XO11UsJK9bsxLgjgu0OK70dl320ZO8qr2fLBAojESp0ANyhK\n3LCQfZ2qjqqaj62TBwaoDs6pNJcxvZqZba3Pa3t5CvVULXSOUowh8jtrLm/BGoY75jtFq1eyle0z+Hw8\nMsfd8+Lb2nTOzEzm2COQ1gsNuRYoWdzrWY174PW2Z0STwey1r6atGINxB4Z5QXDOUJwtUiiZ09RDHd9s\nYVB7soBikYW2Q8aE5zW5GE4OifrIVR6ftdf3FS24NYMGFxlaoSvUltq/nFNalKljfHWlzckTWS58TxXj\nzvxqBJkZsul2qzaK0TLUWlpP2TuIEjOj4msolmJPHtZH18PSvHufZVuVC6GGTyS527BmkdEDmwN91sqc\nY862vW1Zb7b+DiRFOP0Jn0nBIchKD8Jf2MpyUdzkeneOV/Cd7IDMgnyFPH4upe6wjepKusaa36NASpFk\n3Q5kthCNON/3MneqnbQFCvmm8RpujO0vlT6m7xbnl3+eOC8Ge4aaQFnctwhFMyom8TqEqTTsZ29zOaxS\nAhC/B+C82WS5TZ0XhehKgMCzkKUjX4G+C5iyDWjClzv8gDAIrhFnfxL4X0n94yClKrHzl/3Wk9k+E9A8\nh7Wk6tW44AOeCUqLdwvbK1wL7cOtYh2KGJYQ/B83nuYLvBQ0F+PMZa7WnzcyRggV6azRv23cr1NIF2mL\n66g/KFLebVgFRbQ3iX0Pc3U5Q8wzmeY5OX4x6jBmNljkMJRFS0BAduYBbJu1AMSsy6AQHd5ibUhPW/GF\n/ZnfkSUVnGuo1YzbcE+nHrMbhwx/CmBk+++x4KjiubLtqsjOMuXpXH0WdkbhuSOBeRQCpgab01VS3l1n\nDWOnKizo+SumLomraZCQdb4Pt4lUq3TkYCFPOcxmftyBUSsWiIxonL/WLC5x2OHKPQlhvC/zwR1pyGmc\n0faazIbpS1tM7UylhKEcRV/YU5klGVU8TMzaSBpBR7XWVwa97mLSlmNomMXoCRdKRCXsaS29rlatCUU8\nWFq2+Ho5LA4cGHGFUFy1iXUs+1nznblKV9ljDr9FqHM+R+iS665h5LeINYi+bm3pFQZTI/q9P8VSVJgV\n1kQ3fBM/C7L8ewGF6MIdmofagHO27w36niknQCaDb5IzE3uLvGXhXgKY6Kg6ojYTNHw48vPLq8wr7LsV\nXAo/W9k3bm8TrZVx2YOLyk2TmSnfITLwg6tUixGWimNiHdnsi71xOTucEuPJ+ZVOkW0yOn3TyWI7Oh+J\nF7B9tfVZog4EYw7MoRWcsANs8m5EuxpcZzTY6iRVcCJf2TXUkc1icdtDxxXJBrdbCFdQ9pp5g8YriIxU\nhDoxexrVNIx+9sIjyAeoP50c1XL6uB86FZA+msc9RBWWn4UGBJAy8YXsatortF/xrK9CB0+1dsOOJYK4\nHLKYZuwdPEN9EaSyv8wIJrJmwxyyr03zpyBi9uBq1fqRyAOE/hrmUvgxWJsCsmvmMKFwNPzZ4Pk6xtiv\nn9G9fJ9UqQweOgm+1QatMrd7Bp+nBKm0ZlmlPUu8cEtqUCsOzs6uznKrOS8lOdWbJwFAFWnp/9oDuMyB\nA7Mi+dQEAj+0svvY1UNVHRnCVVkbWFQpe4xzfFilJCzWW+Tt60wFPzBy/ryjWDuwV5EEgr+QAfRndHXF\nEAZRLNl2ISAsPT64l55RQhN5lVL2VTpz50LRj+uoAX5OZSmaLM4T9P8Jc6N22HqaOcrTwhzpJAuG9Uko\nKqa90ZU0PWOWUDfZOZVUH7B1+JpFABqfl9+OYjq9NOdtfyO5GTHG1kogLHxTBznLpidEzlHWdNfaCIwG\n0EWOtyURvd2HocY6TrlV71su/lTI2967l/bkV2mXBuNRMIgEQGyCeY35wOhwJepkyuKOHP7kTB8vTEub\nAP1WMs/vdHC/vtYXynGs+xpXWzNXtRHaQzuYMo867LJteI3P48aH9ljt7SG/jSPPmRIeQWljkpmdOWR4\nxg/2QKajPW21gc7yV2HRF3dvAtod+XjtLUVkF+eSXcRsfJEkktE/3EbqtWo2ozkvZw+cwQ+LKkH8zSYx\n0yf288S80t7o5O3+gHsOFo1so9hxquTg2HgdaEFucytZ/Ed16rWeU11pWJUCNXE/2WTFCM+1al8S83A1\nPJPeBMIqJPQhhoZRcTj3kXpVvWkdM5sFslv1ZuQp3M7Bhhtxm5L5mtQtXLP+ZMFBI27XOSqc50PN8aNg\nfgw2E0sExIbwf53F5GdZ2kPmWe9sNArNb9jhjdAKyVedC7oPxmUkyDX50GE7Mc4TFcbF0S2oksB9QzMC\na0D7pHpSh/io53GAUeAswq6XtEbrI7RqFzXLSbe2XwL3qsy924ot36mp6BdECfK0lut+kotQ3D7BukTA\nGvl6dxCUdZk9nTiwjiVykMskzmpVXhB7+5AtIu1dOvuDber7zDjitCUBXW57ExVcEzydDoW2H8zOaqoE\nb4MUNuLSA6/dHLkGO91lG0NzAf3T+k0HPYlNiDvxhLI/M+2f3Qv/x//e/M637P//YWG92vFNeAJHi+rb\ni26T8CwHISvpZAeiBIW/NwaJTJPoLfCDbMfcSGeZbSGiEDbbMgJQYqcn+0d7UaajBJVoz+P8wY4qy+l8\n+CL19S5Rae/lj45/+AHVCa9Soe5//P1G6ItBkev2uVd+8bPvf3L13O0XnlBVaP/92on0++0Xn/rFn30P\nxZefu/rJ9eu3L/zx7e9/8On1F3/xww9+8cQzn77ztv3v56dvfPLejz65+u4n1566/afPfvL+iz+/9O7P\n333JPvnzcy/cvvT8Z68/5uuOaXDriaFgBlFbBSCC1YHH65Qqty2ScbAua+MOAjTg+Th+JpQwyy44lLj+\nzZdVlDleHzSqTMfoMioPrZQPlyyyLBR4qWT9BDWYdX0gA+wT99UrQ9rDrDpspraUGFx3cwzjNXASQRR3\nLc+mjlR/Qx1MKGy2z1gGMgPXUcEgNKM7UJw2ngt6K/rd9sX0Oy4WubMK5e42K4crRLxukKNEovSzwCEp\ngg+0xUqUHy2p3AfNQCj0/ZjKhieg/NfqQobu5kfPSE0S6n+uxdjqdkJd8jhVH6nKKPVJu8Jl6m+GWmGo\ncUKRMd3ro+cwhzk7L+bXcd1Oag1KjTLuzb/f//B9alW+zZl/BX8l5UKoFaZr2qdwxbeoU3ktu1emjUh9\nxavUFNU9QxPzcrr+ZaojhrblVb5HZU3ru7+k6qZUDpNOpn267cNHoXNJzch37XnxLFA0fQqqoa7YeSnT\nCr3kPXwBCp1QF/U+gQZlq2552Z6e/WPjEn0D9caL6Fd7onddefECVUy/Y89+0V5zBdAPL/EqH9j3vpNp\nSF7Onv0C+0nKne+6iii1J6li+q637m3psHLE9JmrfKa3XEcVMwBPRh1P6kFKLfN9u8N1tuCqX8fHEcqV\nVJa0e9sT4u8n2ALMz9S2D3/SzlvpYHJuvWc/T/qsuZZ9F8/yAfU3b0D5kqN4BZqynIF8cvvuB9Q0vcD+\nUXulzfqB5rqN19WkFIt3P3Ad2vf4HP6ZqWe5kY3FVd2Pc+5GO4d5Z82Aq7G+qM958sOXs7XznjRioSWa\nVFQvcR69j+fj07br5TL62kaY6yvTAL3caoRaWx7lpy9aK56TjqqvKSncanzf5xrAvP2uzdz3uW6O22/v\nuf7uk3n7uR4v+Aq8xvG/QJXYk7wO7vuO3audwxjHdh0lPVTNOvY39p8/dy1b65+sNvdJVmG+ELWkT3n9\ncdVAR8npKC3tJaRVI9s+8Czfej5+uRHVse0zL7clyNvrqJD0a9k1z0b5cpaZxusn+cq5qKZ9OmvPcZZo\nv9F+Hv9ebtuGot6pWrfue43Vvc/E9Z+Pz7wR9dBTiWoWEPfP6yle9ArmuqaXbn+pvVd7X5Xwfoq/PM/P\nv5kVxb7K26m1eq53+O/jfK7noyr3B1Ga/AobpkLw0Wy8/kN2zkvTz3i8fS7Vzvaa46mXno8C6K9HqfdT\nWX151Z3Xw57nff8ivqX+fyX6JD2vjex7vG96xpPxmZf4IFdYNf7ZKNKdxvrFGMEz0bdxzVefzAqan427\np7E+HgXBz0SN8pPx7GdjjI57jXjvqxhHvP4Gr/9jXjb1uVpyge18J0b8JF9Mn/lOlG6/ODUfvN+usetO\n+y++LtIcOB5PrcLur8W9XuSTnkS9eG//1agFf7V95DRv/Qrsf3z+xayvLscKusrLnon+POMF7ts2q69+\nGCXUL7bP5b16nO15Ij7P5uHKp9nmC+zJk+yli+3Y+Tq6EaXkH8/2jcvx+pl2DqvfMMfeiK9ci8/rM1dj\nnV5j807zk5pvmv8vRZ+cjkG5EnNAbb7iDda4t3M19eETsd6f5NWuRJ+8lu0Px7NnzPYcf6LoUtw3tecC\nq9WnfYb3xdXOZ/Mnzc/jMUsv8y0WsvfxeiGbY6dizrzKm6a1prXwwvT+eZzf0lo7z2f/IK6j+a9N/vnp\nPf9afOa1bM5oYl/M9oGfRZ+8ETv5ad+j8JXz0bAf8InS9S/ECnqv7Qe89Xi8dTZG/EyMAluibmnX+wtT\ne0U7uLHWfJ5f9odN+4P/qbHQ3HuG1+e08V36QnvG+fOmfj7FP6/yM29EI5/zZ/TPXI0Bupg94xPx7wu8\nwmW+/k52Vl7w72Lf0Hn3ahp3qkVDF/tpKiS/TT3pR5Pq86Vb74Ri88cnoC798Sm+foWKyK1Ws5SUT926\nSDXvpAOeFJZfzzSW37QrvAldcOhphzI4Xp3SEH9Myti438cn/V7hAVNVmrrXev0NtMnVpi+46jh+P4fP\n+jXPfXySV1J73qLudVzzdXvvFBSp7TpX/fNQ6H6cn4K+9ROhUU4V6VeSNvlbt37Cp4DW+Jnsvk9Sn5tt\nc4VzKVJfomq3FL+hzX0Kz88+DWXst6hv/rj0xqVdTR3xS9Sf1uuPUsX8rPfb43zKM1KsvnUWz4/r8NUr\n1Et/mq9Dxfws+iB9lxrdrtd9ht94068v3XK1B9d+x5/xvM2Dp29d4hXfSnrdP8v+vUwFbe/zVuvcZkbb\nJ+ehh+7j/oara7fa8U/E62lMoe99DXMvxiKe8dZraI36wa7qiuPWX49TuTzUvWNcMPPe8vnzpv32JK+M\n+X/d/oJO+mW2IObGGSq+n/W2XcXrjCsi8ge3vS0nisj/3gxmJm1wx55SUmN9PPToZb99h3LTEVam+DDY\neIPN2R1MhkivZQIUDyJ7KqK1Wg9Xx5secZzPscE5Jr9Z+hwSs81tZ2JWwHlAB8Fztq2eUu1y1p1U5D20\nNMlAP4KSuvP2TyeERIdKtYd8IsJh9yO/s7oxhuyJyBae+d3L5F9kZhhkjzDs1hBlrT2hkWEgvrgWIHQy\n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`\n\n/** @type {Uint8Array} */\nlet dictionary\n\nexport function getDictionary() {\n if (!dictionary) {\n dictionary = new Uint8Array(122784)\n const gzipString = atob(dictionaryGz64)\n const gzipBytes = new Uint8Array(gzipString.length)\n for (let i = 0; i < gzipString.length; i++) {\n gzipBytes[i] = gzipString.charCodeAt(i)\n }\n gunzip(gzipBytes, dictionary)\n }\n return dictionary\n}\n", "/* Copyright 2013 Google Inc. All Rights Reserved.\n\n Licensed under the Apache License, Version 2.0 (the \"License\");\n you may not use this file except in compliance with the License.\n You may obtain a copy of the License at\n\n http://www.apache.org/licenses/LICENSE-2.0\n\n Unless required by applicable law or agreed to in writing, software\n distributed under the License is distributed on an \"AS IS\" BASIS,\n WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.\n See the License for the specific language governing permissions and\n limitations under the License.\n\n Transformations on dictionary words.\n*/\n\nimport { getDictionary } from './brotli.dictionary.js'\n\nconst kIdentity = 0\nconst kOmitLast1 = 1\nconst kOmitLast2 = 2\nconst kOmitLast3 = 3\nconst kOmitLast4 = 4\nconst kOmitLast5 = 5\nconst kOmitLast6 = 6\nconst kOmitLast7 = 7\nconst kOmitLast8 = 8\nconst kOmitLast9 = 9\nconst kUppercaseFirst = 10\nconst kUppercaseAll = 11\nconst kOmitFirst1 = 12\nconst kOmitFirst2 = 13\nconst kOmitFirst3 = 14\nconst kOmitFirst4 = 15\nconst kOmitFirst5 = 16\nconst kOmitFirst6 = 17\nconst kOmitFirst7 = 18\n// const kOmitFirst8 = 19\nconst kOmitFirst9 = 20\n\n/**\n * @param {string} prefix\n * @param {number} transform\n * @param {string} suffix\n */\nfunction Transform(prefix, transform, suffix) {\n this.prefix = new Uint8Array(prefix.length)\n this.transform = transform\n this.suffix = new Uint8Array(suffix.length)\n\n for (let i = 0; i < prefix.length; i++) this.prefix[i] = prefix.charCodeAt(i)\n for (let i = 0; i < suffix.length; i++) this.suffix[i] = suffix.charCodeAt(i)\n}\n\nexport const kTransforms = [\n new Transform( '', kIdentity, '' ),\n new Transform( '', kIdentity, ' ' ),\n new Transform( ' ', kIdentity, ' ' ),\n new Transform( '', kOmitFirst1, '' ),\n new Transform( '', kUppercaseFirst, ' ' ),\n new Transform( '', kIdentity, ' the ' ),\n new Transform( ' ', kIdentity, '' ),\n new Transform( 's ', kIdentity, ' ' ),\n new Transform( '', kIdentity, ' of ' ),\n new Transform( '', kUppercaseFirst, '' ),\n new Transform( '', kIdentity, ' and ' ),\n new Transform( '', kOmitFirst2, '' ),\n new Transform( '', kOmitLast1, '' ),\n new Transform( ', ', kIdentity, ' ' ),\n new Transform( '', kIdentity, ', ' ),\n new Transform( ' ', kUppercaseFirst, ' ' ),\n new Transform( '', kIdentity, ' in ' ),\n new Transform( '', kIdentity, ' to ' ),\n new Transform( 'e ', kIdentity, ' ' ),\n new Transform( '', kIdentity, '\"' ),\n new Transform( '', kIdentity, '.' ),\n new Transform( '', kIdentity, '\">' ),\n new Transform( '', kIdentity, '\\n' ),\n new Transform( '', kOmitLast3, '' ),\n new Transform( '', kIdentity, ']' ),\n new Transform( '', kIdentity, ' for ' ),\n new Transform( '', kOmitFirst3, '' ),\n new Transform( '', kOmitLast2, '' ),\n new Transform( '', kIdentity, ' a ' ),\n new Transform( '', kIdentity, ' that ' ),\n new Transform( ' ', kUppercaseFirst, '' ),\n new Transform( '', kIdentity, '. ' ),\n new Transform( '.', kIdentity, '' ),\n new Transform( ' ', kIdentity, ', ' ),\n new Transform( '', kOmitFirst4, '' ),\n new Transform( '', kIdentity, ' with ' ),\n new Transform( '', kIdentity, '\\'' ),\n new Transform( '', kIdentity, ' from ' ),\n new Transform( '', kIdentity, ' by ' ),\n new Transform( '', kOmitFirst5, '' ),\n new Transform( '', kOmitFirst6, '' ),\n new Transform( ' the ', kIdentity, '' ),\n new Transform( '', kOmitLast4, '' ),\n new Transform( '', kIdentity, '. The ' ),\n new Transform( '', kUppercaseAll, '' ),\n new Transform( '', kIdentity, ' on ' ),\n new Transform( '', kIdentity, ' as ' ),\n new Transform( '', kIdentity, ' is ' ),\n new Transform( '', kOmitLast7, '' ),\n new Transform( '', kOmitLast1, 'ing ' ),\n new Transform( '', kIdentity, '\\n\\t' ),\n new Transform( '', kIdentity, ':' ),\n new Transform( ' ', kIdentity, '. ' ),\n new Transform( '', kIdentity, 'ed ' ),\n new Transform( '', kOmitFirst9, '' ),\n new Transform( '', kOmitFirst7, '' ),\n new Transform( '', kOmitLast6, '' ),\n new Transform( '', kIdentity, '(' ),\n new Transform( '', kUppercaseFirst, ', ' ),\n new Transform( '', kOmitLast8, '' ),\n new Transform( '', kIdentity, ' at ' ),\n new Transform( '', kIdentity, 'ly ' ),\n new Transform( ' the ', kIdentity, ' of ' ),\n new Transform( '', kOmitLast5, '' ),\n new Transform( '', kOmitLast9, '' ),\n new Transform( ' ', kUppercaseFirst, ', ' ),\n new Transform( '', kUppercaseFirst, '\"' ),\n new Transform( '.', kIdentity, '(' ),\n new Transform( '', kUppercaseAll, ' ' ),\n new Transform( '', kUppercaseFirst, '\">' ),\n new Transform( '', kIdentity, '=\"' ),\n new Transform( ' ', kIdentity, '.' ),\n new Transform( '.com/', kIdentity, '' ),\n new Transform( ' the ', kIdentity, ' of the ' ),\n new Transform( '', kUppercaseFirst, '\\'' ),\n new Transform( '', kIdentity, '. This ' ),\n new Transform( '', kIdentity, ',' ),\n new Transform( '.', kIdentity, ' ' ),\n new Transform( '', kUppercaseFirst, '(' ),\n new Transform( '', kUppercaseFirst, '.' ),\n new Transform( '', kIdentity, ' not ' ),\n new Transform( ' ', kIdentity, '=\"' ),\n new Transform( '', kIdentity, 'er ' ),\n new Transform( ' ', kUppercaseAll, ' ' ),\n new Transform( '', kIdentity, 'al ' ),\n new Transform( ' ', kUppercaseAll, '' ),\n new Transform( '', kIdentity, '=\\'' ),\n new Transform( '', kUppercaseAll, '\"' ),\n new Transform( '', kUppercaseFirst, '. ' ),\n new Transform( ' ', kIdentity, '(' ),\n new Transform( '', kIdentity, 'ful ' ),\n new Transform( ' ', kUppercaseFirst, '. ' ),\n new Transform( '', kIdentity, 'ive ' ),\n new Transform( '', kIdentity, 'less ' ),\n new Transform( '', kUppercaseAll, '\\'' ),\n new Transform( '', kIdentity, 'est ' ),\n new Transform( ' ', kUppercaseFirst, '.' ),\n new Transform( '', kUppercaseAll, '\">' ),\n new Transform( ' ', kIdentity, '=\\'' ),\n new Transform( '', kUppercaseFirst, ',' ),\n new Transform( '', kIdentity, 'ize ' ),\n new Transform( '', kUppercaseAll, '.' ),\n new Transform( '\\xc2\\xa0', kIdentity, '' ),\n new Transform( ' ', kIdentity, ',' ),\n new Transform( '', kUppercaseFirst, '=\"' ),\n new Transform( '', kUppercaseAll, '=\"' ),\n new Transform( '', kIdentity, 'ous ' ),\n new Transform( '', kUppercaseAll, ', ' ),\n new Transform( '', kUppercaseFirst, '=\\'' ),\n new Transform( ' ', kUppercaseFirst, ',' ),\n new Transform( ' ', kUppercaseAll, '=\"' ),\n new Transform( ' ', kUppercaseAll, ', ' ),\n new Transform( '', kUppercaseAll, ',' ),\n new Transform( '', kUppercaseAll, '(' ),\n new Transform( '', kUppercaseAll, '. ' ),\n new Transform( ' ', kUppercaseAll, '.' ),\n new Transform( '', kUppercaseAll, '=\\'' ),\n new Transform( ' ', kUppercaseAll, '. ' ),\n new Transform( ' ', kUppercaseFirst, '=\"' ),\n new Transform( ' ', kUppercaseAll, '=\\'' ),\n new Transform( ' ', kUppercaseFirst, '=\\'' ),\n]\n\nexport const kNumTransforms = kTransforms.length\n\n/**\n * @param {Uint8Array} p\n * @param {number} i\n * @returns {number}\n */\nfunction ToUpperCase(p, i) {\n if (p[i] < 0xc0) {\n if (p[i] >= 97 && p[i] <= 122) {\n p[i] ^= 32\n }\n return 1\n }\n\n /* An overly simplified uppercasing model for utf-8. */\n if (p[i] < 0xe0) {\n p[i + 1] ^= 32\n return 2\n }\n\n /* An arbitrary transform for three byte characters. */\n p[i + 2] ^= 5\n return 3\n}\n\n/**\n * @param {Uint8Array} dst\n * @param {number} idx\n * @param {number} word\n * @param {number} len\n * @param {number} transform\n * @returns {number}\n */\nexport function transformDictionaryWord(dst, idx, word, len, transform) {\n const dictionary = getDictionary()\n const { prefix } = kTransforms[transform]\n const { suffix } = kTransforms[transform]\n const t = kTransforms[transform].transform\n let skip = t < kOmitFirst1 ? 0 : t - (kOmitFirst1 - 1)\n const start_idx = idx\n\n if (skip > len) skip = len\n\n let prefix_pos = 0\n while (prefix_pos < prefix.length) {\n dst[idx++] = prefix[prefix_pos++]\n }\n\n word += skip\n len -= skip\n\n if (t <= kOmitLast9) len -= t\n\n for (let i = 0; i < len; i++) {\n dst[idx++] = dictionary[word + i]\n }\n\n let uppercase = idx - len\n\n if (t === kUppercaseFirst) {\n ToUpperCase(dst, uppercase)\n } else if (t === kUppercaseAll) {\n while (len > 0) {\n const step = ToUpperCase(dst, uppercase)\n uppercase += step\n len -= step\n }\n }\n\n let suffix_pos = 0\n while (suffix_pos < suffix.length) {\n dst[idx++] = suffix[suffix_pos++]\n }\n\n return idx - start_idx\n}\n", "/* Adapted from https://github.com/foliojs/brotli.js\n * Copyright 2015 Devon Govett, MIT License\n * Copyright 2013 Google Inc, Apache License 2.0\n */\n\nimport { BrotliBitReader } from './brotli.bitreader.js'\nimport { copyUncompressedBlockToOutput, decodeBlockType, decodeMetaBlockLength, decodeVarLenUint8, decodeWindowBits, jumpToByteBoundary, readBlockLength } from './brotli.blocks.js'\nimport { lookup, lookupOffsets } from './brotli.context.js'\nimport { decodeContextMap } from './brotli.contextmap.js'\nimport { HuffmanCode, HuffmanTreeGroup, readHuffmanCode, readSymbol } from './brotli.huffman.js'\nimport { kCopyLengthPrefixCode, kCopyRangeLut, kInsertLengthPrefixCode, kInsertRangeLut } from './brotli.prefix.js'\nimport { BrotliInput, BrotliOutput } from './brotli.streams.js'\nimport { kNumTransforms, transformDictionaryWord } from './brotli.transform.js'\nimport { HUFFMAN_MAX_TABLE_SIZE } from './gzip.huffman.js'\n\nconst kNumLiteralCodes = 256\nconst kNumInsertAndCopyCodes = 704\nconst kNumBlockLengthCodes = 26\nconst kLiteralContextBits = 6\nconst kDistanceContextBits = 2\n\nconst NUM_DISTANCE_SHORT_CODES = 16\nconst kDistanceShortCodeIndexOffset = new Uint8Array([\n 3, 2, 1, 0, 3, 3, 3, 3, 3, 3, 2, 2, 2, 2, 2, 2,\n])\n\nconst kDistanceShortCodeValueOffset = new Int8Array([\n 0, 0, 0, 0, -1, 1, -2, 2, -3, 3, -1, 1, -2, 2, -3, 3,\n])\n\n// Brotli dictionary\nconst offsetsByLength = new Uint32Array([\n 0, 0, 0, 0, 0, 4096, 9216, 21504, 35840, 44032,\n 53248, 63488, 74752, 87040, 93696, 100864, 104704, 106752, 108928, 113536,\n 115968, 118528, 119872, 121280, 122016,\n])\n\nconst sizeBitsByLength = new Uint8Array([\n 0, 0, 0, 0, 10, 10, 11, 11, 10, 10,\n 10, 10, 10, 9, 9, 8, 7, 7, 8, 7,\n 7, 6, 6, 5, 5,\n])\n\nconst minDictionaryWordLength = 4\nconst maxDictionaryWordLength = 24\n\n/**\n * @param {Uint8Array} input\n * @param {number} outputLength\n * @returns {Uint8Array}\n */\nexport function decompressBrotli(input, outputLength) {\n const output = new Uint8Array(outputLength)\n const brotliInput = new BrotliInput(input)\n const brotliOutput = new BrotliOutput(output)\n brotli(brotliInput, brotliOutput)\n return output\n}\n\n/**\n * @param {BrotliInput} input\n * @param {BrotliOutput} output\n */\nfunction brotli(input, output) {\n let pos = 0\n let input_end = 0\n let window_bits = 0\n let max_distance = 0\n // This ring buffer holds a few past copy distances that will be used by special distance codes\n const dist_rb = [ 16, 15, 11, 4 ]\n let dist_rb_idx = 0\n /* The previous 2 bytes used for context */\n let prev_byte1 = 0\n let prev_byte2 = 0\n const hgroup = [new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0), new HuffmanTreeGroup(0, 0)]\n\n // We need the slack region for the following reasons:\n // - always doing two 8-byte copies for fast backward copying\n // - transforms\n // - flushing the input ringbuffer when decoding uncompressed blocks\n const kRingBufferWriteAheadSlack = 128 + BrotliBitReader.READ_SIZE\n\n const br = new BrotliBitReader(input)\n\n // Decode window size\n window_bits = decodeWindowBits(br)\n const max_backward_distance = (1 << window_bits) - 16\n\n const ringbuffer_size = 1 << window_bits\n const ringbuffer_mask = ringbuffer_size - 1\n const ringbuffer = new Uint8Array(ringbuffer_size + kRingBufferWriteAheadSlack + maxDictionaryWordLength)\n const ringbuffer_end = ringbuffer_size\n\n const block_type_trees = []\n const block_len_trees = []\n for (let x = 0; x < 3 * HUFFMAN_MAX_TABLE_SIZE; x++) {\n block_type_trees[x] = new HuffmanCode(0, 0)\n block_len_trees[x] = new HuffmanCode(0, 0)\n }\n\n while (!input_end) {\n let meta_block_remaining_len = 0\n const block_length = [ 1 << 28, 1 << 28, 1 << 28 ]\n const block_type = [ 0 ]\n const num_block_types = [ 1, 1, 1 ]\n const block_type_rb = [ 0, 1, 0, 1, 0, 1 ]\n const block_type_rb_index = [ 0 ]\n let context_offset = 0\n\n for (let i = 0; i < 3; i++) {\n hgroup[i].codes = []\n hgroup[i].htrees = new Uint32Array()\n }\n\n br.readMoreInput()\n\n const _out = decodeMetaBlockLength(br)\n meta_block_remaining_len = _out.meta_block_length\n if (pos + meta_block_remaining_len > output.buffer.length) {\n // We need to grow the output buffer to fit the additional data\n const tmp = new Uint8Array( pos + meta_block_remaining_len )\n tmp.set( output.buffer )\n output.buffer = tmp\n }\n input_end = _out.input_end\n\n if (_out.is_metadata) {\n jumpToByteBoundary(br)\n\n for (; meta_block_remaining_len > 0; --meta_block_remaining_len) {\n br.readMoreInput()\n // Read one byte and ignore it\n br.readBits(8)\n }\n\n continue\n }\n\n if (meta_block_remaining_len === 0) continue\n\n if (_out.is_uncompressed) {\n br.bit_pos_ = br.bit_pos_ + 7 & ~7\n copyUncompressedBlockToOutput(output, meta_block_remaining_len, pos, ringbuffer, ringbuffer_mask, br)\n pos += meta_block_remaining_len\n continue\n }\n\n for (let i = 0; i < 3; i++) {\n num_block_types[i] = decodeVarLenUint8(br) + 1\n if (num_block_types[i] >= 2) {\n readHuffmanCode(num_block_types[i] + 2, block_type_trees, i * HUFFMAN_MAX_TABLE_SIZE, br)\n readHuffmanCode(kNumBlockLengthCodes, block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br)\n block_length[i] = readBlockLength(block_len_trees, i * HUFFMAN_MAX_TABLE_SIZE, br)\n block_type_rb_index[i] = 1\n }\n }\n\n br.readMoreInput()\n\n const distance_postfix_bits = br.readBits(2)\n const num_direct_distance_codes = NUM_DISTANCE_SHORT_CODES + (br.readBits(4) << distance_postfix_bits)\n const distance_postfix_mask = (1 << distance_postfix_bits) - 1\n const num_distance_codes = num_direct_distance_codes + (48 << distance_postfix_bits)\n const context_modes = new Uint8Array(num_block_types[0])\n\n for (let i = 0; i < num_block_types[0]; i++) {\n br.readMoreInput()\n context_modes[i] = br.readBits(2) << 1\n }\n\n const [num_literal_htrees, context_map] = decodeContextMap(num_block_types[0] << kLiteralContextBits, br)\n const [num_dist_htrees, dist_context_map] = decodeContextMap(num_block_types[2] << kDistanceContextBits, br)\n\n hgroup[0] = new HuffmanTreeGroup(kNumLiteralCodes, num_literal_htrees)\n hgroup[1] = new HuffmanTreeGroup(kNumInsertAndCopyCodes, num_block_types[1])\n hgroup[2] = new HuffmanTreeGroup(num_distance_codes, num_dist_htrees)\n\n for (let i = 0; i < 3; ++i) {\n hgroup[i].decode(br)\n }\n\n let context_map_slice = 0\n let dist_context_map_slice = 0\n let context_mode = context_modes[block_type[0]]\n let context_lookup_offset1 = lookupOffsets[context_mode]\n let context_lookup_offset2 = lookupOffsets[context_mode + 1]\n let htree_command = hgroup[1].htrees[0]\n\n while (meta_block_remaining_len > 0) {\n let distance_code\n\n br.readMoreInput()\n\n if (block_length[1] === 0) {\n decodeBlockType(num_block_types[1],\n block_type_trees, 1, block_type, block_type_rb,\n block_type_rb_index, br)\n block_length[1] = readBlockLength(block_len_trees, HUFFMAN_MAX_TABLE_SIZE, br)\n htree_command = hgroup[1].htrees[block_type[1]]\n }\n block_length[1]--\n const cmd_code = readSymbol(hgroup[1].codes, htree_command, br)\n let range_idx = cmd_code >> 6\n if (range_idx >= 2) {\n range_idx -= 2\n distance_code = -1\n } else {\n distance_code = 0\n }\n const insertIndex = kInsertRangeLut[range_idx] + (cmd_code >> 3 & 7)\n const insertPrefix = kInsertLengthPrefixCode[insertIndex]\n const insertLength = insertPrefix.offset + br.readBits(insertPrefix.nbits)\n const copyIndex = kCopyRangeLut[range_idx] + (cmd_code & 7)\n const copyCode = kCopyLengthPrefixCode[copyIndex]\n const copyLength = copyCode.offset + br.readBits(copyCode.nbits)\n prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]\n prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]\n for (let j = 0; j < insertLength; j++) {\n br.readMoreInput()\n\n if (block_length[0] === 0) {\n decodeBlockType(num_block_types[0],\n block_type_trees, 0, block_type, block_type_rb,\n block_type_rb_index, br)\n block_length[0] = readBlockLength(block_len_trees, 0, br)\n context_offset = block_type[0] << kLiteralContextBits\n context_map_slice = context_offset\n context_mode = context_modes[block_type[0]]\n context_lookup_offset1 = lookupOffsets[context_mode]\n context_lookup_offset2 = lookupOffsets[context_mode + 1]\n }\n const context = lookup[context_lookup_offset1 + prev_byte1] |\n lookup[context_lookup_offset2 + prev_byte2]\n const literal_htree_index = context_map[context_map_slice + context]\n block_length[0]--\n prev_byte2 = prev_byte1\n prev_byte1 = readSymbol(hgroup[0].codes, hgroup[0].htrees[literal_htree_index], br)\n ringbuffer[pos & ringbuffer_mask] = prev_byte1\n if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n output.write(ringbuffer, ringbuffer_size)\n }\n pos++\n }\n meta_block_remaining_len -= insertLength\n if (meta_block_remaining_len <= 0) break\n\n if (distance_code < 0) {\n br.readMoreInput()\n if (block_length[2] === 0) {\n decodeBlockType(num_block_types[2],\n block_type_trees, 2, block_type, block_type_rb,\n block_type_rb_index, br)\n block_length[2] = readBlockLength(block_len_trees, 2 * HUFFMAN_MAX_TABLE_SIZE, br)\n dist_context_map_slice = block_type[2] << kDistanceContextBits\n }\n block_length[2]--\n const context = (copyLength > 4 ? 3 : copyLength - 2) & 0xff\n const dist_htree_index = dist_context_map[dist_context_map_slice + context]\n distance_code = readSymbol(hgroup[2].codes, hgroup[2].htrees[dist_htree_index], br)\n if (distance_code >= num_direct_distance_codes) {\n distance_code -= num_direct_distance_codes\n const postfix = distance_code & distance_postfix_mask\n distance_code >>= distance_postfix_bits\n const nbits = (distance_code >> 1) + 1\n const offset = (2 + (distance_code & 1) << nbits) - 4\n distance_code = num_direct_distance_codes +\n (offset + br.readBits(nbits) <<\n distance_postfix_bits) + postfix\n }\n }\n\n // Convert distance code to actual distance by possibly looking up past distnaces from the ringbuffer\n const distance = translateShortCodes(distance_code, dist_rb, dist_rb_idx)\n if (distance < 0) throw new Error('[BrotliDecompress] invalid distance')\n\n if (pos < max_backward_distance && max_distance !== max_backward_distance) {\n max_distance = pos\n } else {\n max_distance = max_backward_distance\n }\n\n let copy_dst = pos & ringbuffer_mask\n\n if (distance > max_distance) {\n if (copyLength >= minDictionaryWordLength && copyLength <= maxDictionaryWordLength) {\n let offset = offsetsByLength[copyLength]\n const word_id = distance - max_distance - 1\n const shift = sizeBitsByLength[copyLength]\n const mask = (1 << shift) - 1\n const word_idx = word_id & mask\n const transform_idx = word_id >> shift\n offset += word_idx * copyLength\n if (transform_idx < kNumTransforms) {\n const len = transformDictionaryWord(ringbuffer, copy_dst, offset, copyLength, transform_idx)\n copy_dst += len\n pos += len\n meta_block_remaining_len -= len\n if (copy_dst >= ringbuffer_end) {\n output.write(ringbuffer, ringbuffer_size)\n\n for (let _x = 0; _x < copy_dst - ringbuffer_end; _x++)\n ringbuffer[_x] = ringbuffer[ringbuffer_end + _x]\n }\n } else {\n throw new Error('Invalid backward reference')\n }\n } else {\n throw new Error('Invalid backward reference')\n }\n } else {\n if (distance_code > 0) {\n dist_rb[dist_rb_idx & 3] = distance\n dist_rb_idx++\n }\n\n if (copyLength > meta_block_remaining_len) {\n throw new Error('Invalid backward reference')\n }\n\n for (let j = 0; j < copyLength; j++) {\n ringbuffer[pos & ringbuffer_mask] = ringbuffer[pos - distance & ringbuffer_mask]\n if ((pos & ringbuffer_mask) === ringbuffer_mask) {\n output.write(ringbuffer, ringbuffer_size)\n }\n pos++\n meta_block_remaining_len--\n }\n }\n\n // When we get here, we must have inserted at least one literal and\n // made a copy of at least length two, therefore accessing the last 2\n // bytes is valid\n prev_byte1 = ringbuffer[pos - 1 & ringbuffer_mask]\n prev_byte2 = ringbuffer[pos - 2 & ringbuffer_mask]\n }\n\n // Protect pos from overflow, wrap it around at every GB of input data\n pos &= 0x3fffffff\n }\n\n output.write(ringbuffer, pos & ringbuffer_mask)\n}\n\n/**\n * @param {number} code\n * @param {number[]} ringbuffer\n * @param {number} index\n * @returns {number}\n */\nfunction translateShortCodes(code, ringbuffer, index) {\n if (code < NUM_DISTANCE_SHORT_CODES) {\n index += kDistanceShortCodeIndexOffset[code]\n index &= 3\n return ringbuffer[index] + kDistanceShortCodeValueOffset[code]\n } else {\n return code - NUM_DISTANCE_SHORT_CODES + 1\n }\n}\n", "/**\n * LZ4 decompression with legacy hadoop support.\n * https://github.com/apache/arrow/blob/apache-arrow-16.1.0/cpp/src/arrow/util/compression_lz4.cc#L475\n *\n * @param {Uint8Array} input\n * @param {number} outputLength\n * @returns {Uint8Array}\n */\nexport function decompressLz4(input, outputLength) {\n const output = new Uint8Array(outputLength)\n try {\n let i = 0 // input index\n let o = 0 // output index\n while (i < input.length - 8) {\n const expectedOutputLength = input[i++] << 24 | input[i++] << 16 | input[i++] << 8 | input[i++]\n const expectedInputLength = input[i++] << 24 | input[i++] << 16 | input[i++] << 8 | input[i++]\n if (input.length - i < expectedInputLength) throw new Error('lz4 not hadoop')\n if (output.length < expectedOutputLength) throw new Error('lz4 not hadoop')\n\n // decompress and compare with expected\n const chunk = lz4basic(input.subarray(i, i + expectedInputLength), output, o)\n if (chunk !== expectedOutputLength) throw new Error('lz4 not hadoop')\n i += expectedInputLength\n o += expectedOutputLength\n\n if (i === input.length) return output\n }\n if (i < input.length) throw new Error('lz4 not hadoop')\n } catch (error) {\n if (error instanceof Error && error.message !== 'lz4 not hadoop') throw error\n // fallback to basic lz4\n lz4basic(input, output, 0)\n }\n return output\n}\n\n/**\n * Basic LZ4 block decompression.\n *\n * @param {Uint8Array} input\n * @param {number} outputLength\n * @returns {Uint8Array}\n */\nexport function decompressLz4Raw(input, outputLength) {\n const output = new Uint8Array(outputLength)\n lz4basic(input, output, 0)\n return output\n}\n\n/**\n * @param {Uint8Array} input\n * @param {Uint8Array} output\n * @param {number} outputIndex\n * @returns {number} bytes written\n */\nfunction lz4basic(input, output, outputIndex) {\n let len = outputIndex // output position\n for (let i = 0; i < input.length;) {\n const token = input[i++]\n\n let literals = token >> 4\n if (literals) {\n // literal length\n let byte = literals + 240\n while (byte === 255) literals += byte = input[i++]\n // copy literals\n output.set(input.subarray(i, i + literals), len)\n len += literals\n i += literals\n if (i >= input.length) return len - outputIndex\n }\n\n const offset = input[i++] | input[i++] << 8\n if (!offset || offset > len) {\n throw new Error(`lz4 offset out of range ${offset}`)\n }\n // match length\n let matchLength = (token & 0xf) + 4 // minmatch 4\n let byte = matchLength + 240\n while (byte === 255) matchLength += byte = input[i++]\n // copy match\n // TODO: fast path when no overlap\n let pos = len - offset\n const end = len + matchLength\n while (len < end) output[len++] = output[pos++]\n }\n return len - outputIndex\n}\n", "import { decompress as decompressZstd } from 'fzstd'\nimport { snappyUncompressor } from 'hysnappy'\nimport { decompressBrotli } from './brotli.js'\nimport { gunzip } from './gzip.js'\nimport { decompressLz4, decompressLz4Raw } from './lz4.js'\n\n/** @type {import('hyparquet').Compressors} */\nexport const compressors = {\n SNAPPY: snappyUncompressor(), // loads wasm\n GZIP: (input, length) => gunzip(input, new Uint8Array(length)),\n BROTLI: decompressBrotli,\n ZSTD: input => decompressZstd(input),\n LZ4: decompressLz4,\n LZ4_RAW: decompressLz4Raw,\n}\n", "\n/** @type {import('../src/types.d.ts').ParquetType[]} */\nexport const ParquetTypes = [\n 'BOOLEAN',\n 'INT32',\n 'INT64',\n 'INT96', // deprecated\n 'FLOAT',\n 'DOUBLE',\n 'BYTE_ARRAY',\n 'FIXED_LEN_BYTE_ARRAY',\n]\n\n/** @type {import('../src/types.d.ts').Encoding[]} */\nexport const Encodings = [\n 'PLAIN',\n 'GROUP_VAR_INT', // deprecated\n 'PLAIN_DICTIONARY',\n 'RLE',\n 'BIT_PACKED', // deprecated\n 'DELTA_BINARY_PACKED',\n 'DELTA_LENGTH_BYTE_ARRAY',\n 'DELTA_BYTE_ARRAY',\n 'RLE_DICTIONARY',\n 'BYTE_STREAM_SPLIT',\n]\n\n/** @type {import('../src/types.d.ts').FieldRepetitionType[]} */\nexport const FieldRepetitionTypes = [\n 'REQUIRED',\n 'OPTIONAL',\n 'REPEATED',\n]\n\n/** @type {import('../src/types.d.ts').ConvertedType[]} */\nexport const ConvertedTypes = [\n 'UTF8',\n 'MAP',\n 'MAP_KEY_VALUE',\n 'LIST',\n 'ENUM',\n 'DECIMAL',\n 'DATE',\n 'TIME_MILLIS',\n 'TIME_MICROS',\n 'TIMESTAMP_MILLIS',\n 'TIMESTAMP_MICROS',\n 'UINT_8',\n 'UINT_16',\n 'UINT_32',\n 'UINT_64',\n 'INT_8',\n 'INT_16',\n 'INT_32',\n 'INT_64',\n 'JSON',\n 'BSON',\n 'INTERVAL',\n]\n\n/** @type {import('../src/types.d.ts').CompressionCodec[]} */\nexport const CompressionCodecs = [\n 'UNCOMPRESSED',\n 'SNAPPY',\n 'GZIP',\n 'LZO',\n 'BROTLI',\n 'LZ4',\n 'ZSTD',\n 'LZ4_RAW',\n]\n\n/** @type {import('../src/types.d.ts').PageType[]} */\nexport const PageTypes = [\n 'DATA_PAGE',\n 'INDEX_PAGE',\n 'DICTIONARY_PAGE',\n 'DATA_PAGE_V2',\n]\n\n/** @type {import('../src/types.d.ts').BoundaryOrder[]} */\nexport const BoundaryOrders = [\n 'UNORDERED',\n 'ASCENDING',\n 'DESCENDING',\n]\n\n/** @type {import('../src/types.d.ts').EdgeInterpolationAlgorithm[]} */\nexport const EdgeInterpolationAlgorithms = [\n 'SPHERICAL',\n 'VINCENTY',\n 'THOMAS',\n 'ANDOYER',\n 'KARNEY',\n]\n", "/**\n * WKB (Well-Known Binary) decoder for geometry objects.\n *\n * @param {DataReader} reader\n * @returns {Geometry} geometry object\n */\nexport function wkbToGeojson(reader) {\n const flags = getFlags(reader)\n\n if (flags.type === 1) { // Point\n return { type: 'Point', coordinates: readPosition(reader, flags) }\n } else if (flags.type === 2) { // LineString\n return { type: 'LineString', coordinates: readLine(reader, flags) }\n } else if (flags.type === 3) { // Polygon\n return { type: 'Polygon', coordinates: readPolygon(reader, flags) }\n } else if (flags.type === 4) { // MultiPoint\n const points = []\n for (let i = 0; i < flags.count; i++) {\n points.push(readPosition(reader, getFlags(reader)))\n }\n return { type: 'MultiPoint', coordinates: points }\n } else if (flags.type === 5) { // MultiLineString\n const lines = []\n for (let i = 0; i < flags.count; i++) {\n lines.push(readLine(reader, getFlags(reader)))\n }\n return { type: 'MultiLineString', coordinates: lines }\n } else if (flags.type === 6) { // MultiPolygon\n const polygons = []\n for (let i = 0; i < flags.count; i++) {\n polygons.push(readPolygon(reader, getFlags(reader)))\n }\n return { type: 'MultiPolygon', coordinates: polygons }\n } else if (flags.type === 7) { // GeometryCollection\n const geometries = []\n for (let i = 0; i < flags.count; i++) {\n geometries.push(wkbToGeojson(reader))\n }\n return { type: 'GeometryCollection', geometries }\n } else {\n throw new Error(`Unsupported geometry type: ${flags.type}`)\n }\n}\n\n/**\n * Extract ISO WKB flags and base geometry type.\n *\n * @param {DataReader} reader\n * @returns {WkbFlags}\n */\nfunction getFlags(reader) {\n const { view } = reader\n const littleEndian = view.getUint8(reader.offset++) === 1\n const rawType = view.getUint32(reader.offset, littleEndian)\n reader.offset += 4\n\n const type = rawType % 1000\n const flags = Math.floor(rawType / 1000)\n\n let count = 0\n if (type > 1 && type <= 7) {\n count = view.getUint32(reader.offset, littleEndian)\n reader.offset += 4\n }\n\n // XY, XYZ, XYM, XYZM\n let dim = 2\n if (flags) dim++\n if (flags === 3) dim++\n\n return { littleEndian, type, dim, count }\n}\n\n/**\n * @param {DataReader} reader\n * @param {WkbFlags} flags\n * @returns {number[]}\n */\nfunction readPosition(reader, flags) {\n const points = []\n for (let i = 0; i < flags.dim; i++) {\n const coord = reader.view.getFloat64(reader.offset, flags.littleEndian)\n reader.offset += 8\n points.push(coord)\n }\n return points\n}\n\n/**\n * @param {DataReader} reader\n * @param {WkbFlags} flags\n * @returns {number[][]}\n */\nfunction readLine(reader, flags) {\n const points = []\n for (let i = 0; i < flags.count; i++) {\n points.push(readPosition(reader, flags))\n }\n return points\n}\n\n/**\n * @param {DataReader} reader\n * @param {WkbFlags} flags\n * @returns {number[][][]}\n */\nfunction readPolygon(reader, flags) {\n const { view } = reader\n const rings = []\n for (let r = 0; r < flags.count; r++) {\n const count = view.getUint32(reader.offset, flags.littleEndian)\n reader.offset += 4\n rings.push(readLine(reader, { ...flags, count }))\n }\n return rings\n}\n\n/**\n * @typedef {object} WkbFlags\n * @property {boolean} littleEndian\n * @property {number} type\n * @property {number} dim\n * @property {number} count\n */\n\n/**\n * @import {DataReader, Geometry} from '../src/types.js'\n */\n", "import { wkbToGeojson } from './wkb.js'\n\n/**\n * @import {ColumnDecoder, DecodedArray, Encoding, ParquetParsers} from '../src/types.js'\n */\n\nconst decoder = new TextDecoder()\n\n/**\n * Default type parsers when no custom ones are given\n * @type ParquetParsers\n */\nexport const DEFAULT_PARSERS = {\n timestampFromMilliseconds(millis) {\n return new Date(Number(millis))\n },\n timestampFromMicroseconds(micros) {\n return new Date(Number(micros / 1000n))\n },\n timestampFromNanoseconds(nanos) {\n return new Date(Number(nanos / 1000000n))\n },\n dateFromDays(days) {\n return new Date(days * 86400000)\n },\n stringFromBytes(bytes) {\n return bytes && decoder.decode(bytes)\n },\n geometryFromBytes(bytes) {\n return bytes && wkbToGeojson({ view: new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength), offset: 0 })\n },\n geographyFromBytes(bytes) {\n return bytes && wkbToGeojson({ view: new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength), offset: 0 })\n },\n uuidFromBytes(bytes) {\n if (!bytes) return undefined\n const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('')\n return hex.slice(0, 8) + '-' + hex.slice(8, 12) + '-' + hex.slice(12, 16) + '-' + hex.slice(16, 20) + '-' + hex.slice(20, 32)\n },\n}\n\n/**\n * Convert known types from primitive to rich, and dereference dictionary.\n *\n * @param {DecodedArray} data series of primitive types\n * @param {DecodedArray | undefined} dictionary\n * @param {Encoding} encoding\n * @param {ColumnDecoder} columnDecoder\n * @returns {DecodedArray} series of rich types\n */\nexport function convertWithDictionary(data, dictionary, encoding, columnDecoder) {\n if (dictionary && encoding.endsWith('_DICTIONARY')) {\n let output = data\n if (data instanceof Uint8Array && !(dictionary instanceof Uint8Array)) {\n // @ts-expect-error upgrade data to match dictionary type with fancy constructor\n output = new dictionary.constructor(data.length)\n }\n for (let i = 0; i < data.length; i++) {\n output[i] = dictionary[data[i]]\n }\n return output\n } else {\n return convert(data, columnDecoder)\n }\n}\n\n/**\n * Convert known types from primitive to rich.\n *\n * @param {DecodedArray} data series of primitive types\n * @param {ColumnDecoder} columnDecoder\n * @returns {DecodedArray} series of rich types\n */\nexport function convert(data, columnDecoder) {\n const { element, parsers, utf8 = true, schemaPath } = columnDecoder\n const { type, converted_type: ctype, logical_type: ltype } = element\n const nullable = element.repetition_type !== 'REQUIRED'\n\n // Skip utf8 conversion for plain BYTE_ARRAY inside VARIANT\n const isVariant = schemaPath?.some(s => s.element.logical_type?.type === 'VARIANT')\n if (isVariant && type === 'BYTE_ARRAY' && ctype !== 'UTF8' && ltype?.type !== 'STRING') {\n return data\n }\n if (ctype === 'DECIMAL') {\n const scale = element.scale || 0\n const factor = 10 ** -scale\n const arr = new Array(data.length)\n for (let i = 0; i < arr.length; i++) {\n if (data[i] instanceof Uint8Array) {\n arr[i] = parseDecimal(data[i]) * factor\n } else {\n arr[i] = Number(data[i]) * factor\n }\n }\n return arr\n }\n if (!ctype && type === 'INT96') {\n return Array.from(data).map(v => parsers.timestampFromNanoseconds(parseInt96Nanos(v)))\n }\n if (ctype === 'DATE') {\n return Array.from(data).map(v => parsers.dateFromDays(v))\n }\n if (ctype === 'TIMESTAMP_MILLIS') {\n return Array.from(data).map(v => parsers.timestampFromMilliseconds(v))\n }\n if (ctype === 'TIMESTAMP_MICROS') {\n return Array.from(data).map(v => parsers.timestampFromMicroseconds(v))\n }\n if (ctype === 'JSON') {\n return data.map(v => JSON.parse(decoder.decode(v)))\n }\n if (ctype === 'BSON') {\n throw new Error('parquet bson not supported')\n }\n if (ctype === 'INTERVAL') {\n throw new Error('parquet interval not supported')\n }\n if (ltype?.type === 'GEOMETRY') {\n return data.map(v => parsers.geometryFromBytes(v))\n }\n if (ltype?.type === 'GEOGRAPHY') {\n return data.map(v => parsers.geographyFromBytes(v))\n }\n if (ltype?.type === 'UUID') {\n return data.map(v => parsers.uuidFromBytes(v))\n }\n if (ctype === 'UTF8' || ltype?.type === 'STRING' || utf8 && type === 'BYTE_ARRAY') {\n return data.map(v => parsers.stringFromBytes(v))\n }\n if (ctype === 'UINT_64' || ltype?.type === 'INTEGER' && ltype.bitWidth === 64 && !ltype.isSigned) {\n if (data instanceof BigInt64Array) return new BigUint64Array(data.buffer, data.byteOffset, data.length)\n const arr = nullable ? new Array(data.length) : new BigUint64Array(data.length)\n for (let i = 0; i < arr.length; i++) arr[i] = data[i]\n return arr\n }\n if (ctype === 'UINT_32' || ltype?.type === 'INTEGER' && ltype.bitWidth === 32 && !ltype.isSigned) {\n if (data instanceof Int32Array) return new Uint32Array(data.buffer, data.byteOffset, data.length)\n const arr = nullable ? new Array(data.length) : new Uint32Array(data.length)\n for (let i = 0; i < arr.length; i++) {\n arr[i] = data[i] < 0 ? 4294967296 + data[i] : data[i]\n }\n return arr\n }\n if (ltype?.type === 'FLOAT16') {\n return Array.from(data).map(parseFloat16)\n }\n if (ltype?.type === 'TIMESTAMP') {\n const { unit } = ltype\n /** @type {ParquetParsers[keyof ParquetParsers]} */\n let parser = parsers.timestampFromMilliseconds\n if (unit === 'MICROS') parser = parsers.timestampFromMicroseconds\n if (unit === 'NANOS') parser = parsers.timestampFromNanoseconds\n const arr = new Array(data.length)\n for (let i = 0; i < arr.length; i++) {\n arr[i] = parser(data[i])\n }\n return arr\n }\n return data\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {number}\n */\nexport function parseDecimal(bytes) {\n if (!bytes.length) return 0\n\n let value = 0n\n for (const byte of bytes) {\n value = value * 256n + BigInt(byte)\n }\n\n // handle signed\n const bits = bytes.length * 8\n if (value >= 2n ** BigInt(bits - 1)) {\n value -= 2n ** BigInt(bits)\n }\n\n return Number(value)\n}\n\n/**\n * Converts INT96 date format (hi 32bit days, lo 64bit nanos) to nanos since epoch\n * @param {bigint} value\n * @returns {bigint}\n */\nfunction parseInt96Nanos(value) {\n const days = (value >> 64n) - 2440588n\n const nano = value & 0xffffffffffffffffn\n return days * 86400000000000n + nano\n}\n\n/**\n * @param {Uint8Array | undefined} bytes\n * @returns {number | undefined}\n */\nexport function parseFloat16(bytes) {\n if (!bytes) return undefined\n const int16 = bytes[1] << 8 | bytes[0]\n const sign = int16 >> 15 ? -1 : 1\n const exp = int16 >> 10 & 0x1f\n const frac = int16 & 0x3ff\n if (exp === 0) return sign * 2 ** -14 * (frac / 1024) // subnormals\n if (exp === 0x1f) return frac ? NaN : sign * Infinity\n return sign * 2 ** (exp - 15) * (1 + frac / 1024)\n}\n", "/**\n * Build a tree from the schema elements.\n *\n * @param {SchemaElement[]} schema\n * @param {number} rootIndex index of the root element\n * @param {string[]} path path to the element\n * @returns {SchemaTree} tree of schema elements\n */\nfunction schemaTree(schema, rootIndex, path) {\n const element = schema[rootIndex]\n const children = []\n let count = 1\n\n // Read the specified number of children\n if (element.num_children) {\n while (children.length < element.num_children) {\n const childElement = schema[rootIndex + count]\n const child = schemaTree(schema, rootIndex + count, [...path, childElement.name])\n count += child.count\n children.push(child)\n }\n }\n\n return { count, element, children, path }\n}\n\n/**\n * Get schema elements from the root to the given element name.\n *\n * @param {SchemaElement[]} schema\n * @param {string[]} name path to the element\n * @returns {SchemaTree[]} list of schema elements\n */\nexport function getSchemaPath(schema, name) {\n let tree = schemaTree(schema, 0, [])\n const path = [tree]\n for (const part of name) {\n const child = tree.children.find(child => child.element.name === part)\n if (!child) throw new Error(`parquet schema element not found: ${name}`)\n path.push(child)\n tree = child\n }\n return path\n}\n\n/**\n * Get all physical (leaf) column names.\n *\n * @param {SchemaTree} schemaTree\n * @returns {string[]} list of physical column names\n */\nexport function getPhysicalColumns(schemaTree) {\n /** @type {string[]} */\n const columns = []\n /** @param {SchemaTree} node */\n function traverse(node) {\n if (node.children.length) {\n for (const child of node.children) {\n traverse(child)\n }\n } else {\n columns.push(node.path.join('.'))\n }\n }\n traverse(schemaTree)\n return columns\n}\n\n/**\n * Get the max repetition level for a given schema path.\n *\n * @param {SchemaTree[]} schemaPath\n * @returns {number} max repetition level\n */\nexport function getMaxRepetitionLevel(schemaPath) {\n let maxLevel = 0\n for (const { element } of schemaPath) {\n if (element.repetition_type === 'REPEATED') {\n maxLevel++\n }\n }\n return maxLevel\n}\n\n/**\n * Get the max definition level for a given schema path.\n *\n * @param {SchemaTree[]} schemaPath\n * @returns {number} max definition level\n */\nexport function getMaxDefinitionLevel(schemaPath) {\n let maxLevel = 0\n for (const { element } of schemaPath.slice(1)) {\n if (element.repetition_type !== 'REQUIRED') {\n maxLevel++\n }\n }\n return maxLevel\n}\n\n/**\n * Check if a column is list-like.\n *\n * @param {SchemaTree} schema\n * @returns {boolean} true if list-like\n */\nexport function isListLike(schema) {\n if (!schema) return false\n if (schema.element.converted_type !== 'LIST') return false\n if (schema.children.length > 1) return false\n\n const firstChild = schema.children[0]\n if (firstChild.children.length > 1) return false\n if (firstChild.element.repetition_type !== 'REPEATED') return false\n\n return true\n}\n\n/**\n * Check if a column is map-like.\n *\n * @param {SchemaTree} schema\n * @returns {boolean} true if map-like\n */\nexport function isMapLike(schema) {\n if (!schema) return false\n if (schema.element.converted_type !== 'MAP') return false\n if (schema.children.length > 1) return false\n\n const firstChild = schema.children[0]\n if (firstChild.children.length !== 2) return false\n if (firstChild.element.repetition_type !== 'REPEATED') return false\n\n const keyChild = firstChild.children.find(child => child.element.name === 'key')\n if (keyChild?.element.repetition_type === 'REPEATED') return false\n\n const valueChild = firstChild.children.find(child => child.element.name === 'value')\n if (valueChild?.element.repetition_type === 'REPEATED') return false\n\n return true\n}\n\n/**\n * Returns true if a column is non-nested.\n *\n * @param {SchemaTree[]} schemaPath\n * @returns {boolean}\n */\nexport function isFlatColumn(schemaPath) {\n if (schemaPath.length !== 2) return false\n const [, column] = schemaPath\n if (column.element.repetition_type === 'REPEATED') return false\n if (column.children.length) return false\n return true\n}\n\n/**\n * @import {SchemaElement, SchemaTree} from '../src/types.js'\n */\n", "/**\n * @import {DataReader, ThriftObject, ThriftType} from '../src/types.js'\n */\n\n// TCompactProtocol types\nconst STOP = 0\nconst TRUE = 1\nconst FALSE = 2\nconst BYTE = 3\nconst I16 = 4\nconst I32 = 5\nconst I64 = 6\nconst DOUBLE = 7\nconst BINARY = 8\nconst LIST = 9\nconst STRUCT = 12\n\n/**\n * Parse TCompactProtocol\n *\n * @param {DataReader} reader\n * @returns {{ [key: `field_${number}`]: any }}\n */\nexport function deserializeTCompactProtocol(reader) {\n /** @type {ThriftObject} */\n const value = {}\n let fid = 0\n\n while (reader.offset < reader.view.byteLength) {\n // Parse each field based on its type and add to the result object\n const byte = reader.view.getUint8(reader.offset++)\n const type = byte & 0x0f\n if (type === STOP) break\n const delta = byte >> 4\n fid = delta ? fid + delta : readZigZag(reader)\n value[`field_${fid}`] = readElement(reader, type)\n }\n\n return value\n}\n\n/**\n * Read a single element based on its type\n *\n * @param {DataReader} reader\n * @param {number} type\n * @returns {ThriftType}\n */\nfunction readElement(reader, type) {\n switch (type) {\n case TRUE:\n return true\n case FALSE:\n return false\n case BYTE:\n return reader.view.getInt8(reader.offset++)\n case I16:\n case I32:\n return readZigZag(reader)\n case I64:\n return readZigZagBigInt(reader)\n case DOUBLE: {\n const value = reader.view.getFloat64(reader.offset, true)\n reader.offset += 8\n return value\n }\n case BINARY: {\n const stringLength = readVarInt(reader)\n const strBytes = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, stringLength)\n reader.offset += stringLength\n return strBytes\n }\n case LIST: {\n const byte = reader.view.getUint8(reader.offset++)\n const elemType = byte & 0x0f\n let listSize = byte >> 4\n if (listSize === 15) {\n listSize = readVarInt(reader)\n }\n const boolType = elemType === TRUE || elemType === FALSE\n const values = new Array(listSize)\n for (let i = 0; i < listSize; i++) {\n values[i] = boolType ? readElement(reader, BYTE) === 1 : readElement(reader, elemType)\n }\n return values\n }\n case STRUCT:\n // main function handles struct parsing\n return deserializeTCompactProtocol(reader)\n default:\n // MAP, SET, UUID not used by parquet\n throw new Error(`thrift unhandled type: ${type}`)\n }\n}\n\n/**\n * Read varint aka Unsigned LEB128.\n *\n * @param {DataReader} reader\n * @returns {number}\n */\nexport function readVarInt(reader) {\n let result = 0\n let shift = 0\n while (true) {\n // Read groups of 7 low bits until high bit is 0\n const byte = reader.view.getUint8(reader.offset++)\n result |= (byte & 0x7f) << shift\n if (!(byte & 0x80)) {\n return result\n }\n shift += 7\n }\n}\n\n/**\n * Read a varint as a bigint.\n *\n * @param {DataReader} reader\n * @returns {bigint}\n */\nfunction readVarBigInt(reader) {\n let result = 0n\n let shift = 0n\n while (true) {\n const byte = reader.view.getUint8(reader.offset++)\n result |= BigInt(byte & 0x7f) << shift\n if (!(byte & 0x80)) {\n return result\n }\n shift += 7n\n }\n}\n\n/**\n * Read a zigzag number.\n * Zigzag folds positive and negative numbers into the positive number space.\n *\n * @param {DataReader} reader\n * @returns {number}\n */\nexport function readZigZag(reader) {\n const zigzag = readVarInt(reader)\n return zigzag >>> 1 ^ -(zigzag & 1)\n}\n\n/**\n * Read a zigzag bigint.\n *\n * @param {DataReader} reader\n * @returns {bigint}\n */\nexport function readZigZagBigInt(reader) {\n const zigzag = readVarBigInt(reader)\n return zigzag >> 1n ^ -(zigzag & 1n)\n}\n", "/**\n * @param {SchemaElement[]} schema\n * @param {KeyValue[] | undefined} key_value_metadata\n * @returns {void}\n */\nexport function markGeoColumns(schema, key_value_metadata) {\n // Prepare the list of GeoParquet columns\n /** @type {Map<string, LogicalType>} */\n const columns = new Map()\n const geo = key_value_metadata?.find(({ key }) => key === 'geo')?.value\n const decodedColumns = (geo && JSON.parse(geo)?.columns) ?? {}\n for (const [name, column] of Object.entries(decodedColumns)) {\n if (column.encoding !== 'WKB') continue\n\n const type = column.edges === 'spherical' ? 'GEOGRAPHY' : 'GEOMETRY'\n const id = column.crs?.id ?? column.crs?.ids?.[0]\n const crs = id ? `${id.authority}:${id.code.toString()}` : undefined\n // Note: we can't infer GEOGRAPHY's algorithm from GeoParquet\n columns.set(name, { type, crs })\n }\n\n // Mark schema elements with logical type\n // Only look at root-level columns of type BYTE_ARRAY without existing logical_type\n for (let i = 1; i < schema.length; i++) { // skip root\n const { logical_type, name, num_children, type } = schema[i]\n if (num_children) {\n i += num_children\n continue // skip the element and its children\n }\n if (type === 'BYTE_ARRAY' && !logical_type) {\n schema[i].logical_type = columns.get(name)\n }\n }\n}\n\n/**\n * @import {KeyValue, LogicalType, SchemaElement} from '../src/types.js'\n */\n", "import { CompressionCodecs, ConvertedTypes, EdgeInterpolationAlgorithms, Encodings, FieldRepetitionTypes, PageTypes, ParquetTypes } from './constants.js'\nimport { DEFAULT_PARSERS, parseDecimal, parseFloat16 } from './convert.js'\nimport { getSchemaPath } from './schema.js'\nimport { deserializeTCompactProtocol } from './thrift.js'\nimport { markGeoColumns } from './geoparquet.js'\n\n/**\n * @import {AsyncBuffer, FileMetaData, KeyValue, LogicalType, MetadataOptions, MinMaxType, ParquetParsers, SchemaElement, SchemaTree, Statistics, TimeUnit} from '../src/types.js'\n */\n\nexport const defaultInitialFetchSize = 1 << 19 // 512kb\n\nconst decoder = new TextDecoder()\nfunction decode(/** @type {Uint8Array} */ value) {\n return value && decoder.decode(value)\n}\n\n/**\n * Read parquet metadata from an async buffer.\n *\n * An AsyncBuffer is like an ArrayBuffer, but the slices are loaded\n * asynchronously, possibly over the network.\n *\n * You must provide the byteLength of the buffer, typically from a HEAD request.\n *\n * In theory, you could use suffix-range requests to fetch the end of the file,\n * and save a round trip. But in practice, this doesn't work because chrome\n * deems suffix-range requests as a not-safe-listed header, and will require\n * a pre-flight. So the byteLength is required.\n *\n * To make this efficient, we initially request the last 512kb of the file,\n * which is likely to contain the metadata. If the metadata length exceeds the\n * initial fetch, 512kb, we request the rest of the metadata from the AsyncBuffer.\n *\n * This ensures that we either make one 512kb initial request for the metadata,\n * or a second request for up to the metadata size.\n *\n * @param {AsyncBuffer} asyncBuffer parquet file contents\n * @param {MetadataOptions & { initialFetchSize?: number }} options initial fetch size in bytes (default 512kb)\n * @returns {Promise<FileMetaData>} parquet metadata object\n */\nexport async function parquetMetadataAsync(asyncBuffer, { parsers, initialFetchSize = defaultInitialFetchSize, geoparquet = true } = {}) {\n if (!asyncBuffer || !(asyncBuffer.byteLength >= 0)) throw new Error('parquet expected AsyncBuffer')\n\n // fetch last bytes (footer) of the file\n const footerOffset = Math.max(0, asyncBuffer.byteLength - initialFetchSize)\n const footerBuffer = await asyncBuffer.slice(footerOffset, asyncBuffer.byteLength)\n\n // Check for parquet magic number \"PAR1\"\n const footerView = new DataView(footerBuffer)\n if (footerView.getUint32(footerBuffer.byteLength - 4, true) !== 0x31524150) {\n throw new Error('parquet file invalid (footer != PAR1)')\n }\n\n // Parquet files store metadata at the end of the file\n // Metadata length is 4 bytes before the last PAR1\n const metadataLength = footerView.getUint32(footerBuffer.byteLength - 8, true)\n if (metadataLength > asyncBuffer.byteLength - 8) {\n throw new Error(`parquet metadata length ${metadataLength} exceeds available buffer ${asyncBuffer.byteLength - 8}`)\n }\n\n // check if metadata size fits inside the initial fetch\n if (metadataLength + 8 > initialFetchSize) {\n // fetch the rest of the metadata\n const metadataOffset = asyncBuffer.byteLength - metadataLength - 8\n const metadataBuffer = await asyncBuffer.slice(metadataOffset, footerOffset)\n // combine initial fetch with the new slice\n const combinedBuffer = new ArrayBuffer(metadataLength + 8)\n const combinedView = new Uint8Array(combinedBuffer)\n combinedView.set(new Uint8Array(metadataBuffer))\n combinedView.set(new Uint8Array(footerBuffer), footerOffset - metadataOffset)\n return parquetMetadata(combinedBuffer, { parsers, geoparquet })\n } else {\n // parse metadata from the footer\n return parquetMetadata(footerBuffer, { parsers, geoparquet })\n }\n}\n\n/**\n * Read parquet metadata from a buffer synchronously.\n *\n * @param {ArrayBuffer} arrayBuffer parquet file footer\n * @param {MetadataOptions} options metadata parsing options\n * @returns {FileMetaData} parquet metadata object\n */\nexport function parquetMetadata(arrayBuffer, { parsers, geoparquet = true } = {}) {\n if (!(arrayBuffer instanceof ArrayBuffer)) throw new Error('parquet expected ArrayBuffer')\n const view = new DataView(arrayBuffer)\n\n // Use default parsers if not given\n parsers = { ...DEFAULT_PARSERS, ...parsers }\n\n // Validate footer magic number \"PAR1\"\n if (view.byteLength < 8) {\n throw new Error('parquet file is too short')\n }\n if (view.getUint32(view.byteLength - 4, true) !== 0x31524150) {\n throw new Error('parquet file invalid (footer != PAR1)')\n }\n\n // Parquet files store metadata at the end of the file\n // Metadata length is 4 bytes before the last PAR1\n const metadataLengthOffset = view.byteLength - 8\n const metadataLength = view.getUint32(metadataLengthOffset, true)\n if (metadataLength > view.byteLength - 8) {\n // {metadata}, metadata_length, PAR1\n throw new Error(`parquet metadata length ${metadataLength} exceeds available buffer ${view.byteLength - 8}`)\n }\n\n const metadataOffset = metadataLengthOffset - metadataLength\n const reader = { view, offset: metadataOffset }\n const metadata = deserializeTCompactProtocol(reader)\n\n // Parse metadata from thrift data\n const version = metadata.field_1\n /** @type {SchemaElement[]} */\n const schema = metadata.field_2.map((/** @type {any} */ field) => ({\n type: ParquetTypes[field.field_1],\n type_length: field.field_2,\n repetition_type: FieldRepetitionTypes[field.field_3],\n name: decode(field.field_4),\n num_children: field.field_5,\n converted_type: ConvertedTypes[field.field_6],\n scale: field.field_7,\n precision: field.field_8,\n field_id: field.field_9,\n logical_type: logicalType(field.field_10),\n }))\n // schema element per column index\n const columnSchema = schema.filter(e => e.type)\n const num_rows = metadata.field_3\n const row_groups = metadata.field_4.map((/** @type {any} */ rowGroup) => ({\n columns: rowGroup.field_1.map((/** @type {any} */ column, /** @type {number} */ columnIndex) => ({\n file_path: decode(column.field_1),\n file_offset: column.field_2,\n meta_data: column.field_3 && {\n type: ParquetTypes[column.field_3.field_1],\n encodings: column.field_3.field_2?.map((/** @type {number} */ e) => Encodings[e]),\n path_in_schema: column.field_3.field_3.map(decode),\n codec: CompressionCodecs[column.field_3.field_4],\n num_values: column.field_3.field_5,\n total_uncompressed_size: column.field_3.field_6,\n total_compressed_size: column.field_3.field_7,\n key_value_metadata: column.field_3.field_8?.map((/** @type {any} */ kv) => ({\n key: decode(kv.field_1),\n value: decode(kv.field_2),\n })),\n data_page_offset: column.field_3.field_9,\n index_page_offset: column.field_3.field_10,\n dictionary_page_offset: column.field_3.field_11,\n statistics: convertStats(column.field_3.field_12, columnSchema[columnIndex], parsers),\n encoding_stats: column.field_3.field_13?.map((/** @type {any} */ encodingStat) => ({\n page_type: PageTypes[encodingStat.field_1],\n encoding: Encodings[encodingStat.field_2],\n count: encodingStat.field_3,\n })),\n bloom_filter_offset: column.field_3.field_14,\n bloom_filter_length: column.field_3.field_15,\n size_statistics: column.field_3.field_16 && {\n unencoded_byte_array_data_bytes: column.field_3.field_16.field_1,\n repetition_level_histogram: column.field_3.field_16.field_2,\n definition_level_histogram: column.field_3.field_16.field_3,\n },\n geospatial_statistics: column.field_3.field_17 && {\n bbox: column.field_3.field_17.field_1 && {\n xmin: column.field_3.field_17.field_1.field_1,\n xmax: column.field_3.field_17.field_1.field_2,\n ymin: column.field_3.field_17.field_1.field_3,\n ymax: column.field_3.field_17.field_1.field_4,\n zmin: column.field_3.field_17.field_1.field_5,\n zmax: column.field_3.field_17.field_1.field_6,\n mmin: column.field_3.field_17.field_1.field_7,\n mmax: column.field_3.field_17.field_1.field_8,\n },\n geospatial_types: column.field_3.field_17.field_2,\n },\n },\n offset_index_offset: column.field_4,\n offset_index_length: column.field_5,\n column_index_offset: column.field_6,\n column_index_length: column.field_7,\n crypto_metadata: column.field_8,\n encrypted_column_metadata: column.field_9,\n })),\n total_byte_size: rowGroup.field_2,\n num_rows: rowGroup.field_3,\n sorting_columns: rowGroup.field_4?.map((/** @type {any} */ sortingColumn) => ({\n column_idx: sortingColumn.field_1,\n descending: sortingColumn.field_2,\n nulls_first: sortingColumn.field_3,\n })),\n file_offset: rowGroup.field_5,\n total_compressed_size: rowGroup.field_6,\n ordinal: rowGroup.field_7,\n }))\n /** @type {KeyValue[] | undefined} */\n const key_value_metadata = metadata.field_5?.map((/** @type {any} */ kv) => ({\n key: decode(kv.field_1),\n value: decode(kv.field_2),\n }))\n const created_by = decode(metadata.field_6)\n\n if (geoparquet) {\n markGeoColumns(schema, key_value_metadata)\n }\n\n return {\n version,\n schema,\n num_rows,\n row_groups,\n key_value_metadata,\n created_by,\n metadata_length: metadataLength,\n }\n}\n\n/**\n * Return a tree of schema elements from parquet metadata.\n *\n * @param {{schema: SchemaElement[]}} metadata parquet metadata object\n * @returns {SchemaTree} tree of schema elements\n */\nexport function parquetSchema({ schema }) {\n return getSchemaPath(schema, [])[0]\n}\n\n/**\n * @param {any} logicalType\n * @returns {LogicalType | undefined}\n */\nfunction logicalType(logicalType) {\n if (logicalType?.field_1) return { type: 'STRING' }\n if (logicalType?.field_2) return { type: 'MAP' }\n if (logicalType?.field_3) return { type: 'LIST' }\n if (logicalType?.field_4) return { type: 'ENUM' }\n if (logicalType?.field_5) return {\n type: 'DECIMAL',\n scale: logicalType.field_5.field_1,\n precision: logicalType.field_5.field_2,\n }\n if (logicalType?.field_6) return { type: 'DATE' }\n if (logicalType?.field_7) return {\n type: 'TIME',\n isAdjustedToUTC: logicalType.field_7.field_1,\n unit: timeUnit(logicalType.field_7.field_2),\n }\n if (logicalType?.field_8) return {\n type: 'TIMESTAMP',\n isAdjustedToUTC: logicalType.field_8.field_1,\n unit: timeUnit(logicalType.field_8.field_2),\n }\n if (logicalType?.field_10) return {\n type: 'INTEGER',\n bitWidth: logicalType.field_10.field_1,\n isSigned: logicalType.field_10.field_2,\n }\n if (logicalType?.field_11) return { type: 'NULL' }\n if (logicalType?.field_12) return { type: 'JSON' }\n if (logicalType?.field_13) return { type: 'BSON' }\n if (logicalType?.field_14) return { type: 'UUID' }\n if (logicalType?.field_15) return { type: 'FLOAT16' }\n if (logicalType?.field_16) return {\n type: 'VARIANT',\n specification_version: logicalType.field_16.field_1,\n }\n if (logicalType?.field_17) return {\n type: 'GEOMETRY',\n crs: decode(logicalType.field_17.field_1),\n }\n if (logicalType?.field_18) return {\n type: 'GEOGRAPHY',\n crs: decode(logicalType.field_18.field_1),\n algorithm: EdgeInterpolationAlgorithms[logicalType.field_18.field_2],\n }\n return logicalType\n}\n\n/**\n * @param {any} unit\n * @returns {TimeUnit}\n */\nfunction timeUnit(unit) {\n if (unit.field_1) return 'MILLIS'\n if (unit.field_2) return 'MICROS'\n if (unit.field_3) return 'NANOS'\n throw new Error('parquet time unit required')\n}\n\n/**\n * Convert column statistics based on column type.\n *\n * @param {any} stats\n * @param {SchemaElement} schema\n * @param {ParquetParsers} parsers\n * @returns {Statistics}\n */\nfunction convertStats(stats, schema, parsers) {\n return stats && {\n max: convertMetadata(stats.field_1, schema, parsers),\n min: convertMetadata(stats.field_2, schema, parsers),\n null_count: stats.field_3,\n distinct_count: stats.field_4,\n max_value: convertMetadata(stats.field_5, schema, parsers),\n min_value: convertMetadata(stats.field_6, schema, parsers),\n is_max_value_exact: stats.field_7,\n is_min_value_exact: stats.field_8,\n }\n}\n\n/**\n * @param {Uint8Array | undefined} value\n * @param {SchemaElement} schema\n * @param {ParquetParsers} parsers\n * @returns {MinMaxType | undefined}\n */\nexport function convertMetadata(value, schema, parsers) {\n const { type, converted_type, logical_type } = schema\n if (value === undefined) return value\n if (type === 'BOOLEAN') return value[0] === 1\n if (type === 'BYTE_ARRAY') return parsers.stringFromBytes(value)\n const view = new DataView(value.buffer, value.byteOffset, value.byteLength)\n if (type === 'FLOAT' && view.byteLength === 4) return view.getFloat32(0, true)\n if (type === 'DOUBLE' && view.byteLength === 8) return view.getFloat64(0, true)\n if (type === 'INT32' && converted_type === 'DATE') return parsers.dateFromDays(view.getInt32(0, true))\n if (type === 'INT64' && converted_type === 'TIMESTAMP_MILLIS') return parsers.timestampFromMilliseconds(view.getBigInt64(0, true))\n if (type === 'INT64' && converted_type === 'TIMESTAMP_MICROS') return parsers.timestampFromMicroseconds(view.getBigInt64(0, true))\n if (type === 'INT64' && logical_type?.type === 'TIMESTAMP' && logical_type?.unit === 'NANOS') return parsers.timestampFromNanoseconds(view.getBigInt64(0, true))\n if (type === 'INT64' && logical_type?.type === 'TIMESTAMP' && logical_type?.unit === 'MICROS') return parsers.timestampFromMicroseconds(view.getBigInt64(0, true))\n if (type === 'INT64' && logical_type?.type === 'TIMESTAMP') return parsers.timestampFromMilliseconds(view.getBigInt64(0, true))\n if (type === 'INT32' && view.byteLength === 4) return view.getInt32(0, true)\n if (type === 'INT64' && view.byteLength === 8) return view.getBigInt64(0, true)\n if (converted_type === 'DECIMAL') return parseDecimal(value) * 10 ** -(schema.scale || 0)\n if (logical_type?.type === 'FLOAT16') return parseFloat16(value)\n if (logical_type?.type === 'UUID') return parsers.uuidFromBytes(value)\n if (type === 'FIXED_LEN_BYTE_ARRAY') return value\n // assert(false)\n return value\n}\n", "/**\n * @import {ColumnIndex, DataReader, OffsetIndex, PageLocation, ParquetParsers, SchemaElement} from '../src/types.js'\n */\n\nimport { BoundaryOrders } from './constants.js'\nimport { DEFAULT_PARSERS } from './convert.js'\nimport { convertMetadata } from './metadata.js'\nimport { deserializeTCompactProtocol } from './thrift.js'\n\n/**\n * @param {DataReader} reader\n * @param {SchemaElement} schema\n * @param {ParquetParsers | undefined} parsers\n * @returns {ColumnIndex}\n */\nexport function readColumnIndex(reader, schema, parsers = undefined) {\n parsers = { ...DEFAULT_PARSERS, ...parsers }\n\n const thrift = deserializeTCompactProtocol(reader)\n return {\n null_pages: thrift.field_1,\n min_values: thrift.field_2.map((/** @type {any} */ m) => convertMetadata(m, schema, parsers)),\n max_values: thrift.field_3.map((/** @type {any} */ m) => convertMetadata(m, schema, parsers)),\n boundary_order: BoundaryOrders[thrift.field_4],\n null_counts: thrift.field_5,\n repetition_level_histograms: thrift.field_6,\n definition_level_histograms: thrift.field_7,\n }\n}\n\n/**\n * @param {DataReader} reader\n * @returns {OffsetIndex}\n */\nexport function readOffsetIndex(reader) {\n const thrift = deserializeTCompactProtocol(reader)\n return {\n // @ts-ignore\n page_locations: thrift.field_1.map(loc => ({\n offset: loc.field_1,\n compressed_page_size: loc.field_2,\n first_row_index: loc.field_3,\n })),\n unencoded_byte_array_data_bytes: thrift.field_2,\n }\n}\n", "// XxHash64 (https://github.com/Cyan4973/xxHash/blob/dev/doc/xxhash_spec.md)\n// Used by parquet bloom filters: hashes the PLAIN encoding of column values with seed 0.\n\nconst MASK = 0xffffffffffffffffn\nconst PRIME1 = 0x9e3779b185ebca87n\nconst PRIME2 = 0xc2b2ae3d27d4eb4fn\nconst PRIME3 = 0x165667b19e3779f9n\nconst PRIME4 = 0x85ebca77c2b2ae63n\nconst PRIME5 = 0x27d4eb2f165667c5n\n\n/**\n * @param {bigint} x\n * @param {bigint} r rotation amount in bits (1..63)\n * @returns {bigint}\n */\nfunction rotl64(x, r) {\n return (x << r | x >> 64n - r) & MASK\n}\n\n/**\n * @param {bigint} acc\n * @param {bigint} val\n * @returns {bigint}\n */\nfunction round(acc, val) {\n acc = acc + val * PRIME2 & MASK\n acc = rotl64(acc, 31n)\n return acc * PRIME1 & MASK\n}\n\n/**\n * @param {bigint} acc\n * @param {bigint} val\n * @returns {bigint}\n */\nfunction mergeRound(acc, val) {\n acc ^= round(0n, val)\n return acc * PRIME1 + PRIME4 & MASK\n}\n\n/**\n * Compute the 64-bit xxHash of a byte buffer.\n *\n * @param {Uint8Array} input\n * @param {bigint} [seed]\n * @returns {bigint} 64-bit hash\n */\nexport function xxhash64(input, seed = 0n) {\n const view = new DataView(input.buffer, input.byteOffset, input.byteLength)\n const len = input.byteLength\n let offset = 0\n let h64\n\n if (len >= 32) {\n let v1 = seed + PRIME1 + PRIME2 & MASK\n let v2 = seed + PRIME2 & MASK\n let v3 = seed\n let v4 = seed - PRIME1 & MASK\n\n while (offset + 32 <= len) {\n v1 = round(v1, view.getBigUint64(offset, true)); offset += 8\n v2 = round(v2, view.getBigUint64(offset, true)); offset += 8\n v3 = round(v3, view.getBigUint64(offset, true)); offset += 8\n v4 = round(v4, view.getBigUint64(offset, true)); offset += 8\n }\n\n h64 = rotl64(v1, 1n) + rotl64(v2, 7n) + rotl64(v3, 12n) + rotl64(v4, 18n) & MASK\n h64 = mergeRound(h64, v1)\n h64 = mergeRound(h64, v2)\n h64 = mergeRound(h64, v3)\n h64 = mergeRound(h64, v4)\n } else {\n h64 = seed + PRIME5 & MASK\n }\n\n h64 = h64 + BigInt(len) & MASK\n\n while (offset + 8 <= len) {\n h64 ^= round(0n, view.getBigUint64(offset, true))\n h64 = rotl64(h64, 27n) * PRIME1 + PRIME4 & MASK\n offset += 8\n }\n\n if (offset + 4 <= len) {\n h64 ^= BigInt(view.getUint32(offset, true)) * PRIME1 & MASK\n h64 = rotl64(h64, 23n) * PRIME2 + PRIME3 & MASK\n offset += 4\n }\n\n while (offset < len) {\n h64 ^= BigInt(view.getUint8(offset)) * PRIME5 & MASK\n h64 = rotl64(h64, 11n) * PRIME1 & MASK\n offset += 1\n }\n\n h64 ^= h64 >> 33n\n h64 = h64 * PRIME2 & MASK\n h64 ^= h64 >> 29n\n h64 = h64 * PRIME3 & MASK\n h64 ^= h64 >> 32n\n return h64\n}\n", "// Split Block Bloom Filter (https://github.com/apache/parquet-format/blob/master/BloomFilter.md)\n// A bloom filter is a sequence of 32-byte blocks. Each block holds 8 little-endian uint32 words.\n// Insertion sets one bit per word, chosen by salting the low 32 bits of an xxhash64.\n// Membership requires all 8 bits to be set; misses are exact, hits are probabilistic.\n\nimport { deserializeTCompactProtocol } from './thrift.js'\nimport { xxhash64 } from './xxhash.js'\n\n/**\n * @import {BloomFilter, DataReader, ParquetQueryFilter, SchemaElement} from '../src/types.js'\n */\n\nconst textEncoder = new TextEncoder()\n\nconst SALT = new Uint32Array([\n 0x47b6137b, 0x44974d91, 0x8824ad5b, 0xa2b7289d,\n 0x705495c7, 0x2df1424b, 0x9efc4947, 0x5c6bfb31,\n])\n\n/**\n * Map the high 32 bits of a hash to a block index in [0, numBlocks).\n *\n * @param {bigint} hash\n * @param {number} numBlocks\n * @returns {number}\n */\nfunction blockIndex(hash, numBlocks) {\n return Number((hash >> 32n) * BigInt(numBlocks) >> 32n)\n}\n\n/**\n * Per-block mask: 8 uint32 words, each with a single bit set at position `(low32 * SALT[i]) >> 27`.\n *\n * @param {bigint} hash\n * @returns {Uint32Array}\n */\nfunction blockMask(hash) {\n const m = new Uint32Array(8)\n const low = Number(hash & 0xffffffffn) | 0\n for (let i = 0; i < 8; i++) {\n m[i] = 1 << (Math.imul(low, SALT[i]) >>> 27)\n }\n return m\n}\n\n/**\n * Insert a hash into a Split Block Bloom Filter.\n *\n * @param {Uint32Array} blocks bloom filter words (8 * numBlocks long)\n * @param {bigint} hash 64-bit xxhash of the parquet-plain-encoded value\n */\nexport function sbbfInsert(blocks, hash) {\n const offset = blockIndex(hash, blocks.length >> 3) << 3\n const m = blockMask(hash)\n for (let i = 0; i < 8; i++) {\n blocks[offset + i] |= m[i]\n }\n}\n\n/**\n * Test whether a hash might be present in a Split Block Bloom Filter.\n * False positives are possible; false negatives are not.\n *\n * @param {Uint32Array} blocks bloom filter words (8 * numBlocks long)\n * @param {bigint} hash 64-bit xxhash of the parquet-plain-encoded value\n * @returns {boolean}\n */\nexport function sbbfContains(blocks, hash) {\n const offset = blockIndex(hash, blocks.length >> 3) << 3\n const m = blockMask(hash)\n for (let i = 0; i < 8; i++) {\n if ((blocks[offset + i] & m[i]) === 0) return false\n }\n return true\n}\n\n/**\n * Parse a Split Block Bloom Filter from a reader positioned at the BloomFilterHeader.\n * Returns undefined when the header advertises an unsupported algorithm, hash, or\n * compression \u2014 callers should treat that as \"cannot use this bloom filter.\"\n *\n * @param {DataReader} reader\n * @returns {BloomFilter | undefined}\n */\nexport function readBloomFilter(reader) {\n const header = deserializeTCompactProtocol(reader)\n const numBytes = header.field_1\n if (typeof numBytes !== 'number' || numBytes <= 0 || numBytes % 32 !== 0) return undefined\n // BloomFilterAlgorithm / Hash / Compression are unions with a single supported variant each.\n if (!header.field_2?.field_1) return undefined // algorithm must be BLOCK\n if (!header.field_3?.field_1) return undefined // hash must be XXHASH\n if (!header.field_4?.field_1) return undefined // compression must be UNCOMPRESSED\n\n const { view, offset } = reader\n if (offset + numBytes > view.byteLength) {\n throw new Error(`parquet bloom filter truncated: need ${numBytes} bytes, have ${view.byteLength - offset}`)\n }\n // Reader offset is not 4-aligned in general, and we want endian-portable reads.\n const blocks = new Uint32Array(numBytes >> 2)\n for (let i = 0; i < blocks.length; i++) {\n blocks[i] = view.getUint32(offset + i * 4, true)\n }\n reader.offset = offset + numBytes\n return { numBytes, blocks }\n}\n\n/**\n * Hash a JS filter value as its parquet PLAIN-encoded bytes, suitable for a\n * bloom filter lookup. Returns undefined when the column's parser is lossy or\n * ambiguous (DATE, TIMESTAMP_*, DECIMAL, JSON, BSON, INT96, FLOAT16, UUID,\n * GEOMETRY, GEOGRAPHY, INTERVAL) or when the JS value type doesn't match the\n * column. Callers must treat undefined as \"bloom filter cannot help.\"\n *\n * @param {any} value\n * @param {SchemaElement} element\n * @returns {bigint | undefined}\n */\nexport function hashParquetValue(value, element) {\n if (value === null || value === undefined) return undefined\n const { type, converted_type, logical_type } = element\n\n if (type === 'BOOLEAN') {\n if (typeof value !== 'boolean') return undefined\n return xxhash64(new Uint8Array([value ? 1 : 0]))\n }\n\n if (type === 'FLOAT') {\n if (typeof value !== 'number') return undefined\n const buf = new ArrayBuffer(4)\n new DataView(buf).setFloat32(0, value, true)\n return xxhash64(new Uint8Array(buf))\n }\n\n if (type === 'DOUBLE') {\n if (typeof value !== 'number') return undefined\n const buf = new ArrayBuffer(8)\n new DataView(buf).setFloat64(0, value, true)\n return xxhash64(new Uint8Array(buf))\n }\n\n if (type === 'INT32') {\n if (converted_type === 'DATE' || converted_type === 'DECIMAL' || converted_type === 'TIME_MILLIS') return undefined\n if (logical_type?.type === 'DATE' || logical_type?.type === 'TIME' || logical_type?.type === 'DECIMAL') return undefined\n if (typeof value !== 'number' || !Number.isInteger(value)) return undefined\n const buf = new ArrayBuffer(4)\n new DataView(buf).setInt32(0, value | 0, true)\n return xxhash64(new Uint8Array(buf))\n }\n\n if (type === 'INT64') {\n if (converted_type === 'TIMESTAMP_MILLIS' || converted_type === 'TIMESTAMP_MICROS') return undefined\n if (converted_type === 'TIME_MICROS' || converted_type === 'DECIMAL') return undefined\n if (logical_type?.type === 'TIMESTAMP' || logical_type?.type === 'TIME' || logical_type?.type === 'DECIMAL') return undefined\n let bigValue\n if (typeof value === 'bigint') bigValue = value\n else if (typeof value === 'number' && Number.isSafeInteger(value)) bigValue = BigInt(value)\n else return undefined\n const buf = new ArrayBuffer(8)\n new DataView(buf).setBigUint64(0, BigInt.asUintN(64, bigValue), true)\n return xxhash64(new Uint8Array(buf))\n }\n\n if (type === 'BYTE_ARRAY') {\n if (converted_type === 'JSON' || converted_type === 'BSON' || converted_type === 'DECIMAL') return undefined\n if (logical_type?.type === 'JSON' || logical_type?.type === 'BSON' || logical_type?.type === 'VARIANT') return undefined\n if (logical_type?.type === 'GEOMETRY' || logical_type?.type === 'GEOGRAPHY') return undefined\n if (typeof value === 'string') return xxhash64(textEncoder.encode(value))\n if (value instanceof Uint8Array) return xxhash64(value)\n return undefined\n }\n\n if (type === 'FIXED_LEN_BYTE_ARRAY') {\n if (converted_type === 'DECIMAL' || converted_type === 'INTERVAL') return undefined\n if (logical_type?.type === 'DECIMAL' || logical_type?.type === 'UUID' || logical_type?.type === 'FLOAT16') return undefined\n if (logical_type?.type === 'GEOMETRY' || logical_type?.type === 'GEOGRAPHY') return undefined\n if (value instanceof Uint8Array) return xxhash64(value)\n return undefined\n }\n\n // INT96 deprecated, or type missing on group columns\n return undefined\n}\n\n/**\n * Top-level column names that appear in $eq or $in predicates within a filter.\n * These are the only columns where a bloom filter can prove a value's absence\n * and let us skip a row group; any other operator can't be helped by a bloom.\n *\n * @param {ParquetQueryFilter | undefined} filter\n * @returns {Set<string>}\n */\nexport function bloomEligibleColumns(filter) {\n /** @type {Set<string>} */\n const out = new Set()\n walkBloomEligible(filter, out)\n return out\n}\n\n/**\n * @param {ParquetQueryFilter | undefined} filter\n * @param {Set<string>} out\n */\nfunction walkBloomEligible(filter, out) {\n if (!filter) return\n if ('$and' in filter && Array.isArray(filter.$and)) {\n for (const sub of filter.$and) walkBloomEligible(sub, out)\n return\n }\n if ('$or' in filter && Array.isArray(filter.$or)) {\n for (const sub of filter.$or) walkBloomEligible(sub, out)\n return\n }\n // $nor would need to prove presence, not absence \u2014 bloom can't help.\n if ('$nor' in filter) return\n for (const [field, condition] of Object.entries(filter)) {\n if (field.startsWith('$')) continue\n if (typeof condition === 'object' && condition !== null && !Array.isArray(condition)) {\n if ('$eq' in condition || '$in' in condition) out.add(field)\n } else {\n // primitive / null / array condition is an implicit $eq\n out.add(field)\n }\n }\n}\n", "/**\n * @import {AsyncBuffer, Awaitable, DecodedArray} from '../src/types.js'\n */\n\nimport { defaultInitialFetchSize } from './metadata.js'\n\n/**\n * Replace bigint, date, etc with legal JSON types.\n *\n * @param {any} obj object to convert\n * @returns {unknown} converted object\n */\nexport function toJson(obj) {\n if (obj === undefined) return null\n if (typeof obj === 'bigint') return Number(obj)\n if (Object.is(obj, -0)) return 0\n if (Array.isArray(obj)) return obj.map(toJson)\n if (obj instanceof Uint8Array) return Array.from(obj)\n if (obj instanceof Date) return obj.toISOString()\n if (obj instanceof Object) {\n /** @type {Record<string, unknown>} */\n const newObj = {}\n for (const key of Object.keys(obj)) {\n if (obj[key] === undefined) continue\n newObj[key] = toJson(obj[key])\n }\n return newObj\n }\n return obj\n}\n\n/**\n * Concatenate two arrays fast.\n *\n * @param {any[]} aaa\n * @param {DecodedArray} bbb\n */\nexport function concat(aaa, bbb) {\n const chunk = 10000\n for (let i = 0; i < bbb.length; i += chunk) {\n aaa.push(...bbb.slice(i, i + chunk))\n }\n}\n\n/**\n * Deep equality.\n *\n * @param {any} a\n * @param {any} b\n * @param {boolean} [strict]\n * @returns {boolean}\n */\nexport function equals(a, b, strict = true) {\n // eslint-disable-next-line eqeqeq\n if (strict ? a === b : a == b) return true\n if (!a || !b || typeof a !== 'object' || typeof b !== 'object') return false\n\n if (a instanceof Uint8Array && b instanceof Uint8Array) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (a[i] !== b[i]) return false\n }\n return true\n }\n if (Array.isArray(a) && Array.isArray(b)) {\n if (a.length !== b.length) return false\n for (let i = 0; i < a.length; i++) {\n if (!equals(a[i], b[i], strict)) return false\n }\n return true\n }\n\n const aKeys = Object.keys(a)\n if (aKeys.length !== Object.keys(b).length) return false\n for (const k of aKeys) {\n if (!equals(a[k], b[k], strict)) return false\n }\n return true\n}\n\n/**\n * Get the byte length using fetch with a ranged GET request.\n * Aborts the request if server returns 200 instead of 206.\n *\n * @param {string} url\n * @param {RequestInit} [requestInit] fetch options\n * @param {typeof globalThis.fetch} [fetchFn] fetch function to use\n * @returns {Promise<number>}\n */\nasync function byteLengthFromUrlUsingGet(url, requestInit = {}, fetchFn = globalThis.fetch) {\n const controller = new AbortController()\n const headers = new Headers(requestInit.headers)\n headers.set('Range', 'bytes=0-0')\n\n const res = await fetchFn(url, {\n ...requestInit,\n headers,\n signal: controller.signal,\n })\n\n if (!res.ok) throw new Error(`fetch with range failed ${res.status}`)\n\n // Server supports Range requests (206 Partial Content)\n if (res.status === 206) {\n const contentRange = res.headers.get('Content-Range')\n if (!contentRange) throw new Error('missing content-range header')\n\n // Parse \"bytes 0-0/9446073\" to get total length\n const match = contentRange.match(/bytes \\d+-\\d+\\/(\\d+)/)\n if (!match) throw new Error(`invalid content-range header: ${contentRange}`)\n\n return parseInt(match[1])\n }\n\n // Server ignored Range and returned 200 - get Content-Length and abort request\n if (res.status === 200) {\n const contentLength = res.headers.get('Content-Length')\n\n // Abort the request to stop any ongoing download\n controller.abort()\n\n if (contentLength) return parseInt(contentLength)\n }\n\n throw new Error('server does not support range requests and missing content-length')\n}\n\n/**\n * Get the byte length of a URL using a HEAD request.\n * If HEAD fails with 403 (e.g., with signed S3 URLs), falls back to a ranged GET request.\n * If HEAD succeeds but Content-Length is missing, falls back to GET with range.\n * If requestInit is provided, it will be passed to fetch.\n *\n * @param {string} url\n * @param {RequestInit} [requestInit] fetch options\n * @param {typeof globalThis.fetch} [customFetch] fetch function to use\n * @returns {Promise<number>}\n */\nexport async function byteLengthFromUrl(url, requestInit, customFetch) {\n const fetch = customFetch ?? globalThis.fetch\n const res = await fetch(url, { ...requestInit, method: 'HEAD' })\n\n // If HEAD request is forbidden (common with signed S3 URLs), try GET with range\n if (res.status === 403) {\n return byteLengthFromUrlUsingGet(url, requestInit, fetch)\n }\n\n if (!res.ok) throw new Error(`fetch head failed ${res.status}`)\n const length = res.headers.get('Content-Length')\n // If Content-Length is missing from HEAD, fallback to GET with range\n if (!length) {\n return byteLengthFromUrlUsingGet(url, requestInit, fetch)\n }\n return parseInt(length)\n}\n\n/**\n * Construct an AsyncBuffer for a URL.\n * If byteLength is not provided, will make a HEAD request to get the file size.\n * If fetch is provided, it will be used instead of the global fetch.\n * If requestInit is provided, it will be passed to fetch.\n *\n * @param {object} options\n * @param {string} options.url\n * @param {number} [options.byteLength]\n * @param {typeof globalThis.fetch} [options.fetch] fetch function to use\n * @param {RequestInit} [options.requestInit]\n * @returns {Promise<AsyncBuffer>}\n */\nexport async function asyncBufferFromUrl({ url, byteLength, requestInit, fetch: customFetch }) {\n if (!url) throw new Error('missing url')\n const fetch = customFetch ?? globalThis.fetch\n // byte length from HEAD request\n byteLength ??= await byteLengthFromUrl(url, requestInit, fetch)\n\n /**\n * A promise for the whole buffer, if range requests are not supported.\n * @type {Promise<ArrayBuffer>|undefined}\n */\n let buffer = undefined\n const init = requestInit || {}\n\n return {\n byteLength,\n async slice(start, end) {\n if (buffer) {\n return buffer.then(buffer => buffer.slice(start, end))\n }\n\n const headers = new Headers(init.headers)\n const endStr = end === undefined ? '' : end - 1\n headers.set('Range', `bytes=${start}-${endStr}`)\n\n const res = await fetch(url, { ...init, headers })\n if (!res.ok || !res.body) throw new Error(`fetch failed ${res.status}`)\n\n if (res.status === 200) {\n // Endpoint does not support range requests and returned the whole object\n buffer = res.arrayBuffer()\n return buffer.then(buffer => buffer.slice(start, end))\n } else if (res.status === 206) {\n // The endpoint supports range requests and sent us the requested range\n return res.arrayBuffer()\n } else {\n throw new Error(`fetch received unexpected status code ${res.status}`)\n }\n },\n }\n}\n\n/**\n * Returns a cached layer on top of an AsyncBuffer. For caching slices of a file\n * that are read multiple times, possibly over a network.\n *\n * @param {AsyncBuffer} file file-like object to cache\n * @param {{ minSize?: number }} [options]\n * @returns {AsyncBuffer} cached file-like object\n */\nexport function cachedAsyncBuffer({ byteLength, slice }, { minSize = defaultInitialFetchSize } = {}) {\n if (byteLength < minSize) {\n // Cache whole file if it's small\n const buffer = slice(0, byteLength)\n return {\n byteLength,\n async slice(start, end) {\n return (await buffer).slice(start, end)\n },\n }\n }\n const cache = new Map()\n return {\n byteLength,\n /**\n * @param {number} start\n * @param {number} [end]\n * @returns {Awaitable<ArrayBuffer>}\n */\n slice(start, end) {\n const key = cacheKey(start, end, byteLength)\n const cached = cache.get(key)\n if (cached) return cached\n // cache miss, read from file\n const promise = slice(start, end)\n cache.set(key, promise)\n return promise\n },\n }\n}\n\n\n/**\n * Returns canonical cache key for a byte range 'start,end'.\n * Normalize int-range and suffix-range requests to the same key.\n *\n * @param {number} start start byte of range\n * @param {number} [end] end byte of range, or undefined for suffix range\n * @param {number} [size] size of file, or undefined for suffix range\n * @returns {string}\n */\nfunction cacheKey(start, end, size) {\n if (start < 0) {\n if (end !== undefined) throw new Error(`invalid suffix range [${start}, ${end}]`)\n if (size === undefined) return `${start},`\n return `${size + start},${size}`\n } else if (end !== undefined) {\n if (start > end) throw new Error(`invalid empty range [${start}, ${end}]`)\n return `${start},${end}`\n } else if (size === undefined) {\n return `${start},`\n } else {\n return `${start},${size}`\n }\n}\n\n/**\n * Flatten a list of lists into a single list.\n *\n * @param {DecodedArray[]} [chunks]\n * @returns {DecodedArray}\n */\nexport function flatten(chunks) {\n if (!chunks) return []\n if (chunks.length === 1) return chunks[0]\n /** @type {any[]} */\n const output = []\n for (const chunk of chunks) {\n concat(output, chunk)\n }\n return output\n}\n", "/**\n * @import {BloomFilter, ParquetQueryFilter, RowGroup, SchemaElement} from '../src/types.js'\n */\n\nimport { hashParquetValue, sbbfContains } from './bloom.js'\nimport { equals } from './utils.js'\n\n/**\n * Returns an array of top-level column names needed to evaluate the filter.\n *\n * @param {ParquetQueryFilter} [filter]\n * @returns {string[]}\n */\nexport function columnsNeededForFilter(filter) {\n if (!filter) return []\n /** @type {string[]} */\n const columns = []\n if ('$and' in filter && Array.isArray(filter.$and)) {\n columns.push(...filter.$and.flatMap(columnsNeededForFilter))\n } else if ('$or' in filter && Array.isArray(filter.$or)) {\n columns.push(...filter.$or.flatMap(columnsNeededForFilter))\n } else if ('$nor' in filter && Array.isArray(filter.$nor)) {\n columns.push(...filter.$nor.flatMap(columnsNeededForFilter))\n } else {\n // Map dot-notation paths to top-level column names\n columns.push(...Object.keys(filter).map(key => key.split('.')[0]))\n }\n return [...new Set(columns)]\n}\n\n/**\n * Match a record against a query filter\n *\n * @param {Record<string, any>} record\n * @param {ParquetQueryFilter} filter\n * @param {boolean} [strict]\n * @returns {boolean}\n */\nexport function matchFilter(record, filter, strict = true) {\n if ('$and' in filter && Array.isArray(filter.$and)) {\n return filter.$and.every(subQuery => matchFilter(record, subQuery, strict))\n }\n if ('$or' in filter && Array.isArray(filter.$or)) {\n return filter.$or.some(subQuery => matchFilter(record, subQuery, strict))\n }\n if ('$nor' in filter && Array.isArray(filter.$nor)) {\n return !filter.$nor.some(subQuery => matchFilter(record, subQuery, strict))\n }\n\n return Object.entries(filter).every(([field, condition]) => {\n const value = resolve(record, field)\n\n // implicit $eq for non-object conditions\n if (typeof condition !== 'object' || condition === null || Array.isArray(condition)) {\n return equals(value, condition, strict)\n }\n\n return Object.entries(condition || {}).every(([operator, target]) => {\n if (operator === '$gt') return value > target\n if (operator === '$gte') return value >= target\n if (operator === '$lt') return value < target\n if (operator === '$lte') return value <= target\n if (operator === '$eq') return equals(value, target, strict)\n if (operator === '$ne') return !equals(value, target, strict)\n if (operator === '$in') return Array.isArray(target) && target.includes(value)\n if (operator === '$nin') return Array.isArray(target) && !target.includes(value)\n if (operator === '$not') return !matchFilter({ [field]: value }, { [field]: target }, strict)\n return true\n })\n })\n}\n\n/**\n * Check if a row group can be skipped based on filter and column statistics,\n * optionally consulting per-column bloom filters for equality predicates that\n * statistics can't decide.\n *\n * @param {object} options\n * @param {RowGroup} options.rowGroup\n * @param {string[]} options.physicalColumns\n * @param {ParquetQueryFilter | undefined} options.filter\n * @param {boolean} [options.strict]\n * @param {Record<string, BloomFilter>} [options.bloomFilters] keyed by top-level column name\n * @param {Record<string, SchemaElement>} [options.schemaElements] keyed by top-level column name, required to use bloomFilters\n * @returns {boolean} true if the row group can be skipped\n */\nexport function canSkipRowGroup({ rowGroup, physicalColumns, filter, strict = true, bloomFilters, schemaElements }) {\n if (!filter) return false\n\n // Handle logical operators\n if ('$and' in filter && Array.isArray(filter.$and)) {\n // For AND, we can skip if ANY condition allows skipping\n return filter.$and.some(subFilter => canSkipRowGroup({ rowGroup, physicalColumns, filter: subFilter, strict, bloomFilters, schemaElements }))\n }\n if ('$or' in filter && Array.isArray(filter.$or)) {\n // For OR, we can skip only if ALL conditions allow skipping\n return filter.$or.every(subFilter => canSkipRowGroup({ rowGroup, physicalColumns, filter: subFilter, strict, bloomFilters, schemaElements }))\n }\n if ('$nor' in filter && Array.isArray(filter.$nor)) {\n // For NOR, we can skip if none of the conditions allow skipping\n // This is complex, so we'll be conservative and not skip\n return false\n }\n\n // Check column filters\n for (const [field, condition] of Object.entries(filter)) {\n // Find the column chunk for this field\n const columnIndex = physicalColumns.indexOf(field)\n if (columnIndex === -1) continue\n\n const stats = rowGroup.columns[columnIndex].meta_data?.statistics\n const { min, max, min_value, max_value } = stats || {}\n const minVal = min_value !== undefined ? min_value : min\n const maxVal = max_value !== undefined ? max_value : max\n const haveStats = minVal !== undefined && maxVal !== undefined\n\n const bloom = bloomFilters?.[field]\n const element = schemaElements?.[field]\n\n // Handle operators\n for (const [operator, target] of Object.entries(condition || {})) {\n // Statistics-based skipping\n if (haveStats) {\n if (operator === '$gt' && maxVal <= target) return true\n if (operator === '$gte' && maxVal < target) return true\n if (operator === '$lt' && minVal >= target) return true\n if (operator === '$lte' && minVal > target) return true\n if (operator === '$eq' && (target < minVal || target > maxVal)) return true\n if (operator === '$ne' && equals(minVal, maxVal, strict) && equals(minVal, target, strict)) return true\n if (operator === '$in' && Array.isArray(target) && target.every(v => v < minVal || v > maxVal)) return true\n if (operator === '$nin' && Array.isArray(target) && equals(minVal, maxVal, strict) && target.includes(minVal)) return true\n }\n // Bloom-filter skipping for equality predicates (proves absence, never presence)\n if (bloom && element) {\n if (operator === '$eq') {\n const hash = hashParquetValue(target, element)\n if (hash !== undefined && !sbbfContains(bloom.blocks, hash)) return true\n }\n if (operator === '$in' && Array.isArray(target) && target.length > 0) {\n let allAbsent = true\n for (const v of target) {\n const h = hashParquetValue(v, element)\n if (h === undefined || sbbfContains(bloom.blocks, h)) {\n allAbsent = false\n break\n }\n }\n if (allAbsent) return true\n }\n }\n }\n }\n\n return false\n}\n\n/**\n * Resolve a dot-notation path to a value in a nested object.\n *\n * @param {Record<string, any>} record\n * @param {string} path\n * @returns {any}\n */\nfunction resolve(record, path) {\n let value = record\n for (const part of path.split('.')) {\n value = value?.[part]\n }\n return value\n}\n", "import { bloomEligibleColumns, readBloomFilter } from './bloom.js'\nimport { canSkipRowGroup } from './filter.js'\nimport { parquetSchema } from './metadata.js'\nimport { getPhysicalColumns } from './schema.js'\n\n/**\n * @import {AsyncBuffer, BloomFilter, ByteRange, ChunkPlan, FileMetaData, GroupPlan, ParquetQueryFilter, ParquetReadOptions, QueryPlan, SchemaElement} from '../src/types.js'\n */\n\n// Combine column chunks if less than 2mb\nconst runLimit = 1 << 21 // 2mb\n\n/**\n * Plan which byte ranges to read to satisfy a read request.\n * Metadata must be non-null.\n *\n * @param {ParquetReadOptions & { bloomFiltersByGroup?: Record<string, BloomFilter>[], schemaElements?: Record<string, SchemaElement> }} options\n * @returns {QueryPlan}\n */\nexport function parquetPlan({ metadata, rowStart = 0, rowEnd = Infinity, columns, filter, filterStrict = true, useOffsetIndex = false, bloomFiltersByGroup, schemaElements }) {\n if (!metadata) throw new Error('parquetPlan requires metadata')\n /** @type {GroupPlan[]} */\n const groups = []\n /** @type {ByteRange[]} */\n const fetches = []\n /** @type {ByteRange[]} */\n const indexes = []\n const physicalColumns = getPhysicalColumns(parquetSchema(metadata))\n\n // find which row groups to read\n let groupStart = 0 // first row index of the current group\n let rgIdx = 0\n for (const rowGroup of metadata.row_groups) {\n const groupRows = Number(rowGroup.num_rows)\n const groupEnd = groupStart + groupRows\n const bloomFilters = bloomFiltersByGroup?.[rgIdx]\n // if row group overlaps with row range, add it to the plan\n if (groupRows > 0 && groupEnd > rowStart && groupStart < rowEnd && !canSkipRowGroup({ rowGroup, physicalColumns, filter, strict: filterStrict, bloomFilters, schemaElements })) {\n /** @type {ChunkPlan[]} */\n const chunks = []\n let groupStartByte = Infinity\n let groupEndByte = -Infinity\n // loop through each column chunk\n for (const chunk of rowGroup.columns) {\n const meta = chunk.meta_data\n if (chunk.file_path) throw new Error('parquet file_path not supported')\n if (!meta) throw new Error('parquet column metadata is undefined')\n // add included column chunks to the plan\n if (!columns || columns.includes(meta.path_in_schema[0])) {\n // full column chunk\n const columnOffset = meta.dictionary_page_offset || meta.data_page_offset\n const startByte = Number(columnOffset)\n const endByte = Number(columnOffset + meta.total_compressed_size)\n // update group byte range\n if (startByte < groupStartByte) groupStartByte = startByte\n if (endByte > groupEndByte) groupEndByte = endByte\n\n if (useOffsetIndex && chunk.offset_index_offset && chunk.offset_index_length && (rowStart > groupStart || rowEnd < groupEnd)) {\n const offsetIndexStart = Number(chunk.offset_index_offset)\n chunks.push({\n columnMetadata: meta,\n offsetIndex: {\n startByte: offsetIndexStart,\n endByte: offsetIndexStart + chunk.offset_index_length,\n },\n range: { startByte, endByte },\n })\n } else {\n chunks.push({\n columnMetadata: meta,\n range: { startByte, endByte },\n })\n }\n\n }\n }\n const selectStart = Math.max(rowStart - groupStart, 0)\n const selectEnd = Math.min(rowEnd - groupStart, groupRows)\n groups.push({ chunks, rowGroup, groupStart, groupRows, selectStart, selectEnd })\n\n // combine runs of column chunks\n /** @type {ByteRange | undefined} */\n let run\n for (const chunk of chunks) {\n if ('offsetIndex' in chunk) {\n indexes.push(chunk.offsetIndex)\n } else {\n const { range } = chunk\n if (columns) {\n fetches.push(range)\n } else if (run && range.endByte - run.startByte <= runLimit) {\n // extend range\n run.endByte = range.endByte\n } else {\n // new range\n if (run) fetches.push(run)\n run = { ...range }\n }\n }\n }\n if (run) fetches.push(run)\n }\n\n groupStart = groupEnd\n rgIdx++\n }\n if (!isFinite(rowEnd)) rowEnd = groupStart\n fetches.push(...indexes)\n\n return { metadata, rowStart, rowEnd, columns, fetches, groups }\n}\n\n/**\n * Fetch bloom filters for $eq / $in columns of row groups not already provably\n * skippable by statistics alone. Returns an array indexed by row-group ordinal;\n * each entry maps top-level column name \u2192 BloomFilter for any chunk whose\n * bloom filter we were able to parse. Adds one round-trip when at least one\n * bloom filter is fetched; otherwise returns synchronously.\n *\n * @param {object} options\n * @param {AsyncBuffer} options.file\n * @param {FileMetaData} options.metadata\n * @param {ParquetQueryFilter} options.filter\n * @param {boolean} [options.filterStrict]\n * @returns {Promise<Record<string, BloomFilter>[]>}\n */\nexport async function prefetchBloomFilters({ file, metadata, filter, filterStrict = true }) {\n const result = metadata.row_groups.map(() => /** @type {Record<string, BloomFilter>} */ ({}))\n const eligibleCols = bloomEligibleColumns(filter)\n if (eligibleCols.size === 0) return result\n const physicalColumns = getPhysicalColumns(parquetSchema(metadata))\n\n /** @type {Promise<void>[]} */\n const tasks = []\n metadata.row_groups.forEach((rowGroup, rgIdx) => {\n if (canSkipRowGroup({ rowGroup, physicalColumns, filter, strict: filterStrict })) return\n for (const colName of eligibleCols) {\n const columnIdx = physicalColumns.indexOf(colName)\n if (columnIdx === -1) continue\n const meta = rowGroup.columns[columnIdx]?.meta_data\n if (!meta?.bloom_filter_offset || !meta.bloom_filter_length) continue\n const start = Number(meta.bloom_filter_offset)\n const end = start + meta.bloom_filter_length\n tasks.push((async () => {\n const buffer = await file.slice(start, end)\n const bloom = readBloomFilter({ view: new DataView(buffer), offset: 0 })\n if (bloom) result[rgIdx][colName] = bloom\n })())\n }\n })\n\n if (tasks.length) await Promise.all(tasks)\n return result\n}\n\n/**\n * Prefetch byte ranges from an AsyncBuffer.\n *\n * @param {AsyncBuffer} file\n * @param {QueryPlan} plan\n * @returns {AsyncBuffer}\n */\nexport function prefetchAsyncBuffer(file, { fetches }) {\n // fetch byte ranges from the file\n const promises = fetches.map(({ startByte, endByte }) => file.slice(startByte, endByte))\n return {\n byteLength: file.byteLength,\n slice(start, end = file.byteLength) {\n // find matching slice\n const index = fetches.findIndex(({ startByte, endByte }) => startByte <= start && end <= endByte)\n if (index < 0) {\n // fallback to direct read\n return file.slice(start, end)\n }\n if (fetches[index].startByte !== start || fetches[index].endByte !== end) {\n // slice a subrange of the prefetch\n const startOffset = start - fetches[index].startByte\n const endOffset = end - fetches[index].startByte\n if (promises[index] instanceof Promise) {\n return promises[index].then(buffer => buffer.slice(startOffset, endOffset))\n } else {\n return promises[index].slice(startOffset, endOffset)\n }\n } else {\n return promises[index]\n }\n },\n }\n}\n", "import { DEFAULT_PARSERS } from './convert.js'\n\n/**\n * @import {DataReader, ParquetParsers, VariantMetadata} from '../src/types.js'\n */\n\nconst decoder = new TextDecoder()\n/** @type {WeakMap<object, Map<string, VariantMetadata>>} */\nconst metadataCache = new WeakMap()\n\n/**\n * Recursively decode variant structs into native values.\n *\n * @param {any} value\n * @param {ParquetParsers} [parsers]\n * @returns {any}\n */\nexport function decodeVariantColumn(value, parsers = DEFAULT_PARSERS) {\n if (Array.isArray(value)) {\n return value.map(entry => decodeVariantColumn(entry, parsers))\n }\n if (typeof value !== 'object') return value\n\n if ('metadata' in value) {\n const metadata = parseVariantMetadata(value.metadata)\n\n // Decode shredded fields from typed_value\n const shreddedFields = value.typed_value && decodeTypedValue(value.typed_value, metadata, parsers)\n\n // Decode binary value (may contain additional fields for partially shredded objects)\n const binaryValue = value.value && readVariant(makeReader(value.value), metadata, parsers)\n\n // Merge shredded and binary values for partially shredded objects\n if (shreddedFields && binaryValue) {\n return { ...binaryValue, ...shreddedFields }\n }\n return shreddedFields ?? binaryValue\n }\n\n return value\n}\n\n/**\n * Decode a shredded variant typed_value field.\n *\n * @param {any} typedValue\n * @param {VariantMetadata} metadata\n * @param {ParquetParsers} parsers\n * @returns {any}\n */\nfunction decodeTypedValue(typedValue, metadata, parsers) {\n if (typedValue instanceof Date) return typedValue\n\n // Handle {typed_value, value} wrapper - unwrap and recurse\n if (typedValue && typeof typedValue === 'object' && !Array.isArray(typedValue) && !(typedValue instanceof Uint8Array)) {\n if ('typed_value' in typedValue && typedValue.typed_value !== null && typedValue.typed_value !== undefined) {\n return decodeTypedValue(typedValue.typed_value, metadata, parsers)\n }\n if ('value' in typedValue && typedValue.value instanceof Uint8Array) {\n return readVariant(makeReader(typedValue.value), metadata, parsers)\n }\n if ('typed_value' in typedValue || 'value' in typedValue) {\n // both null/missing \u2192 field is null\n return null\n }\n // Shredded object: each field value gets decoded\n /** @type {Record<string, any>} */\n const result = {}\n for (const [key, field] of Object.entries(typedValue)) {\n if (!metadata.dictionary.includes(key)) continue\n result[key] = decodeTypedValue(field, metadata, parsers)\n }\n return result\n }\n\n // Uint8Array: decode as binary variant\n if (typedValue instanceof Uint8Array) {\n return readVariant(makeReader(typedValue), metadata, parsers)\n }\n\n // Arrays\n if (Array.isArray(typedValue)) {\n return typedValue.map(element => decodeTypedValue(element, metadata, parsers))\n }\n\n return typedValue\n}\n\n/**\n * @param {Uint8Array} bytes\n * @returns {DataReader}\n */\nfunction makeReader(bytes) {\n return { view: new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength), offset: 0 }\n}\n\n/**\n * Parse and cache variant metadata dictionary.\n *\n * @param {Uint8Array} bytes\n * @returns {VariantMetadata}\n */\nfunction parseVariantMetadata(bytes) {\n let bufferCache = metadataCache.get(bytes.buffer)\n if (!bufferCache) {\n bufferCache = new Map()\n metadataCache.set(bytes.buffer, bufferCache)\n }\n const key = `${bytes.byteOffset}:${bytes.byteLength}`\n const cached = bufferCache.get(key)\n if (cached) return cached\n\n const reader = makeReader(bytes)\n const header = reader.view.getUint8(reader.offset++)\n const version = header & 0x0f\n if (version !== 1) throw new Error(`parquet unsupported variant metadata version: ${version}`)\n const sorted = (header >> 4 & 0x1) === 1\n const offsetSize = (header >> 6 & 0x3) + 1\n\n const dictionarySize = readUnsigned(reader, offsetSize)\n\n const offsets = new Array(dictionarySize + 1)\n for (let i = 0; i < offsets.length; i++) {\n offsets[i] = readUnsigned(reader, offsetSize)\n }\n\n const base = reader.offset\n const dictionary = new Array(dictionarySize)\n for (let i = 0; i < dictionarySize; i++) {\n const start = offsets[i]\n const end = offsets[i + 1]\n const strBytes = new Uint8Array(bytes.buffer, bytes.byteOffset + base + start, end - start)\n dictionary[i] = decoder.decode(strBytes)\n }\n\n const metadata = { dictionary, sorted }\n bufferCache.set(key, metadata)\n return metadata\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} byteWidth\n * @returns {number}\n */\nfunction readUnsigned(reader, byteWidth) {\n let value = 0\n for (let i = 0; i < byteWidth; i++) {\n value |= reader.view.getUint8(reader.offset + i) << i * 8\n }\n reader.offset += byteWidth\n return value\n}\n\n/**\n * @param {DataReader} reader\n * @param {VariantMetadata} metadata\n * @param {ParquetParsers} parsers\n * @returns {any}\n */\nfunction readVariant(reader, metadata, parsers) {\n const typeByte = reader.view.getUint8(reader.offset++)\n const basicType = typeByte & 0x3\n const header = typeByte >> 2\n if (basicType === 0) return readVariantPrimitive(reader, header, parsers)\n if (basicType === 2) return readVariantObject(reader, header, metadata, parsers)\n if (basicType === 3) return readVariantArray(reader, header, metadata, parsers)\n // else short string\n const bytes = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, header)\n reader.offset += header\n return decoder.decode(bytes)\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} typeId\n * @param {ParquetParsers} parsers\n * @returns {any}\n */\nfunction readVariantPrimitive(reader, typeId, parsers) {\n switch (typeId) {\n case 0: return null\n case 1: return true\n case 2: return false\n case 3: {\n const value = reader.view.getInt8(reader.offset)\n reader.offset += 1\n return value\n }\n case 4: {\n const value = reader.view.getInt16(reader.offset, true)\n reader.offset += 2\n return value\n }\n case 5: {\n const value = reader.view.getInt32(reader.offset, true)\n reader.offset += 4\n return value\n }\n case 6: {\n const value = reader.view.getBigInt64(reader.offset, true)\n reader.offset += 8\n return value\n }\n case 7: {\n const value = reader.view.getFloat64(reader.offset, true)\n reader.offset += 8\n return value\n }\n case 8:\n return readVariantDecimal(reader, 4)\n case 9:\n return readVariantDecimal(reader, 8)\n case 10:\n return readVariantDecimal(reader, 16)\n case 11: {\n const value = reader.view.getInt32(reader.offset, true)\n reader.offset += 4\n return parsers.dateFromDays(value)\n }\n case 12: // timestamp_micros (utc)\n case 13: { // timestamp_micros_ntz (no timezone)\n const value = reader.view.getBigInt64(reader.offset, true)\n reader.offset += 8\n return parsers.timestampFromMicroseconds(value)\n }\n case 14: {\n const value = reader.view.getFloat32(reader.offset, true)\n reader.offset += 4\n return value\n }\n case 15:\n return readVariantBinary(reader)\n case 16: {\n const bytes = readVariantBinary(reader)\n return decoder.decode(bytes)\n }\n case 17: {\n // time: microseconds since midnight\n const value = reader.view.getBigInt64(reader.offset, true)\n reader.offset += 8\n return value\n }\n case 18: // timestamp_nanos (utc)\n case 19: { // timestamp_nanos_ntz (no timezone)\n const value = reader.view.getBigInt64(reader.offset, true)\n reader.offset += 8\n return parsers.timestampFromNanoseconds(value)\n }\n case 20: {\n const bytes = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, 16)\n reader.offset += 16\n const hex = Array.from(bytes, b => b.toString(16).padStart(2, '0')).join('')\n return `${hex.slice(0, 8)}-${hex.slice(8, 12)}-${hex.slice(12, 16)}-${hex.slice(16, 20)}-${hex.slice(20)}`\n }\n default:\n throw new Error(`parquet unsupported variant primitive type: ${typeId}`)\n }\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} header\n * @param {VariantMetadata} metadata\n * @param {ParquetParsers} parsers\n * @returns {Record<string, any>}\n */\nfunction readVariantObject(reader, header, metadata, parsers) {\n const offsetWidth = (header & 0x3) + 1\n const idWidth = (header >> 2 & 0x3) + 1\n const isLarge = header >> 4 & 0x1\n const numElements = isLarge ? readUnsigned(reader, 4) : reader.view.getUint8(reader.offset++)\n\n /** @type {number[]} */\n const fieldIds = new Array(numElements)\n for (let i = 0; i < numElements; i++) {\n fieldIds[i] = readUnsigned(reader, idWidth)\n }\n\n const offsets = new Array(numElements + 1)\n for (let i = 0; i < offsets.length; i++) {\n offsets[i] = readUnsigned(reader, offsetWidth)\n }\n\n /** @type {Record<string, any>} */\n const out = {}\n for (let i = 0; i < numElements; i++) {\n const key = metadata.dictionary[fieldIds[i]]\n // Read value at the given offset\n const valueReader = {\n view: reader.view,\n offset: reader.offset + offsets[i],\n }\n out[key] = readVariant(valueReader, metadata, parsers)\n }\n reader.offset += offsets[offsets.length - 1]\n return out\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} header\n * @param {VariantMetadata} metadata\n * @param {ParquetParsers} parsers\n * @returns {any[]}\n */\nfunction readVariantArray(reader, header, metadata, parsers) {\n const fieldOffsetSize = header & 0x3\n const isLarge = header >> 2 & 0x1\n const offsetWidth = fieldOffsetSize + 1\n const numElements = readUnsigned(reader, isLarge ? 4 : 1)\n\n const offsets = new Array(numElements + 1)\n for (let i = 0; i < offsets.length; i++) {\n offsets[i] = readUnsigned(reader, offsetWidth)\n }\n\n const valuesStart = reader.offset\n const result = new Array(numElements)\n for (let i = 0; i < numElements; i++) {\n const valueReader = {\n view: reader.view,\n offset: valuesStart + offsets[i],\n }\n result[i] = readVariant(valueReader, metadata, parsers)\n }\n reader.offset = valuesStart + offsets[offsets.length - 1]\n return result\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} width\n * @returns {number}\n */\nfunction readVariantDecimal(reader, width) {\n const scale = reader.view.getUint8(reader.offset)\n reader.offset += 1\n let unscaled\n if (width === 4) {\n unscaled = BigInt(reader.view.getInt32(reader.offset, true))\n reader.offset += 4\n } else if (width === 8) {\n unscaled = reader.view.getBigInt64(reader.offset, true)\n reader.offset += 8\n } else {\n const low = reader.view.getBigUint64(reader.offset, true)\n const high = reader.view.getBigInt64(reader.offset + 8, true)\n unscaled = high << 64n | low\n reader.offset += 16\n }\n\n return Number(unscaled) * 10 ** -scale\n}\n\n/**\n * @param {DataReader} reader\n * @returns {Uint8Array}\n */\nfunction readVariantBinary(reader) {\n const length = reader.view.getUint32(reader.offset, true)\n reader.offset += 4\n const bytes = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, length)\n reader.offset += length\n return bytes\n}\n", "import { getMaxDefinitionLevel, isListLike, isMapLike } from './schema.js'\nimport { decodeVariantColumn } from './variant.js'\n\n/**\n * Reconstructs a complex nested structure from flat arrays of values and\n * definition and repetition levels, according to Dremel encoding.\n *\n * @param {any[]} output\n * @param {number[] | undefined} definitionLevels\n * @param {number[]} repetitionLevels\n * @param {DecodedArray} values\n * @param {SchemaTree[]} schemaPath\n * @returns {DecodedArray}\n */\nexport function assembleLists(output, definitionLevels, repetitionLevels, values, schemaPath) {\n const maxDefinitionLevel = getMaxDefinitionLevel(schemaPath)\n // If no def/rep levels, synthesize def levels at max\n if (!definitionLevels?.length && !repetitionLevels.length) {\n if (!maxDefinitionLevel || !values.length) return values\n definitionLevels = new Array(values.length).fill(maxDefinitionLevel)\n }\n const n = definitionLevels?.length || repetitionLevels.length\n const repetitionPath = schemaPath.map(({ element }) => element.repetition_type)\n let valueIndex = 0\n\n // Track state of nested structures\n const containerStack = [output]\n let currentContainer = output\n let currentDepth = 0 // schema depth\n let currentDefLevel = 0 // list depth\n let currentRepLevel = 0\n\n if (repetitionLevels[0]) {\n // continue previous row\n while (currentDepth < repetitionPath.length - 2 && currentRepLevel < repetitionLevels[0]) {\n currentDepth++\n if (repetitionPath[currentDepth] !== 'REQUIRED') {\n // go into last list\n currentContainer = currentContainer.at(-1)\n containerStack.push(currentContainer)\n currentDefLevel++\n }\n if (repetitionPath[currentDepth] === 'REPEATED') currentRepLevel++\n }\n }\n\n for (let i = 0; i < n; i++) {\n // assert(currentDefLevel === containerStack.length - 1)\n const def = definitionLevels?.length ? definitionLevels[i] : maxDefinitionLevel\n const rep = repetitionLevels[i]\n\n // Pop up to start of rep level\n while (currentDepth && (rep < currentRepLevel || repetitionPath[currentDepth] !== 'REPEATED')) {\n if (repetitionPath[currentDepth] !== 'REQUIRED') {\n containerStack.pop()\n currentDefLevel--\n }\n if (repetitionPath[currentDepth] === 'REPEATED') currentRepLevel--\n currentDepth--\n }\n // @ts-expect-error won't be empty\n currentContainer = containerStack.at(-1)\n\n // Go deeper to end of definition level\n while (\n (currentDepth < repetitionPath.length - 2 || repetitionPath[currentDepth + 1] === 'REPEATED') &&\n (currentDefLevel < def || repetitionPath[currentDepth + 1] === 'REQUIRED')\n ) {\n currentDepth++\n if (repetitionPath[currentDepth] !== 'REQUIRED') {\n /** @type {any[]} */\n const newList = []\n currentContainer.push(newList)\n currentContainer = newList\n containerStack.push(newList)\n currentDefLevel++\n }\n if (repetitionPath[currentDepth] === 'REPEATED') currentRepLevel++\n }\n\n // Add value or null based on definition level\n if (def === maxDefinitionLevel) {\n // assert(currentDepth === maxDefinitionLevel || currentDepth === repetitionPath.length - 2)\n currentContainer.push(values[valueIndex++])\n } else if (currentDepth === repetitionPath.length - 2) {\n currentContainer.push(null)\n } else {\n currentContainer.push([])\n }\n }\n\n // Handle edge cases for empty inputs or single-level data\n if (!output.length) {\n // return max definition level of nested lists\n for (let i = 0; i < maxDefinitionLevel; i++) {\n /** @type {any[]} */\n const newList = []\n currentContainer.push(newList)\n currentContainer = newList\n }\n }\n\n return output\n}\n\n/**\n * Assemble a nested structure from subcolumn data.\n *\n * @param {Map<string, DecodedArray>} subcolumnData\n * @param {SchemaTree} schema top-level schema element\n * @param {ParquetParsers} parsers\n * @param {number} [depth] depth of nested structure\n */\nexport function assembleNested(subcolumnData, schema, parsers, depth = 0) {\n const path = schema.path.join('.')\n const optional = schema.element.repetition_type === 'OPTIONAL'\n const nextDepth = optional ? depth + 1 : depth\n\n if (isListLike(schema)) {\n let sublist = schema.children[0]\n let subDepth = nextDepth\n if (sublist.children.length === 1) {\n sublist = sublist.children[0]\n subDepth++\n }\n assembleNested(subcolumnData, sublist, parsers, subDepth)\n\n const subcolumn = sublist.path.join('.')\n const values = subcolumnData.get(subcolumn)\n if (!values) throw new Error('parquet list column missing values')\n if (optional) flattenAtDepth(values, depth)\n subcolumnData.set(path, values)\n subcolumnData.delete(subcolumn)\n return\n }\n\n if (isMapLike(schema)) {\n const mapName = schema.children[0].element.name\n\n // Assemble keys and values\n assembleNested(subcolumnData, schema.children[0].children[0], parsers, nextDepth + 1)\n assembleNested(subcolumnData, schema.children[0].children[1], parsers, nextDepth + 1)\n\n const keys = subcolumnData.get(`${path}.${mapName}.key`)\n const values = subcolumnData.get(`${path}.${mapName}.value`)\n\n if (!keys) throw new Error('parquet map column missing keys')\n if (!values) throw new Error('parquet map column missing values')\n if (keys.length !== values.length) {\n throw new Error('parquet map column key/value length mismatch')\n }\n\n const out = assembleMaps(keys, values, nextDepth)\n if (optional) flattenAtDepth(out, depth)\n\n subcolumnData.delete(`${path}.${mapName}.key`)\n subcolumnData.delete(`${path}.${mapName}.value`)\n subcolumnData.set(path, out)\n return\n }\n\n // Struct-like column\n if (schema.children.length) {\n // construct a meta struct and then invert\n const invertDepth = schema.element.repetition_type === 'REQUIRED' ? depth : depth + 1\n /** @type {Record<string, any>} */\n const struct = {}\n for (const child of schema.children) {\n assembleNested(subcolumnData, child, parsers, invertDepth)\n const childData = subcolumnData.get(child.path.join('.'))\n if (!childData) throw new Error('parquet struct missing child data')\n struct[child.element.name] = childData\n }\n // remove children\n for (const child of schema.children) {\n subcolumnData.delete(child.path.join('.'))\n }\n\n // invert struct by depth\n let inverted = invertStruct(struct, invertDepth)\n if (schema.element.logical_type?.type === 'VARIANT') {\n inverted = decodeVariantColumn(inverted, parsers)\n }\n if (optional) flattenAtDepth(inverted, depth)\n subcolumnData.set(path, inverted)\n }\n}\n\n/**\n * @import {DecodedArray, ParquetParsers, SchemaTree} from '../src/types.js'\n * @param {DecodedArray} arr\n * @param {number} depth\n */\nfunction flattenAtDepth(arr, depth) {\n for (let i = 0; i < arr.length; i++) {\n if (depth) {\n flattenAtDepth(arr[i], depth - 1)\n } else {\n arr[i] = arr[i][0]\n }\n }\n}\n\n/**\n * @param {DecodedArray} keys\n * @param {DecodedArray} values\n * @param {number} depth\n * @returns {any[]}\n */\nfunction assembleMaps(keys, values, depth) {\n const out = []\n for (let i = 0; i < keys.length; i++) {\n if (depth) {\n out.push(assembleMaps(keys[i], values[i], depth - 1)) // go deeper\n } else {\n if (keys[i]) {\n /** @type {Record<string, any>} */\n const obj = {}\n for (let j = 0; j < keys[i].length; j++) {\n const value = values[i][j]\n obj[keys[i][j]] = value === undefined ? null : value\n }\n out.push(obj)\n } else {\n out.push(undefined)\n }\n }\n }\n return out\n}\n\n/**\n * Invert a struct-like object by depth.\n *\n * @param {Record<string, any[]>} struct\n * @param {number} depth\n * @returns {any[]}\n */\nfunction invertStruct(struct, depth) {\n const keys = Object.keys(struct)\n const length = struct[keys[0]]?.length\n const out = []\n for (let i = 0; i < length; i++) {\n /** @type {Record<string, any>} */\n const obj = {}\n for (const key of keys) {\n if (struct[key].length !== length) throw new Error('parquet struct parsing error')\n obj[key] = struct[key][i]\n }\n if (depth) {\n out.push(invertStruct(obj, depth - 1)) // deeper\n } else {\n out.push(obj)\n }\n }\n return out\n}\n", "/**\n * @import {DataReader} from '../src/types.js'\n */\n\nimport { readVarInt, readZigZagBigInt } from './thrift.js'\n\n/**\n * @param {DataReader} reader\n * @param {number} count number of values to read\n * @param {Int32Array | BigInt64Array} output\n */\nexport function deltaBinaryUnpack(reader, count, output) {\n const int32 = output instanceof Int32Array\n const blockSize = readVarInt(reader)\n const miniblockPerBlock = readVarInt(reader)\n readVarInt(reader) // assert(=== count)\n let value = readZigZagBigInt(reader) // first value\n let outputIndex = 0\n output[outputIndex++] = int32 ? Number(value) : value\n\n const valuesPerMiniblock = blockSize / miniblockPerBlock\n\n while (outputIndex < count) {\n // new block\n const minDelta = readZigZagBigInt(reader)\n const bitWidths = new Uint8Array(miniblockPerBlock)\n for (let i = 0; i < miniblockPerBlock; i++) {\n bitWidths[i] = reader.view.getUint8(reader.offset++)\n }\n\n for (let i = 0; i < miniblockPerBlock && outputIndex < count; i++) {\n // new miniblock\n const bitWidth = BigInt(bitWidths[i])\n if (bitWidth) {\n let bitpackPos = 0n\n let miniblockCount = valuesPerMiniblock\n const mask = (1n << bitWidth) - 1n\n while (miniblockCount && outputIndex < count) {\n let bits = BigInt(reader.view.getUint8(reader.offset)) >> bitpackPos & mask // TODO: don't re-read value every time\n bitpackPos += bitWidth\n while (bitpackPos >= 8) {\n bitpackPos -= 8n\n reader.offset++\n if (bitpackPos) {\n bits |= BigInt(reader.view.getUint8(reader.offset)) << bitWidth - bitpackPos & mask\n }\n }\n const delta = minDelta + bits\n value += delta\n output[outputIndex++] = int32 ? Number(value) : value\n miniblockCount--\n }\n if (miniblockCount) {\n // consume leftover miniblock\n reader.offset += Math.ceil((miniblockCount * Number(bitWidth) + Number(bitpackPos)) / 8)\n }\n } else {\n for (let j = 0; j < valuesPerMiniblock && outputIndex < count; j++) {\n value += minDelta\n output[outputIndex++] = int32 ? Number(value) : value\n }\n }\n }\n }\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} count\n * @param {Uint8Array[]} output\n */\nexport function deltaLengthByteArray(reader, count, output) {\n const lengths = new Int32Array(count)\n deltaBinaryUnpack(reader, count, lengths)\n for (let i = 0; i < count; i++) {\n output[i] = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, lengths[i])\n reader.offset += lengths[i]\n }\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} count\n * @param {Uint8Array[]} output\n */\nexport function deltaByteArray(reader, count, output) {\n const prefixData = new Int32Array(count)\n deltaBinaryUnpack(reader, count, prefixData)\n const suffixData = new Int32Array(count)\n deltaBinaryUnpack(reader, count, suffixData)\n\n for (let i = 0; i < count; i++) {\n const suffix = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, suffixData[i])\n if (prefixData[i]) {\n // copy from previous value\n output[i] = new Uint8Array(prefixData[i] + suffixData[i])\n output[i].set(output[i - 1].subarray(0, prefixData[i]))\n output[i].set(suffix, prefixData[i])\n } else {\n output[i] = suffix\n }\n reader.offset += suffixData[i]\n }\n}\n", "/**\n * @import {DataReader, DecodedArray, ParquetType} from '../src/types.js'\n */\n\nimport { readVarInt } from './thrift.js'\n\n/**\n * Read values from a run-length encoded/bit-packed hybrid encoding.\n *\n * If length is zero, then read int32 length at the start.\n *\n * @param {DataReader} reader\n * @param {number} width - bitwidth\n * @param {DecodedArray} output\n * @param {number} [length] - length of the encoded data\n */\nexport function readRleBitPackedHybrid(reader, width, output, length) {\n if (length === undefined) {\n length = reader.view.getUint32(reader.offset, true)\n reader.offset += 4\n }\n const startOffset = reader.offset\n let seen = 0\n while (seen < output.length) {\n const header = readVarInt(reader)\n if (header & 1) {\n // bit-packed\n seen = readBitPacked(reader, header, width, output, seen)\n } else {\n // rle\n const count = header >>> 1\n readRle(reader, count, width, output, seen)\n seen += count\n }\n }\n reader.offset = startOffset + length // duckdb writes an empty block\n}\n\n/**\n * Run-length encoding: read value with bitWidth and repeat it count times.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @param {number} bitWidth\n * @param {DecodedArray} output\n * @param {number} seen\n */\nfunction readRle(reader, count, bitWidth, output, seen) {\n const width = bitWidth + 7 >> 3\n let value = 0\n for (let i = 0; i < width; i++) {\n value |= reader.view.getUint8(reader.offset++) << (i << 3)\n }\n // assert(value < 1 << bitWidth)\n\n // repeat value count times\n for (let i = 0; i < count; i++) {\n output[seen + i] = value\n }\n}\n\n/**\n * Read a bit-packed run of the rle/bitpack hybrid.\n * Supports width > 8 (crossing bytes).\n *\n * @param {DataReader} reader\n * @param {number} header - bit-pack header\n * @param {number} bitWidth\n * @param {DecodedArray} output\n * @param {number} seen\n * @returns {number} total output values so far\n */\nfunction readBitPacked(reader, header, bitWidth, output, seen) {\n let count = header >> 1 << 3 // values to read\n const mask = (1 << bitWidth) - 1\n\n let data = 0\n if (reader.offset < reader.view.byteLength) {\n data = reader.view.getUint8(reader.offset++)\n } else if (mask) {\n // sometimes out-of-bounds reads are masked out\n throw new Error(`parquet bitpack offset ${reader.offset} out of range`)\n }\n let left = 8\n let right = 0\n\n // read values\n while (count) {\n // if we have crossed a byte boundary, shift the data\n if (right > 8) {\n right -= 8\n left -= 8\n data >>>= 8\n } else if (left - right < bitWidth) {\n // if we don't have bitWidth number of bits to read, read next byte\n data |= reader.view.getUint8(reader.offset) << left\n reader.offset++\n left += 8\n } else {\n if (seen < output.length) {\n // emit value\n output[seen++] = data >> right & mask\n }\n count--\n right += bitWidth\n }\n }\n\n return seen\n}\n\n/**\n * @param {DataReader} reader\n * @param {number} count\n * @param {ParquetType} type\n * @param {number | undefined} typeLength\n * @returns {DecodedArray}\n */\nexport function byteStreamSplit(reader, count, type, typeLength) {\n const width = byteWidth(type, typeLength)\n const bytes = new Uint8Array(count * width)\n for (let b = 0; b < width; b++) {\n for (let i = 0; i < count; i++) {\n bytes[i * width + b] = reader.view.getUint8(reader.offset++)\n }\n }\n // interpret bytes as typed array\n if (type === 'FLOAT') return new Float32Array(bytes.buffer)\n else if (type === 'DOUBLE') return new Float64Array(bytes.buffer)\n else if (type === 'INT32') return new Int32Array(bytes.buffer)\n else if (type === 'INT64') return new BigInt64Array(bytes.buffer)\n else if (type === 'FIXED_LEN_BYTE_ARRAY') {\n // split into arrays of typeLength\n const split = new Array(count)\n for (let i = 0; i < count; i++) {\n split[i] = bytes.subarray(i * width, (i + 1) * width)\n }\n return split\n }\n throw new Error(`parquet byte_stream_split unsupported type: ${type}`)\n}\n\n/**\n * @param {ParquetType} type\n * @param {number | undefined} typeLength\n * @returns {number}\n */\nfunction byteWidth(type, typeLength) {\n switch (type) {\n case 'INT32':\n case 'FLOAT':\n return 4\n case 'INT64':\n case 'DOUBLE':\n return 8\n case 'FIXED_LEN_BYTE_ARRAY':\n if (!typeLength) throw new Error('parquet byteWidth missing type_length')\n return typeLength\n default:\n throw new Error(`parquet unsupported type: ${type}`)\n }\n}\n", "/**\n * Read `count` values of the given type from the reader.view.\n *\n * @param {DataReader} reader - buffer to read data from\n * @param {ParquetType} type - parquet type of the data\n * @param {number} count - number of values to read\n * @param {number | undefined} fixedLength - length of each fixed length byte array\n * @returns {DecodedArray} array of values\n */\nexport function readPlain(reader, type, count, fixedLength) {\n if (count === 0) return []\n if (type === 'BOOLEAN') {\n return readPlainBoolean(reader, count)\n } else if (type === 'INT32') {\n return readPlainInt32(reader, count)\n } else if (type === 'INT64') {\n return readPlainInt64(reader, count)\n } else if (type === 'INT96') {\n return readPlainInt96(reader, count)\n } else if (type === 'FLOAT') {\n return readPlainFloat(reader, count)\n } else if (type === 'DOUBLE') {\n return readPlainDouble(reader, count)\n } else if (type === 'BYTE_ARRAY') {\n return readPlainByteArray(reader, count)\n } else if (type === 'FIXED_LEN_BYTE_ARRAY') {\n if (!fixedLength) throw new Error('parquet missing fixed length')\n return readPlainByteArrayFixed(reader, count, fixedLength)\n } else {\n throw new Error(`parquet unhandled type: ${type}`)\n }\n}\n\n/**\n * Read `count` boolean values.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @returns {boolean[]}\n */\nfunction readPlainBoolean(reader, count) {\n const values = new Array(count)\n for (let i = 0; i < count; i++) {\n const byteOffset = reader.offset + (i / 8 | 0)\n const bitOffset = i % 8\n const byte = reader.view.getUint8(byteOffset)\n values[i] = (byte & 1 << bitOffset) !== 0\n }\n reader.offset += Math.ceil(count / 8)\n return values\n}\n\n/**\n * Read `count` int32 values.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @returns {Int32Array}\n */\nfunction readPlainInt32(reader, count) {\n const values = (reader.view.byteOffset + reader.offset) % 4\n ? new Int32Array(align(reader.view.buffer, reader.view.byteOffset + reader.offset, count * 4))\n : new Int32Array(reader.view.buffer, reader.view.byteOffset + reader.offset, count)\n reader.offset += count * 4\n return values\n}\n\n/**\n * Read `count` int64 values.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @returns {BigInt64Array}\n */\nfunction readPlainInt64(reader, count) {\n const values = (reader.view.byteOffset + reader.offset) % 8\n ? new BigInt64Array(align(reader.view.buffer, reader.view.byteOffset + reader.offset, count * 8))\n : new BigInt64Array(reader.view.buffer, reader.view.byteOffset + reader.offset, count)\n reader.offset += count * 8\n return values\n}\n\n/**\n * Read `count` int96 values.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @returns {bigint[]}\n */\nfunction readPlainInt96(reader, count) {\n const values = new Array(count)\n for (let i = 0; i < count; i++) {\n const low = reader.view.getBigInt64(reader.offset + i * 12, true)\n const high = reader.view.getInt32(reader.offset + i * 12 + 8, true)\n values[i] = BigInt(high) << 64n | low\n }\n reader.offset += count * 12\n return values\n}\n\n/**\n * Read `count` float values.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @returns {Float32Array}\n */\nfunction readPlainFloat(reader, count) {\n const values = (reader.view.byteOffset + reader.offset) % 4\n ? new Float32Array(align(reader.view.buffer, reader.view.byteOffset + reader.offset, count * 4))\n : new Float32Array(reader.view.buffer, reader.view.byteOffset + reader.offset, count)\n reader.offset += count * 4\n return values\n}\n\n/**\n * Read `count` double values.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @returns {Float64Array}\n */\nfunction readPlainDouble(reader, count) {\n const values = (reader.view.byteOffset + reader.offset) % 8\n ? new Float64Array(align(reader.view.buffer, reader.view.byteOffset + reader.offset, count * 8))\n : new Float64Array(reader.view.buffer, reader.view.byteOffset + reader.offset, count)\n reader.offset += count * 8\n return values\n}\n\n/**\n * Read `count` byte array values.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @returns {Uint8Array[]}\n */\nfunction readPlainByteArray(reader, count) {\n const values = new Array(count)\n for (let i = 0; i < count; i++) {\n const length = reader.view.getUint32(reader.offset, true)\n reader.offset += 4\n values[i] = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, length)\n reader.offset += length\n }\n return values\n}\n\n/**\n * Read a fixed length byte array.\n *\n * @param {DataReader} reader\n * @param {number} count\n * @param {number} fixedLength\n * @returns {Uint8Array[]}\n */\nfunction readPlainByteArrayFixed(reader, count, fixedLength) {\n // assert(reader.view.byteLength - reader.offset >= count * fixedLength)\n const values = new Array(count)\n for (let i = 0; i < count; i++) {\n values[i] = new Uint8Array(reader.view.buffer, reader.view.byteOffset + reader.offset, fixedLength)\n reader.offset += fixedLength\n }\n return values\n}\n\n/**\n * Create a new buffer with the offset and size.\n *\n * @import {DataReader, DecodedArray, ParquetType} from '../src/types.js'\n * @param {ArrayBufferLike} buffer\n * @param {number} offset\n * @param {number} size\n * @returns {ArrayBuffer}\n */\nfunction align(buffer, offset, size) {\n const aligned = new ArrayBuffer(size)\n new Uint8Array(aligned).set(new Uint8Array(buffer, offset, size))\n return aligned\n}\n", "/**\n * The MIT License (MIT)\n * Copyright (c) 2016 Zhipeng Jia\n * https://github.com/zhipeng-jia/snappyjs\n */\n\nconst WORD_MASK = [0, 0xff, 0xffff, 0xffffff, 0xffffffff]\n\n/**\n * Copy bytes from one array to another\n *\n * @param {Uint8Array} fromArray source array\n * @param {number} fromPos source position\n * @param {Uint8Array} toArray destination array\n * @param {number} toPos destination position\n * @param {number} length number of bytes to copy\n */\nfunction copyBytes(fromArray, fromPos, toArray, toPos, length) {\n for (let i = 0; i < length; i++) {\n toArray[toPos + i] = fromArray[fromPos + i]\n }\n}\n\n/**\n * Decompress snappy data.\n * Accepts an output buffer to avoid allocating a new buffer for each call.\n *\n * @param {Uint8Array} input compressed data\n * @param {Uint8Array} output output buffer\n */\nexport function snappyUncompress(input, output) {\n const inputLength = input.byteLength\n const outputLength = output.byteLength\n let pos = 0\n let outPos = 0\n\n // skip preamble (contains uncompressed length as varint)\n while (pos < inputLength) {\n const c = input[pos]\n pos++\n if (c < 128) {\n break\n }\n }\n if (outputLength && pos >= inputLength) {\n throw new Error('invalid snappy length header')\n }\n\n while (pos < inputLength) {\n const c = input[pos]\n let len = 0\n pos++\n\n if (pos >= inputLength) {\n throw new Error('missing eof marker')\n }\n\n // There are two types of elements, literals and copies (back references)\n if ((c & 0x3) === 0) {\n // Literals are uncompressed data stored directly in the byte stream\n let len = (c >>> 2) + 1\n // Longer literal length is encoded in multiple bytes\n if (len > 60) {\n if (pos + 3 >= inputLength) {\n throw new Error('snappy error literal pos + 3 >= inputLength')\n }\n const lengthSize = len - 60 // length bytes - 1\n len = input[pos]\n + (input[pos + 1] << 8)\n + (input[pos + 2] << 16)\n + (input[pos + 3] << 24)\n len = (len & WORD_MASK[lengthSize]) + 1\n pos += lengthSize\n }\n if (pos + len > inputLength) {\n throw new Error('snappy error literal exceeds input length')\n }\n copyBytes(input, pos, output, outPos, len)\n pos += len\n outPos += len\n } else {\n // Copy elements\n let offset = 0 // offset back from current position to read\n switch (c & 0x3) {\n case 1:\n // Copy with 1-byte offset\n len = (c >>> 2 & 0x7) + 4\n offset = input[pos] + (c >>> 5 << 8)\n pos++\n break\n case 2:\n // Copy with 2-byte offset\n if (inputLength <= pos + 1) {\n throw new Error('snappy error end of input')\n }\n len = (c >>> 2) + 1\n offset = input[pos] + (input[pos + 1] << 8)\n pos += 2\n break\n case 3:\n // Copy with 4-byte offset\n if (inputLength <= pos + 3) {\n throw new Error('snappy error end of input')\n }\n len = (c >>> 2) + 1\n offset = input[pos]\n + (input[pos + 1] << 8)\n + (input[pos + 2] << 16)\n + (input[pos + 3] << 24)\n pos += 4\n break\n default:\n break\n }\n if (offset === 0 || isNaN(offset)) {\n throw new Error(`invalid offset ${offset} pos ${pos} inputLength ${inputLength}`)\n }\n if (offset > outPos) {\n throw new Error('cannot copy from before start of buffer')\n }\n copyBytes(output, outPos - offset, output, outPos, len)\n outPos += len\n }\n }\n\n if (outPos !== outputLength) throw new Error('premature end of input')\n}\n", "/**\n * @import {ColumnDecoder, CompressionCodec, Compressors, DataPage, DataPageHeader, DataPageHeaderV2, DataReader, DecodedArray, PageHeader, SchemaTree} from '../src/types.js'\n */\n\nimport { deltaBinaryUnpack, deltaByteArray, deltaLengthByteArray } from './delta.js'\nimport { byteStreamSplit, readRleBitPackedHybrid } from './encoding.js'\nimport { readPlain } from './plain.js'\nimport { getMaxDefinitionLevel, getMaxRepetitionLevel } from './schema.js'\nimport { snappyUncompress } from './snappy.js'\n\n/**\n * Read a data page from uncompressed reader.\n *\n * @param {Uint8Array} bytes raw page data (should already be decompressed)\n * @param {DataPageHeader} daph data page header\n * @param {ColumnDecoder} columnDecoder\n * @returns {DataPage} definition levels, repetition levels, and array of values\n */\nexport function readDataPage(bytes, daph, { type, element, schemaPath }) {\n const view = new DataView(bytes.buffer, bytes.byteOffset, bytes.byteLength)\n const reader = { view, offset: 0 }\n /** @type {DecodedArray} */\n let dataPage\n\n // repetition and definition levels\n const repetitionLevels = readRepetitionLevels(reader, daph, schemaPath)\n // assert(!repetitionLevels.length || repetitionLevels.length === daph.num_values)\n const { definitionLevels, numNulls } = readDefinitionLevels(reader, daph, schemaPath)\n // assert(!definitionLevels.length || definitionLevels.length === daph.num_values)\n\n // read values based on encoding\n const nValues = daph.num_values - numNulls\n if (daph.encoding === 'PLAIN') {\n dataPage = readPlain(reader, type, nValues, element.type_length)\n } else if (\n daph.encoding === 'PLAIN_DICTIONARY' ||\n daph.encoding === 'RLE_DICTIONARY' ||\n daph.encoding === 'RLE'\n ) {\n const bitWidth = type === 'BOOLEAN' ? 1 : view.getUint8(reader.offset++)\n if (bitWidth) {\n dataPage = new Array(nValues)\n if (type === 'BOOLEAN') {\n readRleBitPackedHybrid(reader, bitWidth, dataPage)\n dataPage = dataPage.map(x => !!x) // convert to boolean\n } else {\n // assert(daph.encoding.endsWith('_DICTIONARY'))\n readRleBitPackedHybrid(reader, bitWidth, dataPage, view.byteLength - reader.offset)\n }\n } else {\n dataPage = new Uint8Array(nValues) // nValue zeroes\n }\n } else if (daph.encoding === 'BYTE_STREAM_SPLIT') {\n dataPage = byteStreamSplit(reader, nValues, type, element.type_length)\n } else if (daph.encoding === 'DELTA_BINARY_PACKED') {\n const int32 = type === 'INT32'\n dataPage = int32 ? new Int32Array(nValues) : new BigInt64Array(nValues)\n deltaBinaryUnpack(reader, nValues, dataPage)\n } else if (daph.encoding === 'DELTA_LENGTH_BYTE_ARRAY') {\n dataPage = new Array(nValues)\n deltaLengthByteArray(reader, nValues, dataPage)\n } else {\n throw new Error(`parquet unsupported encoding: ${daph.encoding}`)\n }\n\n return { definitionLevels, repetitionLevels, dataPage }\n}\n\n/**\n * @param {DataReader} reader data view for the page\n * @param {DataPageHeader} daph data page header\n * @param {SchemaTree[]} schemaPath\n * @returns {any[]} repetition levels and number of bytes read\n */\nfunction readRepetitionLevels(reader, daph, schemaPath) {\n if (schemaPath.length > 1) {\n const maxRepetitionLevel = getMaxRepetitionLevel(schemaPath)\n if (maxRepetitionLevel) {\n const values = new Array(daph.num_values)\n readRleBitPackedHybrid(reader, bitWidth(maxRepetitionLevel), values)\n return values\n }\n }\n return []\n}\n\n/**\n * @param {DataReader} reader data view for the page\n * @param {DataPageHeader} daph data page header\n * @param {SchemaTree[]} schemaPath\n * @returns {{ definitionLevels: number[], numNulls: number }} definition levels\n */\nfunction readDefinitionLevels(reader, daph, schemaPath) {\n const maxDefinitionLevel = getMaxDefinitionLevel(schemaPath)\n if (!maxDefinitionLevel) return { definitionLevels: [], numNulls: 0 }\n\n const definitionLevels = new Array(daph.num_values)\n readRleBitPackedHybrid(reader, bitWidth(maxDefinitionLevel), definitionLevels)\n\n // count nulls\n let numNulls = daph.num_values\n for (const def of definitionLevels) {\n if (def === maxDefinitionLevel) numNulls--\n }\n if (numNulls === 0) definitionLevels.length = 0\n\n return { definitionLevels, numNulls }\n}\n\n/**\n * @param {Uint8Array} compressedBytes\n * @param {number} uncompressed_page_size\n * @param {CompressionCodec} codec\n * @param {Compressors | undefined} compressors\n * @returns {Uint8Array}\n */\nexport function decompressPage(compressedBytes, uncompressed_page_size, codec, compressors) {\n /** @type {Uint8Array} */\n let page\n const customDecompressor = compressors?.[codec]\n if (codec === 'UNCOMPRESSED') {\n page = compressedBytes\n } else if (customDecompressor) {\n page = customDecompressor(compressedBytes, uncompressed_page_size)\n } else if (codec === 'SNAPPY') {\n page = new Uint8Array(uncompressed_page_size)\n snappyUncompress(compressedBytes, page)\n } else {\n throw new Error(`parquet unsupported compression codec: ${codec}`)\n }\n if (page?.length !== uncompressed_page_size) {\n throw new Error(`parquet decompressed page length ${page?.length} does not match header ${uncompressed_page_size}`)\n }\n return page\n}\n\n\n/**\n * Read a data page from the given Uint8Array.\n *\n * @param {Uint8Array} compressedBytes raw page data\n * @param {PageHeader} ph page header\n * @param {ColumnDecoder} columnDecoder\n * @returns {DataPage} definition levels, repetition levels, and array of values\n */\nexport function readDataPageV2(compressedBytes, ph, columnDecoder) {\n const view = new DataView(compressedBytes.buffer, compressedBytes.byteOffset, compressedBytes.byteLength)\n const reader = { view, offset: 0 }\n const { type, element, schemaPath, codec, compressors } = columnDecoder\n const daph2 = ph.data_page_header_v2\n if (!daph2) throw new Error('parquet data page header v2 is undefined')\n\n // repetition levels\n const repetitionLevels = readRepetitionLevelsV2(reader, daph2, schemaPath)\n reader.offset = daph2.repetition_levels_byte_length // readVarInt() => len for boolean v2?\n\n // definition levels\n const definitionLevels = readDefinitionLevelsV2(reader, daph2, schemaPath)\n // assert(reader.offset === daph2.repetition_levels_byte_length + daph2.definition_levels_byte_length)\n\n const uncompressedPageSize = ph.uncompressed_page_size - daph2.definition_levels_byte_length - daph2.repetition_levels_byte_length\n\n let page = compressedBytes.subarray(reader.offset)\n if (daph2.is_compressed !== false) {\n page = decompressPage(page, uncompressedPageSize, codec, compressors)\n }\n const pageView = new DataView(page.buffer, page.byteOffset, page.byteLength)\n const pageReader = { view: pageView, offset: 0 }\n\n // read values based on encoding\n /** @type {DecodedArray} */\n let dataPage\n const nValues = daph2.num_values - daph2.num_nulls\n if (daph2.encoding === 'PLAIN') {\n dataPage = readPlain(pageReader, type, nValues, element.type_length)\n } else if (daph2.encoding === 'RLE') {\n // assert(type === 'BOOLEAN')\n dataPage = new Array(nValues)\n readRleBitPackedHybrid(pageReader, 1, dataPage)\n dataPage = dataPage.map(x => !!x)\n } else if (\n daph2.encoding === 'PLAIN_DICTIONARY' ||\n daph2.encoding === 'RLE_DICTIONARY'\n ) {\n const bitWidth = pageView.getUint8(pageReader.offset++)\n dataPage = new Array(nValues)\n readRleBitPackedHybrid(pageReader, bitWidth, dataPage, uncompressedPageSize - 1)\n } else if (daph2.encoding === 'DELTA_BINARY_PACKED') {\n const int32 = type === 'INT32'\n dataPage = int32 ? new Int32Array(nValues) : new BigInt64Array(nValues)\n deltaBinaryUnpack(pageReader, nValues, dataPage)\n } else if (daph2.encoding === 'DELTA_LENGTH_BYTE_ARRAY') {\n dataPage = new Array(nValues)\n deltaLengthByteArray(pageReader, nValues, dataPage)\n } else if (daph2.encoding === 'DELTA_BYTE_ARRAY') {\n dataPage = new Array(nValues)\n deltaByteArray(pageReader, nValues, dataPage)\n } else if (daph2.encoding === 'BYTE_STREAM_SPLIT') {\n dataPage = byteStreamSplit(pageReader, nValues, type, element.type_length)\n } else {\n throw new Error(`parquet unsupported encoding: ${daph2.encoding}`)\n }\n\n return { definitionLevels, repetitionLevels, dataPage }\n}\n\n/**\n * @param {DataReader} reader\n * @param {DataPageHeaderV2} daph2 data page header v2\n * @param {SchemaTree[]} schemaPath\n * @returns {any[]} repetition levels\n */\nfunction readRepetitionLevelsV2(reader, daph2, schemaPath) {\n const maxRepetitionLevel = getMaxRepetitionLevel(schemaPath)\n if (!maxRepetitionLevel) return []\n\n const values = new Array(daph2.num_values)\n readRleBitPackedHybrid(reader, bitWidth(maxRepetitionLevel), values, daph2.repetition_levels_byte_length)\n return values\n}\n\n/**\n * @param {DataReader} reader\n * @param {DataPageHeaderV2} daph2 data page header v2\n * @param {SchemaTree[]} schemaPath\n * @returns {number[] | undefined} definition levels\n */\nfunction readDefinitionLevelsV2(reader, daph2, schemaPath) {\n const maxDefinitionLevel = getMaxDefinitionLevel(schemaPath)\n if (maxDefinitionLevel) {\n // V2 we know the length\n const values = new Array(daph2.num_values)\n readRleBitPackedHybrid(reader, bitWidth(maxDefinitionLevel), values, daph2.definition_levels_byte_length)\n return values\n }\n}\n\n/**\n * Minimum bits needed to store value.\n *\n * @param {number} value\n * @returns {number}\n */\nfunction bitWidth(value) {\n return 32 - Math.clz32(value)\n}\n", "/**\n * @import {ColumnDecoder, DataReader, DecodedArray, PageHeader, PageResult, RowGroupSelect, SubColumnData} from '../src/types.js'\n */\n\nimport { assembleLists } from './assemble.js'\nimport { Encodings, PageTypes } from './constants.js'\nimport { convert, convertWithDictionary } from './convert.js'\nimport { decompressPage, readDataPage, readDataPageV2 } from './datapage.js'\nimport { readPlain } from './plain.js'\nimport { isFlatColumn } from './schema.js'\nimport { deserializeTCompactProtocol } from './thrift.js'\n\n/**\n * Parse column data from a buffer.\n *\n * @param {DataReader} reader\n * @param {RowGroupSelect} rowGroupSelect row group selection\n * @param {ColumnDecoder} columnDecoder column decoder params\n * @param {(chunk: SubColumnData) => void} [onPage] callback for each page\n * @returns {{ data: DecodedArray[], skipped: number }}\n */\nexport function readColumn(reader, { groupStart, selectStart, selectEnd }, columnDecoder, onPage) {\n const { pathInSchema, schemaPath } = columnDecoder\n const isFlat = isFlatColumn(schemaPath)\n /** @type {DecodedArray[]} */\n const chunks = []\n /** @type {DecodedArray | undefined} */\n let dictionary = undefined\n /** @type {DecodedArray | undefined} */\n let lastChunk = undefined\n let rowCount = 0\n let skipped = 0\n\n const emitLastChunk = onPage && (() => {\n lastChunk && onPage({\n pathInSchema,\n columnData: lastChunk,\n rowStart: groupStart + rowCount - lastChunk.length,\n rowEnd: groupStart + rowCount,\n })\n })\n\n while (isFlat ? rowCount < selectEnd : reader.offset < reader.view.byteLength - 1) {\n if (reader.offset >= reader.view.byteLength - 1) break // end of reader\n\n // read page header\n const header = parquetHeader(reader)\n if (header.type === 'DICTIONARY_PAGE') {\n const { data } = readPage(reader, header, columnDecoder, dictionary, undefined, 0)\n if (data) dictionary = convert(data, columnDecoder)\n } else {\n const lastChunkLength = lastChunk?.length || 0\n const result = readPage(reader, header, columnDecoder, dictionary, lastChunk, selectStart - rowCount)\n if (result.skipped) {\n // skipped page - just advance row count, don't add to chunks\n if (!chunks.length) {\n skipped += result.skipped\n }\n rowCount += result.skipped\n } else if (result.data && lastChunk === result.data) {\n // continued from previous page\n rowCount += result.data.length - lastChunkLength\n } else if (result.data && result.data.length) {\n emitLastChunk?.()\n chunks.push(result.data)\n rowCount += result.data.length\n lastChunk = result.data\n }\n }\n }\n emitLastChunk?.()\n\n return { data: chunks, skipped }\n}\n\n/**\n * Read a page (data or dictionary) from a buffer.\n *\n * @param {DataReader} reader\n * @param {PageHeader} header\n * @param {ColumnDecoder} columnDecoder\n * @param {DecodedArray | undefined} dictionary\n * @param {DecodedArray | undefined} previousChunk\n * @param {number} pageStart skip this many rows in the page\n * @returns {PageResult}\n */\nexport function readPage(reader, header, columnDecoder, dictionary, previousChunk, pageStart) {\n const { type, element, schemaPath, codec, compressors } = columnDecoder\n // read compressed_page_size bytes\n const compressedBytes = new Uint8Array(\n reader.view.buffer, reader.view.byteOffset + reader.offset, header.compressed_page_size\n )\n reader.offset += header.compressed_page_size\n\n // parse page data by type\n if (header.type === 'DATA_PAGE') {\n const daph = header.data_page_header\n if (!daph) throw new Error('parquet data page header is undefined')\n\n // skip unnecessary non-nested pages\n if (pageStart > daph.num_values && isFlatColumn(schemaPath)) {\n return { skipped: daph.num_values }\n }\n\n const page = decompressPage(compressedBytes, Number(header.uncompressed_page_size), codec, compressors)\n const { definitionLevels, repetitionLevels, dataPage } = readDataPage(page, daph, columnDecoder)\n // assert(!daph.statistics?.null_count || daph.statistics.null_count === BigInt(daph.num_values - dataPage.length))\n\n // convert types, dereference dictionary, and assemble lists\n const values = convertWithDictionary(dataPage, dictionary, daph.encoding, columnDecoder)\n const output = Array.isArray(previousChunk) ? previousChunk : []\n const assembled = assembleLists(output, definitionLevels, repetitionLevels, values, schemaPath)\n return { skipped: 0, data: assembled }\n } else if (header.type === 'DATA_PAGE_V2') {\n const daph2 = header.data_page_header_v2\n if (!daph2) throw new Error('parquet data page header v2 is undefined')\n\n // skip unnecessary pages\n if (pageStart > daph2.num_rows) {\n return { skipped: daph2.num_values }\n }\n\n const { definitionLevels, repetitionLevels, dataPage } =\n readDataPageV2(compressedBytes, header, columnDecoder)\n\n // convert types, dereference dictionary, and assemble lists\n const values = convertWithDictionary(dataPage, dictionary, daph2.encoding, columnDecoder)\n const output = Array.isArray(previousChunk) ? previousChunk : []\n const assembled = assembleLists(output, definitionLevels, repetitionLevels, values, schemaPath)\n return { skipped: 0, data: assembled }\n } else if (header.type === 'DICTIONARY_PAGE') {\n const diph = header.dictionary_page_header\n if (!diph) throw new Error('parquet dictionary page header is undefined')\n\n const page = decompressPage(\n compressedBytes, Number(header.uncompressed_page_size), codec, compressors\n )\n\n const reader = { view: new DataView(page.buffer, page.byteOffset, page.byteLength), offset: 0 }\n const dictArray = readPlain(reader, type, diph.num_values, element.type_length)\n return { skipped: 0, data: dictArray }\n } else {\n throw new Error(`parquet unsupported page type: ${header.type}`)\n }\n}\n\n/**\n * Read parquet header from a buffer.\n *\n * @param {DataReader} reader\n * @returns {PageHeader}\n */\nfunction parquetHeader(reader) {\n const header = deserializeTCompactProtocol(reader)\n\n // Parse parquet header from thrift data\n const type = PageTypes[header.field_1]\n const uncompressed_page_size = header.field_2\n const compressed_page_size = header.field_3\n const crc = header.field_4\n const data_page_header = header.field_5 && {\n num_values: header.field_5.field_1,\n encoding: Encodings[header.field_5.field_2],\n definition_level_encoding: Encodings[header.field_5.field_3],\n repetition_level_encoding: Encodings[header.field_5.field_4],\n statistics: header.field_5.field_5 && {\n max: header.field_5.field_5.field_1,\n min: header.field_5.field_5.field_2,\n null_count: header.field_5.field_5.field_3,\n distinct_count: header.field_5.field_5.field_4,\n max_value: header.field_5.field_5.field_5,\n min_value: header.field_5.field_5.field_6,\n },\n }\n const index_page_header = header.field_6\n const dictionary_page_header = header.field_7 && {\n num_values: header.field_7.field_1,\n encoding: Encodings[header.field_7.field_2],\n is_sorted: header.field_7.field_3,\n }\n const data_page_header_v2 = header.field_8 && {\n num_values: header.field_8.field_1,\n num_nulls: header.field_8.field_2,\n num_rows: header.field_8.field_3,\n encoding: Encodings[header.field_8.field_4],\n definition_levels_byte_length: header.field_8.field_5,\n repetition_levels_byte_length: header.field_8.field_6,\n is_compressed: header.field_8.field_7 === undefined ? true : header.field_8.field_7, // default true\n statistics: header.field_8.field_8,\n }\n\n return {\n type,\n uncompressed_page_size,\n compressed_page_size,\n crc,\n data_page_header,\n index_page_header,\n dictionary_page_header,\n data_page_header_v2,\n }\n}\n", "/**\n * @import {AsyncColumn, AsyncRowGroup, DecodedArray, GroupPlan, ParquetParsers, ParquetReadOptions, QueryPlan, SchemaTree} from '../src/types.js'\n */\n\nimport { assembleNested } from './assemble.js'\nimport { readColumn } from './column.js'\nimport { DEFAULT_PARSERS } from './convert.js'\nimport { readOffsetIndex } from './indexes.js'\nimport { getSchemaPath } from './schema.js'\nimport { flatten } from './utils.js'\n\n/**\n * Read a row group from a file-like object.\n *\n * @param {ParquetReadOptions} options\n * @param {QueryPlan} plan\n * @param {GroupPlan} groupPlan\n * @returns {AsyncRowGroup} resolves to column data\n */\nexport function readRowGroup(options, { metadata }, groupPlan) {\n /** @type {AsyncColumn[]} */\n const asyncColumns = []\n\n // read column data\n for (const chunk of groupPlan.chunks) {\n const { data_page_offset, dictionary_page_offset, path_in_schema: pathInSchema } = chunk.columnMetadata\n const schemaPath = getSchemaPath(metadata.schema, pathInSchema)\n const columnDecoder = {\n pathInSchema,\n element: schemaPath[schemaPath.length - 1].element,\n schemaPath,\n parsers: { ...DEFAULT_PARSERS, ...options.parsers },\n ...options,\n ...chunk.columnMetadata,\n }\n let { startByte, endByte } = chunk.range\n\n // non-offset-index case\n if (!('offsetIndex' in chunk)) {\n asyncColumns.push({\n pathInSchema,\n data: Promise.resolve(options.file.slice(startByte, endByte))\n .then(buffer => {\n const reader = { view: new DataView(buffer), offset: 0 }\n return readColumn(reader, groupPlan, columnDecoder, options.onPage)\n }),\n })\n continue\n }\n\n // offset-index case\n asyncColumns.push({\n pathInSchema,\n // fetch offset index\n data: Promise.resolve(options.file.slice(chunk.offsetIndex.startByte, chunk.offsetIndex.endByte))\n .then(async arrayBuffer => {\n // use offset index to read only necessary pages\n const { selectStart, selectEnd } = groupPlan\n const pages = readOffsetIndex({ view: new DataView(arrayBuffer), offset: 0 }).page_locations\n let skipped = -1\n // include dictionary if present, handle polars missing dictionary_page_offset\n const hasDict = dictionary_page_offset || data_page_offset < pages[0].offset\n for (let i = 0; i < pages.length; i++) {\n const page = pages[i]\n const pageStart = Number(page.first_row_index)\n const pageEnd = i + 1 < pages.length\n ? Number(pages[i + 1].first_row_index)\n : groupPlan.groupRows // last page extends to end of row group\n // check if page overlaps with [selectStart, selectEnd)\n if (skipped < 0 && !hasDict && pageEnd > selectStart) {\n startByte = Number(page.offset)\n skipped = pageStart\n }\n if (pageStart < selectEnd) {\n endByte = Number(page.offset) + page.compressed_page_size\n }\n }\n if (skipped < 0) skipped = 0\n const buffer = await options.file.slice(startByte, endByte)\n const reader = { view: new DataView(buffer), offset: 0 }\n // adjust row selection for skipped pages\n const adjustedGroupPlan = skipped ? {\n ...groupPlan,\n groupStart: groupPlan.groupStart + skipped,\n selectStart: groupPlan.selectStart - skipped,\n selectEnd: groupPlan.selectEnd - skipped,\n } : groupPlan\n const { data, skipped: columnSkipped } = readColumn(reader, adjustedGroupPlan, columnDecoder, options.onPage)\n return {\n data,\n skipped: skipped + columnSkipped,\n }\n }),\n })\n }\n\n return { groupStart: groupPlan.groupStart, groupRows: groupPlan.groupRows, asyncColumns }\n}\n\n/**\n * @overload\n * @param {AsyncRowGroup} asyncGroup\n * @param {number} selectStart\n * @param {number} selectEnd\n * @param {string[] | undefined} columns\n * @param {'object'} rowFormat\n * @returns {Promise<Record<string, any>[]>} resolves to row data\n */\n/**\n * @overload\n * @param {AsyncRowGroup} asyncGroup\n * @param {number} selectStart\n * @param {number} selectEnd\n * @param {string[] | undefined} columns\n * @param {'array'} [rowFormat]\n * @returns {Promise<any[][]>} resolves to row data\n */\n/**\n * @param {AsyncRowGroup} asyncGroup\n * @param {number} selectStart\n * @param {number} selectEnd\n * @param {string[] | undefined} columns\n * @param {'object' | 'array'} [rowFormat]\n * @returns {Promise<Record<string, any>[] | any[][]>} resolves to row data\n */\nexport async function asyncGroupToRows({ asyncColumns }, selectStart, selectEnd, columns, rowFormat) {\n // TODO: do it without flatten\n const asyncPages = await Promise.all(asyncColumns.map(column =>\n column.data.then(({ skipped, data }) => ({ skipped, data: flatten(data) }))\n ))\n\n // transpose columns into rows\n const selectCount = selectEnd - selectStart\n if (rowFormat === 'object') {\n /** @type {Record<string, any>[]} */\n const groupData = Array(selectCount)\n for (let selectRow = 0; selectRow < selectCount; selectRow++) {\n // return each row as an object\n /** @type {Record<string, any>} */\n const rowData = {}\n for (let i = 0; i < asyncColumns.length; i++) {\n const { data, skipped } = asyncPages[i]\n rowData[asyncColumns[i].pathInSchema[0]] = data[selectStart + selectRow - skipped]\n }\n groupData[selectRow] = rowData\n }\n return groupData\n }\n\n // careful mapping of column order for rowFormat: array\n const includedColumnNames = asyncColumns\n .map(child => child.pathInSchema[0])\n .filter(name => !columns || columns.includes(name))\n const columnOrder = columns ?? includedColumnNames\n const columnIndexes = columnOrder.map(name => asyncColumns.findIndex(column => column.pathInSchema[0] === name))\n\n /** @type {any[][]} */\n const groupData = Array(selectCount)\n for (let selectRow = 0; selectRow < selectCount; selectRow++) {\n // return each row as an array\n const rowData = Array(asyncColumns.length)\n for (let i = 0; i < columnOrder.length; i++) {\n const colIdx = columnIndexes[i]\n if (colIdx < 0) throw new Error(`parquet column not found: ${columnOrder[i]}`)\n const { data, skipped } = asyncPages[colIdx]\n rowData[i] = data[selectStart + selectRow - skipped]\n }\n groupData[selectRow] = rowData\n }\n return groupData\n}\n\n/**\n * Assemble physical columns into top-level columns asynchronously.\n *\n * @param {AsyncRowGroup} asyncRowGroup\n * @param {SchemaTree} schemaTree\n * @param {ParquetParsers} [parsers]\n * @returns {AsyncRowGroup}\n */\nexport function assembleAsync(asyncRowGroup, schemaTree, parsers) {\n const { asyncColumns } = asyncRowGroup\n parsers = { ...DEFAULT_PARSERS, ...parsers }\n /** @type {AsyncColumn[]} */\n const assembled = []\n for (const child of schemaTree.children) {\n if (child.children.length) {\n const childColumns = asyncColumns.filter(column => column.pathInSchema[0] === child.element.name)\n if (!childColumns.length) continue\n\n assembled.push({\n pathInSchema: child.path,\n data: (async () => {\n // collect subcolumn data \u2014 Promise.all observes every rejection so\n // a sibling failure cannot leak as an unhandledRejection\n const resolved = await Promise.all(childColumns.map(c => c.data))\n /** @type {Map<string, DecodedArray>} */\n const subcolumnData = new Map()\n let minLength = Infinity\n for (let i = 0; i < childColumns.length; i++) {\n const flat = flatten(resolved[i].data)\n subcolumnData.set(childColumns[i].pathInSchema.join('.'), flat)\n minLength = Math.min(minLength, flat.length)\n }\n // trim sub-columns to same length (offset index may read different pages per column)\n for (const [key, value] of subcolumnData) {\n if (value.length > minLength) {\n subcolumnData.set(key, value.slice(0, minLength))\n }\n }\n // assemble the column\n assembleNested(subcolumnData, child, parsers)\n const assembled = subcolumnData.get(child.element.name)\n if (!assembled) throw new Error('parquet column data not assembled')\n return { data: [assembled], skipped: 0 }\n })(),\n })\n } else {\n // leaf node, return the column\n const asyncColumn = asyncColumns.find(column => column.pathInSchema[0] === child.element.name)\n if (asyncColumn) assembled.push(asyncColumn)\n }\n }\n return { ...asyncRowGroup, asyncColumns: assembled }\n}\n", "/**\n * @import {AsyncRowGroup, BaseParquetReadOptions, DecodedArray, ParquetReadOptions, SchemaElement} from '../src/types.js'\n */\n\nimport { columnsNeededForFilter, matchFilter } from './filter.js'\nimport { parquetMetadataAsync, parquetSchema } from './metadata.js'\nimport { parquetPlan, prefetchAsyncBuffer, prefetchBloomFilters } from './plan.js'\nimport { assembleAsync, asyncGroupToRows, readRowGroup } from './rowgroup.js'\nimport { concat } from './utils.js'\n\n/**\n * Read parquet data rows from a file-like object.\n * Reads the minimal number of row groups and columns to satisfy the request.\n *\n * Returns a void promise when complete.\n * Errors are thrown on the returned promise.\n * Data is returned in callbacks onComplete, onChunk, onPage, NOT the return promise.\n * See parquetReadObjects for a more convenient API.\n *\n * @param {ParquetReadOptions} options read options\n * @returns {Promise<void>} resolves when all requested rows and columns are parsed, all errors are thrown here\n */\nexport async function parquetRead(options) {\n // load metadata if not provided\n options.metadata ??= await parquetMetadataAsync(options.file, options)\n\n const { rowStart = 0, rowEnd, columns, onChunk, onComplete, rowFormat, filter, filterStrict = true } = options\n\n // Filter requires object format to match column names\n if (filter && rowFormat !== 'object') {\n throw new Error('parquet filter requires rowFormat: \"object\"')\n }\n\n // Include filter columns in the read plan\n const filterColumns = columnsNeededForFilter(filter)\n if (filterColumns.length) {\n const schemaColumns = parquetSchema(options.metadata).children.map(c => c.element.name)\n const missingColumns = filterColumns.filter(c => !schemaColumns.includes(c))\n if (missingColumns.length) {\n throw new Error(`parquet filter columns not found: ${missingColumns.join(', ')}`)\n }\n }\n let readColumns = columns\n let requiresProjection = false\n if (columns && filter) {\n const missingFilterColumns = filterColumns.filter(c => !columns.includes(c))\n if (missingFilterColumns.length) {\n readColumns = [...columns, ...missingFilterColumns]\n requiresProjection = true\n }\n }\n\n // read row groups with expanded columns\n let readOptions = readColumns !== columns ? { ...options, columns: readColumns } : options\n readOptions = await withBloomFilters(readOptions)\n const asyncGroups = parquetReadAsync(readOptions)\n\n // skip assembly if no onComplete or onChunk, but wait for reading to finish\n if (!onComplete && !onChunk) {\n await awaitAllColumns(asyncGroups)\n return\n }\n\n // assemble struct columns\n const schemaTree = parquetSchema(options.metadata)\n const assembled = asyncGroups.map(arg => assembleAsync(arg, schemaTree, options.parsers))\n\n // onChunk emit all chunks (don't await). Rejection is surfaced by awaitAllColumns below.\n if (onChunk) {\n for (const asyncGroup of assembled) {\n for (const asyncColumn of asyncGroup.asyncColumns) {\n asyncColumn.data.then(({ data, skipped }) => {\n let rowStart = asyncGroup.groupStart + skipped\n for (const columnData of data) {\n onChunk({\n columnName: asyncColumn.pathInSchema[0],\n columnData,\n rowStart,\n rowEnd: rowStart + columnData.length,\n })\n rowStart += columnData.length\n }\n }, () => {})\n }\n }\n }\n\n // onComplete transpose column chunks to rows\n if (onComplete) {\n // wait for all reads to settle so a sibling rejection cannot leak\n await awaitAllColumns(assembled)\n // loosen the types to avoid duplicate code\n /** @type {any[]} */\n const rows = []\n for (const asyncGroup of assembled) {\n // filter to rows in range\n const selectStart = Math.max(rowStart - asyncGroup.groupStart, 0)\n const selectEnd = Math.min((rowEnd ?? Infinity) - asyncGroup.groupStart, asyncGroup.groupRows)\n // transpose column chunks to rows in output\n const groupData = rowFormat === 'object' ?\n await asyncGroupToRows(asyncGroup, selectStart, selectEnd, readColumns, 'object') :\n await asyncGroupToRows(asyncGroup, selectStart, selectEnd, columns, 'array')\n\n // Apply filter and projection\n if (filter) {\n // eslint-disable-next-line no-extra-parens\n for (const row of /** @type {Record<string, any>[]} */ (groupData)) {\n if (matchFilter(row, filter, filterStrict)) {\n if (requiresProjection && columns) {\n for (const col of filterColumns) {\n if (!columns.includes(col)) delete row[col]\n }\n }\n rows.push(row)\n }\n }\n } else {\n concat(rows, groupData)\n }\n }\n onComplete(rows)\n } else {\n // wait for all async groups to finish (complete takes care of this)\n await awaitAllColumns(assembled)\n }\n}\n\n/**\n * Await every column promise across the given row groups via Promise.allSettled\n * so no rejection escapes as an unhandledRejection. Throws the first rejection.\n *\n * @param {AsyncRowGroup[]} asyncGroups\n * @returns {Promise<void>}\n */\nasync function awaitAllColumns(asyncGroups) {\n const all = asyncGroups.flatMap(g => g.asyncColumns.map(c => c.data))\n const results = await Promise.allSettled(all)\n const failed = results.find(r => r.status === 'rejected')\n if (failed) throw failed.reason\n}\n\n/**\n * @param {ParquetReadOptions} options read options\n * @returns {AsyncRowGroup[]}\n */\nexport function parquetReadAsync(options) {\n if (!options.metadata) throw new Error('parquet requires metadata')\n // TODO: validate options (start, end, columns, etc)\n\n // prefetch byte ranges\n const plan = parquetPlan(options)\n options.file = prefetchAsyncBuffer(options.file, plan)\n\n // read row groups\n return plan.groups.map(groupPlan => readRowGroup(options, plan, groupPlan))\n}\n\n/**\n * Reads a single column from a parquet file.\n *\n * @param {BaseParquetReadOptions} options\n * @returns {Promise<DecodedArray>}\n */\nexport async function parquetReadColumn(options) {\n if (options.columns?.length !== 1) {\n throw new Error('parquetReadColumn expected columns: [columnName]')\n }\n options.metadata ??= await parquetMetadataAsync(options.file, options)\n const asyncGroups = parquetReadAsync(await withBloomFilters(options))\n\n // assemble struct columns\n const schemaTree = parquetSchema(options.metadata)\n const assembled = asyncGroups.map(arg => assembleAsync(arg, schemaTree, options.parsers))\n\n // wait for all reads to settle so a sibling rejection cannot leak\n await awaitAllColumns(assembled)\n\n /** @type {DecodedArray} */\n const columnData = []\n for (const rg of assembled) {\n const { data } = await rg.asyncColumns[0].data\n for (const chunk of data) {\n concat(columnData, chunk)\n }\n }\n return columnData\n}\n\n/**\n * Conditionally fetch bloom filters and attach them (and the per-column schema\n * elements they require) to options so parquetPlan can use them for row-group\n * pruning. Returns options unchanged when there's no filter or the user has\n * disabled bloom pushdown.\n *\n * @param {BaseParquetReadOptions} options\n * @returns {Promise<BaseParquetReadOptions>}\n */\nasync function withBloomFilters(options) {\n if (!options.useBloomFilters) return options\n if (!options.filter || !options.metadata) return options\n const schemaTree = parquetSchema(options.metadata)\n /** @type {Record<string, SchemaElement>} */\n const schemaElements = {}\n for (const child of schemaTree.children) schemaElements[child.element.name] = child.element\n const bloomFiltersByGroup = await prefetchBloomFilters({\n file: options.file,\n metadata: options.metadata,\n filter: options.filter,\n filterStrict: options.filterStrict,\n })\n // eslint-disable-next-line no-extra-parens\n return /** @type {BaseParquetReadOptions} */ ({ ...options, bloomFiltersByGroup, schemaElements })\n}\n\n/**\n * This is a helper function to read parquet row data as a promise.\n * It is a wrapper around the more configurable parquetRead function.\n *\n * @param {Omit<ParquetReadOptions, 'onComplete'>} options\n * @returns {Promise<Record<string, any>[]>} resolves when all requested rows and columns are parsed\n */\nexport function parquetReadObjects(options) {\n return new Promise((onComplete, reject) => {\n parquetRead({\n ...options,\n rowFormat: 'object', // force object output\n onComplete,\n }).catch(reject)\n })\n}\n", "import { compressors } from 'hyparquet-compressors'\nimport { parquetReadObjects, parquetMetadata } from 'hyparquet'\nimport semver from 'semver'\nimport type {\n\tCasesResponse,\n\tIDCParquetData,\n\tIDCParquetIndexResult,\n\tIDCParquetLoadResult,\n\tIDCVersionedEntry,\n\tIDCViewerOpts\n} from '../IDCTypes'\nimport {\n\tIDC_BUCKET_URL,\n\tIDC_CURRENT_VERSION_LABEL,\n\tIDC_DATA_VERSION_METADATA_KEY,\n\tIDC_PARQUET_COLUMNS,\n\tIDC_PARQUET_CURRENT_URL,\n\tIDC_PARQUET_KEY_SUFFIX\n} from '../settings/defaults'\n\n// ---------------------------------------------------------------------------\n// SHA-256 helpers (used to verify downloaded parquet integrity)\n// ---------------------------------------------------------------------------\n\nfunction bytesToHex(bytes: Uint8Array): string {\n\treturn Array.from(bytes)\n\t\t.map(b => b.toString(16).padStart(2, '0'))\n\t\t.join('')\n}\n\nasync function sha256FromArrayBuffer(buffer: ArrayBuffer): Promise<string> {\n\tconst digest = await crypto.subtle.digest('SHA-256', buffer)\n\treturn bytesToHex(new Uint8Array(digest))\n}\n\nfunction parseSha256Sidecar(text: string): string {\n\tconst firstLine = text.trim().split(/\\r?\\n/)[0]?.trim() || ''\n\treturn firstLine.split(/\\s+/)[0].toLowerCase()\n}\n\nasync function verifyParquetUrlWithSidecar(parquetBuffer: ArrayBuffer, sidecarResp: Response): Promise<boolean> {\n\tconst sidecarText = await sidecarResp.text()\n\tconst actual = (await sha256FromArrayBuffer(parquetBuffer)).toLowerCase()\n\tconst expected = parseSha256Sidecar(sidecarText)\n\treturn expected.length > 0 && actual === expected\n}\n\n// ---------------------------------------------------------------------------\n// IDCModel \u2014 server-interaction layer\n// ---------------------------------------------------------------------------\n\n/** Handles all data fetching for the IDC viewer: parquet loading and GDC API calls. */\nexport class IDCModel {\n\t/** Load the IDC parquet mapping, falling back through versioned archives if \"current\" is unavailable or invalid. */\n\tasync loadParquetWithFallback(retries: number): Promise<IDCParquetLoadResult | undefined> {\n\t\tconst current = await this.tryLoadValidatedParquet(IDC_PARQUET_CURRENT_URL, IDC_CURRENT_VERSION_LABEL)\n\t\tif (current !== undefined) return current\n\n\t\tconst versioned = await this.fetchVersionedParquetEntries(retries)\n\t\tfor (const entry of versioned) {\n\t\t\tconst result = await this.tryLoadValidatedParquet(entry.url, entry.version)\n\t\t\tif (result) {\n\t\t\t\tconsole.warn(\n\t\t\t\t\t`[IDC] Using fallback IDC mapping version \"${entry.version}\" because the current artifact was unavailable or invalid.`\n\t\t\t\t)\n\t\t\t\treturn result\n\t\t\t}\n\t\t}\n\t\treturn undefined\n\t}\n\n\t/** Fetch cases from the GDC API matching the given filter. */\n\tasync getCaseFromCurrentCohort(\n\t\t{ searchFilter = '', pageSize = 20, currentPage = 1, filter0, sortBy, sortDirection }: IDCViewerOpts,\n\t\tcaseIDsForFilter: string[] = []\n\t): Promise<CasesResponse['data']> {\n\t\t// Search is case-sensitve, and these asterisks are used to match substrings as wildcards replacement,\n\t\t// Could tighten search by sending every possible case-variant, but seems overkill\n\t\t// or if they actually have regular expression , but it doesnt seem that way\n\t\tconst normalizedSearchFilter = searchFilter\n\t\t\t? [`*${searchFilter.trim().toUpperCase()}*`, `*${searchFilter.trim().toLowerCase()}*`, `*${searchFilter.trim()}*`]\n\t\t\t: ['*']\n\t\tconst operator = 'in'\n\t\tconst hasSearchOrCaseFilter = searchFilter.trim() !== '' || caseIDsForFilter.length !== 0\n\t\tconst searchFilters = {\n\t\t\top: 'or',\n\t\t\tcontent: [\n\t\t\t\t{ op: operator, content: { field: 'case_id', value: normalizedSearchFilter } },\n\t\t\t\t{ op: operator, content: { field: 'submitter_id', value: normalizedSearchFilter } },\n\t\t\t\t{ op: operator, content: { field: 'samples.sample_id', value: normalizedSearchFilter } },\n\t\t\t\t{ op: operator, content: { field: 'samples.submitter_id', value: normalizedSearchFilter } },\n\t\t\t\t{ op: operator, content: { field: 'samples.portions.portion_id', value: normalizedSearchFilter } },\n\t\t\t\t{ op: operator, content: { field: 'samples.portions.submitter_id', value: normalizedSearchFilter } },\n\t\t\t\t{\n\t\t\t\t\top: operator,\n\t\t\t\t\tcontent: { field: 'samples.portions.analytes.analyte_id', value: normalizedSearchFilter }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\top: operator,\n\t\t\t\t\tcontent: { field: 'samples.portions.analytes.submitter_id', value: normalizedSearchFilter }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\top: operator,\n\t\t\t\t\tcontent: { field: 'samples.portions.analytes.aliquots.aliquot_id', value: normalizedSearchFilter }\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\top: operator,\n\t\t\t\t\tcontent: { field: 'samples.portions.analytes.aliquots.submitter_id', value: normalizedSearchFilter }\n\t\t\t\t}\n\t\t\t]\n\t\t}\n\t\tconst filters = hasSearchOrCaseFilter\n\t\t\t? {\n\t\t\t\t\top: 'and',\n\t\t\t\t\tcontent: [\n\t\t\t\t\t\t...(caseIDsForFilter.length !== 0\n\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\t\top: 'in',\n\t\t\t\t\t\t\t\t\t\tcontent: { field: 'case_id', value: caseIDsForFilter }\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\t: []),\n\t\t\t\t\t\t...(searchFilter.trim() !== '' ? [searchFilters] : [])\n\t\t\t\t\t]\n\t\t\t }\n\t\t\t: undefined\n\t\tconst body = {\n\t\t\tfields: 'case_id,submitter_id,disease_type,primary_site,project.project_id',\n\t\t\tcase_filters: filter0,\n\t\t\tfrom: (currentPage - 1) * pageSize,\n\t\t\tsize: pageSize,\n\t\t\t...(filters ? { filters } : {}),\n\t\t\texpand: 'samples.portions.slides,project.program',\n\t\t\tsort: `${sortBy}:${sortDirection}`\n\t\t}\n\t\tconst re: CasesResponse = await fetch('https://api.gdc.cancer.gov/cases', {\n\t\t\tmethod: 'POST',\n\t\t\theaders: { 'Content-Type': 'application/json', Accept: 'application/json', connection: 'close' },\n\t\t\tbody: JSON.stringify(body)\n\t\t}).then(r => r.json())\n\t\tif (!Array.isArray(re?.data?.hits)) throw new Error('re.data.hits not array')\n\t\tif (!Number.isFinite(re.data.pagination?.total)) throw new Error('re.data.pagination.total not number')\n\t\tconst caseHits = re.data.hits.map(hit => {\n\t\t\tif (!hit.id) throw new Error('hit.id is missing')\n\t\t\treturn hit\n\t\t})\n\t\treturn { hits: caseHits, pagination: re.data.pagination }\n\t}\n\n\tisValidIDCParquetData(rows: unknown): rows is IDCParquetData[] {\n\t\tif (!Array.isArray(rows) || rows.length === 0) return false\n\t\tconst sample = rows[0]\n\t\tif (!sample || typeof sample !== 'object') return false\n\t\treturn IDC_PARQUET_COLUMNS.every(col => col in (sample as object))\n\t}\n\n\treadIDCDataVersion(arrayBuffer: ArrayBuffer): string | undefined {\n\t\ttry {\n\t\t\tconst metadata = parquetMetadata(arrayBuffer)\n\t\t\tconst entry = metadata?.key_value_metadata?.find(kv => kv.key === IDC_DATA_VERSION_METADATA_KEY)\n\t\t\treturn entry?.value\n\t\t} catch {\n\t\t\treturn undefined\n\t\t}\n\t}\n\n\tasync readParquetIndex(idc_index_file: any): Promise<IDCParquetIndexResult> {\n\t\tconst raw_rows = await parquetReadObjects({\n\t\t\tfile: idc_index_file,\n\t\t\tcolumns: IDC_PARQUET_COLUMNS,\n\t\t\tcompressors\n\t\t})\n\t\tconst idc_data = raw_rows || []\n\t\tif (!this.isValidIDCParquetData(idc_data)) {\n\t\t\tthrow new Error('Parquet file is not in the expected IDC mapping format')\n\t\t}\n\t\tconst gdcCaseIdSet = new Set<string>()\n\t\tidc_data.forEach((o: any) => {\n\t\t\tconst cid = o?.gdc_case_id\n\t\t\tif (cid) gdcCaseIdSet.add(String(cid))\n\t\t})\n\t\tconst gdcCaseIds = Array.from(gdcCaseIdSet) as readonly string[]\n\t\tconst dataVersion = idc_index_file instanceof ArrayBuffer ? this.readIDCDataVersion(idc_index_file) : undefined\n\t\treturn { idc_data: idc_data as IDCParquetData[], case_ids: gdcCaseIds, dataVersion }\n\t}\n\n\tasync loadParquetFromUrl(url: string = IDC_PARQUET_CURRENT_URL): Promise<IDCParquetIndexResult> {\n\t\tconst [parquetResp, sidecarResp] = await Promise.all([fetch(url), fetch(`${url}.sha256`)])\n\t\tif (!parquetResp.ok) throw new Error(`Failed to fetch parquet: ${parquetResp.status} ${parquetResp.statusText}`)\n\t\tif (!sidecarResp.ok) throw new Error(`Failed to fetch sidecar: ${sidecarResp.status} ${sidecarResp.statusText}`)\n\t\tconst arrayBuffer = await parquetResp.arrayBuffer()\n\t\tconst hashValidated = await verifyParquetUrlWithSidecar(arrayBuffer, sidecarResp)\n\t\tif (hashValidated) return this.readParquetIndex(arrayBuffer)\n\t\tthrow new Error('File download failed validation. Please refresh to retry.')\n\t}\n\n\tcompareVersions(a: string, b: string): number {\n\t\tconst sa = semver.coerce(a) ?? '0.0.0'\n\t\tconst sb = semver.coerce(b) ?? '0.0.0'\n\t\treturn semver.compare(sa, sb)\n\t}\n\n\tasync fetchVersionedParquetEntries(retries: number): Promise<IDCVersionedEntry[]> {\n\t\ttry {\n\t\t\tconst resp = await fetch(IDC_BUCKET_URL)\n\t\t\tif (!resp.ok) return []\n\t\t\tconst text = await resp.text()\n\t\t\tconst doc = new DOMParser().parseFromString(text, 'application/xml')\n\t\t\tconst versions = Array.from(doc.getElementsByTagName('Key'))\n\t\t\t\t.map(el => el.textContent || '')\n\t\t\t\t.filter(k => k.endsWith(IDC_PARQUET_KEY_SUFFIX))\n\t\t\t\t.map(k => k.slice(0, -IDC_PARQUET_KEY_SUFFIX.length))\n\t\t\t\t.filter(v => v !== IDC_CURRENT_VERSION_LABEL && /^\\d+(\\.\\d+)*$/.test(v))\n\t\t\tconst sorted = Array.from(new Set(versions)).sort((a, b) => this.compareVersions(b, a))\n\t\t\treturn sorted\n\t\t\t\t.map(version => ({ version, url: `${IDC_BUCKET_URL}${version}${IDC_PARQUET_KEY_SUFFIX}` }))\n\t\t\t\t.slice(0, retries)\n\t\t} catch {\n\t\t\treturn []\n\t\t}\n\t}\n\n\tprivate async tryLoadValidatedParquet(url: string, version: string): Promise<IDCParquetLoadResult | undefined> {\n\t\ttry {\n\t\t\tconst data = await this.loadParquetFromUrl(url)\n\t\t\treturn { ...data, metadataVersion: data.dataVersion, urlVersion: version, url }\n\t\t} catch (err) {\n\t\t\tconsole.warn(\n\t\t\t\t`[IDC] Parquet artifact \"${version}\" is unavailable, inaccessible, or invalid and will be skipped:`,\n\t\t\t\terr instanceof Error ? err.message : err\n\t\t\t)\n\t\t\treturn undefined\n\t\t}\n\t}\n}\n", "import type { IDCViewerOpts } from '../IDCTypes'\n\nexport const IDC_BUCKET_URL = 'https://storage.googleapis.com/idc-index-data-artifacts/'\nexport const IDC_PARQUET_KEY_SUFFIX = '/release_artifacts/gdc_idc_mapping.parquet'\nexport const IDC_PARQUET_CURRENT_URL = `${IDC_BUCKET_URL}current${IDC_PARQUET_KEY_SUFFIX}`\n\nexport const IDC_CURRENT_VERSION_LABEL = 'current'\n\nexport const IDC_DATA_VERSION_METADATA_KEY = 'idc_index_data_version'\n\nexport const IDC_PARQUET_COLUMNS = [\n\t'collection_id',\n\t'PatientID',\n\t'StudyInstanceUID',\n\t'StudyDate',\n\t'StudyDescription',\n\t'study_type',\n\t'gdc_case_id'\n]\nconst pageSizeOptions = [10, 20, 50, 100]\nexport const IDCViewerDefaults: IDCViewerOpts = {\n\tpageSizeOptions,\n\tsortBy: 'submitter_id',\n\tsortDirection: 'asc',\n\tpageSize: pageSizeOptions[0],\n\tretries: 10,\n\tcurrentPage: 1\n}\n", "import type { IDCParquetData, IDCStudy, IDCViewerRow, ResponseHit } from '../IDCTypes'\n\n/** Transforms raw parquet data + GDC case hits into display-ready IDCViewerRow[].\n * All conditional shaping lives here so the View stays a thin renderer. */\nexport class IDCViewModel {\n\tbuildTableData(idcData: ReadonlyArray<IDCParquetData>, caseHits: ResponseHit[]): IDCViewerRow[] {\n\t\tconst rowsByCaseId = new Map<string, IDCParquetData[]>()\n\t\tfor (const hit of caseHits) {\n\t\t\trowsByCaseId.set(hit.case_id, [])\n\t\t}\n\t\tfor (const data of idcData) {\n\t\t\tconst rows = rowsByCaseId.get(data.gdc_case_id)\n\t\t\tif (rows) {\n\t\t\t\trows.push(data)\n\t\t\t}\n\t\t}\n\n\t\tconst viewerRows: IDCViewerRow[] = []\n\t\tfor (const hit of caseHits) {\n\t\t\tconst idcArray = rowsByCaseId.get(hit.case_id) || []\n\t\t\tconst studiesMap = new Map<string, IDCStudy>()\n\t\t\tidcArray.forEach((r: IDCParquetData) => {\n\t\t\t\tconst studyId = r?.StudyInstanceUID ?? 'n/a'\n\t\t\t\tif (!studiesMap.has(studyId)) {\n\t\t\t\t\tstudiesMap.set(studyId, {\n\t\t\t\t\t\tStudyInstanceUID: r?.StudyInstanceUID ?? 'n/a',\n\t\t\t\t\t\tcollectionId: r?.collection_id ?? 'n/a',\n\t\t\t\t\t\tseries: [],\n\t\t\t\t\t\thasWSI: false,\n\t\t\t\t\t\thasRadiology: false,\n\t\t\t\t\t\tStudyDate: r?.StudyDate ?? 'n/a',\n\t\t\t\t\t\tStudyDescription: r?.StudyDescription ?? 'n/a'\n\t\t\t\t\t})\n\t\t\t\t}\n\t\t\t\tconst st = studiesMap.get(studyId)\n\t\t\t\tif (st) {\n\t\t\t\t\tst.series.push(r)\n\t\t\t\t\tconst mod = String(r.study_type ?? '')\n\t\t\t\t\t\t.trim()\n\t\t\t\t\t\t.toUpperCase()\n\t\t\t\t\tif (mod === 'M') st.hasWSI = true\n\t\t\t\t\tif (mod === 'R') st.hasRadiology = true\n\t\t\t\t}\n\t\t\t})\n\n\t\t\tconst studiesList = Array.from(studiesMap.values())\n\t\t\tconst wsiCount = studiesList.filter(s => s.hasWSI).length\n\t\t\tconst radiologyCount = studiesList.filter(s => s.hasRadiology).length\n\n\t\t\tviewerRows.push({\n\t\t\t\tcaseId: hit.submitter_id || 'N/A',\n\t\t\t\tprogramName: hit.project.program.name || 'N/A',\n\t\t\t\tproject: hit.project.project_id || 'N/A',\n\t\t\t\tstudiesList,\n\t\t\t\tstudiesCount: studiesList.length,\n\t\t\t\twsiCount,\n\t\t\t\tradiologyCount\n\t\t\t})\n\t\t}\n\t\treturn viewerRows\n\t}\n}\n", "import { type BaseType, type Selection } from 'd3-selection'\n\nexport function makeTransparentButton(\n\tbutton: Selection<HTMLButtonElement, unknown, any, any>\n): Selection<HTMLButtonElement, unknown, any, any> {\n\treturn button\n\t\t.style('cursor', 'pointer')\n\t\t.style('background', 'transparent')\n\t\t.style('border', 'none')\n\t\t.style('padding', '0')\n\t\t.style('margin', '0')\n\t\t.style('appearance', 'none')\n}\n\nexport function addSvg<GElement extends BaseType, Datum, PElement extends BaseType, PDatum>(\n\tselection: Selection<GElement, Datum, PElement, PDatum>,\n\tpaths: string[]\n): Selection<GElement, Datum, PElement, PDatum> {\n\tconst svg = selection\n\n\t\t.append('svg')\n\t\t.attr('xmlns', 'http://www.w3.org/2000/svg')\n\t\t.attr('viewBox', '0 0 16 16')\n\t\t.attr('width', '16')\n\t\t.attr('height', '16')\n\tpaths.forEach(path => {\n\t\tsvg.append('path').attr('d', path).attr('fill', 'currentColor')\n\t})\n\treturn selection\n}\n\nexport function makeCenteredFlex<GElement extends BaseType, Datum, PElement extends BaseType, PDatum>(\n\tselection: Selection<GElement, Datum, PElement, PDatum>\n): Selection<GElement, Datum, PElement, PDatum> {\n\treturn selection.style('display', 'flex').style('align-items', 'center').style('justify-content', 'center')\n}\n", "import { type Selection } from 'd3-selection'\nimport type { IDCViewerOpts, IDCViewerRow, Pagination, SortByField } from '../IDCTypes'\nimport type { IDCViewer } from '../IDCViewer'\nimport { makeTransparentButton, addSvg, makeCenteredFlex } from '../utils'\nimport { sayerror } from '#dom/sayerror'\nimport { IDCViewerDefaults } from '../settings/defaults'\n\nconst borderColor = '#4c4c4c'\nconst mainHeaderBgColor = '#f5f5f5'\nconst mainHeaderHoverBgColor = '#e6e6e6'\nconst detailsHeaderBgColor = '#e0e0e0'\nconst fullWhiteBgColor = '#ffffff'\n// only make this an odd number greater than 1\nconst numPagesToShow = 7\n// https://primer.style/octicons/icon/\nconst externalLinkPath = [\n\t'M3.75 2h3.5a.75.75 0 0 1 0 1.5h-3.5a.25.25 0 0 0-.25.25v8.5c0 .138.112.25.25.25h8.5a.25.25 0 0 0 .25-.25v-3.5a.75.75 0 0 1 1.5 0v3.5A1.75 1.75 0 0 1 12.25 14h-8.5A1.75 1.75 0 0 1 2 12.25v-8.5C2 2.784 2.784 2 3.75 2Zm6.854-1h4.146a.25.25 0 0 1 .25.25v4.146a.25.25 0 0 1-.427.177L13.03 4.03 9.28 7.78a.751.751 0 0 1-1.042-.018.751.751 0 0 1-.018-1.042l3.75-3.75-1.543-1.543A.25.25 0 0 1 10.604 1Z'\n]\n// https://icons.getbootstrap.com/icons/\nconst leftChevronPath = [\n\t'M11.354 1.646a.5.5 0 0 1 0 .708L5.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'\n]\nconst rightChevronPath = [\n\t'M4.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L10.293 8 4.646 2.354a.5.5 0 0 1 0-.708'\n]\nconst doubleLeftChevronPath = [\n\t'M8.354 1.646a.5.5 0 0 1 0 .708L2.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0',\n\t'M12.354 1.646a.5.5 0 0 1 0 .708L6.707 8l5.647 5.646a.5.5 0 0 1-.708.708l-6-6a.5.5 0 0 1 0-.708l6-6a.5.5 0 0 1 .708 0'\n]\nconst doubleRightChevronPath = [\n\t'M3.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L9.293 8 3.646 2.354a.5.5 0 0 1 0-.708',\n\t'M7.646 1.646a.5.5 0 0 1 .708 0l6 6a.5.5 0 0 1 0 .708l-6 6a.5.5 0 0 1-.708-.708L13.293 8 7.646 2.354a.5.5 0 0 1 0-.708'\n]\nconst alphabetAscendingPath = [\n\t'M10.082 5.629 9.664 7H8.598l1.789-5.332h1.234L13.402 7h-1.12l-.419-1.371zm1.57-.785L11 2.687h-.047l-.652 2.157z',\n\t'M12.96 14H9.028v-.691l2.579-3.72v-.054H9.098v-.867h3.785v.691l-2.567 3.72v.054h2.645zM4.5 2.5a.5.5 0 0 0-1 0v9.793l-1.146-1.147a.5.5 0 0 0-.708.708l2 1.999.007.007a.497.497 0 0 0 .7-.006l2-2a.5.5 0 0 0-.707-.708L4.5 12.293z'\n]\nconst alphabetDescendingPath = [\n\t'M12.96 7H9.028v-.691l2.579-3.72v-.054H9.098v-.867h3.785v.691l-2.567 3.72v.054h2.645z',\n\t'M10.082 12.629 9.664 14H8.598l1.789-5.332h1.234L13.402 14h-1.12l-.419-1.371zm1.57-.785L11 9.688h-.047l-.652 2.156z',\n\t'M4.5 2.5a.5.5 0 0 0-1 0v9.793l-1.146-1.147a.5.5 0 0 0-.708.708l2 1.999.007.007a.497.497 0 0 0 .7-.006l2-2a.5.5 0 0 0-.707-.708L4.5 12.293z'\n]\nexport class IDCTableView {\n\tprivate holder: Selection<HTMLDivElement, unknown, any, any>\n\tprivate viewer: IDCViewer\n\tprivate args: IDCViewerOpts\n\n\tconstructor(holder: Selection<HTMLDivElement, unknown, any, any>, viewer: IDCViewer, args: IDCViewerOpts) {\n\t\tthis.holder = holder\n\t\tthis.viewer = viewer\n\t\tthis.args = args\n\t}\n\n\tsetArgs(args: IDCViewerOpts): void {\n\t\tthis.args = args\n\t}\n\n\tclear() {\n\t\tthis.holder.select('#idc-table').selectAll('*').remove()\n\t\tthis.holder.selectAll('.idcviewer-pagination').remove()\n\t}\n\t// aria-sort 'ascending' 'descending 'none'\n\trender(tableData: ReadonlyArray<IDCViewerRow>, pagination: Pagination): void {\n\t\tthis.clear()\n\t\tif (tableData.length === 0) {\n\t\t\tsayerror(this.viewer.dom.errorDiv, 'No data available for the current filter.')\n\t\t\treturn\n\t\t}\n\t\tlet table: Selection<HTMLTableElement, unknown, any, any> = this.holder.select('#idc-table')\n\t\tif (table.empty()) {\n\t\t\ttable = this.holder\n\t\t\t\t.style('font-family', 'Noto Sans, sans-serif')\n\t\t\t\t.append('table')\n\t\t\t\t.attr('id', 'idc-table')\n\t\t\t\t.style('width', '100%')\n\t\t\t\t.style('border-collapse', 'collapse')\n\t\t\t\t.style('font-size', '14px')\n\t\t\t\t.style('border', `1px solid ${borderColor}`)\n\t\t}\n\t\tconst headers = {\n\t\t\t'GDC Case ID': 'submitter_id',\n\t\t\tProgram: 'project.program.name',\n\t\t\tProject: 'project.project_id',\n\t\t\t'IDC Studies (Click to expand)': undefined\n\t\t}\n\t\tconst expandableHeaders = [\n\t\t\t'IDC Study Instance UID',\n\t\t\t'Collection',\n\t\t\t'Study Date',\n\t\t\t'Study Description',\n\t\t\t'IDC Histopathology Viewer',\n\t\t\t'IDC Radiology Viewer'\n\t\t]\n\n\t\tconst thead = table.append('thead')\n\t\tconst headerRow = thead\n\t\t\t.append('tr')\n\t\t\t.style('background-color', mainHeaderBgColor)\n\t\t\t.style('border-bottom', `2px solid ${borderColor}`)\n\t\t\t.style('height', '3rem')\n\t\tconst sortDirection = this.args.sortDirection === 'asc' ? 'ascending' : 'descending'\n\t\tObject.entries(headers).forEach(([header, sortKey]) => {\n\t\t\tconst chosenKey = this.args.sortBy === sortKey\n\t\t\tconst th = headerRow\n\t\t\t\t.append('th')\n\t\t\t\t.style('text-align', 'left')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('background-color', mainHeaderBgColor)\n\t\t\t\t.attr('aria-sort', chosenKey ? sortDirection : 'none')\n\t\t\t\t.style('font-family', 'Montserrat, sans-serif')\n\t\t\t\t.style('font-weight', '600')\n\t\t\t\t.style('padding', '10px')\n\t\t\t\t.style('gap', '5px')\n\t\t\t\t.style('cursor', sortKey === undefined ? 'default' : 'pointer')\n\t\t\tconst headerDiv = th.append('div').style('display', 'flex').style('align-items', 'left').style('gap', '5px')\n\t\t\theaderDiv.append('span').text(header)\n\t\t\tif (sortKey === undefined) return\n\n\t\t\tth.on('mouseenter', function () {\n\t\t\t\t;(this as HTMLTableCellElement).style.backgroundColor = mainHeaderHoverBgColor\n\t\t\t})\n\t\t\t\t.on('mouseleave', function () {\n\t\t\t\t\t;(this as HTMLTableCellElement).style.backgroundColor = mainHeaderBgColor\n\t\t\t\t})\n\t\t\t\t.on('click', () => {\n\t\t\t\t\tswitch (th.attr('aria-sort')) {\n\t\t\t\t\t\tcase 'none':\n\t\t\t\t\t\t\tthis.args.sortDirection = 'asc'\n\t\t\t\t\t\t\tthis.args.sortBy = sortKey as SortByField\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'ascending':\n\t\t\t\t\t\t\tthis.args.sortDirection = 'desc'\n\t\t\t\t\t\t\tthis.args.sortBy = sortKey as SortByField\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t\tcase 'descending':\n\t\t\t\t\t\t\tthis.args.sortBy = IDCViewerDefaults.sortBy\n\t\t\t\t\t\t\tthis.args.sortDirection = IDCViewerDefaults.sortDirection\n\t\t\t\t\t\t\tbreak\n\t\t\t\t\t}\n\t\t\t\t\tthis.viewer.main({ ...this.args }).catch(e => {\n\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t\t\t})\n\t\t\t\t})\n\n\t\t\taddSvg(\n\t\t\t\theaderDiv,\n\t\t\t\tchosenKey\n\t\t\t\t\t? this.args.sortDirection === 'asc'\n\t\t\t\t\t\t? alphabetAscendingPath\n\t\t\t\t\t\t: alphabetDescendingPath\n\t\t\t\t\t: alphabetAscendingPath\n\t\t\t)\n\t\t\tif (chosenKey) th.select('svg').style('color', '#c7501a')\n\t\t})\n\n\t\tconst tbody = table.append('tbody')\n\t\tconst dataToRender = tableData.slice(0, this.args.pageSize)\n\t\tconst renderRows = () => {\n\t\t\ttbody.selectAll('*').remove()\n\t\t\tdataToRender.forEach((row, rowIdx) => {\n\t\t\t\tconst caseRowPadding = '10px'\n\t\t\t\tconst bgColor = rowIdx % 2 === 0 ? fullWhiteBgColor : '#f9f9f9'\n\t\t\t\tconst tr = tbody\n\t\t\t\t\t.append('tr')\n\t\t\t\t\t.style('background-color', bgColor)\n\t\t\t\t\t.style('border-bottom', `1px solid ${borderColor}`)\n\t\t\t\ttr.append('td').style('padding', caseRowPadding).text(row.caseId).attr('data-testid', `case-id-${row.caseId}`)\n\t\t\t\ttr.append('td').style('padding', caseRowPadding).text(row.programName)\n\t\t\t\ttr.append('td').style('padding', caseRowPadding).text(row.project)\n\n\t\t\t\tconst studyCellButton = makeTransparentButton(tr.append('td').style('padding', caseRowPadding).append('button'))\n\t\t\t\t\t.style('color', '#4272a5')\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tconst expanded = studyCellButton.attr('aria-expanded') === 'true'\n\t\t\t\t\t\tstudyCellButton.attr('aria-expanded', String(!expanded))\n\t\t\t\t\t\t//\n\t\t\t\t\t\tconst detailsRowID = 'study-details' + row.caseId.replace(/\\./g, '')\n\t\t\t\t\t\tif (!expanded) {\n\t\t\t\t\t\t\tconst detailsRow = tbody\n\t\t\t\t\t\t\t\t.insert('tr', function (this: HTMLTableSectionElement) {\n\t\t\t\t\t\t\t\t\tconst index = Array.from(this.children).indexOf(tr.node()!)\n\t\t\t\t\t\t\t\t\treturn this.children[index + 1] || null\n\t\t\t\t\t\t\t\t})\n\t\t\t\t\t\t\t\t.attr('id', detailsRowID)\n\n\t\t\t\t\t\t\tconst detailsTable = detailsRow\n\t\t\t\t\t\t\t\t.append('td')\n\t\t\t\t\t\t\t\t.attr('colspan', '4')\n\t\t\t\t\t\t\t\t.append('div')\n\t\t\t\t\t\t\t\t.append('table')\n\t\t\t\t\t\t\t\t.style('width', '100%')\n\t\t\t\t\t\t\t\t.style('border-collapse', 'collapse')\n\n\t\t\t\t\t\t\tconst detailsHeaderRow = detailsTable\n\t\t\t\t\t\t\t\t.append('thead')\n\t\t\t\t\t\t\t\t.append('tr')\n\t\t\t\t\t\t\t\t.style('background-color', detailsHeaderBgColor)\n\t\t\t\t\t\t\t\t.style('border-bottom', `1px solid ${borderColor}`)\n\n\t\t\t\t\t\t\texpandableHeaders.forEach(header => {\n\t\t\t\t\t\t\t\tdetailsHeaderRow\n\t\t\t\t\t\t\t\t\t.append('th')\n\t\t\t\t\t\t\t\t\t.style('padding', '8px')\n\t\t\t\t\t\t\t\t\t.style('text-align', 'left')\n\t\t\t\t\t\t\t\t\t.style('font-weight', '500')\n\t\t\t\t\t\t\t\t\t.text(header)\n\t\t\t\t\t\t\t})\n\n\t\t\t\t\t\t\tconst detailsTbody = detailsTable.append('tbody')\n\t\t\t\t\t\t\tconst studyRowPadding = '8px'\n\n\t\t\t\t\t\t\trow.studiesList.forEach(study => {\n\t\t\t\t\t\t\t\tconst studyRow = detailsTbody.append('tr').style('border-bottom', `1px solid ${borderColor}`)\n\t\t\t\t\t\t\t\tstudyRow\n\t\t\t\t\t\t\t\t\t.append('td')\n\t\t\t\t\t\t\t\t\t.style('padding', studyRowPadding)\n\t\t\t\t\t\t\t\t\t.text(study.StudyInstanceUID || 'N/A')\n\t\t\t\t\t\t\t\tstudyRow\n\t\t\t\t\t\t\t\t\t.append('td')\n\t\t\t\t\t\t\t\t\t.style('padding', studyRowPadding)\n\t\t\t\t\t\t\t\t\t.text(study.collectionId || 'N/A')\n\t\t\t\t\t\t\t\tstudyRow\n\t\t\t\t\t\t\t\t\t.append('td')\n\t\t\t\t\t\t\t\t\t.style('padding', studyRowPadding)\n\t\t\t\t\t\t\t\t\t.text(study.StudyDate || 'N/A')\n\t\t\t\t\t\t\t\tstudyRow\n\t\t\t\t\t\t\t\t\t.append('td')\n\t\t\t\t\t\t\t\t\t.style('padding', studyRowPadding)\n\t\t\t\t\t\t\t\t\t.text(study.StudyDescription || 'N/A')\n\t\t\t\t\t\t\t\tthis.addCellLinkToRow(\n\t\t\t\t\t\t\t\t\tstudyRow,\n\t\t\t\t\t\t\t\t\t`https://viewer.imaging.datacommons.cancer.gov/slim/studies/${study.StudyInstanceUID}`,\n\t\t\t\t\t\t\t\t\t'Open Study',\n\t\t\t\t\t\t\t\t\tstudy.hasWSI\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t\tthis.addCellLinkToRow(\n\t\t\t\t\t\t\t\t\tstudyRow,\n\t\t\t\t\t\t\t\t\t`https://viewer.imaging.datacommons.cancer.gov/v3/viewer/?StudyInstanceUIDs=${study.StudyInstanceUID}`,\n\t\t\t\t\t\t\t\t\t'Open Study',\n\t\t\t\t\t\t\t\t\tstudy.hasRadiology\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\tthis.holder.select(`#${detailsRowID}`).remove()\n\t\t\t\t\t\t}\n\t\t\t\t\t})\n\n\t\t\t\tstudyCellButton\n\t\t\t\t\t.append('div')\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text(`${row.studiesCount} IDC study (${row.wsiCount} Histopathology + ${row.radiologyCount} Radiology)`)\n\t\t\t})\n\t\t}\n\n\t\trenderRows()\n\t\tthis.renderPagination(pagination, dataToRender.length)\n\t}\n\n\tprivate renderPagination(pagination: Pagination, dataLength: number): void {\n\t\tconst selectedPageSize = this.args.pageSize || this.args.pageSizeOptions[0]\n\n\t\tconst paginationDiv = this.holder\n\t\t\t.append('div')\n\t\t\t.attr('class', 'idcviewer-pagination')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('justify-content', 'space-between')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t.style('border', `1px solid ${borderColor}`)\n\t\t\t.style('padding', '0.5rem')\n\n\t\tconst pageSizeSelection = paginationDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('gap', '0.5rem')\n\n\t\tpageSizeSelection.append('span').text('Show')\n\n\t\tconst pageSizeDropdown = pageSizeSelection.append('div').style('position', 'relative')\n\t\tconst pageSizeButton = pageSizeDropdown\n\t\t\t.append('button')\n\t\t\t.attr('type', 'button')\n\t\t\t.style('min-width', '55px')\n\t\t\t.style('gap', '0.5rem')\n\t\t\t.style('padding', '0.3rem 0.45rem')\n\t\t\t.style('border-radius', '4px')\n\t\t\t.style('border', `1px solid ${borderColor}`)\n\t\t\t.style('background-color', fullWhiteBgColor)\n\t\t\t.style('cursor', 'pointer')\n\t\tmakeCenteredFlex(pageSizeButton)\n\t\tconst pageSizeChevron = pageSizeButton.append('span').style('font-size', '15px')\n\t\tconst changePageSizeText = (isOpen: boolean) => {\n\t\t\tpageSizeChevron.text((!isOpen ? '\u25BE ' : '\u25B4 ') + this.args.pageSize)\n\t\t}\n\t\tchangePageSizeText(false)\n\t\tconst optionsPanel = pageSizeDropdown\n\t\t\t.append('div')\n\t\t\t.style('display', 'none')\n\t\t\t.style('position', 'absolute')\n\t\t\t.style('top', 'calc(100% + 4px)')\n\t\t\t.style('left', '0')\n\t\t\t.style('min-width', '100%')\n\t\t\t.style('border', `1px solid ${borderColor}`)\n\t\t\t.style('border-radius', '4px')\n\t\t\t.style('background-color', fullWhiteBgColor)\n\t\t\t.style('box-shadow', '0 4px 12px rgba(0,0,0,0.12)')\n\t\t\t.style('z-index', '1')\n\n\t\tconst renderOptions = () => {\n\t\t\toptionsPanel.selectAll('*').remove()\n\t\t\tthis.args.pageSizeOptions.forEach(option => {\n\t\t\t\tconst btn = optionsPanel\n\t\t\t\t\t.append('button')\n\t\t\t\t\t.attr('type', 'button')\n\t\t\t\t\t.style('width', '100%')\n\t\t\t\t\t.style('padding', '0.35rem 0.5rem')\n\t\t\t\t\t.style('display', 'flex')\n\t\t\t\t\t.style('justify-content', 'space-between')\n\t\t\t\t\t.style('align-items', 'center')\n\t\t\t\t\t.style('border', 'none')\n\t\t\t\t\t.style('background-color', fullWhiteBgColor)\n\t\t\t\t\t.style('cursor', 'pointer')\n\n\t\t\t\tbtn.append('span').text(String(option))\n\t\t\t\tbtn\n\t\t\t\t\t.append('span')\n\t\t\t\t\t.text(option === selectedPageSize ? '\u2713' : '')\n\t\t\t\t\t.style('color', '#2a6f2a')\n\t\t\t\tbtn\n\t\t\t\t\t.on('mouseenter', function () {\n\t\t\t\t\t\t;(this as HTMLButtonElement).style.backgroundColor = '#f5f5f5'\n\t\t\t\t\t})\n\t\t\t\t\t.on('mouseleave', function () {\n\t\t\t\t\t\t;(this as HTMLButtonElement).style.backgroundColor = fullWhiteBgColor\n\t\t\t\t\t})\n\t\t\t\t\t.on('click', () => {\n\t\t\t\t\t\tthis.viewer.main({ ...this.args, pageSize: option }).catch(e => {\n\t\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t})\n\t\t}\n\n\t\trenderOptions()\n\n\t\tpageSizeButton.on('click', () => {\n\t\t\tconst isOpen = optionsPanel.style('display') !== 'none'\n\t\t\toptionsPanel.style('display', isOpen ? 'none' : 'block')\n\t\t\tchangePageSizeText(!isOpen)\n\t\t})\n\n\t\tpageSizeSelection.append('span').text('entries')\n\n\t\tpaginationDiv\n\t\t\t.append('div')\n\t\t\t.style('font-size', '18px')\n\t\t\t.attr('data-testid', 'pagination-summary')\n\t\t\t.html(\n\t\t\t\t`Showing <b>${pagination.from + 1}</b> - <b>${Math.min(\n\t\t\t\t\tpagination.from + dataLength,\n\t\t\t\t\tpagination.total\n\t\t\t\t)}</b> of <b>${pagination.total}</b> entries`\n\t\t\t)\n\t\tconst renderPageControls = () => {\n\t\t\t// Source - https://stackoverflow.com/a/36963945\n\t\t\t// Posted by Aditya Singh, modified by community. See post 'Timeline' for change history\n\t\t\t// Retrieved 2026-06-24, License - CC BY-SA 3.0\n\t\t\t// const range = (start, end) => Array.from({ length: end - start }, (_, k) => k + start)\n\t\t\tconst pagePlaceHolder = '...'\n\t\t\tconst totalPages = Math.ceil(pagination.total / selectedPageSize)\n\t\t\tconst pageControlsDiv = paginationDiv\n\t\t\t\t.append('div')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('gap', '0.5rem')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('justify-content', 'center')\n\t\t\tconst buttonsToDisable: Selection<HTMLButtonElement, unknown, any, any>[] = []\n\t\t\tconst beginningButton = makeTransparentButton(pageControlsDiv.append('button')).attr('class', 'beginning-button')\n\t\t\tmakeCenteredFlex(\n\t\t\t\taddSvg(beginningButton, doubleLeftChevronPath).on('click', () => {\n\t\t\t\t\tif (this.args.currentPage === 1) return\n\t\t\t\t\tthis.viewer.main({ ...this.args, currentPage: 1 }).catch(e => {\n\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t)\n\t\t\tconst singlePageTurnBack = makeTransparentButton(pageControlsDiv.append('button')).attr(\n\t\t\t\t'class',\n\t\t\t\t'single-page-turn-back'\n\t\t\t)\n\t\t\tmakeCenteredFlex(\n\t\t\t\taddSvg(singlePageTurnBack, leftChevronPath).on('click', () => {\n\t\t\t\t\tif (this.args.currentPage === 1) return\n\t\t\t\t\tthis.viewer.main({ ...this.args, currentPage: this.args.currentPage - 1 }).catch(e => {\n\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t)\n\t\t\tconst setofPages = new Set([1])\n\t\t\tconst actualShown = Math.min(numPagesToShow, totalPages)\n\t\t\tlet startPage = Math.max(2, this.args.currentPage - Math.floor((actualShown - 2) / 2))\n\t\t\tstartPage = Math.min(startPage, totalPages - (actualShown - 2))\n\t\t\tfor (let i = startPage; i < totalPages && setofPages.size <= actualShown - 2; i++) {\n\t\t\t\tsetofPages.add(i)\n\t\t\t}\n\t\t\tsetofPages.add(totalPages)\n\t\t\tconst listOfPages: string[] = Array.from(setofPages).map(String)\n\t\t\tif (this.args.currentPage === 1) {\n\t\t\t\tbuttonsToDisable.push(beginningButton, singlePageTurnBack)\n\t\t\t}\n\n\t\t\tif (totalPages > actualShown) {\n\t\t\t\tconst secondLowestPage = 2\n\t\t\t\tconst secondHighestPage = totalPages - 1\n\t\t\t\tconst secondLowestPageIncluded = listOfPages.includes(secondLowestPage.toString())\n\t\t\t\tconst secondHighestPageIncluded = listOfPages.includes(secondHighestPage.toString())\n\t\t\t\tif (!secondHighestPageIncluded) {\n\t\t\t\t\tlistOfPages.splice(listOfPages.length - 2, 1, 'secondHighestPage')\n\t\t\t\t}\n\t\t\t\tif (!secondLowestPageIncluded) {\n\t\t\t\t\tlistOfPages.splice(1, 1, 'secondLowestPage')\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tfor (const page of listOfPages) {\n\t\t\t\tconst pageButton = makeTransparentButton(pageControlsDiv.append('button'))\n\t\t\t\t\t.text(page)\n\t\t\t\t\t.attr('data-testid', `page-button-${page}`)\n\t\t\t\tif (page === 'secondLowestPage' || page === 'secondHighestPage') {\n\t\t\t\t\tpageButton.text(pagePlaceHolder)\n\t\t\t\t\t// I have set page buttons with ellipses to take you to the middle of the range of pages that are not being shown\n\t\t\t\t\tpageButton.on('click', () => {\n\t\t\t\t\t\tconst middlePoint = Math.floor((this.args.currentPage + (page === 'secondLowestPage' ? 1 : totalPages)) / 2)\n\t\t\t\t\t\tthis.viewer.main({ ...this.args, currentPage: middlePoint }).catch(e => {\n\t\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t\t\t\t})\n\t\t\t\t\t})\n\t\t\t\t} else if (Number(page) === this.args.currentPage) {\n\t\t\t\t\tpageButton.style('font-weight', 'bold').style('background-color', '#c7501a').style('padding', '3px')\n\t\t\t\t} else {\n\t\t\t\t\tpageButton.on('click', () => {\n\t\t\t\t\t\tif (Number(page) === this.args.currentPage) return\n\t\t\t\t\t\tthis.viewer.main({ ...this.args, currentPage: Number(page) }).catch(e => {\n\t\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\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\tconst singlePageTurnForward = makeTransparentButton(pageControlsDiv.append('button')).attr(\n\t\t\t\t'class',\n\t\t\t\t'single-page-turn-forward'\n\t\t\t)\n\t\t\tmakeCenteredFlex(\n\t\t\t\taddSvg(singlePageTurnForward, rightChevronPath).on('click', () => {\n\t\t\t\t\tif (this.args.currentPage === totalPages) return\n\t\t\t\t\tthis.viewer.main({ ...this.args, currentPage: this.args.currentPage + 1 }).catch(e => {\n\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t)\n\t\t\tconst endButton = makeTransparentButton(pageControlsDiv.append('button')).attr('class', 'end-button')\n\t\t\tmakeCenteredFlex(\n\t\t\t\taddSvg(endButton, doubleRightChevronPath).on('click', () => {\n\t\t\t\t\tif (this.args.currentPage === totalPages) return\n\t\t\t\t\tthis.viewer.main({ ...this.args, currentPage: totalPages }).catch(e => {\n\t\t\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t\t\t})\n\t\t\t\t})\n\t\t\t)\n\t\t\tif (this.args.currentPage === totalPages) {\n\t\t\t\tbuttonsToDisable.push(singlePageTurnForward, endButton)\n\t\t\t}\n\t\t\tbuttonsToDisable.forEach(button => {\n\t\t\t\tbutton.style('cursor', 'not-allowed')\n\t\t\t\tbutton.attr('disabled', true)\n\t\t\t})\n\t\t}\n\t\trenderPageControls()\n\t}\n\n\tprivate addCellLinkToRow(\n\t\trow: Selection<HTMLTableRowElement, unknown, any, any>,\n\t\turl: string,\n\t\ttext: string,\n\t\thasStudy: boolean\n\t): void {\n\t\tconst cell = row\n\t\t\t.append('td')\n\t\t\t.style('padding', '8px')\n\t\t\t.append('span')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\tif (hasStudy) {\n\t\t\tmakeCenteredFlex(addSvg(cell, externalLinkPath))\n\t\t\tcell\n\t\t\t\t.append('a')\n\t\t\t\t.text(text)\n\t\t\t\t.attr('href', url)\n\t\t\t\t.attr('rel', 'noopener noreferrer')\n\t\t\t\t.attr('target', '_blank')\n\t\t\t\t.style('color', 'black')\n\t\t\t\t.style('font-size', '16px')\n\t\t} else {\n\t\t\tcell.append('span').text('\\u2717').style('color', 'red').style('font-size', '16px')\n\t\t}\n\t}\n}\n", "import { type Selection } from 'd3-selection'\nimport type { IDCViewerOpts, Pagination } from '../IDCTypes'\nimport type { IDCViewer } from '../IDCViewer'\nimport { sayerror } from '#dom/sayerror'\nimport { addSvg, makeCenteredFlex, makeTransparentButton } from '../utils'\n// https://icons.getbootstrap.com/icons/search/\nconst magnifyingGlassPath = [\n\t'M11.742 10.344a6.5 6.5 0 1 0-1.397 1.398h-.001q.044.06.098.115l3.85 3.85a1 1 0 0 0 1.415-1.414l-3.85-3.85a1 1 0 0 0-.115-.1zM12 6.5a5.5 5.5 0 1 1-11 0 5.5 5.5 0 0 1 11 0'\n]\nconst cancelXPath = [\n\t'M4.646 4.646a.5.5 0 0 1 .708 0L8 7.293l2.646-2.647a.5.5 0 0 1 .708.708L8.707 8l2.647 2.646a.5.5 0 0 1-.708.708L8 8.707l-2.646 2.647a.5.5 0 0 1-.708-.708L7.293 8 4.646 5.354a.5.5 0 0 1 0-.708'\n]\nexport class IDCSearchView {\n\tprivate holder: Selection<HTMLDivElement, unknown, any, any>\n\tprivate viewer: IDCViewer\n\tprivate args: IDCViewerOpts\n\n\tconstructor(holder: Selection<HTMLDivElement, unknown, any, any>, viewer: IDCViewer, args: IDCViewerOpts) {\n\t\tthis.holder = holder\n\t\tthis.viewer = viewer\n\t\tthis.args = args\n\t}\n\tsetArgs(args: IDCViewerOpts): void {\n\t\tthis.args = args\n\t}\n\trender(\n\t\tpagination: Pagination,\n\t\tactualCaseTotal: number | undefined = undefined,\n\t\tdataVersion: string | undefined = undefined\n\t): void {\n\t\tthis.holder.selectAll('*').remove()\n\t\tconst search = () => {\n\t\t\tconst searchValue = (inputDiv.select('input').node() as HTMLInputElement).value.trim()\n\t\t\tthis.args.searchFilter = searchValue\n\t\t\tthis.args.action = 'search'\n\t\t\tthis.viewer.main(this.args).catch(e => {\n\t\t\t\tsayerror(this.viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t})\n\t\t}\n\t\t// titleDiv\n\t\tconst titleDiv = this.holder.append('div').attr('class', 'idcviewer-search-title')\n\t\ttitleDiv.append('span').text('IDC Viewer ')\n\t\ttitleDiv\n\t\t\t.append('span')\n\t\t\t.style('font-size', '6px')\n\t\t\t.text(`Release: ${dataVersion || 'current'}`)\n\t\tconst searchDiv = this.holder\n\t\t\t.append('div')\n\t\t\t.attr('class', 'idcviewer-search-input-holder')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t.style('flex-direction', 'row')\n\t\t\t.style('gap', '10px')\n\n\t\t// caseCountDiv\n\t\tactualCaseTotal = actualCaseTotal === undefined ? pagination.total : actualCaseTotal\n\t\tsearchDiv\n\t\t\t.append('div')\n\t\t\t.attr('class', 'idcviewer-search-case-count')\n\t\t\t.style('font-size', '18px')\n\t\t\t.style('font-family', 'Noto Sans, sans-serif')\n\t\t\t.html(`Total Cohort Cases: <b>${actualCaseTotal}</b> (<b>${pagination.total}</b> w/ Studies)`)\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('padding', '5px 10px')\n\t\tconst inputDiv = searchDiv\n\t\t\t.append('div')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('justify-content', 'right')\n\t\t\t.style('min-height', '30px')\n\t\t\t.style('min-width', '300px')\n\n\t\t//Search Button\n\t\tmakeCenteredFlex(addSvg(inputDiv.append('button'), magnifyingGlassPath))\n\t\t\t.attr('class', 'idcviewer-search-button')\n\t\t\t.style('height', '100%')\n\t\t\t.style('aspect-ratio', '1 / 1')\n\t\t\t.on('click', search)\n\t\t\t.style('cursor', 'pointer')\n\n\t\t// Div containing search bar and clear button\n\t\tconst searchBar = inputDiv\n\t\t\t.append('div')\n\t\t\t.style('border', '1px solid #ccc')\n\t\t\t.style('border-radius', '4px')\n\t\t\t.style('display', 'flex')\n\t\t\t.style('flex-direction', 'row')\n\t\t\t.style('align-items', 'center')\n\t\t\t.style('padding', '0 5px')\n\n\t\t// SearchInput\n\t\tsearchBar\n\t\t\t.append('input')\n\t\t\t.style('border-radius', '4px')\n\t\t\t.style('min-width', '200px')\n\t\t\t.style('height', '100%')\n\t\t\t.attr('type', 'text')\n\t\t\t.style('border', 'none')\n\t\t\t.style('background-color', 'transparent')\n\t\t\t.attr('placeholder', 'Press Enter to Search')\n\t\t\t.property('value', this.args.searchFilter || '')\n\t\t\t.attr('class', 'idcviewer-search-input')\n\t\t\t.on('keydown', event => {\n\t\t\t\tif (event.key === 'Enter') {\n\t\t\t\t\tsearch()\n\t\t\t\t}\n\t\t\t})\n\t\t// ClearSearchBar Button\n\t\tmakeCenteredFlex(\n\t\t\taddSvg(makeTransparentButton(searchBar.append('button')), cancelXPath).on('click', () => {\n\t\t\t\t;(searchBar.select('input').node() as HTMLInputElement).value = ''\n\t\t\t\tsearch()\n\t\t\t})\n\t\t)\n\t}\n}\n", "import type { Selection } from 'd3-selection'\nimport { sayerror } from '#dom'\nimport type { IDCParquetLoadResult, IDCViewerOpts } from './IDCTypes'\nimport { IDCModel } from './model/IDCModel'\nimport { IDCViewModel } from './viewModel/IDCViewModel'\nimport { IDCTableView } from './view/IDCTableView'\nimport { IDCViewerDefaults } from './settings/defaults'\nimport { IDCSearchView } from './view/IDCSearchView'\n\nexport async function init(\n\t{ filter0 },\n\tholder: Selection<HTMLDivElement, unknown, any, any>\n): Promise<{ update: (arg: { filter0: any }) => Promise<void> }> {\n\tconst viewer = new IDCViewer(holder)\n\tviewer.main({ ...IDCViewerDefaults, filter0: filter0 }, true).catch(e => {\n\t\tsayerror(viewer.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t})\n\tasync function update({ filter0 }) {\n\t\tawait viewer.main({ ...IDCViewerDefaults, filter0: filter0 }, true)\n\t}\n\n\tconst publicApi = { update }\n\treturn publicApi\n}\n\nexport class IDCViewer {\n\tprivate model = new IDCModel()\n\tprivate viewModel = new IDCViewModel()\n\tprivate tableView: IDCTableView | undefined\n\tprivate searchView: IDCSearchView | undefined\n\tprivate loadResult: IDCParquetLoadResult | undefined\n\tpublic dom: { [name: string]: any } = {}\n\n\tconstructor(holder: Selection<HTMLDivElement, unknown, any, any>) {\n\t\tthis.dom = {\n\t\t\tholder: holder,\n\t\t\tloadingDiv: holder\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'idcviewer-loading-holder')\n\t\t\t\t.style('display', 'none')\n\t\t\t\t.style('background-color', 'rgba(255, 255, 255, 0.8)')\n\t\t\t\t.style('position', 'absolute')\n\t\t\t\t.style('top', '0')\n\t\t\t\t.style('left', '0')\n\t\t\t\t.style('width', '100%')\n\t\t\t\t.style('height', '100%'),\n\t\t\tsearchDiv: holder\n\t\t\t\t.append('div')\n\t\t\t\t.attr('class', 'idcviewer-search-holder')\n\t\t\t\t.style('display', 'flex')\n\t\t\t\t.style('align-items', 'center')\n\t\t\t\t.style('justify-content', 'space-between')\n\t\t\t\t.style('flex-wrap', 'wrap')\n\t\t\t\t.style('flex-direction', 'row'),\n\t\t\ttableDiv: holder.append('div').attr('class', 'idcviewer-table-holder'),\n\t\t\terrorDiv: holder.append('div').attr('class', 'idcviewer-error-holder')\n\t\t}\n\t}\n\n\tasync main(args: IDCViewerOpts, newCohort: boolean = false): Promise<void> {\n\t\tthis.dom.errorDiv.selectAll('*').remove()\n\t\tif (!this.searchView) {\n\t\t\tthis.searchView = new IDCSearchView(this.dom.searchDiv, this, args)\n\t\t} else {\n\t\t\tthis.searchView.setArgs(args)\n\t\t}\n\n\t\tif (!this.tableView) {\n\t\t\tthis.tableView = new IDCTableView(this.dom.tableDiv, this, args)\n\t\t} else {\n\t\t\tthis.tableView.setArgs(args)\n\t\t}\n\n\t\tif (!this.loadResult) {\n\t\t\ttry {\n\t\t\t\tthis.loadResult = await this.model.loadParquetWithFallback(args.retries)\n\t\t\t\tif (!this.loadResult) {\n\t\t\t\t\tthrow new Error(\n\t\t\t\t\t\t'Failed to load IDC mapping data from all available sources. Please check your network connection and try refreshing the page.'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t} catch (e: any) {\n\t\t\t\tif (this.dom.errorDiv) {\n\t\t\t\t\tsayerror(this.dom.errorDiv, `Error loading IDCViewer: ${e.message || e}`)\n\t\t\t\t}\n\t\t\t\treturn\n\t\t\t}\n\t\t}\n\n\t\ttry {\n\t\t\tthis.dom.loadingDiv.style('display', 'flex')\n\t\t\tconst caseData = await this.model.getCaseFromCurrentCohort(args, this.loadResult.case_ids as string[])\n\t\t\tconst tableData = this.viewModel.buildTableData(this.loadResult.idc_data, caseData.hits)\n\t\t\tthis.tableView.render(tableData, caseData.pagination)\n\t\t\tif (newCohort) {\n\t\t\t\tconst cohortCaseTotal = (await this.model.getCaseFromCurrentCohort(args)).pagination.total\n\t\t\t\tthis.searchView.render(caseData.pagination, cohortCaseTotal, this.loadResult.metadataVersion)\n\t\t\t}\n\t\t} catch (e: any) {\n\t\t\tif (this.dom.errorDiv) {\n\t\t\t\tsayerror(this.dom.errorDiv, `Error running IDCViewer: ${e.message || e}`)\n\t\t\t}\n\t\t} finally {\n\t\t\tthis.dom.loadingDiv.style('display', 'none')\n\t\t}\n\t}\n}\n"],
|
|
5
|
+
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAIA,QAAM,sBAAsB;AAE5B,QAAMA,cAAa;AACnB,QAAM,mBAAmB,OAAO;AAAA,IACL;AAG3B,QAAM,4BAA4B;AAIlC,QAAM,wBAAwBA,cAAa;AAE3C,QAAM,gBAAgB;AAAA,MACpB;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF;AAEA,WAAO,UAAU;AAAA,MACf,YAAAA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,yBAAyB;AAAA,MACzB,YAAY;AAAA,IACd;AAAA;AAAA;;;ACpCA;AAAA;AAAA;AAEA,QAAM,QACJ,OAAO,YAAY,YACnB,QAAQ,OACR,QAAQ,IAAI,cACZ,cAAc,KAAK,QAAQ,IAAI,UAAU,IACvC,IAAI,SAAS,QAAQ,MAAM,UAAU,GAAG,IAAI,IAC5C,MAAM;AAAA,IAAC;AAEX,WAAO,UAAU;AAAA;AAAA;;;ACVjB;AAAA;AAAA;AAEA,QAAM;AAAA,MACJ;AAAA,MACA;AAAA,MACA,YAAAC;AAAA,IACF,IAAI;AACJ,QAAM,QAAQ;AACd,cAAU,OAAO,UAAU,CAAC;AAG5B,QAAM,KAAK,QAAQ,KAAK,CAAC;AACzB,QAAM,SAAS,QAAQ,SAAS,CAAC;AACjC,QAAM,MAAM,QAAQ,MAAM,CAAC;AAC3B,QAAM,UAAU,QAAQ,UAAU,CAAC;AACnC,QAAM,IAAI,QAAQ,IAAI,CAAC;AACvB,QAAI,IAAI;AAER,QAAM,mBAAmB;AAQzB,QAAM,wBAAwB;AAAA,MAC5B,CAAC,OAAO,CAAC;AAAA,MACT,CAAC,OAAOA,WAAU;AAAA,MAClB,CAAC,kBAAkB,qBAAqB;AAAA,IAC1C;AAEA,QAAM,gBAAgB,CAAC,UAAU;AAC/B,iBAAW,CAAC,OAAO,GAAG,KAAK,uBAAuB;AAChD,gBAAQ,MACL,MAAM,GAAG,KAAK,GAAG,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG,EAC5C,MAAM,GAAG,KAAK,GAAG,EAAE,KAAK,GAAG,KAAK,MAAM,GAAG,GAAG;AAAA,MACjD;AACA,aAAO;AAAA,IACT;AAEA,QAAM,cAAc,CAAC,MAAM,OAAO,aAAa;AAC7C,YAAM,OAAO,cAAc,KAAK;AAChC,YAAM,QAAQ;AACd,YAAM,MAAM,OAAO,KAAK;AACxB,QAAE,IAAI,IAAI;AACV,UAAI,KAAK,IAAI;AACb,cAAQ,KAAK,IAAI;AACjB,SAAG,KAAK,IAAI,IAAI,OAAO,OAAO,WAAW,MAAM,MAAS;AACxD,aAAO,KAAK,IAAI,IAAI,OAAO,MAAM,WAAW,MAAM,MAAS;AAAA,IAC7D;AAQA,gBAAY,qBAAqB,aAAa;AAC9C,gBAAY,0BAA0B,MAAM;AAM5C,gBAAY,wBAAwB,gBAAgB,gBAAgB,GAAG;AAKvE,gBAAY,eAAe,IAAI,IAAI,EAAE,iBAAiB,CAAC,QAChC,IAAI,EAAE,iBAAiB,CAAC,QACxB,IAAI,EAAE,iBAAiB,CAAC,GAAG;AAElD,gBAAY,oBAAoB,IAAI,IAAI,EAAE,sBAAsB,CAAC,QACrC,IAAI,EAAE,sBAAsB,CAAC,QAC7B,IAAI,EAAE,sBAAsB,CAAC,GAAG;AAO5D,gBAAY,wBAAwB,MAAM,IAAI,EAAE,oBAAoB,CACpE,IAAI,IAAI,EAAE,iBAAiB,CAAC,GAAG;AAE/B,gBAAY,6BAA6B,MAAM,IAAI,EAAE,oBAAoB,CACzE,IAAI,IAAI,EAAE,sBAAsB,CAAC,GAAG;AAMpC,gBAAY,cAAc,QAAQ,IAAI,EAAE,oBAAoB,CAC5D,SAAS,IAAI,EAAE,oBAAoB,CAAC,MAAM;AAE1C,gBAAY,mBAAmB,SAAS,IAAI,EAAE,yBAAyB,CACvE,SAAS,IAAI,EAAE,yBAAyB,CAAC,MAAM;AAK/C,gBAAY,mBAAmB,GAAG,gBAAgB,GAAG;AAMrD,gBAAY,SAAS,UAAU,IAAI,EAAE,eAAe,CACpD,SAAS,IAAI,EAAE,eAAe,CAAC,MAAM;AAWrC,gBAAY,aAAa,KAAK,IAAI,EAAE,WAAW,CAC/C,GAAG,IAAI,EAAE,UAAU,CAAC,IAClB,IAAI,EAAE,KAAK,CAAC,GAAG;AAEjB,gBAAY,QAAQ,IAAI,IAAI,EAAE,SAAS,CAAC,GAAG;AAK3C,gBAAY,cAAc,WAAW,IAAI,EAAE,gBAAgB,CAC3D,GAAG,IAAI,EAAE,eAAe,CAAC,IACvB,IAAI,EAAE,KAAK,CAAC,GAAG;AAEjB,gBAAY,SAAS,IAAI,IAAI,EAAE,UAAU,CAAC,GAAG;AAE7C,gBAAY,QAAQ,cAAc;AAKlC,gBAAY,yBAAyB,GAAG,IAAI,EAAE,sBAAsB,CAAC,UAAU;AAC/E,gBAAY,oBAAoB,GAAG,IAAI,EAAE,iBAAiB,CAAC,UAAU;AAErE,gBAAY,eAAe,YAAY,IAAI,EAAE,gBAAgB,CAAC,WACjC,IAAI,EAAE,gBAAgB,CAAC,WACvB,IAAI,EAAE,gBAAgB,CAAC,OAC3B,IAAI,EAAE,UAAU,CAAC,KACrB,IAAI,EAAE,KAAK,CAAC,OACR;AAEzB,gBAAY,oBAAoB,YAAY,IAAI,EAAE,qBAAqB,CAAC,WACtC,IAAI,EAAE,qBAAqB,CAAC,WAC5B,IAAI,EAAE,qBAAqB,CAAC,OAChC,IAAI,EAAE,eAAe,CAAC,KAC1B,IAAI,EAAE,KAAK,CAAC,OACR;AAE9B,gBAAY,UAAU,IAAI,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,WAAW,CAAC,GAAG;AACjE,gBAAY,eAAe,IAAI,IAAI,EAAE,IAAI,CAAC,OAAO,IAAI,EAAE,gBAAgB,CAAC,GAAG;AAI3E,gBAAY,eAAe,GAAG,mBACP,GAAG,yBAAyB,kBACrB,yBAAyB,oBACzB,yBAAyB,MAAM;AAC7D,gBAAY,UAAU,GAAG,IAAI,EAAE,WAAW,CAAC,cAAc;AACzD,gBAAY,cAAc,IAAI,EAAE,WAAW,IAC7B,MAAM,IAAI,EAAE,UAAU,CAAC,QACjB,IAAI,EAAE,KAAK,CAAC,gBACJ;AAC5B,gBAAY,aAAa,IAAI,EAAE,MAAM,GAAG,IAAI;AAC5C,gBAAY,iBAAiB,IAAI,EAAE,UAAU,GAAG,IAAI;AAIpD,gBAAY,aAAa,SAAS;AAElC,gBAAY,aAAa,SAAS,IAAI,EAAE,SAAS,CAAC,QAAQ,IAAI;AAC9D,YAAQ,mBAAmB;AAE3B,gBAAY,SAAS,IAAI,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,GAAG;AACjE,gBAAY,cAAc,IAAI,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,gBAAgB,CAAC,GAAG;AAI3E,gBAAY,aAAa,SAAS;AAElC,gBAAY,aAAa,SAAS,IAAI,EAAE,SAAS,CAAC,QAAQ,IAAI;AAC9D,YAAQ,mBAAmB;AAE3B,gBAAY,SAAS,IAAI,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,WAAW,CAAC,GAAG;AACjE,gBAAY,cAAc,IAAI,IAAI,EAAE,SAAS,CAAC,GAAG,IAAI,EAAE,gBAAgB,CAAC,GAAG;AAG3E,gBAAY,mBAAmB,IAAI,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,UAAU,CAAC,OAAO;AAC9E,gBAAY,cAAc,IAAI,IAAI,EAAE,IAAI,CAAC,QAAQ,IAAI,EAAE,SAAS,CAAC,OAAO;AAIxE,gBAAY,kBAAkB,SAAS,IAAI,EAAE,IAAI,CACjD,QAAQ,IAAI,EAAE,UAAU,CAAC,IAAI,IAAI,EAAE,WAAW,CAAC,KAAK,IAAI;AACxD,YAAQ,wBAAwB;AAMhC,gBAAY,eAAe,SAAS,IAAI,EAAE,WAAW,CAAC,cAE/B,IAAI,EAAE,WAAW,CAAC,QACf;AAE1B,gBAAY,oBAAoB,SAAS,IAAI,EAAE,gBAAgB,CAAC,cAEpC,IAAI,EAAE,gBAAgB,CAAC,QACpB;AAG/B,gBAAY,QAAQ,iBAAiB;AAErC,gBAAY,QAAQ,2BAA2B;AAC/C,gBAAY,WAAW,6BAA6B;AAAA;AAAA;;;AC9NpD;AAAA;AAAA;AAGA,QAAM,cAAc,OAAO,OAAO,EAAE,OAAO,KAAK,CAAC;AACjD,QAAM,YAAY,OAAO,OAAO,CAAE,CAAC;AACnC,QAAM,eAAe,aAAW;AAC9B,UAAI,CAAC,SAAS;AACZ,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AACA,WAAO,UAAU;AAAA;AAAA;;;AChBjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,qBAAqB,CAAC,GAAG,MAAM;AACnC,UAAI,OAAO,MAAM,YAAY,OAAO,MAAM,UAAU;AAClD,eAAO,MAAM,IAAI,IAAI,IAAI,IAAI,KAAK;AAAA,MACpC;AAEA,YAAM,OAAO,QAAQ,KAAK,CAAC;AAC3B,YAAM,OAAO,QAAQ,KAAK,CAAC;AAE3B,UAAI,QAAQ,MAAM;AAChB,YAAI,CAAC;AACL,YAAI,CAAC;AAAA,MACP;AAEA,aAAO,MAAM,IAAI,IACZ,QAAQ,CAAC,OAAQ,KACjB,QAAQ,CAAC,OAAQ,IAClB,IAAI,IAAI,KACR;AAAA,IACN;AAEA,QAAM,sBAAsB,CAAC,GAAG,MAAM,mBAAmB,GAAG,CAAC;AAE7D,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,IACF;AAAA;AAAA;;;AC5BA;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,EAAE,YAAAC,aAAY,iBAAiB,IAAI;AACzC,QAAM,EAAE,QAAQ,IAAI,EAAE,IAAI;AAE1B,QAAM,eAAe;AACrB,QAAM,EAAE,mBAAmB,IAAI;AAE/B,QAAM,yBAAyB,CAAC,YAAY,eAAe;AACzD,YAAM,cAAc,WAAW,MAAM,GAAG;AACxC,UAAI,YAAY,SAAS,WAAW,QAAQ;AAC1C,eAAO;AAAA,MACT;AAEA,eAAS,IAAI,GAAG,IAAI,YAAY,QAAQ,KAAK;AAC3C,YAAI,mBAAmB,WAAW,CAAC,GAAG,YAAY,CAAC,CAAC,MAAM,GAAG;AAC3D,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,aAAO;AAAA,IACT;AAEA,QAAM,SAAN,MAAM,QAAO;AAAA,MACX,YAAa,SAAS,SAAS;AAC7B,kBAAU,aAAa,OAAO;AAE9B,YAAI,mBAAmB,SAAQ;AAC7B,cAAI,QAAQ,UAAU,CAAC,CAAC,QAAQ,SAC9B,QAAQ,sBAAsB,CAAC,CAAC,QAAQ,mBAAmB;AAC3D,mBAAO;AAAA,UACT,OAAO;AACL,sBAAU,QAAQ;AAAA,UACpB;AAAA,QACF,WAAW,OAAO,YAAY,UAAU;AACtC,gBAAM,IAAI,UAAU,gDAAgD,OAAO,OAAO,IAAI;AAAA,QACxF;AAEA,YAAI,QAAQ,SAASA,aAAY;AAC/B,gBAAM,IAAI;AAAA,YACR,0BAA0BA,WAAU;AAAA,UACtC;AAAA,QACF;AAEA,cAAM,UAAU,SAAS,OAAO;AAChC,aAAK,UAAU;AACf,aAAK,QAAQ,CAAC,CAAC,QAAQ;AAGvB,aAAK,oBAAoB,CAAC,CAAC,QAAQ;AAEnC,cAAM,IAAI,QAAQ,KAAK,EAAE,MAAM,QAAQ,QAAQ,GAAG,EAAE,KAAK,IAAI,GAAG,EAAE,IAAI,CAAC;AAEvE,YAAI,CAAC,GAAG;AACN,gBAAM,IAAI,UAAU,oBAAoB,OAAO,EAAE;AAAA,QACnD;AAEA,aAAK,MAAM;AAGX,aAAK,QAAQ,CAAC,EAAE,CAAC;AACjB,aAAK,QAAQ,CAAC,EAAE,CAAC;AACjB,aAAK,QAAQ,CAAC,EAAE,CAAC;AAEjB,YAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAAG;AACnD,gBAAM,IAAI,UAAU,uBAAuB;AAAA,QAC7C;AAEA,YAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAAG;AACnD,gBAAM,IAAI,UAAU,uBAAuB;AAAA,QAC7C;AAEA,YAAI,KAAK,QAAQ,oBAAoB,KAAK,QAAQ,GAAG;AACnD,gBAAM,IAAI,UAAU,uBAAuB;AAAA,QAC7C;AAGA,YAAI,CAAC,EAAE,CAAC,GAAG;AACT,eAAK,aAAa,CAAC;AAAA,QACrB,OAAO;AACL,eAAK,aAAa,EAAE,CAAC,EAAE,MAAM,GAAG,EAAE,IAAI,CAAC,OAAO;AAC5C,gBAAI,WAAW,KAAK,EAAE,GAAG;AACvB,oBAAM,MAAM,CAAC;AACb,kBAAI,OAAO,KAAK,MAAM,kBAAkB;AACtC,uBAAO;AAAA,cACT;AAAA,YACF;AACA,mBAAO;AAAA,UACT,CAAC;AAAA,QACH;AAEA,aAAK,QAAQ,EAAE,CAAC,IAAI,EAAE,CAAC,EAAE,MAAM,GAAG,IAAI,CAAC;AACvC,aAAK,OAAO;AAAA,MACd;AAAA,MAEA,SAAU;AACR,aAAK,UAAU,GAAG,KAAK,KAAK,IAAI,KAAK,KAAK,IAAI,KAAK,KAAK;AACxD,YAAI,KAAK,WAAW,QAAQ;AAC1B,eAAK,WAAW,IAAI,KAAK,WAAW,KAAK,GAAG,CAAC;AAAA,QAC/C;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,WAAY;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,QAAS,OAAO;AACd,cAAM,kBAAkB,KAAK,SAAS,KAAK,SAAS,KAAK;AACzD,YAAI,EAAE,iBAAiB,UAAS;AAC9B,cAAI,OAAO,UAAU,YAAY,UAAU,KAAK,SAAS;AACvD,mBAAO;AAAA,UACT;AACA,kBAAQ,IAAI,QAAO,OAAO,KAAK,OAAO;AAAA,QACxC;AAEA,YAAI,MAAM,YAAY,KAAK,SAAS;AAClC,iBAAO;AAAA,QACT;AAEA,eAAO,KAAK,YAAY,KAAK,KAAK,KAAK,WAAW,KAAK;AAAA,MACzD;AAAA,MAEA,YAAa,OAAO;AAClB,YAAI,EAAE,iBAAiB,UAAS;AAC9B,kBAAQ,IAAI,QAAO,OAAO,KAAK,OAAO;AAAA,QACxC;AAEA,YAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,iBAAO;AAAA,QACT;AACA,YAAI,KAAK,QAAQ,MAAM,OAAO;AAC5B,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,MAEA,WAAY,OAAO;AACjB,YAAI,EAAE,iBAAiB,UAAS;AAC9B,kBAAQ,IAAI,QAAO,OAAO,KAAK,OAAO;AAAA,QACxC;AAGA,YAAI,KAAK,WAAW,UAAU,CAAC,MAAM,WAAW,QAAQ;AACtD,iBAAO;AAAA,QACT,WAAW,CAAC,KAAK,WAAW,UAAU,MAAM,WAAW,QAAQ;AAC7D,iBAAO;AAAA,QACT,WAAW,CAAC,KAAK,WAAW,UAAU,CAAC,MAAM,WAAW,QAAQ;AAC9D,iBAAO;AAAA,QACT;AAEA,YAAI,IAAI;AACR,WAAG;AACD,gBAAM,IAAI,KAAK,WAAW,CAAC;AAC3B,gBAAM,IAAI,MAAM,WAAW,CAAC;AAC5B,gBAAM,sBAAsB,GAAG,GAAG,CAAC;AACnC,cAAI,MAAM,UAAa,MAAM,QAAW;AACtC,mBAAO;AAAA,UACT,WAAW,MAAM,QAAW;AAC1B,mBAAO;AAAA,UACT,WAAW,MAAM,QAAW;AAC1B,mBAAO;AAAA,UACT,WAAW,MAAM,GAAG;AAClB;AAAA,UACF,OAAO;AACL,mBAAO,mBAAmB,GAAG,CAAC;AAAA,UAChC;AAAA,QACF,SAAS,EAAE;AAAA,MACb;AAAA,MAEA,aAAc,OAAO;AACnB,YAAI,EAAE,iBAAiB,UAAS;AAC9B,kBAAQ,IAAI,QAAO,OAAO,KAAK,OAAO;AAAA,QACxC;AAEA,YAAI,IAAI;AACR,WAAG;AACD,gBAAM,IAAI,KAAK,MAAM,CAAC;AACtB,gBAAM,IAAI,MAAM,MAAM,CAAC;AACvB,gBAAM,iBAAiB,GAAG,GAAG,CAAC;AAC9B,cAAI,MAAM,UAAa,MAAM,QAAW;AACtC,mBAAO;AAAA,UACT,WAAW,MAAM,QAAW;AAC1B,mBAAO;AAAA,UACT,WAAW,MAAM,QAAW;AAC1B,mBAAO;AAAA,UACT,WAAW,MAAM,GAAG;AAClB;AAAA,UACF,OAAO;AACL,mBAAO,mBAAmB,GAAG,CAAC;AAAA,UAChC;AAAA,QACF,SAAS,EAAE;AAAA,MACb;AAAA;AAAA;AAAA,MAIA,IAAK,SAAS,YAAY,gBAAgB;AACxC,YAAI,QAAQ,WAAW,KAAK,GAAG;AAC7B,cAAI,CAAC,cAAc,mBAAmB,OAAO;AAC3C,kBAAM,IAAI,MAAM,iDAAiD;AAAA,UACnE;AAEA,cAAI,YAAY;AACd,kBAAM,QAAQ,IAAI,UAAU,GAAG,MAAM,KAAK,QAAQ,QAAQ,GAAG,EAAE,eAAe,IAAI,GAAG,EAAE,UAAU,CAAC;AAClG,gBAAI,CAAC,SAAS,MAAM,CAAC,MAAM,YAAY;AACrC,oBAAM,IAAI,MAAM,uBAAuB,UAAU,EAAE;AAAA,YACrD;AAAA,UACF;AAAA,QACF;AAEA,gBAAQ,SAAS;AAAA,UACf,KAAK;AACH,iBAAK,WAAW,SAAS;AACzB,iBAAK,QAAQ;AACb,iBAAK,QAAQ;AACb,iBAAK;AACL,iBAAK,IAAI,OAAO,YAAY,cAAc;AAC1C;AAAA,UACF,KAAK;AACH,iBAAK,WAAW,SAAS;AACzB,iBAAK,QAAQ;AACb,iBAAK;AACL,iBAAK,IAAI,OAAO,YAAY,cAAc;AAC1C;AAAA,UACF,KAAK;AAIH,iBAAK,WAAW,SAAS;AACzB,iBAAK,IAAI,SAAS,YAAY,cAAc;AAC5C,iBAAK,IAAI,OAAO,YAAY,cAAc;AAC1C;AAAA;AAAA;AAAA,UAGF,KAAK;AACH,gBAAI,KAAK,WAAW,WAAW,GAAG;AAChC,mBAAK,IAAI,SAAS,YAAY,cAAc;AAAA,YAC9C;AACA,iBAAK,IAAI,OAAO,YAAY,cAAc;AAC1C;AAAA,UACF,KAAK;AACH,gBAAI,KAAK,WAAW,WAAW,GAAG;AAChC,oBAAM,IAAI,MAAM,WAAW,KAAK,GAAG,sBAAsB;AAAA,YAC3D;AACA,iBAAK,WAAW,SAAS;AACzB;AAAA,UAEF,KAAK;AAKH,gBACE,KAAK,UAAU,KACf,KAAK,UAAU,KACf,KAAK,WAAW,WAAW,GAC3B;AACA,mBAAK;AAAA,YACP;AACA,iBAAK,QAAQ;AACb,iBAAK,QAAQ;AACb,iBAAK,aAAa,CAAC;AACnB;AAAA,UACF,KAAK;AAKH,gBAAI,KAAK,UAAU,KAAK,KAAK,WAAW,WAAW,GAAG;AACpD,mBAAK;AAAA,YACP;AACA,iBAAK,QAAQ;AACb,iBAAK,aAAa,CAAC;AACnB;AAAA,UACF,KAAK;AAKH,gBAAI,KAAK,WAAW,WAAW,GAAG;AAChC,mBAAK;AAAA,YACP;AACA,iBAAK,aAAa,CAAC;AACnB;AAAA;AAAA;AAAA,UAGF,KAAK,OAAO;AACV,kBAAM,OAAO,OAAO,cAAc,IAAI,IAAI;AAE1C,gBAAI,KAAK,WAAW,WAAW,GAAG;AAChC,mBAAK,aAAa,CAAC,IAAI;AAAA,YACzB,OAAO;AACL,kBAAI,IAAI,KAAK,WAAW;AACxB,qBAAO,EAAE,KAAK,GAAG;AACf,oBAAI,OAAO,KAAK,WAAW,CAAC,MAAM,UAAU;AAC1C,uBAAK,WAAW,CAAC;AACjB,sBAAI;AAAA,gBACN;AAAA,cACF;AACA,kBAAI,MAAM,IAAI;AAEZ,oBAAI,eAAe,KAAK,WAAW,KAAK,GAAG,KAAK,mBAAmB,OAAO;AACxE,wBAAM,IAAI,MAAM,uDAAuD;AAAA,gBACzE;AACA,qBAAK,WAAW,KAAK,IAAI;AAAA,cAC3B;AAAA,YACF;AACA,gBAAI,YAAY;AAGd,kBAAI,aAAa,CAAC,YAAY,IAAI;AAClC,kBAAI,mBAAmB,OAAO;AAC5B,6BAAa,CAAC,UAAU;AAAA,cAC1B;AACA,kBAAI,uBAAuB,KAAK,YAAY,UAAU,GAAG;AACvD,sBAAM,iBAAiB,KAAK,WAAW,WAAW,MAAM,GAAG,EAAE,MAAM;AACnE,oBAAI,MAAM,cAAc,GAAG;AACzB,uBAAK,aAAa;AAAA,gBACpB;AAAA,cACF,OAAO;AACL,qBAAK,aAAa;AAAA,cACpB;AAAA,YACF;AACA;AAAA,UACF;AAAA,UACA;AACE,kBAAM,IAAI,MAAM,+BAA+B,OAAO,EAAE;AAAA,QAC5D;AACA,aAAK,MAAM,KAAK,OAAO;AACvB,YAAI,KAAK,MAAM,QAAQ;AACrB,eAAK,OAAO,IAAI,KAAK,MAAM,KAAK,GAAG,CAAC;AAAA,QACtC;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC7VjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ,CAAC,SAAS,SAAS,cAAc,UAAU;AACvD,UAAI,mBAAmB,QAAQ;AAC7B,eAAO;AAAA,MACT;AACA,UAAI;AACF,eAAO,IAAI,OAAO,SAAS,OAAO;AAAA,MACpC,SAAS,IAAI;AACX,YAAI,CAAC,aAAa;AAChB,iBAAO;AAAA,QACT;AACA,cAAM;AAAA,MACR;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjBjB;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,QAAQ,CAAC,SAAS,YAAY;AAClC,YAAM,IAAI,MAAM,SAAS,OAAO;AAChC,aAAO,IAAI,EAAE,UAAU;AAAA,IACzB;AACA,WAAO,UAAU;AAAA;AAAA;;;ACPjB;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,QAAQ,CAAC,SAAS,YAAY;AAClC,YAAM,IAAI,MAAM,QAAQ,KAAK,EAAE,QAAQ,UAAU,EAAE,GAAG,OAAO;AAC7D,aAAO,IAAI,EAAE,UAAU;AAAA,IACzB;AACA,WAAO,UAAU;AAAA;AAAA;;;ACPjB;AAAA;AAAA;AAEA,QAAM,SAAS;AAEf,QAAM,MAAM,CAAC,SAAS,SAAS,SAAS,YAAY,mBAAmB;AACrE,UAAI,OAAQ,YAAa,UAAU;AACjC,yBAAiB;AACjB,qBAAa;AACb,kBAAU;AAAA,MACZ;AAEA,UAAI;AACF,eAAO,IAAI;AAAA,UACT,mBAAmB,SAAS,QAAQ,UAAU;AAAA,UAC9C;AAAA,QACF,EAAE,IAAI,SAAS,YAAY,cAAc,EAAE;AAAA,MAC7C,SAAS,IAAI;AACX,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,UAAU;AAAA;AAAA;;;ACpBjB;AAAA;AAAA;AAEA,QAAM,QAAQ;AAEd,QAAM,OAAO,CAAC,UAAU,aAAa;AACnC,YAAM,KAAK,MAAM,UAAU,MAAM,IAAI;AACrC,YAAM,KAAK,MAAM,UAAU,MAAM,IAAI;AACrC,YAAM,aAAa,GAAG,QAAQ,EAAE;AAEhC,UAAI,eAAe,GAAG;AACpB,eAAO;AAAA,MACT;AAEA,YAAM,WAAW,aAAa;AAC9B,YAAM,cAAc,WAAW,KAAK;AACpC,YAAM,aAAa,WAAW,KAAK;AACnC,YAAM,aAAa,CAAC,CAAC,YAAY,WAAW;AAC5C,YAAM,YAAY,CAAC,CAAC,WAAW,WAAW;AAE1C,UAAI,aAAa,CAAC,YAAY;AAQ5B,YAAI,CAAC,WAAW,SAAS,CAAC,WAAW,OAAO;AAC1C,iBAAO;AAAA,QACT;AAGA,YAAI,WAAW,YAAY,WAAW,MAAM,GAAG;AAC7C,cAAI,WAAW,SAAS,CAAC,WAAW,OAAO;AACzC,mBAAO;AAAA,UACT;AACA,iBAAO;AAAA,QACT;AAAA,MACF;AAGA,YAAMC,UAAS,aAAa,QAAQ;AAEpC,UAAI,GAAG,UAAU,GAAG,OAAO;AACzB,eAAOA,UAAS;AAAA,MAClB;AAEA,UAAI,GAAG,UAAU,GAAG,OAAO;AACzB,eAAOA,UAAS;AAAA,MAClB;AAEA,UAAI,GAAG,UAAU,GAAG,OAAO;AACzB,eAAOA,UAAS;AAAA,MAClB;AAGA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC3DjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ,CAAC,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK,EAAE;AACjD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ,CAAC,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK,EAAE;AACjD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ,CAAC,GAAG,UAAU,IAAI,OAAO,GAAG,KAAK,EAAE;AACjD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,aAAa,CAAC,SAAS,YAAY;AACvC,YAAM,SAAS,MAAM,SAAS,OAAO;AACrC,aAAQ,UAAU,OAAO,WAAW,SAAU,OAAO,aAAa;AAAA,IACpE;AACA,WAAO,UAAU;AAAA;AAAA;;;ACPjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,UAAU,CAAC,GAAG,GAAG,UACrB,IAAI,OAAO,GAAG,KAAK,EAAE,QAAQ,IAAI,OAAO,GAAG,KAAK,CAAC;AAEnD,WAAO,UAAU;AAAA;AAAA;;;ACNjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,WAAW,CAAC,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK;AACrD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,eAAe,CAAC,GAAG,MAAM,QAAQ,GAAG,GAAG,IAAI;AACjD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,eAAe,CAAC,GAAG,GAAG,UAAU;AACpC,YAAM,WAAW,IAAI,OAAO,GAAG,KAAK;AACpC,YAAM,WAAW,IAAI,OAAO,GAAG,KAAK;AACpC,aAAO,SAAS,QAAQ,QAAQ,KAAK,SAAS,aAAa,QAAQ;AAAA,IACrE;AACA,WAAO,UAAU;AAAA;AAAA;;;ACRjB;AAAA;AAAA;AAEA,QAAM,eAAe;AACrB,QAAM,OAAO,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,GAAG,MAAM,aAAa,GAAG,GAAG,KAAK,CAAC;AAC3E,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,eAAe;AACrB,QAAM,QAAQ,CAAC,MAAM,UAAU,KAAK,KAAK,CAAC,GAAG,MAAM,aAAa,GAAG,GAAG,KAAK,CAAC;AAC5E,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,KAAK,CAAC,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,IAAI;AACnD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,KAAK,CAAC,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,IAAI;AACnD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,KAAK,CAAC,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,MAAM;AACrD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,MAAM,CAAC,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,MAAM;AACtD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,MAAM,CAAC,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,KAAK;AACrD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAChB,QAAM,MAAM,CAAC,GAAG,GAAG,UAAU,QAAQ,GAAG,GAAG,KAAK,KAAK;AACrD,WAAO,UAAU;AAAA;AAAA;;;ACJjB;AAAA;AAAA;AAEA,QAAM,KAAK;AACX,QAAM,MAAM;AACZ,QAAM,KAAK;AACX,QAAM,MAAM;AACZ,QAAM,KAAK;AACX,QAAM,MAAM;AAEZ,QAAM,MAAM,CAAC,GAAG,IAAI,GAAG,UAAU;AAC/B,cAAQ,IAAI;AAAA,QACV,KAAK;AACH,cAAI,OAAO,MAAM,UAAU;AACzB,gBAAI,EAAE;AAAA,UACR;AACA,cAAI,OAAO,MAAM,UAAU;AACzB,gBAAI,EAAE;AAAA,UACR;AACA,iBAAO,MAAM;AAAA,QAEf,KAAK;AACH,cAAI,OAAO,MAAM,UAAU;AACzB,gBAAI,EAAE;AAAA,UACR;AACA,cAAI,OAAO,MAAM,UAAU;AACzB,gBAAI,EAAE;AAAA,UACR;AACA,iBAAO,MAAM;AAAA,QAEf,KAAK;AAAA,QACL,KAAK;AAAA,QACL,KAAK;AACH,iBAAO,GAAG,GAAG,GAAG,KAAK;AAAA,QAEvB,KAAK;AACH,iBAAO,IAAI,GAAG,GAAG,KAAK;AAAA,QAExB,KAAK;AACH,iBAAO,GAAG,GAAG,GAAG,KAAK;AAAA,QAEvB,KAAK;AACH,iBAAO,IAAI,GAAG,GAAG,KAAK;AAAA,QAExB,KAAK;AACH,iBAAO,GAAG,GAAG,GAAG,KAAK;AAAA,QAEvB,KAAK;AACH,iBAAO,IAAI,GAAG,GAAG,KAAK;AAAA,QAExB;AACE,gBAAM,IAAI,UAAU,qBAAqB,EAAE,EAAE;AAAA,MACjD;AAAA,IACF;AACA,WAAO,UAAU;AAAA;AAAA;;;ACrDjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ;AACd,QAAM,EAAE,QAAQ,IAAI,EAAE,IAAI;AAE1B,QAAM,SAAS,CAAC,SAAS,YAAY;AACnC,UAAI,mBAAmB,QAAQ;AAC7B,eAAO;AAAA,MACT;AAEA,UAAI,OAAO,YAAY,UAAU;AAC/B,kBAAU,OAAO,OAAO;AAAA,MAC1B;AAEA,UAAI,OAAO,YAAY,UAAU;AAC/B,eAAO;AAAA,MACT;AAEA,gBAAU,WAAW,CAAC;AAEtB,UAAI,QAAQ;AACZ,UAAI,CAAC,QAAQ,KAAK;AAChB,gBAAQ,QAAQ,MAAM,QAAQ,oBAAoB,GAAG,EAAE,UAAU,IAAI,GAAG,EAAE,MAAM,CAAC;AAAA,MACnF,OAAO;AAUL,cAAM,iBAAiB,QAAQ,oBAAoB,GAAG,EAAE,aAAa,IAAI,GAAG,EAAE,SAAS;AACvF,YAAI;AACJ,gBAAQ,OAAO,eAAe,KAAK,OAAO,OACrC,CAAC,SAAS,MAAM,QAAQ,MAAM,CAAC,EAAE,WAAW,QAAQ,SACvD;AACA,cAAI,CAAC,SACC,KAAK,QAAQ,KAAK,CAAC,EAAE,WAAW,MAAM,QAAQ,MAAM,CAAC,EAAE,QAAQ;AACnE,oBAAQ;AAAA,UACV;AACA,yBAAe,YAAY,KAAK,QAAQ,KAAK,CAAC,EAAE,SAAS,KAAK,CAAC,EAAE;AAAA,QACnE;AAEA,uBAAe,YAAY;AAAA,MAC7B;AAEA,UAAI,UAAU,MAAM;AAClB,eAAO;AAAA,MACT;AAEA,YAAM,QAAQ,MAAM,CAAC;AACrB,YAAM,QAAQ,MAAM,CAAC,KAAK;AAC1B,YAAM,QAAQ,MAAM,CAAC,KAAK;AAC1B,YAAM,aAAa,QAAQ,qBAAqB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,KAAK;AAC5E,YAAM,QAAQ,QAAQ,qBAAqB,MAAM,CAAC,IAAI,IAAI,MAAM,CAAC,CAAC,KAAK;AAEvE,aAAO,MAAM,GAAG,KAAK,IAAI,KAAK,IAAI,KAAK,GAAG,UAAU,GAAG,KAAK,IAAI,OAAO;AAAA,IACzE;AACA,WAAO,UAAU;AAAA;AAAA;;;AC7DjB;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,YAAY;AAClB,QAAM,SAAS;AAEf,QAAM,WAAW,CAAC,SAAS,YAAY,YAAY;AACjD,UAAI,CAAC,UAAU,cAAc,SAAS,UAAU,GAAG;AACjD,eAAO;AAAA,MACT;AAEA,YAAM,gBAAgB,kBAAkB,SAAS,OAAO;AACxD,aAAO,iBAAiB,aAAa,eAAe,UAAU;AAAA,IAChE;AAEA,QAAM,oBAAoB,CAAC,SAAS,YAAY;AAC9C,YAAM,uBACJ,mBAAmB,SAAS,QAAQ,UAAU;AAGhD,aAAO,MAAM,sBAAsB,OAAO;AAAA,IAC5C;AAEA,QAAM,eAAe,CAAC,SAAS,eAAe;AAC5C,UAAI,aAAa,UAAU,GAAG;AAC5B,eAAO,QAAQ;AAAA,MACjB;AAEA,cAAQ,aAAa,CAAC;AAEtB,cAAQ,YAAY;AAAA,QAClB,KAAK;AACH,kBAAQ,QAAQ;AAChB,kBAAQ,QAAQ;AAChB;AAAA,QACF,KAAK;AACH,kBAAQ,QAAQ;AAChB;AAAA,MACJ;AAEA,aAAO,QAAQ,OAAO;AAAA,IACxB;AAEA,QAAM,eAAe,CAAC,SAAS;AAC7B,aAAO,KAAK,WAAW,KAAK;AAAA,IAC9B;AAEA,WAAO,UAAU;AAAA;AAAA;;;AC/CjB;AAAA;AAAA;AAEA,QAAM,WAAN,MAAe;AAAA,MACb,cAAe;AACb,aAAK,MAAM;AACX,aAAK,MAAM,oBAAI,IAAI;AAAA,MACrB;AAAA,MAEA,IAAK,KAAK;AACR,cAAM,QAAQ,KAAK,IAAI,IAAI,GAAG;AAC9B,YAAI,UAAU,QAAW;AACvB,iBAAO;AAAA,QACT,OAAO;AAEL,eAAK,IAAI,OAAO,GAAG;AACnB,eAAK,IAAI,IAAI,KAAK,KAAK;AACvB,iBAAO;AAAA,QACT;AAAA,MACF;AAAA,MAEA,OAAQ,KAAK;AACX,eAAO,KAAK,IAAI,OAAO,GAAG;AAAA,MAC5B;AAAA,MAEA,IAAK,KAAK,OAAO;AACf,cAAM,UAAU,KAAK,OAAO,GAAG;AAE/B,YAAI,CAAC,WAAW,UAAU,QAAW;AAEnC,cAAI,KAAK,IAAI,QAAQ,KAAK,KAAK;AAC7B,kBAAM,WAAW,KAAK,IAAI,KAAK,EAAE,KAAK,EAAE;AACxC,iBAAK,OAAO,QAAQ;AAAA,UACtB;AAEA,eAAK,IAAI,IAAI,KAAK,KAAK;AAAA,QACzB;AAEA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACzCjB;AAAA;AAAA;AAEA,QAAM,mBAAmB;AAGzB,QAAM,QAAN,MAAM,OAAM;AAAA,MACV,YAAa,OAAO,SAAS;AAC3B,kBAAU,aAAa,OAAO;AAE9B,YAAI,iBAAiB,QAAO;AAC1B,cACE,MAAM,UAAU,CAAC,CAAC,QAAQ,SAC1B,MAAM,sBAAsB,CAAC,CAAC,QAAQ,mBACtC;AACA,mBAAO;AAAA,UACT,OAAO;AACL,mBAAO,IAAI,OAAM,MAAM,KAAK,OAAO;AAAA,UACrC;AAAA,QACF;AAEA,YAAI,iBAAiB,YAAY;AAE/B,eAAK,MAAM,MAAM;AACjB,eAAK,MAAM,CAAC,CAAC,KAAK,CAAC;AACnB,eAAK,YAAY;AACjB,iBAAO;AAAA,QACT;AAEA,aAAK,UAAU;AACf,aAAK,QAAQ,CAAC,CAAC,QAAQ;AACvB,aAAK,oBAAoB,CAAC,CAAC,QAAQ;AAKnC,aAAK,MAAM,MAAM,KAAK,EAAE,QAAQ,kBAAkB,GAAG;AAGrD,aAAK,MAAM,KAAK,IACb,MAAM,IAAI,EAEV,IAAI,OAAK,KAAK,WAAW,EAAE,KAAK,CAAC,CAAC,EAIlC,OAAO,OAAK,EAAE,MAAM;AAEvB,YAAI,CAAC,KAAK,IAAI,QAAQ;AACpB,gBAAM,IAAI,UAAU,yBAAyB,KAAK,GAAG,EAAE;AAAA,QACzD;AAGA,YAAI,KAAK,IAAI,SAAS,GAAG;AAEvB,gBAAM,QAAQ,KAAK,IAAI,CAAC;AACxB,eAAK,MAAM,KAAK,IAAI,OAAO,OAAK,CAAC,UAAU,EAAE,CAAC,CAAC,CAAC;AAChD,cAAI,KAAK,IAAI,WAAW,GAAG;AACzB,iBAAK,MAAM,CAAC,KAAK;AAAA,UACnB,WAAW,KAAK,IAAI,SAAS,GAAG;AAE9B,uBAAW,KAAK,KAAK,KAAK;AACxB,kBAAI,EAAE,WAAW,KAAK,MAAM,EAAE,CAAC,CAAC,GAAG;AACjC,qBAAK,MAAM,CAAC,CAAC;AACb;AAAA,cACF;AAAA,YACF;AAAA,UACF;AAAA,QACF;AAEA,aAAK,YAAY;AAAA,MACnB;AAAA,MAEA,IAAI,QAAS;AACX,YAAI,KAAK,cAAc,QAAW;AAChC,eAAK,YAAY;AACjB,mBAAS,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,KAAK;AACxC,gBAAI,IAAI,GAAG;AACT,mBAAK,aAAa;AAAA,YACpB;AACA,kBAAM,QAAQ,KAAK,IAAI,CAAC;AACxB,qBAAS,IAAI,GAAG,IAAI,MAAM,QAAQ,KAAK;AACrC,kBAAI,IAAI,GAAG;AACT,qBAAK,aAAa;AAAA,cACpB;AACA,mBAAK,aAAa,MAAM,CAAC,EAAE,SAAS,EAAE,KAAK;AAAA,YAC7C;AAAA,UACF;AAAA,QACF;AACA,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,SAAU;AACR,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,WAAY;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,WAAY,OAAO;AAEjB,gBAAQ,MAAM,QAAQ,cAAc,EAAE;AAItC,cAAM,YACH,KAAK,QAAQ,qBAAqB,4BAClC,KAAK,QAAQ,SAAS;AACzB,cAAM,UAAU,WAAW,MAAM;AACjC,cAAM,SAAS,MAAM,IAAI,OAAO;AAChC,YAAI,QAAQ;AACV,iBAAO;AAAA,QACT;AAEA,cAAM,QAAQ,KAAK,QAAQ;AAE3B,cAAM,KAAK,QAAQ,GAAG,EAAE,gBAAgB,IAAI,GAAG,EAAE,WAAW;AAC5D,gBAAQ,MAAM,QAAQ,IAAI,cAAc,KAAK,QAAQ,iBAAiB,CAAC;AACvE,cAAM,kBAAkB,KAAK;AAG7B,gBAAQ,MAAM,QAAQ,GAAG,EAAE,cAAc,GAAG,qBAAqB;AACjE,cAAM,mBAAmB,KAAK;AAG9B,gBAAQ,MAAM,QAAQ,GAAG,EAAE,SAAS,GAAG,gBAAgB;AACvD,cAAM,cAAc,KAAK;AAGzB,gBAAQ,MAAM,QAAQ,GAAG,EAAE,SAAS,GAAG,gBAAgB;AACvD,cAAM,cAAc,KAAK;AAKzB,YAAI,YAAY,MACb,MAAM,GAAG,EACT,IAAI,UAAQ,gBAAgB,MAAM,KAAK,OAAO,CAAC,EAC/C,KAAK,GAAG,EACR,MAAM,KAAK,EAEX,IAAI,UAAQ,YAAY,MAAM,KAAK,OAAO,CAAC;AAE9C,YAAI,OAAO;AAET,sBAAY,UAAU,OAAO,UAAQ;AACnC,kBAAM,wBAAwB,MAAM,KAAK,OAAO;AAChD,mBAAO,CAAC,CAAC,KAAK,MAAM,GAAG,EAAE,eAAe,CAAC;AAAA,UAC3C,CAAC;AAAA,QACH;AACA,cAAM,cAAc,SAAS;AAK7B,cAAM,WAAW,oBAAI,IAAI;AACzB,cAAM,cAAc,UAAU,IAAI,UAAQ,IAAI,WAAW,MAAM,KAAK,OAAO,CAAC;AAC5E,mBAAW,QAAQ,aAAa;AAC9B,cAAI,UAAU,IAAI,GAAG;AACnB,mBAAO,CAAC,IAAI;AAAA,UACd;AACA,mBAAS,IAAI,KAAK,OAAO,IAAI;AAAA,QAC/B;AACA,YAAI,SAAS,OAAO,KAAK,SAAS,IAAI,EAAE,GAAG;AACzC,mBAAS,OAAO,EAAE;AAAA,QACpB;AAEA,cAAM,SAAS,CAAC,GAAG,SAAS,OAAO,CAAC;AACpC,cAAM,IAAI,SAAS,MAAM;AACzB,eAAO;AAAA,MACT;AAAA,MAEA,WAAY,OAAO,SAAS;AAC1B,YAAI,EAAE,iBAAiB,SAAQ;AAC7B,gBAAM,IAAI,UAAU,qBAAqB;AAAA,QAC3C;AAEA,eAAO,KAAK,IAAI,KAAK,CAAC,oBAAoB;AACxC,iBACE,cAAc,iBAAiB,OAAO,KACtC,MAAM,IAAI,KAAK,CAAC,qBAAqB;AACnC,mBACE,cAAc,kBAAkB,OAAO,KACvC,gBAAgB,MAAM,CAAC,mBAAmB;AACxC,qBAAO,iBAAiB,MAAM,CAAC,oBAAoB;AACjD,uBAAO,eAAe,WAAW,iBAAiB,OAAO;AAAA,cAC3D,CAAC;AAAA,YACH,CAAC;AAAA,UAEL,CAAC;AAAA,QAEL,CAAC;AAAA,MACH;AAAA;AAAA,MAGA,KAAM,SAAS;AACb,YAAI,CAAC,SAAS;AACZ,iBAAO;AAAA,QACT;AAEA,YAAI,OAAO,YAAY,UAAU;AAC/B,cAAI;AACF,sBAAU,IAAI,OAAO,SAAS,KAAK,OAAO;AAAA,UAC5C,SAAS,IAAI;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,iBAAS,IAAI,GAAG,IAAI,KAAK,IAAI,QAAQ,KAAK;AACxC,cAAI,QAAQ,KAAK,IAAI,CAAC,GAAG,SAAS,KAAK,OAAO,GAAG;AAC/C,mBAAO;AAAA,UACT;AAAA,QACF;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU;AAEjB,QAAM,MAAM;AACZ,QAAM,QAAQ,IAAI,IAAI;AAEtB,QAAM,eAAe;AACrB,QAAM,aAAa;AACnB,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM;AAAA,MACJ,QAAQ;AAAA,MACR;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,IACF,IAAI;AACJ,QAAM,EAAE,yBAAyB,WAAW,IAAI;AAGhD,QAAM,eAAe,IAAI,OAAO,IAAI,EAAE,KAAK,GAAG,GAAG;AAEjD,QAAM,YAAY,OAAK,EAAE,UAAU;AACnC,QAAM,QAAQ,OAAK,EAAE,UAAU;AAI/B,QAAM,gBAAgB,CAAC,aAAa,YAAY;AAC9C,UAAI,SAAS;AACb,YAAM,uBAAuB,YAAY,MAAM;AAC/C,UAAI,iBAAiB,qBAAqB,IAAI;AAE9C,aAAO,UAAU,qBAAqB,QAAQ;AAC5C,iBAAS,qBAAqB,MAAM,CAAC,oBAAoB;AACvD,iBAAO,eAAe,WAAW,iBAAiB,OAAO;AAAA,QAC3D,CAAC;AAED,yBAAiB,qBAAqB,IAAI;AAAA,MAC5C;AAEA,aAAO;AAAA,IACT;AAKA,QAAM,kBAAkB,CAAC,MAAM,YAAY;AACzC,aAAO,KAAK,QAAQ,GAAG,EAAE,KAAK,GAAG,EAAE;AACnC,YAAM,QAAQ,MAAM,OAAO;AAC3B,aAAO,cAAc,MAAM,OAAO;AAClC,YAAM,SAAS,IAAI;AACnB,aAAO,cAAc,MAAM,OAAO;AAClC,YAAM,UAAU,IAAI;AACpB,aAAO,eAAe,MAAM,OAAO;AACnC,YAAM,UAAU,IAAI;AACpB,aAAO,aAAa,MAAM,OAAO;AACjC,YAAM,SAAS,IAAI;AACnB,aAAO;AAAA,IACT;AAEA,QAAM,MAAM,QAAM,CAAC,MAAM,GAAG,YAAY,MAAM,OAAO,OAAO;AAE5D,QAAM,qBAAqB,CAAC,GAAG,GAAG,MAC/B,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,KAChB,IAAI,CAAC,KAAK,KAAK,CAAC,IAAI,CAAC;AAUxB,QAAM,gBAAgB,CAAC,MAAM,YAAY;AACvC,aAAO,KACJ,KAAK,EACL,MAAM,KAAK,EACX,IAAI,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,EACnC,KAAK,GAAG;AAAA,IACb;AAEA,QAAM,eAAe,CAAC,MAAM,YAAY;AACtC,YAAM,IAAI,QAAQ,QAAQ,GAAG,EAAE,UAAU,IAAI,GAAG,EAAE,KAAK;AAIvD,YAAM,IAAI,QAAQ,oBAAoB,OAAO;AAC7C,aAAO,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,OAAO;AACzC,cAAM,SAAS,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE;AACnC,YAAI;AAEJ,YAAI,IAAI,CAAC,GAAG;AACV,gBAAM;AAAA,QACR,WAAW,IAAI,CAAC,GAAG;AACjB,gBAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AAAA,QACjC,WAAW,IAAI,CAAC,GAAG;AAEjB,gBAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,QACzC,WAAW,IAAI;AACb,gBAAM,mBAAmB,EAAE;AAC3B,gBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,QAClB,OAAO;AAEL,gBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,QAClB;AAEA,cAAM,gBAAgB,GAAG;AACzB,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAUA,QAAM,gBAAgB,CAAC,MAAM,YAAY;AACvC,aAAO,KACJ,KAAK,EACL,MAAM,KAAK,EACX,IAAI,CAAC,MAAM,aAAa,GAAG,OAAO,CAAC,EACnC,KAAK,GAAG;AAAA,IACb;AAEA,QAAM,eAAe,CAAC,MAAM,YAAY;AACtC,YAAM,SAAS,MAAM,OAAO;AAC5B,YAAM,IAAI,QAAQ,QAAQ,GAAG,EAAE,UAAU,IAAI,GAAG,EAAE,KAAK;AACvD,YAAM,IAAI,QAAQ,oBAAoB,OAAO;AAC7C,aAAO,KAAK,QAAQ,GAAG,CAAC,GAAG,GAAG,GAAG,GAAG,OAAO;AACzC,cAAM,SAAS,MAAM,GAAG,GAAG,GAAG,GAAG,EAAE;AACnC,YAAI;AAEJ,YAAI,IAAI,CAAC,GAAG;AACV,gBAAM;AAAA,QACR,WAAW,IAAI,CAAC,GAAG;AACjB,gBAAM,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC;AAAA,QACjC,WAAW,IAAI,CAAC,GAAG;AACjB,cAAI,MAAM,KAAK;AACb,kBAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,UACzC,OAAO;AACL,kBAAM,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,IAAI,CAAC;AAAA,UACpC;AAAA,QACF,WAAW,IAAI;AACb,gBAAM,mBAAmB,EAAE;AAC3B,cAAI,MAAM,KAAK;AACb,gBAAI,MAAM,KAAK;AACb,oBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,YACvB,OAAO;AACL,oBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAC1B,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,YAClB;AAAA,UACF,OAAO;AACL,kBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,EAC1B,KAAK,CAAC,IAAI,CAAC;AAAA,UACb;AAAA,QACF,OAAO;AACL,gBAAM,OAAO;AACb,cAAI,MAAM,KAAK;AACb,gBAAI,MAAM,KAAK;AACb,oBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,YACvB,OAAO;AACL,oBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CACrB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,YAClB;AAAA,UACF,OAAO;AACL,kBAAM,KAAK,CAAC,IAAI,CAAC,IAAI,CACrB,KAAK,CAAC,IAAI,CAAC;AAAA,UACb;AAAA,QACF;AAEA,cAAM,gBAAgB,GAAG;AACzB,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAEA,QAAM,iBAAiB,CAAC,MAAM,YAAY;AACxC,YAAM,kBAAkB,MAAM,OAAO;AACrC,aAAO,KACJ,MAAM,KAAK,EACX,IAAI,CAAC,MAAM,cAAc,GAAG,OAAO,CAAC,EACpC,KAAK,GAAG;AAAA,IACb;AAEA,QAAM,gBAAgB,CAAC,MAAM,YAAY;AACvC,aAAO,KAAK,KAAK;AACjB,YAAM,IAAI,QAAQ,QAAQ,GAAG,EAAE,WAAW,IAAI,GAAG,EAAE,MAAM;AACzD,aAAO,KAAK,QAAQ,GAAG,CAAC,KAAK,MAAM,GAAG,GAAG,GAAG,OAAO;AACjD,cAAM,UAAU,MAAM,KAAK,MAAM,GAAG,GAAG,GAAG,EAAE;AAC5C,YAAI,mBAAmB,GAAG,GAAG,CAAC,GAAG;AAC/B,iBAAO;AAAA,QACT;AAEA,cAAM,KAAK,IAAI,CAAC;AAChB,cAAM,KAAK,MAAM,IAAI,CAAC;AACtB,cAAM,KAAK,MAAM,IAAI,CAAC;AACtB,cAAM,OAAO;AAEb,YAAI,SAAS,OAAO,MAAM;AACxB,iBAAO;AAAA,QACT;AAIA,aAAK,QAAQ,oBAAoB,OAAO;AAExC,YAAI,IAAI;AACN,cAAI,SAAS,OAAO,SAAS,KAAK;AAEhC,kBAAM;AAAA,UACR,OAAO;AAEL,kBAAM;AAAA,UACR;AAAA,QACF,WAAW,QAAQ,MAAM;AAGvB,cAAI,IAAI;AACN,gBAAI;AAAA,UACN;AACA,cAAI;AAEJ,cAAI,SAAS,KAAK;AAGhB,mBAAO;AACP,gBAAI,IAAI;AACN,kBAAI,CAAC,IAAI;AACT,kBAAI;AACJ,kBAAI;AAAA,YACN,OAAO;AACL,kBAAI,CAAC,IAAI;AACT,kBAAI;AAAA,YACN;AAAA,UACF,WAAW,SAAS,MAAM;AAGxB,mBAAO;AACP,gBAAI,IAAI;AACN,kBAAI,CAAC,IAAI;AAAA,YACX,OAAO;AACL,kBAAI,CAAC,IAAI;AAAA,YACX;AAAA,UACF;AAEA,cAAI,SAAS,KAAK;AAChB,iBAAK;AAAA,UACP;AAEA,gBAAM,GAAG,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,EAAE;AAAA,QAClC,WAAW,IAAI;AACb,gBAAM,KAAK,CAAC,OAAO,EAAE,KAAK,CAAC,IAAI,CAAC;AAAA,QAClC,WAAW,IAAI;AACb,gBAAM,KAAK,CAAC,IAAI,CAAC,KAAK,EACtB,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC;AAAA,QAClB;AAEA,cAAM,iBAAiB,GAAG;AAE1B,eAAO;AAAA,MACT,CAAC;AAAA,IACH;AAIA,QAAM,eAAe,CAAC,MAAM,YAAY;AACtC,YAAM,gBAAgB,MAAM,OAAO;AAEnC,aAAO,KACJ,KAAK,EACL,QAAQ,GAAG,EAAE,IAAI,GAAG,EAAE;AAAA,IAC3B;AAEA,QAAM,cAAc,CAAC,MAAM,YAAY;AACrC,YAAM,eAAe,MAAM,OAAO;AAClC,aAAO,KACJ,KAAK,EACL,QAAQ,GAAG,QAAQ,oBAAoB,EAAE,UAAU,EAAE,IAAI,GAAG,EAAE;AAAA,IACnE;AAQA,QAAM,gBAAgB,WAAS,CAAC,IAC9B,MAAM,IAAI,IAAI,IAAI,KAAK,IACvB,IAAI,IAAI,IAAI,IAAI,QAAQ;AACxB,UAAI,IAAI,EAAE,GAAG;AACX,eAAO;AAAA,MACT,WAAW,IAAI,EAAE,GAAG;AAClB,eAAO,KAAK,EAAE,OAAO,QAAQ,OAAO,EAAE;AAAA,MACxC,WAAW,IAAI,EAAE,GAAG;AAClB,eAAO,KAAK,EAAE,IAAI,EAAE,KAAK,QAAQ,OAAO,EAAE;AAAA,MAC5C,WAAW,KAAK;AACd,eAAO,KAAK,IAAI;AAAA,MAClB,OAAO;AACL,eAAO,KAAK,IAAI,GAAG,QAAQ,OAAO,EAAE;AAAA,MACtC;AAEA,UAAI,IAAI,EAAE,GAAG;AACX,aAAK;AAAA,MACP,WAAW,IAAI,EAAE,GAAG;AAClB,aAAK,IAAI,CAAC,KAAK,CAAC;AAAA,MAClB,WAAW,IAAI,EAAE,GAAG;AAClB,aAAK,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;AAAA,MACxB,WAAW,KAAK;AACd,aAAK,KAAK,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,GAAG;AAAA,MACjC,WAAW,OAAO;AAChB,aAAK,IAAI,EAAE,IAAI,EAAE,IAAI,CAAC,KAAK,CAAC;AAAA,MAC9B,OAAO;AACL,aAAK,KAAK,EAAE;AAAA,MACd;AAEA,aAAO,GAAG,IAAI,IAAI,EAAE,GAAG,KAAK;AAAA,IAC9B;AAEA,QAAM,UAAU,CAAC,KAAK,SAAS,YAAY;AACzC,eAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,YAAI,CAAC,IAAI,CAAC,EAAE,KAAK,OAAO,GAAG;AACzB,iBAAO;AAAA,QACT;AAAA,MACF;AAEA,UAAI,QAAQ,WAAW,UAAU,CAAC,QAAQ,mBAAmB;AAM3D,iBAAS,IAAI,GAAG,IAAI,IAAI,QAAQ,KAAK;AACnC,gBAAM,IAAI,CAAC,EAAE,MAAM;AACnB,cAAI,IAAI,CAAC,EAAE,WAAW,WAAW,KAAK;AACpC;AAAA,UACF;AAEA,cAAI,IAAI,CAAC,EAAE,OAAO,WAAW,SAAS,GAAG;AACvC,kBAAM,UAAU,IAAI,CAAC,EAAE;AACvB,gBAAI,QAAQ,UAAU,QAAQ,SAC1B,QAAQ,UAAU,QAAQ,SAC1B,QAAQ,UAAU,QAAQ,OAAO;AACnC,qBAAO;AAAA,YACT;AAAA,UACF;AAAA,QACF;AAGA,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAAA;AAAA;;;AChkBA;AAAA;AAAA;AAEA,QAAM,MAAM,OAAO,YAAY;AAE/B,QAAM,aAAN,MAAM,YAAW;AAAA,MACf,WAAW,MAAO;AAChB,eAAO;AAAA,MACT;AAAA,MAEA,YAAa,MAAM,SAAS;AAC1B,kBAAU,aAAa,OAAO;AAE9B,YAAI,gBAAgB,aAAY;AAC9B,cAAI,KAAK,UAAU,CAAC,CAAC,QAAQ,OAAO;AAClC,mBAAO;AAAA,UACT,OAAO;AACL,mBAAO,KAAK;AAAA,UACd;AAAA,QACF;AAEA,eAAO,KAAK,KAAK,EAAE,MAAM,KAAK,EAAE,KAAK,GAAG;AACxC,cAAM,cAAc,MAAM,OAAO;AACjC,aAAK,UAAU;AACf,aAAK,QAAQ,CAAC,CAAC,QAAQ;AACvB,aAAK,MAAM,IAAI;AAEf,YAAI,KAAK,WAAW,KAAK;AACvB,eAAK,QAAQ;AAAA,QACf,OAAO;AACL,eAAK,QAAQ,KAAK,WAAW,KAAK,OAAO;AAAA,QAC3C;AAEA,cAAM,QAAQ,IAAI;AAAA,MACpB;AAAA,MAEA,MAAO,MAAM;AACX,cAAM,IAAI,KAAK,QAAQ,QAAQ,GAAG,EAAE,eAAe,IAAI,GAAG,EAAE,UAAU;AACtE,cAAM,IAAI,KAAK,MAAM,CAAC;AAEtB,YAAI,CAAC,GAAG;AACN,gBAAM,IAAI,UAAU,uBAAuB,IAAI,EAAE;AAAA,QACnD;AAEA,aAAK,WAAW,EAAE,CAAC,MAAM,SAAY,EAAE,CAAC,IAAI;AAC5C,YAAI,KAAK,aAAa,KAAK;AACzB,eAAK,WAAW;AAAA,QAClB;AAGA,YAAI,CAAC,EAAE,CAAC,GAAG;AACT,eAAK,SAAS;AAAA,QAChB,OAAO;AACL,eAAK,SAAS,IAAI,OAAO,EAAE,CAAC,GAAG,KAAK,QAAQ,KAAK;AAAA,QACnD;AAAA,MACF;AAAA,MAEA,WAAY;AACV,eAAO,KAAK;AAAA,MACd;AAAA,MAEA,KAAM,SAAS;AACb,cAAM,mBAAmB,SAAS,KAAK,QAAQ,KAAK;AAEpD,YAAI,KAAK,WAAW,OAAO,YAAY,KAAK;AAC1C,iBAAO;AAAA,QACT;AAEA,YAAI,OAAO,YAAY,UAAU;AAC/B,cAAI;AACF,sBAAU,IAAI,OAAO,SAAS,KAAK,OAAO;AAAA,UAC5C,SAAS,IAAI;AACX,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO,IAAI,SAAS,KAAK,UAAU,KAAK,QAAQ,KAAK,OAAO;AAAA,MAC9D;AAAA,MAEA,WAAY,MAAM,SAAS;AACzB,YAAI,EAAE,gBAAgB,cAAa;AACjC,gBAAM,IAAI,UAAU,0BAA0B;AAAA,QAChD;AAEA,YAAI,KAAK,aAAa,IAAI;AACxB,cAAI,KAAK,UAAU,IAAI;AACrB,mBAAO;AAAA,UACT;AACA,iBAAO,IAAI,MAAM,KAAK,OAAO,OAAO,EAAE,KAAK,KAAK,KAAK;AAAA,QACvD,WAAW,KAAK,aAAa,IAAI;AAC/B,cAAI,KAAK,UAAU,IAAI;AACrB,mBAAO;AAAA,UACT;AACA,iBAAO,IAAI,MAAM,KAAK,OAAO,OAAO,EAAE,KAAK,KAAK,MAAM;AAAA,QACxD;AAEA,kBAAU,aAAa,OAAO;AAG9B,YAAI,QAAQ,sBACT,KAAK,UAAU,cAAc,KAAK,UAAU,aAAa;AAC1D,iBAAO;AAAA,QACT;AACA,YAAI,CAAC,QAAQ,sBACV,KAAK,MAAM,WAAW,QAAQ,KAAK,KAAK,MAAM,WAAW,QAAQ,IAAI;AACtE,iBAAO;AAAA,QACT;AAGA,YAAI,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAAG;AAClE,iBAAO;AAAA,QACT;AAEA,YAAI,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAAG;AAClE,iBAAO;AAAA,QACT;AAEA,YACG,KAAK,OAAO,YAAY,KAAK,OAAO,WACrC,KAAK,SAAS,SAAS,GAAG,KAAK,KAAK,SAAS,SAAS,GAAG,GAAG;AAC5D,iBAAO;AAAA,QACT;AAEA,YAAI,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO,KAC5C,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAAG;AAChE,iBAAO;AAAA,QACT;AAEA,YAAI,IAAI,KAAK,QAAQ,KAAK,KAAK,QAAQ,OAAO,KAC5C,KAAK,SAAS,WAAW,GAAG,KAAK,KAAK,SAAS,WAAW,GAAG,GAAG;AAChE,iBAAO;AAAA,QACT;AACA,eAAO;AAAA,MACT;AAAA,IACF;AAEA,WAAO,UAAU;AAEjB,QAAM,eAAe;AACrB,QAAM,EAAE,QAAQ,IAAI,EAAE,IAAI;AAC1B,QAAM,MAAM;AACZ,QAAM,QAAQ;AACd,QAAM,SAAS;AACf,QAAM,QAAQ;AAAA;AAAA;;;AC9Id;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,YAAY,CAAC,SAAS,OAAO,YAAY;AAC7C,UAAI;AACF,gBAAQ,IAAI,MAAM,OAAO,OAAO;AAAA,MAClC,SAAS,IAAI;AACX,eAAO;AAAA,MACT;AACA,aAAO,MAAM,KAAK,OAAO;AAAA,IAC3B;AACA,WAAO,UAAU;AAAA;AAAA;;;ACXjB;AAAA;AAAA;AAEA,QAAM,QAAQ;AAGd,QAAM,gBAAgB,CAAC,OAAO,YAC5B,IAAI,MAAM,OAAO,OAAO,EAAE,IACvB,IAAI,UAAQ,KAAK,IAAI,OAAK,EAAE,KAAK,EAAE,KAAK,GAAG,EAAE,KAAK,EAAE,MAAM,GAAG,CAAC;AAEnE,WAAO,UAAU;AAAA;AAAA;;;ACTjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ;AAEd,QAAM,gBAAgB,CAAC,UAAU,OAAO,YAAY;AAClD,UAAI,MAAM;AACV,UAAI,QAAQ;AACZ,UAAI,WAAW;AACf,UAAI;AACF,mBAAW,IAAI,MAAM,OAAO,OAAO;AAAA,MACrC,SAAS,IAAI;AACX,eAAO;AAAA,MACT;AACA,eAAS,QAAQ,CAAC,MAAM;AACtB,YAAI,SAAS,KAAK,CAAC,GAAG;AAEpB,cAAI,CAAC,OAAO,MAAM,QAAQ,CAAC,MAAM,IAAI;AAEnC,kBAAM;AACN,oBAAQ,IAAI,OAAO,KAAK,OAAO;AAAA,UACjC;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AACA,WAAO,UAAU;AAAA;AAAA;;;AC1BjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ;AACd,QAAM,gBAAgB,CAAC,UAAU,OAAO,YAAY;AAClD,UAAI,MAAM;AACV,UAAI,QAAQ;AACZ,UAAI,WAAW;AACf,UAAI;AACF,mBAAW,IAAI,MAAM,OAAO,OAAO;AAAA,MACrC,SAAS,IAAI;AACX,eAAO;AAAA,MACT;AACA,eAAS,QAAQ,CAAC,MAAM;AACtB,YAAI,SAAS,KAAK,CAAC,GAAG;AAEpB,cAAI,CAAC,OAAO,MAAM,QAAQ,CAAC,MAAM,GAAG;AAElC,kBAAM;AACN,oBAAQ,IAAI,OAAO,KAAK,OAAO;AAAA,UACjC;AAAA,QACF;AAAA,MACF,CAAC;AACD,aAAO;AAAA,IACT;AACA,WAAO,UAAU;AAAA;AAAA;;;ACzBjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,QAAQ;AACd,QAAM,KAAK;AAEX,QAAM,aAAa,CAAC,OAAO,UAAU;AACnC,cAAQ,IAAI,MAAM,OAAO,KAAK;AAE9B,UAAI,SAAS,IAAI,OAAO,OAAO;AAC/B,UAAI,MAAM,KAAK,MAAM,GAAG;AACtB,eAAO;AAAA,MACT;AAEA,eAAS,IAAI,OAAO,SAAS;AAC7B,UAAI,MAAM,KAAK,MAAM,GAAG;AACtB,eAAO;AAAA,MACT;AAEA,eAAS;AACT,eAAS,IAAI,GAAG,IAAI,MAAM,IAAI,QAAQ,EAAE,GAAG;AACzC,cAAM,cAAc,MAAM,IAAI,CAAC;AAE/B,YAAI,SAAS;AACb,oBAAY,QAAQ,CAAC,eAAe;AAElC,gBAAM,UAAU,IAAI,OAAO,WAAW,OAAO,OAAO;AACpD,kBAAQ,WAAW,UAAU;AAAA,YAC3B,KAAK;AACH,kBAAI,QAAQ,WAAW,WAAW,GAAG;AACnC,wBAAQ;AAAA,cACV,OAAO;AACL,wBAAQ,WAAW,KAAK,CAAC;AAAA,cAC3B;AACA,sBAAQ,MAAM,QAAQ,OAAO;AAAA;AAAA,YAE/B,KAAK;AAAA,YACL,KAAK;AACH,kBAAI,CAAC,UAAU,GAAG,SAAS,MAAM,GAAG;AAClC,yBAAS;AAAA,cACX;AACA;AAAA,YACF,KAAK;AAAA,YACL,KAAK;AAEH;AAAA;AAAA,YAEF;AACE,oBAAM,IAAI,MAAM,yBAAyB,WAAW,QAAQ,EAAE;AAAA,UAClE;AAAA,QACF,CAAC;AACD,YAAI,WAAW,CAAC,UAAU,GAAG,QAAQ,MAAM,IAAI;AAC7C,mBAAS;AAAA,QACX;AAAA,MACF;AAEA,UAAI,UAAU,MAAM,KAAK,MAAM,GAAG;AAChC,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AACA,WAAO,UAAU;AAAA;AAAA;;;AC9DjB,IAAAC,iBAAA;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,aAAa,CAAC,OAAO,YAAY;AACrC,UAAI;AAGF,eAAO,IAAI,MAAM,OAAO,OAAO,EAAE,SAAS;AAAA,MAC5C,SAAS,IAAI;AACX,eAAO;AAAA,MACT;AAAA,IACF;AACA,WAAO,UAAU;AAAA;AAAA;;;ACZjB;AAAA;AAAA;AAEA,QAAM,SAAS;AACf,QAAM,aAAa;AACnB,QAAM,EAAE,IAAI,IAAI;AAChB,QAAM,QAAQ;AACd,QAAM,YAAY;AAClB,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,MAAM;AACZ,QAAM,MAAM;AAEZ,QAAM,UAAU,CAAC,SAAS,OAAO,MAAM,YAAY;AACjD,gBAAU,IAAI,OAAO,SAAS,OAAO;AACrC,cAAQ,IAAI,MAAM,OAAO,OAAO;AAEhC,UAAI,MAAM,OAAO,MAAM,MAAM;AAC7B,cAAQ,MAAM;AAAA,QACZ,KAAK;AACH,iBAAO;AACP,kBAAQ;AACR,iBAAO;AACP,iBAAO;AACP,kBAAQ;AACR;AAAA,QACF,KAAK;AACH,iBAAO;AACP,kBAAQ;AACR,iBAAO;AACP,iBAAO;AACP,kBAAQ;AACR;AAAA,QACF;AACE,gBAAM,IAAI,UAAU,uCAAuC;AAAA,MAC/D;AAGA,UAAI,UAAU,SAAS,OAAO,OAAO,GAAG;AACtC,eAAO;AAAA,MACT;AAKA,eAAS,IAAI,GAAG,IAAI,MAAM,IAAI,QAAQ,EAAE,GAAG;AACzC,cAAM,cAAc,MAAM,IAAI,CAAC;AAE/B,YAAI,OAAO;AACX,YAAI,MAAM;AAEV,oBAAY,QAAQ,CAAC,eAAe;AAClC,cAAI,WAAW,WAAW,KAAK;AAC7B,yBAAa,IAAI,WAAW,SAAS;AAAA,UACvC;AACA,iBAAO,QAAQ;AACf,gBAAM,OAAO;AACb,cAAI,KAAK,WAAW,QAAQ,KAAK,QAAQ,OAAO,GAAG;AACjD,mBAAO;AAAA,UACT,WAAW,KAAK,WAAW,QAAQ,IAAI,QAAQ,OAAO,GAAG;AACvD,kBAAM;AAAA,UACR;AAAA,QACF,CAAC;AAID,YAAI,KAAK,aAAa,QAAQ,KAAK,aAAa,OAAO;AACrD,iBAAO;AAAA,QACT;AAIA,aAAK,CAAC,IAAI,YAAY,IAAI,aAAa,SACnC,MAAM,SAAS,IAAI,MAAM,GAAG;AAC9B,iBAAO;AAAA,QACT,WAAW,IAAI,aAAa,SAAS,KAAK,SAAS,IAAI,MAAM,GAAG;AAC9D,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACjFjB;AAAA;AAAA;AAGA,QAAM,UAAU;AAChB,QAAM,MAAM,CAAC,SAAS,OAAO,YAAY,QAAQ,SAAS,OAAO,KAAK,OAAO;AAC7E,WAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA;AAAA;AAEA,QAAM,UAAU;AAEhB,QAAM,MAAM,CAAC,SAAS,OAAO,YAAY,QAAQ,SAAS,OAAO,KAAK,OAAO;AAC7E,WAAO,UAAU;AAAA;AAAA;;;ACLjB;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,aAAa,CAAC,IAAI,IAAI,YAAY;AACtC,WAAK,IAAI,MAAM,IAAI,OAAO;AAC1B,WAAK,IAAI,MAAM,IAAI,OAAO;AAC1B,aAAO,GAAG,WAAW,IAAI,OAAO;AAAA,IAClC;AACA,WAAO,UAAU;AAAA;AAAA;;;ACRjB;AAAA;AAAA;AAKA,QAAM,YAAY;AAClB,QAAM,UAAU;AAChB,WAAO,UAAU,CAAC,UAAU,OAAO,YAAY;AAC7C,YAAM,MAAM,CAAC;AACb,UAAI,QAAQ;AACZ,UAAI,OAAO;AACX,YAAM,IAAI,SAAS,KAAK,CAAC,GAAG,MAAM,QAAQ,GAAG,GAAG,OAAO,CAAC;AACxD,iBAAW,WAAW,GAAG;AACvB,cAAM,WAAW,UAAU,SAAS,OAAO,OAAO;AAClD,YAAI,UAAU;AACZ,iBAAO;AACP,cAAI,CAAC,OAAO;AACV,oBAAQ;AAAA,UACV;AAAA,QACF,OAAO;AACL,cAAI,MAAM;AACR,gBAAI,KAAK,CAAC,OAAO,IAAI,CAAC;AAAA,UACxB;AACA,iBAAO;AACP,kBAAQ;AAAA,QACV;AAAA,MACF;AACA,UAAI,OAAO;AACT,YAAI,KAAK,CAAC,OAAO,IAAI,CAAC;AAAA,MACxB;AAEA,YAAM,SAAS,CAAC;AAChB,iBAAW,CAAC,KAAK,GAAG,KAAK,KAAK;AAC5B,YAAI,QAAQ,KAAK;AACf,iBAAO,KAAK,GAAG;AAAA,QACjB,WAAW,CAAC,OAAO,QAAQ,EAAE,CAAC,GAAG;AAC/B,iBAAO,KAAK,GAAG;AAAA,QACjB,WAAW,CAAC,KAAK;AACf,iBAAO,KAAK,KAAK,GAAG,EAAE;AAAA,QACxB,WAAW,QAAQ,EAAE,CAAC,GAAG;AACvB,iBAAO,KAAK,KAAK,GAAG,EAAE;AAAA,QACxB,OAAO;AACL,iBAAO,KAAK,GAAG,GAAG,MAAM,GAAG,EAAE;AAAA,QAC/B;AAAA,MACF;AACA,YAAM,aAAa,OAAO,KAAK,MAAM;AACrC,YAAM,WAAW,OAAO,MAAM,QAAQ,WAAW,MAAM,MAAM,OAAO,KAAK;AACzE,aAAO,WAAW,SAAS,SAAS,SAAS,aAAa;AAAA,IAC5D;AAAA;AAAA;;;AChDA;AAAA;AAAA;AAEA,QAAM,QAAQ;AACd,QAAM,aAAa;AACnB,QAAM,EAAE,IAAI,IAAI;AAChB,QAAM,YAAY;AAClB,QAAM,UAAU;AAsChB,QAAM,SAAS,CAAC,KAAK,KAAK,UAAU,CAAC,MAAM;AACzC,UAAI,QAAQ,KAAK;AACf,eAAO;AAAA,MACT;AAEA,YAAM,IAAI,MAAM,KAAK,OAAO;AAC5B,YAAM,IAAI,MAAM,KAAK,OAAO;AAC5B,UAAI,aAAa;AAEjB,YAAO,YAAW,aAAa,IAAI,KAAK;AACtC,mBAAW,aAAa,IAAI,KAAK;AAC/B,gBAAM,QAAQ,aAAa,WAAW,WAAW,OAAO;AACxD,uBAAa,cAAc,UAAU;AACrC,cAAI,OAAO;AACT,qBAAS;AAAA,UACX;AAAA,QACF;AAKA,YAAI,YAAY;AACd,iBAAO;AAAA,QACT;AAAA,MACF;AACA,aAAO;AAAA,IACT;AAEA,QAAM,+BAA+B,CAAC,IAAI,WAAW,WAAW,CAAC;AACjE,QAAM,iBAAiB,CAAC,IAAI,WAAW,SAAS,CAAC;AAEjD,QAAM,eAAe,CAAC,KAAK,KAAK,YAAY;AAC1C,UAAI,QAAQ,KAAK;AACf,eAAO;AAAA,MACT;AAEA,UAAI,IAAI,WAAW,KAAK,IAAI,CAAC,EAAE,WAAW,KAAK;AAC7C,YAAI,IAAI,WAAW,KAAK,IAAI,CAAC,EAAE,WAAW,KAAK;AAC7C,iBAAO;AAAA,QACT,WAAW,QAAQ,mBAAmB;AACpC,gBAAM;AAAA,QACR,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAEA,UAAI,IAAI,WAAW,KAAK,IAAI,CAAC,EAAE,WAAW,KAAK;AAC7C,YAAI,QAAQ,mBAAmB;AAC7B,iBAAO;AAAA,QACT,OAAO;AACL,gBAAM;AAAA,QACR;AAAA,MACF;AAEA,YAAM,QAAQ,oBAAI,IAAI;AACtB,UAAI,IAAI;AACR,iBAAW,KAAK,KAAK;AACnB,YAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AAC7C,eAAK,SAAS,IAAI,GAAG,OAAO;AAAA,QAC9B,WAAW,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AACpD,eAAK,QAAQ,IAAI,GAAG,OAAO;AAAA,QAC7B,OAAO;AACL,gBAAM,IAAI,EAAE,MAAM;AAAA,QACpB;AAAA,MACF;AAEA,UAAI,MAAM,OAAO,GAAG;AAClB,eAAO;AAAA,MACT;AAEA,UAAI;AACJ,UAAI,MAAM,IAAI;AACZ,mBAAW,QAAQ,GAAG,QAAQ,GAAG,QAAQ,OAAO;AAChD,YAAI,WAAW,GAAG;AAChB,iBAAO;AAAA,QACT,WAAW,aAAa,MAAM,GAAG,aAAa,QAAQ,GAAG,aAAa,OAAO;AAC3E,iBAAO;AAAA,QACT;AAAA,MACF;AAGA,iBAAW,MAAM,OAAO;AACtB,YAAI,MAAM,CAAC,UAAU,IAAI,OAAO,EAAE,GAAG,OAAO,GAAG;AAC7C,iBAAO;AAAA,QACT;AAEA,YAAI,MAAM,CAAC,UAAU,IAAI,OAAO,EAAE,GAAG,OAAO,GAAG;AAC7C,iBAAO;AAAA,QACT;AAEA,mBAAW,KAAK,KAAK;AACnB,cAAI,CAAC,UAAU,IAAI,OAAO,CAAC,GAAG,OAAO,GAAG;AACtC,mBAAO;AAAA,UACT;AAAA,QACF;AAEA,eAAO;AAAA,MACT;AAEA,UAAI,QAAQ;AACZ,UAAI,UAAU;AAGd,UAAI,eAAe,MACjB,CAAC,QAAQ,qBACT,GAAG,OAAO,WAAW,SAAS,GAAG,SAAS;AAC5C,UAAI,eAAe,MACjB,CAAC,QAAQ,qBACT,GAAG,OAAO,WAAW,SAAS,GAAG,SAAS;AAE5C,UAAI,gBAAgB,aAAa,WAAW,WAAW,KACnD,GAAG,aAAa,OAAO,aAAa,WAAW,CAAC,MAAM,GAAG;AAC3D,uBAAe;AAAA,MACjB;AAEA,iBAAW,KAAK,KAAK;AACnB,mBAAW,YAAY,EAAE,aAAa,OAAO,EAAE,aAAa;AAC5D,mBAAW,YAAY,EAAE,aAAa,OAAO,EAAE,aAAa;AAC5D,YAAI,IAAI;AACN,cAAI,cAAc;AAChB,gBAAI,EAAE,OAAO,cAAc,EAAE,OAAO,WAAW,UAC3C,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,OAAO;AACzC,6BAAe;AAAA,YACjB;AAAA,UACF;AACA,cAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AAC7C,qBAAS,SAAS,IAAI,GAAG,OAAO;AAChC,gBAAI,WAAW,KAAK,WAAW,IAAI;AACjC,qBAAO;AAAA,YACT;AAAA,UACF,WAAW,GAAG,aAAa,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG;AACrD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,IAAI;AACN,cAAI,cAAc;AAChB,gBAAI,EAAE,OAAO,cAAc,EAAE,OAAO,WAAW,UAC3C,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,SAChC,EAAE,OAAO,UAAU,aAAa,OAAO;AACzC,6BAAe;AAAA,YACjB;AAAA,UACF;AACA,cAAI,EAAE,aAAa,OAAO,EAAE,aAAa,MAAM;AAC7C,oBAAQ,QAAQ,IAAI,GAAG,OAAO;AAC9B,gBAAI,UAAU,KAAK,UAAU,IAAI;AAC/B,qBAAO;AAAA,YACT;AAAA,UACF,WAAW,GAAG,aAAa,QAAQ,CAAC,EAAE,KAAK,GAAG,MAAM,GAAG;AACrD,mBAAO;AAAA,UACT;AAAA,QACF;AACA,YAAI,CAAC,EAAE,aAAa,MAAM,OAAO,aAAa,GAAG;AAC/C,iBAAO;AAAA,QACT;AAAA,MACF;AAKA,UAAI,MAAM,YAAY,CAAC,MAAM,aAAa,GAAG;AAC3C,eAAO;AAAA,MACT;AAEA,UAAI,MAAM,YAAY,CAAC,MAAM,aAAa,GAAG;AAC3C,eAAO;AAAA,MACT;AAKA,UAAI,gBAAgB,cAAc;AAChC,eAAO;AAAA,MACT;AAEA,aAAO;AAAA,IACT;AAGA,QAAM,WAAW,CAAC,GAAG,GAAG,YAAY;AAClC,UAAI,CAAC,GAAG;AACN,eAAO;AAAA,MACT;AACA,YAAM,OAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,OAAO;AAChD,aAAO,OAAO,IAAI,IACd,OAAO,IAAI,IACX,EAAE,aAAa,OAAO,EAAE,aAAa,OAAO,IAC5C;AAAA,IACN;AAGA,QAAM,UAAU,CAAC,GAAG,GAAG,YAAY;AACjC,UAAI,CAAC,GAAG;AACN,eAAO;AAAA,MACT;AACA,YAAM,OAAO,QAAQ,EAAE,QAAQ,EAAE,QAAQ,OAAO;AAChD,aAAO,OAAO,IAAI,IACd,OAAO,IAAI,IACX,EAAE,aAAa,OAAO,EAAE,aAAa,OAAO,IAC5C;AAAA,IACN;AAEA,WAAO,UAAU;AAAA;AAAA;;;ACxPjB,IAAAC,kBAAA;AAAA;AAAA;AAGA,QAAM,aAAa;AACnB,QAAM,YAAY;AAClB,QAAM,SAAS;AACf,QAAM,cAAc;AACpB,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,MAAM;AACZ,QAAM,OAAO;AACb,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,QAAQ;AACd,QAAM,aAAa;AACnB,QAAM,UAAU;AAChB,QAAM,WAAW;AACjB,QAAM,eAAe;AACrB,QAAM,eAAe;AACrB,QAAM,OAAO;AACb,QAAM,QAAQ;AACd,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,KAAK;AACX,QAAM,MAAM;AACZ,QAAM,MAAM;AACZ,QAAM,MAAM;AACZ,QAAM,MAAM;AACZ,QAAM,SAAS;AACf,QAAM,WAAW;AACjB,QAAM,aAAa;AACnB,QAAM,QAAQ;AACd,QAAM,YAAY;AAClB,QAAM,gBAAgB;AACtB,QAAM,gBAAgB;AACtB,QAAM,gBAAgB;AACtB,QAAM,aAAa;AACnB,QAAM,aAAa;AACnB,QAAM,UAAU;AAChB,QAAM,MAAM;AACZ,QAAM,MAAM;AACZ,QAAM,aAAa;AACnB,QAAM,gBAAgB;AACtB,QAAM,SAAS;AACf,WAAO,UAAU;AAAA,MACf;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA;AAAA,MACA,IAAI,WAAW;AAAA,MACf,KAAK,WAAW;AAAA,MAChB,QAAQ,WAAW;AAAA,MACnB,qBAAqB,UAAU;AAAA,MAC/B,eAAe,UAAU;AAAA,MACzB,oBAAoB,YAAY;AAAA,MAChC,qBAAqB,YAAY;AAAA,IACnC;AAAA;AAAA;;;AC1FA,IAAI,KAAK;AAAT,IAAsB,KAAK;AAA3B,IAAuC,MAAM;AAA7C,IAA0D,MAAM;AAAhE,IAA+F,MAAM;AACrG,IAAI,MAAM,SAAU,GAAG,GAAG,GAAG;AACzB,MAAI,GAAG,UAAU;AACb,WAAO,GAAG,UAAU,MAAM,KAAK,GAAG,GAAG,CAAC;AAC1C,MAAI,KAAK,QAAQ,IAAI;AACjB,QAAI;AACR,MAAI,KAAK,QAAQ,IAAI,EAAE;AACnB,QAAI,EAAE;AACV,MAAI,IAAI,IAAI,GAAG,IAAI,CAAC;AACpB,IAAE,IAAI,EAAE,SAAS,GAAG,CAAC,CAAC;AACtB,SAAO;AACX;AACA,IAAI,OAAO,SAAU,GAAG,GAAG,GAAG,GAAG;AAC7B,MAAI,GAAG,UAAU;AACb,WAAO,GAAG,UAAU,KAAK,KAAK,GAAG,GAAG,GAAG,CAAC;AAC5C,MAAI,KAAK,QAAQ,IAAI;AACjB,QAAI;AACR,MAAI,KAAK,QAAQ,IAAI,EAAE;AACnB,QAAI,EAAE;AACV,SAAO,IAAI,GAAG,EAAE;AACZ,MAAE,CAAC,IAAI;AACX,SAAO;AACX;AACA,IAAI,MAAM,SAAU,GAAG,GAAG,GAAG,GAAG;AAC5B,MAAI,GAAG,UAAU;AACb,WAAO,GAAG,UAAU,WAAW,KAAK,GAAG,GAAG,GAAG,CAAC;AAClD,MAAI,KAAK,QAAQ,IAAI;AACjB,QAAI;AACR,MAAI,KAAK,QAAQ,IAAI,EAAE;AACnB,QAAI,EAAE;AACV,SAAO,IAAI,GAAG;AACV,MAAE,GAAG,IAAI,EAAE,GAAG;AAAA,EAClB;AACJ;AAaA,IAAI,KAAK;AAAA,EACL;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AAAA,EACA;AACJ;AACA,IAAI,MAAM,SAAU,KAAK,KAAK,IAAI;AAC9B,MAAI,IAAI,IAAI,MAAM,OAAO,GAAG,GAAG,CAAC;AAChC,IAAE,OAAO;AACT,MAAI,MAAM;AACN,UAAM,kBAAkB,GAAG,GAAG;AAClC,MAAI,CAAC;AACD,UAAM;AACV,SAAO;AACX;AACA,IAAI,KAAK,SAAU,GAAG,GAAG,GAAG;AACxB,MAAI,IAAI,GAAG,IAAI;AACf,SAAO,IAAI,GAAG,EAAE;AACZ,SAAK,EAAE,GAAG,MAAM,KAAK;AACzB,SAAO;AACX;AACA,IAAI,KAAK,SAAU,GAAG,GAAG;AAAE,UAAQ,EAAE,CAAC,IAAK,EAAE,IAAI,CAAC,KAAK,IAAM,EAAE,IAAI,CAAC,KAAK,KAAO,EAAE,IAAI,CAAC,KAAK,QAAS;AAAG;AAExG,IAAI,OAAO,SAAU,KAAK,GAAG;AACzB,MAAI,KAAK,IAAI,CAAC,IAAK,IAAI,CAAC,KAAK,IAAM,IAAI,CAAC,KAAK;AAC7C,MAAI,MAAM,WAAY,IAAI,CAAC,KAAK,KAAK;AAEjC,QAAI,MAAM,IAAI,CAAC;AAEf,QAAI,KAAM,OAAO,IAAK,GAAG,KAAM,OAAO,IAAK,GAAG,KAAK,MAAM,GAAG,MAAM,OAAO;AACzE,QAAI,MAAM;AACN,UAAI,CAAC;AAET,QAAI,KAAK,IAAI;AAEb,QAAI,KAAK,MAAM,IAAI,IAAI;AAEvB,QAAI,KAAK,GAAG,KAAK,IAAI,EAAE;AACvB,UAAM;AAEN,QAAI,MAAM,MAAO,KAAK,MAAO;AAE7B,QAAI,MAAM,GAAG,KAAK,IAAI,GAAG,KAAM,OAAO,KAAM;AAE5C,QAAI,KAAK;AACT,QAAI,CAAC,IAAI;AAEL,UAAI,KAAK,KAAM,MAAM,IAAI,CAAC,KAAK;AAC/B,WAAK,MAAM,MAAM,MAAM,IAAI,CAAC,IAAI;AAAA,IACpC;AACA,QAAI,KAAK;AACL,UAAI,CAAC;AACT,QAAI,MAAM,IAAI,IAAI,KAAK,IAAK,OAAO,KAAM,IAAI,IAAI,MAAM,EAAE;AACzD,QAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI;AACjC,WAAO;AAAA,MACH,GAAG,KAAK;AAAA,MACR,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAI,KAAK,KAAK,IAAK,IAAI,IAAI,SAAS,EAAE;AAAA,MACtC,GAAG;AAAA,MACH,GAAG,IAAI,IAAI,IAAI,QAAQ,GAAG,CAAC;AAAA,MAC3B,GAAG;AAAA,MACH,GAAG;AAAA,MACH,GAAG,KAAK,IAAI,QAAQ,EAAE;AAAA,IAC1B;AAAA,EACJ,YACW,MAAM,IAAM,IAAI,CAAC,KAAK,OAAQ,UAAW;AAEhD,WAAO,GAAG,KAAK,CAAC,IAAI;AAAA,EACxB;AACA,MAAI,CAAC;AACT;AAEA,IAAI,MAAM,SAAU,KAAK;AACrB,MAAIC,QAAO;AACX,SAAQ,KAAKA,SAAS,KAAK,EAAEA;AACzB;AACJ,SAAOA,QAAO;AAClB;AAEA,IAAI,OAAO,SAAU,KAAK,IAAI,KAAK;AAE/B,MAAI,QAAQ,MAAM,KAAK;AAEvB,MAAI,MAAM,IAAI,EAAE,IAAI,MAAM;AAC1B,MAAI,KAAK;AACL,QAAI,CAAC;AAET,MAAI,KAAK,KAAK;AAEd,MAAI,QAAQ,IAAI,MAAM,IAAI,KAAK,IAAI,IAAI,IAAI,KAAK;AAEhD,MAAI,MAAM,IAAI,GAAG,OAAO,MAAM,EAAE;AAChC,MAAI,OAAO,IAAI,IAAI,KAAK,GAAG,GAAG;AAE9B,MAAI,SAAS,IAAI,IAAI,KAAK,GAAG,GAAG;AAChC,MAAI,SAAS,IAAI,IAAI,KAAK,KAAK,EAAE;AACjC,MAAI,MAAM,OAAO,MAAM;AACvB,MAAI,OAAO,IAAI,GAAG,KAAK,KAAK,EAAE;AAC9B,MAAI,QAAQ,IAAI,GAAG,KAAK,MAAM,EAAE;AAChC,SAAO,MAAM,OAAO,QAAQ,GAAG;AAC3B,QAAIA,QAAO,IAAI,QAAQ,CAAC;AACxB,QAAI,MAAM,QAAQ;AAElB,QAAI,OAAO,KAAMA,QAAO,KAAM;AAC9B,QAAI,OAAQ,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,IAAM,IAAI,MAAM,CAAC,KAAK,QAAS,OAAO,KAAM;AAEpF,QAAI,UAAU,KAAKA,SAAQ;AAE3B,QAAI,MAAM,MAAM,QAAQ;AAExB,QAAI,OAAO,MAAM;AACjB,QAAI,OAAO;AACP,cAAQA,OAAM,MAAM;AAAA,SACnB;AACD,cAAQA,QAAO;AACf,UAAI,MAAM;AACN,eAAO;AAAA,IACf;AACA,SAAK,EAAE,GAAG,IAAI,EAAE;AAChB,QAAI,OAAO,IAAI;AACX,eAAS;AACT,WAAK,EAAE,EAAE,IAAI;AAAA,IACjB;AAEI,eAAS;AACb,QAAI,CAAC,KAAK;AACN,SAAG;AAEC,YAAI,MAAM,QAAQ;AAClB,cAAO,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,KAAM;AACxD,gBAAQ;AACR,eAAO;AAAA,MACX,SAAS,MAAM;AAAA,IACnB;AAAA,EACJ;AACA,MAAI,MAAM,OAAO;AACb,QAAI,CAAC;AACT,MAAI,SAAS;AAEb,MAAI,SAAS,MAAM,MAAM,MAAM,KAAK;AAEpC,MAAI,QAAQ,KAAK;AACjB,WAAS,IAAI,GAAG,KAAK,KAAK,EAAE,GAAG;AAC3B,QAAI,KAAK,KAAK,CAAC;AACf,QAAI,KAAK,GAAG;AACR,aAAO,CAAC,IAAI,CAAC;AACb;AAAA,IACJ;AAEA,SAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACrB,WAAK,MAAM,IAAI;AACf,SAAG;AACC,iBAAU,SAAS,QAAS;AAAA,MAChC,SAAS,UAAU;AAAA,IACvB;AAAA,EACJ;AAEA,MAAI;AACA,QAAI,CAAC;AACT,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AAErB,QAAI,KAAK,OAAO,KAAK,CAAC,CAAC;AAEvB,QAAI,KAAK,MAAM,CAAC,IAAI,KAAK,IAAI,EAAE;AAC/B,WAAO,CAAC,KAAK,MAAM,MAAM;AAAA,EAC7B;AACA,SAAO,CAAE,OAAO,KAAM,GAAG;AAAA,IACjB,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACP,CAAC;AACT;AAEA,IAAI,MAAM,SAAU,KAAK,IAAI;AAEzB,MAAI,IAAI,GAAG,KAAK;AAEhB,MAAI,MAAM,IAAI,GAAG,GAAG,GAAG,KAAK,IAAI,EAAE;AAElC,MAAI,KAAK,IAAI,SAAS,GAAG,GAAG;AAE5B,MAAI,KAAK,IAAI,SAAS,KAAK,GAAG;AAE9B,MAAI,KAAK,IAAI,IAAI,IAAI,QAAQ,GAAG;AAEhC,MAAI,KAAK,KAAK;AAEV,QAAI,KAAK,KAAK,KAAK,KAAK,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC;AACtD,UAAM;AACN,QAAI,OAAO,OAAO;AAElB,QAAI,KAAK,IAAI,EAAE;AACf,QAAI,CAAC;AACD,UAAI,CAAC;AAET,QAAI,MAAM,GAAG,MAAM,GAAG,OAAO,IAAI,GAAG,OAAO;AAG3C,QAAI,QAAQ,EAAE,MAAM,KAAK,IAAI,IAAI,EAAE;AACnC,eAAS;AACL,cAAQ;AACR,UAAI,OAAO;AACP;AACJ,UAAI,MAAM,QAAQ;AAClB,cAAS,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,QAAQ;AACzE,SAAG,EAAE,EAAE,IAAI,IAAI,EAAE,GAAG;AACpB,cAAQ;AACR,UAAI,OAAO;AACP;AACJ,YAAM,QAAQ;AACd,cAAS,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,QAAQ;AACzE,SAAG,EAAE,EAAE,IAAI,IAAI,EAAE,GAAG;AACpB,aAAO,IAAI,EAAE,GAAG;AAChB,YAAM,IAAI,EAAE,GAAG;AACf,aAAO,IAAI,EAAE,GAAG;AAChB,YAAM,IAAI,EAAE,GAAG;AAAA,IACnB;AACA,QAAI,EAAE,KAAK;AACP,UAAI,CAAC;AAAA,EACb,OACK;AACD,SAAK,KAAK;AACV,WAAO,IAAI,IAAI,KAAK,GAAG;AACnB,UAAI,OAAO,IAAI,EAAE,EAAE;AACnB,SAAG,CAAC,IAAI,QAAQ;AAChB,SAAG,IAAI,CAAC,IAAI,OAAO;AAAA,IACvB;AACA,MAAE;AAAA,EACN;AAEA,MAAI,MAAM;AACV,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACrB,QAAI,KAAK,GAAG,CAAC;AAEb,QAAI,KAAK;AACL,UAAI,CAAC;AACT,WAAO,MAAO,KAAM,KAAK;AAAA,EAC7B;AAEA,MAAI,KAAK,IAAI,GAAG,IAAI;AAEpB,MAAI,KAAK,KAAK;AAEd,MAAI,MAAM,KAAK;AAEf,MAAI,MAAO,MAAM;AACb,QAAI,CAAC;AACT,KAAG,IAAI,IAAI,IAAI,GAAG,IAAI;AACtB,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACrB,QAAI,KAAK,GAAG,CAAC;AACb,MAAE,GAAG,GAAG,CAAC,IAAI,MAAO,KAAK,IAAI,EAAG;AAAA,EACpC;AAEA,MAAI,OAAO,IAAI,GAAG,MAAM,CAAC;AAEzB,MAAI,OAAO,KAAK,SAAS,GAAG,EAAE,GAAG,KAAK,KAAK,SAAS,EAAE;AACtD,KAAG,EAAE,IAAI;AACT,OAAK,IAAI,IAAI,IAAI,GAAG,EAAE,GAAG;AACrB,QAAI,KAAK,GAAG,CAAC;AACb,SAAK,IAAI,GAAG,IAAI,GAAG,IAAI,CAAC,IAAI,KAAK,GAAG,CAAC,KAAK,KAAM,KAAK,EAAG;AAAA,EAC5D;AACA,MAAI,GAAG,CAAC,KAAK;AACT,QAAI,CAAC;AACT,OAAK,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACrB,QAAIA,QAAO,GAAG,CAAC;AACf,QAAIA,OAAM;AACN,UAAI,OAAO,GAAGA,KAAI;AAClB,WAAK,MAAM,GAAG,MAAM,GAAGA,KAAI,IAAI,QAAQ,KAAM,KAAKA,MAAM;AAAA,IAC5D;AAAA,EACJ;AACA,SAAO,CAAC,IAAI;AAAA,IACJ,GAAG;AAAA,IACH,GAAG;AAAA,IACH,GAAG;AAAA,EACP,CAAC;AACT;AAIA,IAAI,OAAqB,KAAmB,oBAAI,GAAG;AAAA,EAC/C;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AACnF,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAEX,IAAI,OAAqB,KAAmB,oBAAI,GAAG;AAAA,EAC/C;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAC9G,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAEX,IAAI,OAAsB,KAAmB,oBAAI,GAAG;AAAA,EAChD;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AACtD,CAAC,GAAG,GAAG,CAAC,EAAE,CAAC;AAEX,IAAI,OAAO,SAAU,GAAG,GAAG;AACvB,MAAI,MAAM,EAAE,QAAQ,KAAK,IAAI,IAAI,GAAG;AACpC,WAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC1B,OAAG,CAAC,IAAI;AACR,SAAK,KAAK,EAAE,CAAC;AAAA,EACjB;AACA,SAAO;AACX;AAEA,IAAI,MAAqB,oBAAI,IAAmB,oBAAI,IAAI;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAAW;AAC1D,CAAC,GAAG,QAAQ,GAAG,EAAE;AAEjB,IAAI,OAAsB,qBAAK,KAAK,CAAC;AAErC,IAAI,MAAqB,oBAAI,IAAmB,oBAAI,IAAI;AAAA,EACpD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAU;AAAA,EAAU;AAAA,EAAW;AAAA,EAAW;AAAA,EAAW;AACjF,CAAC,GAAG,QAAQ,GAAG,EAAE;AAEjB,IAAI,OAAsB,qBAAK,KAAK,CAAC;AAErC,IAAI,MAAM,SAAU,KAAK,KAAK,IAAI;AAC9B,MAAI,MAAM,IAAI,QAAQ,KAAK,IAAI,QAAQ,KAAK,IAAI,MAAM,CAAC,GAAG,OAAO,KAAK,GAAG,KAAK,GAAG,KAAK,CAAC,GAAG;AAC1F,MAAI,CAAC;AACD,QAAI,CAAC;AACT,MAAI,KAAK,GAAG,MAAM,GAAG,GAAG,OAAO,OAAO,KAAK,IAAI,IAAI,EAAE,IAAI,KAAK,IAAI;AAClE,SAAO,MAAM,MAAM,IAAI,MAAK;AACxB,QAAI,MAAM,OAAO;AACjB,QAAI,OAAO,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,IAAM,IAAI,MAAM,CAAC,KAAK,QAAS,MAAM;AAC5E,UAAO,MAAM,MAAO,OAAO;AAC3B,QAAI,EAAE,CAAC,IAAI,GAAG,EAAE,EAAE;AAClB,WAAQ,MAAM,GAAG,EAAE,EAAE;AAAA,EACzB;AACA,MAAI,OAAO,MAAM,IAAI,KAAK;AACtB,QAAI,CAAC;AACb;AAGA,IAAI,OAAO,SAAU,KAAK,KAAK,IAAI;AAC/B,MAAI,KAAK;AACT,MAAI,KAAK,IAAI,QAAQ,MAAO,KAAK,KAAM,GAAG,MAAM,OAAO,GAAG,MAAM,MAAM;AACtE,MAAI,IAAI,SAAS,IAAI,MAAM,IAAI,CAAC,IAAK,IAAI,CAAC,KAAK,CAAE,GAAG,IAAI,SAAS,GAAG,GAAG,GAAG,EAAE;AAC5E,MAAI,IAAI,SAAS,IAAI,MAAM,IAAI,CAAC,IAAK,IAAI,CAAC,KAAK,CAAE,GAAG,IAAI,SAAS,KAAK,GAAG,GAAG,EAAE;AAC9E,MAAI,IAAI,SAAS,IAAI,MAAM,IAAI,CAAC,IAAK,IAAI,CAAC,KAAK,CAAE,GAAG,IAAI,SAAS,KAAK,GAAG,GAAG,EAAE;AAC9E,MAAI,IAAI,SAAS,EAAE,GAAG,IAAI,SAAS,GAAG,GAAG,EAAE;AAC/C;AAEA,IAAI,MAAM,SAAU,KAAK,IAAI,KAAK;AAC9B,MAAI;AACJ,MAAI,KAAK,GAAG;AAEZ,MAAI,KAAK,IAAI,EAAE,GAAG,QAAS,MAAM,IAAK;AACtC,KAAG,IAAI,KAAK;AACZ,MAAI,KAAM,MAAM,IAAM,IAAI,KAAK,CAAC,KAAK,IAAM,IAAI,KAAK,CAAC,KAAK;AAE1D,MAAI,OAAO,MAAM,KAAK;AACtB,MAAI,SAAS,GAAG;AACZ,QAAI,MAAM,IAAI;AACV;AACJ,OAAG,IAAI,KAAK;AACZ,QAAI,KAAK;AACL,WAAK,KAAK,IAAI,EAAE,GAAG,GAAG,GAAG,GAAG,KAAK,EAAE;AACnC,aAAO;AAAA,IACX;AACA,WAAO,KAAK,IAAI,GAAG,EAAE,GAAG,IAAI,EAAE,CAAC;AAAA,EACnC;AACA,MAAI,MAAM,IAAI;AACV;AACJ,MAAI,SAAS,GAAG;AACZ,OAAG,IAAI;AACP,QAAI,KAAK;AACL,UAAI,IAAI,IAAI,SAAS,IAAI,GAAG,GAAG,GAAG,CAAC;AACnC,SAAG,KAAK;AACR,aAAO;AAAA,IACX;AACA,WAAO,IAAI,KAAK,IAAI,GAAG;AAAA,EAC3B;AACA,MAAI,SAAS,GAAG;AAEZ,QAAI,KAAK,IAAI,EAAE,GAAG,MAAM,KAAK,GAAG,KAAM,MAAM,IAAK;AAEjD,QAAI,MAAM,MAAM,GAAG,MAAM,GAAG,KAAK;AACjC,QAAI,MAAM,GAAG;AACT,UAAI,KAAK;AACL,eAAQ,IAAI,EAAE,EAAE,KAAK,KAAO,KAAK,KAAO,IAAI,EAAE,EAAE,KAAK;AAAA;AAErD,cAAM,MAAM;AAAA,IACpB,OACK;AACD,WAAK;AACL,UAAI,KAAK;AACL,gBAAS,IAAI,EAAE,EAAE,IAAI,OAAO,GAAI,MAAO,IAAI,EAAE,KAAK,IAAM,IAAI,EAAE,EAAE,KAAK;AAAA,eAChE,MAAM;AACX,eAAQ,IAAI,EAAE,EAAE,KAAK,KAAO,IAAI,EAAE,EAAE,IAAI,MAAM,IAAK,MAAO,IAAI,EAAE,KAAK,IAAM,IAAI,EAAE,EAAE,KAAK;AAAA;AAExF,eAAQ,IAAI,EAAE,EAAE,KAAK,KAAO,IAAI,EAAE,EAAE,IAAI,OAAO,IAAK,MAAO,IAAI,EAAE,KAAK,IAAM,IAAI,EAAE,EAAE,KAAK,IAAM,IAAI,EAAE,EAAE,KAAK;AAAA,IACpH;AACA,MAAE;AAEF,QAAI,MAAM,MAAM,IAAI,SAAS,GAAG,GAAG,GAAG,IAAI,GAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC;AAE7D,QAAI,MAAM,IAAI,SAAS;AACvB,QAAI,OAAO;AACP,UAAI,IAAI,IAAI,SAAS,IAAI,MAAM,GAAG,GAAG,GAAG;AAAA,aACnC,OAAO;AACZ,WAAK,KAAK,IAAI,IAAI,GAAG,GAAG;AAAA,SACvB;AAED,UAAI,KAAK,GAAG;AACZ,UAAI,OAAO,GAAG;AACV,YAAI,MAAM,IAAI,KAAK,EAAE;AAErB,eAAO,MAAM,KAAK,IAAI,CAAC;AACvB,WAAG,IAAI,KAAK,IAAI,CAAC;AAAA,MACrB,WACS,CAAC;AACN,YAAI,CAAC;AACT,OAAC,KAAK,OAAO,KAAK,IAAI,SAAS,IAAI,MAAM,GAAG,GAAG,IAAI,SAAS,GAAG,GAAG,EAAE;AAAA,IACxE;AAEA,QAAI,KAAK,IAAI,IAAI;AACjB,QAAI,IAAI;AACJ,UAAI,MAAM;AACN,cAAM,IAAI,IAAI,IAAK,IAAI,IAAI,KAAK,KAAM;AAAA,eACjC,KAAK;AACV,aAAO,KAAK,OAAQ,IAAK,IAAI,IAAI;AAErC,UAAI,MAAM,IAAI,IAAI;AAClB,UAAI,MAAM;AACN,YAAI,CAAC;AACT,UAAI,MAAM,CAAC,MAAM,MAAM,IAAI;AAC3B,eAAS,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACzB,YAAI,KAAM,QAAS,KAAK,KAAK,IAAM;AACnC,YAAI,MAAM,GAAG;AAET,cAAI,OAAO,IAAI,GAAG,CAAC,GAAG,GAAG,IAAI,IAAI,CAAC,CAAC;AACnC,cAAI,CAAC,IAAI;AAAA,YACL,GAAG,KAAK,SAAS,GAAG,CAAC;AAAA,YACrB,GAAG,KAAK,SAAS,GAAG,CAAC;AAAA,YACrB,GAAG,IAAI,IAAI,KAAK,QAAQ,GAAG,CAAC;AAAA,YAC5B,GAAG;AAAA,UACP;AAAA,QACJ,WACS,MAAM,GAAG;AAEd,eAAK,KAAK,KAAK,IAAI,KAAK,IAAI,EAAE,GAAG,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC;AAAA,QAC9D,WACS,MAAM,GAAG;AACd,cAAI,CAAC,GAAG;AACJ,gBAAI,CAAC;AACT,cAAI,CAAC,IAAI,GAAG,EAAE,CAAC;AAAA,QACnB;AAAA,MACJ;AACA,UAAI,KAAK,GAAG,IAAI,KAAK,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC,GAAG,MAAM,GAAG,CAAC;AACzD,UAAI,KAAK,IAAI,MAAM,CAAC;AACpB,UAAI,CAAC;AACD,YAAI,CAAC;AACT,UAAI,QAAQ,OAAO,KAAK,IAAI,IAAI,EAAE,IAAI,IAAI,GAAG,MAAM,QAAQ,GAAG,OAAO;AACrE,UAAI,OAAQ,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,IAAI,KAAK;AAC7E,aAAO,QAAQ,IAAI,MAAM;AACzB,UAAI,OAAQ,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,IAAI,KAAK;AAC7E,aAAO,QAAQ,IAAI,MAAM;AACzB,UAAI,OAAQ,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,IAAI,KAAK;AAC7E,WAAK,EAAE,IAAI,EAAE,MAAK;AACd,YAAI,MAAM,IAAI,EAAE,GAAG;AACnB,YAAI,OAAO,IAAI,EAAE,GAAG;AACpB,YAAI,MAAM,IAAI,EAAE,GAAG;AACnB,YAAI,OAAO,IAAI,EAAE,GAAG;AACpB,YAAI,MAAM,IAAI,EAAE,GAAG;AACnB,YAAI,OAAO,IAAI,EAAE,GAAG;AACpB,eAAO,QAAQ,QAAQ;AACvB,YAAI,MAAM,KAAK;AACf,YAAI,MAAM,QAAS,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,IAAM,IAAI,MAAM,CAAC,KAAK,KAAO,IAAI,MAAM,CAAC,KAAK,SAAU,OAAO,KAAO,MAAM;AAC1H,eAAO,QAAQ,IAAI,GAAG,MAAM;AAC5B,YAAI,KAAK,KAAK,GAAG,MAAO,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,IAAM,IAAI,MAAM,CAAC,KAAK,QAAS,OAAO,MAAQ,KAAK,IAAI,GAAG,KAAK;AACnH,eAAO,QAAQ,IAAI,GAAG,MAAM;AAC5B,YAAI,KAAK,KAAK,GAAG,MAAO,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,IAAM,IAAI,MAAM,CAAC,KAAK,QAAS,OAAO,MAAQ,KAAK,IAAI,GAAG,KAAK;AACnH,eAAO,QAAQ,SAAS;AACxB,cAAM,IAAI,EAAE,GAAG,MAAO,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,QAAQ;AACtF,eAAO,QAAQ,SAAS;AACxB,cAAM,IAAI,EAAE,GAAG,MAAO,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,QAAQ;AACtF,eAAO,QAAQ,SAAS;AACxB,cAAM,IAAI,EAAE,GAAG,MAAO,IAAI,GAAG,IAAK,IAAI,MAAM,CAAC,KAAK,OAAQ,OAAO,MAAQ,KAAK,QAAQ;AACtF,YAAI,MAAM,GAAG;AACT,aAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;AAChB,aAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;AAChB,aAAG,EAAE,CAAC,IAAI,OAAO;AAAA,QACrB,OACK;AACD,cAAI,MAAM,OAAO,MAAM;AACvB,cAAI,KAAK;AACL,kBAAM,OAAO,IAAI,GAAG,EAAE,CAAC,IAAI,IAAI,GAAG,EAAE,GAAG;AACvC,gBAAI,MAAM;AACN,iBAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;AACpB,eAAG,EAAE,CAAC,IAAI,GAAG,EAAE,CAAC;AAChB,eAAG,EAAE,CAAC,IAAI;AAAA,UACd;AAEI,kBAAM,GAAG,EAAE,CAAC;AAAA,QACpB;AACA,iBAAS,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACzB,cAAI,OAAO,CAAC,IAAI,IAAI,MAAM,CAAC;AAAA,QAC/B;AACA,gBAAQ,IAAI,OAAO;AACnB,YAAI,OAAO,OAAO;AAClB,YAAI,OAAO,GAAG;AACV,cAAI,MAAM,CAAC;AACX,cAAI,KAAK,GAAG,IAAI;AAChB,cAAI,MAAM;AACN,kBAAM;AACV,mBAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC1B,gBAAI,OAAO,CAAC,IAAI,GAAG,EAAE,KAAK,CAAC;AAAA,UAC/B;AACA,kBAAQ,KAAK,MAAM,KAAK,OAAO;AAAA,QACnC;AACA,iBAAS,IAAI,GAAG,IAAI,IAAI,EAAE,GAAG;AACzB,cAAI,OAAO,CAAC,IAAI,IAAI,OAAO,CAAC;AAAA,QAChC;AACA,gBAAQ;AAAA,MACZ;AACA,UAAI,QAAQ,KAAK;AACb,eAAO,MAAM,IAAI,QAAQ;AACrB,cAAI,MAAM,IAAI,IAAI,KAAK;AAAA,QAC3B;AAAA,MACJ;AAEI,eAAO,IAAI;AACf,UAAI;AACA,WAAG,KAAK;AAAA;AAER,cAAM,IAAI,KAAK,GAAG,IAAI;AAAA,IAC9B,WACS,KAAK;AACV,SAAG,KAAK;AACR,UAAI,KAAK;AACL,iBAAS,IAAI,GAAG,IAAI,KAAK,EAAE,GAAG;AAC1B,cAAI,CAAC,IAAI,IAAI,MAAM,CAAC;AAAA,QACxB;AAAA,MACJ;AAAA,IACJ,WACS;AACL,YAAM,IAAI,KAAK,GAAG;AACtB,OAAG,IAAI;AACP,WAAO;AAAA,EACX;AACA,MAAI,CAAC;AACT;AAEA,IAAI,MAAM,SAAU,MAAM,IAAI;AAC1B,MAAI,KAAK,UAAU;AACf,WAAO,KAAK,CAAC;AACjB,MAAI,MAAM,IAAI,GAAG,EAAE;AACnB,WAAS,IAAI,GAAG,IAAI,GAAG,IAAI,KAAK,QAAQ,EAAE,GAAG;AACzC,QAAI,MAAM,KAAK,CAAC;AAChB,QAAI,IAAI,KAAK,CAAC;AACd,SAAK,IAAI;AAAA,EACb;AACA,SAAO;AACX;AAUO,SAAS,WAAW,KAAK,KAAK;AACjC,MAAI,OAAO,CAAC,GAAG,KAAK,CAAC,CAAC;AACtB,MAAI,KAAK,GAAG,KAAK;AACjB,SAAO,IAAI,UAAS;AAChB,QAAI,KAAK,KAAK,KAAK,MAAM,GAAG;AAC5B,QAAI,OAAO,MAAM,UAAU;AACvB,UAAI,IAAI;AACJ,cAAM;AACN,YAAI,GAAG,EAAE,UAAU,GAAG,GAAG;AACrB,eAAK,KAAK,MAAM,GAAG,CAAC;AACpB,gBAAM,GAAG;AAAA,QACb;AAAA,MACJ,OACK;AACD,aAAK,KAAK,GAAG;AACb,WAAG,IAAI;AAAA,MACX;AACA,aAAO,CAAC,GAAG,KAAI;AACX,YAAI,MAAM,IAAI,KAAK,IAAI,GAAG;AAC1B,YAAI,CAAC;AACD,cAAI,CAAC;AACT,YAAI;AACA,aAAG,IAAI,GAAG;AAAA,aACT;AACD,eAAK,KAAK,GAAG;AACb,gBAAM,IAAI;AACV,cAAI,GAAG,GAAG,GAAG,IAAI,MAAM;AACvB,aAAG,EAAE,IAAI,KAAK,GAAG,EAAE,SAAS,IAAI,MAAM;AAAA,QAC1C;AAAA,MACJ;AACA,WAAK,GAAG,IAAK,GAAG,IAAI;AAAA,IACxB;AAEI,WAAK;AACT,UAAM,IAAI,SAAS,EAAE;AAAA,EACzB;AACA,SAAO,IAAI,MAAM,EAAE;AACvB;;;ACznBO,SAAS,qBAAqB;AAEnC,QAAM,OAAO,gBAAgB;AAE7B,SAAO,CAAC,OAAO,iBAAiB;AAE9B,UAAM,EAAE,QAAQ,WAAW,IAAI,KAAK;AAKpC,UAAM,aAAa;AACnB,UAAM,cAAc,aAAa,MAAM;AAGvC,UAAM,YAAY,aAAa,MAAM,aAAa;AAClD,QAAI,OAAO,OAAO,aAAa,WAAW;AAExC,YAAM,WAAW,KAAK;AACtB,YAAM,eAAe,OAAO,OAAO,aAAa;AAChD,YAAM,gBAAgB,KAAK,KAAK,YAAY,QAAQ;AACpD,YAAM,cAAc,gBAAgB;AACpC,aAAO,KAAK,WAAW;AAAA,IACzB;AAGA,UAAM,YAAY,IAAI,WAAW,OAAO,MAAM;AAC9C,cAAU,IAAI,OAAO,UAAU;AAG/B,UAAM,SAAS,WAAW,YAAY,MAAM,YAAY,WAAW;AAGnE,QAAI,WAAW,GAAI,OAAM,IAAI,MAAM,8BAA8B;AACjE,QAAI,WAAW,GAAI,OAAM,IAAI,MAAM,oBAAoB;AACvD,QAAI,WAAW,GAAI,OAAM,IAAI,MAAM,wBAAwB;AAC3D,QAAI,OAAQ,OAAM,IAAI,MAAM,6BAA6B,MAAM,EAAE;AAGjE,WAAO,UAAU,MAAM,aAAa,cAAc,YAAY;AAAA,EAChE;AACF;AAOA,SAAS,kBAAkB;AACzB,QAAM,eAAe,KAAK,MAAM;AAChC,QAAM,YAAY,IAAI,WAAW,aAAa,MAAM;AACpD,WAAS,IAAI,GAAG,IAAI,aAAa,QAAQ,KAAK,GAAG;AAC/C,cAAU,CAAC,IAAI,aAAa,WAAW,CAAC;AAAA,EAC1C;AAEA,QAAM,MAAM,IAAI,YAAY,OAAO,SAAS;AAC5C,SAAO,IAAI,YAAY,SAAS,GAAG;AACrC;AAGA,IAAM,SAAS;;;AC3Df,IAAM,mBAAmB;AACzB,IAAM,mBAAmB,IAAI,mBAAmB;AAChD,IAAM,mBAAmB,IAAI,mBAAmB;AAEhD,IAAM,WAAW,IAAI,YAAY;AAAA,EAC/B;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAM;AAAA,EAAO;AAAA,EACtE;AAAA,EAAO;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAQ;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AAAA,EAAS;AACrE,CAAC;AASM,SAAS,gBAAgB,OAAO;AACrC,OAAK,OAAO,IAAI,WAAW,gBAAgB;AAC3C,OAAK,SAAS;AAEd,OAAK,WAAW;AAChB,OAAK,OAAO;AACZ,OAAK,OAAO;AAEZ,OAAK,MAAM;AACb;AAEA,gBAAgB,YAAY;AAC5B,gBAAgB,YAAY;AAE5B,gBAAgB,UAAU,QAAQ,WAAW;AAC3C,OAAK,WAAW;AAChB,OAAK,OAAO;AACZ,OAAK,OAAO;AACZ,OAAK,WAAW;AAChB,OAAK,eAAe;AACpB,OAAK,OAAO;AAEZ,OAAK,cAAc;AACnB,WAAS,IAAI,GAAG,IAAI,GAAG,KAAK;AAC1B,SAAK,QAAQ,KAAK,KAAK,KAAK,IAAI,KAAK,IAAI;AACzC,SAAK;AAAA,EACP;AAEA,SAAO,KAAK,eAAe;AAC7B;AAeA,gBAAgB,UAAU,gBAAgB,WAAW;AACnD,MAAI,KAAK,eAAe,KAAK;AAAA,EAE7B,WAAW,KAAK,MAAM;AACpB,QAAI,KAAK,WAAW,KAAK;AACvB,YAAM,IAAI,MAAM,6BAA6B,KAAK,WAAW,MAAM,KAAK,YAAY;AAAA,EACxF,OAAO;AACL,UAAM,MAAM,KAAK;AACjB,UAAM,aAAa,KAAK,OAAO,KAAK,KAAK,MAAM,KAAK,gBAAgB;AACpE,QAAI,aAAa,GAAG;AAClB,YAAM,IAAI,MAAM,yBAAyB;AAAA,IAC3C;AAEA,QAAI,aAAa,kBAAkB;AACjC,WAAK,OAAO;AAEZ,eAAS,IAAI,GAAG,IAAI,IAAI;AACtB,aAAK,KAAK,MAAM,aAAa,CAAC,IAAI;AAAA,IACtC;AAEA,QAAI,QAAQ,GAAG;AAEb,eAAS,IAAI,GAAG,IAAI,IAAI;AACtB,aAAK,MAAM,oBAAoB,KAAK,CAAC,IAAI,KAAK,KAAK,CAAC;AAEtD,WAAK,WAAW;AAAA,IAClB,OAAO;AACL,WAAK,WAAW;AAAA,IAClB;AAEA,SAAK,gBAAgB,cAAc;AAAA,EACrC;AACF;AAGA,gBAAgB,UAAU,gBAAgB,WAAW;AACnD,SAAO,KAAK,YAAY,GAAG;AACzB,SAAK,UAAU;AACf,SAAK,QAAQ,KAAK,KAAK,KAAK,OAAO,gBAAgB,KAAK;AACxD,SAAK;AACL,SAAK,WAAW,KAAK,WAAW,MAAM;AACtC,SAAK,eAAe,KAAK,eAAe,MAAM;AAAA,EAChD;AACF;AAQA,gBAAgB,UAAU,WAAW,SAAS,QAAQ;AACpD,MAAI,KAAK,KAAK,WAAW,OAAQ,MAAK,cAAc;AACpD,QAAM,MAAM,KAAK,SAAS,KAAK,WAAW,SAAS,MAAM;AACzD,OAAK,YAAY;AACjB,SAAO;AACT;;;ACpIA,IAAM,qBAAqB;AAE3B,IAAM,qBAAqB;AAC3B,IAAM,qBAAqB;AAE3B,IAAM,oBAAoB;AAC1B,IAAM,uBAAuB,IAAI,WAAW;AAAA,EAC1C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAC5D,CAAC;AAED,IAAM,uBAAuB,IAAI,YAAY;AAAA,EAC3C;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EACtE;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAK;AAAA,EAAM;AAAA,EAAM;AACvC,CAAC;AAMM,SAAS,YAAYC,OAAM,OAAO;AACvC,OAAK,OAAOA;AACZ,OAAK,QAAQ;AACf;AAEA,IAAM,wBAAwB;AAC9B,IAAM,aAAa;AASnB,SAAS,WAAW,KAAK,KAAK;AAC5B,MAAI,OAAO,KAAK,MAAM;AACtB,SAAO,MAAM,MAAM;AACjB,aAAS;AAAA,EACX;AACA,UAAQ,MAAM,OAAO,KAAK;AAC5B;AAWA,SAAS,eAAe,OAAO,GAAG,MAAM,KAAK,MAAM;AACjD,KAAG;AACD,WAAO;AACP,UAAM,IAAI,GAAG,IAAI,IAAI,YAAY,KAAK,MAAM,KAAK,KAAK;AAAA,EACxD,SAAS,MAAM;AACjB;AAWA,SAAS,iBAAiB,OAAO,KAAK,WAAW;AAC/C,MAAI,OAAO,KAAK,MAAM;AACtB,SAAO,MAAM,YAAY;AACvB,YAAQ,MAAM,GAAG;AACjB,QAAI,QAAQ,EAAG;AACf,MAAE;AACF,aAAS;AAAA,EACX;AACA,SAAO,MAAM;AACf;AAUA,SAAS,kBAAkB,YAAY,OAAO,WAAW,cAAc,mBAAmB;AACxF,QAAM,cAAc;AACpB,QAAM,QAAQ,IAAI,WAAW,aAAa,CAAC;AAC3C,QAAM,SAAS,IAAI,WAAW,aAAa,CAAC;AAC5C,QAAM,SAAS,IAAI,WAAW,iBAAiB;AAG/C,WAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAC1C,UAAM,aAAa,CAAC,CAAC;AAAA,EACvB;AAGA,SAAO,CAAC,IAAI;AACZ,WAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,WAAO,IAAI,CAAC,IAAI,OAAO,CAAC,IAAI,MAAM,CAAC;AAAA,EACrC;AAGA,WAAS,IAAI,GAAG,IAAI,mBAAmB,KAAK;AAC1C,QAAI,aAAa,CAAC,MAAM,GAAG;AACzB,aAAO,OAAO,aAAa,CAAC,CAAC,GAAG,IAAI;AAAA,IACtC;AAAA,EACF;AAEA,MAAI,aAAa;AACjB,MAAI,aAAa,KAAK;AACtB,MAAI,aAAa;AAGjB,MAAI,OAAO,UAAU,MAAM,GAAG;AAC5B,aAASC,OAAM,GAAGA,OAAM,YAAY,EAAEA,MAAK;AACzC,iBAAW,QAAQA,IAAG,IAAI,IAAI,YAAY,GAAG,OAAO,CAAC,IAAI,KAAM;AAAA,IACjE;AAEA,WAAO;AAAA,EACT;AAGA,MAAI,MAAM;AACV,MAAI,SAAS;AACb,WAAS,MAAM,GAAG,OAAO,GAAG,OAAO,WAAW,EAAE,KAAK,SAAS,GAAG;AAC/D,WAAO,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,GAAG,GAAG;AACnC,YAAM,OAAO,IAAI,YAAY,MAAM,KAAM,OAAO,QAAQ,IAAI,KAAM;AAClE,qBAAe,YAAY,QAAQ,KAAK,MAAM,YAAY,IAAI;AAC9D,YAAM,WAAW,KAAK,GAAG;AAAA,IAC3B;AAAA,EACF;AAGA,QAAM,OAAO,aAAa;AAC1B,MAAI,MAAM;AACV,WAAS,MAAM,YAAY,GAAG,OAAO,GAAG,OAAO,YAAY,EAAE,KAAK,SAAS,GAAG;AAC5E,WAAO,MAAM,GAAG,IAAI,GAAG,EAAE,MAAM,GAAG,GAAG;AACnC,WAAK,MAAM,UAAU,KAAK;AACxB,iBAAS;AACT,qBAAa,iBAAiB,OAAO,KAAK,SAAS;AACnD,qBAAa,KAAK;AAClB,sBAAc;AACd,cAAM,MAAM;AACZ,mBAAW,cAAc,GAAG,IAAI,IAAI,YAAY,aAAa,YAAY,KAAM,QAAQ,cAAc,MAAM,KAAM;AAAA,MACnH;AACA,YAAM,OAAO,IAAI,YAAY,MAAM,YAAY,KAAM,OAAO,QAAQ,IAAI,KAAM;AAC9E,qBAAe,YAAY,SAAS,OAAO,YAAY,MAAM,YAAY,IAAI;AAC7E,YAAM,WAAW,KAAK,GAAG;AAAA,IAC3B;AAAA,EACF;AAEA,SAAO;AACT;AAUO,SAAS,gBAAgB,eAAe,QAAQ,OAAO,IAAI;AAChE,QAAM,eAAe,IAAI,WAAW,aAAa;AAEjD,KAAG,cAAc;AAKjB,QAAM,sBAAsB,GAAG,SAAS,CAAC;AACzC,MAAI,wBAAwB,GAAG;AAE7B,QAAI,mBAAmB,gBAAgB;AACvC,QAAI,WAAW;AACf,UAAM,UAAU,IAAI,WAAW,CAAC;AAChC,UAAM,cAAc,GAAG,SAAS,CAAC,IAAI;AACrC,WAAO,kBAAkB;AACvB,2BAAqB;AACrB;AAAA,IACF;AAEA,aAAS,IAAI,GAAG,IAAI,aAAa,KAAK;AACpC,cAAQ,CAAC,IAAI,GAAG,SAAS,QAAQ,IAAI;AACrC,mBAAa,QAAQ,CAAC,CAAC,IAAI;AAAA,IAC7B;AACA,iBAAa,QAAQ,CAAC,CAAC,IAAI;AAC3B,YAAQ,aAAa;AAAA,MACrB,KAAK;AACH;AAAA,MACF,KAAK;AACH,YAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,KACtB,QAAQ,CAAC,MAAM,QAAQ,CAAC,KACxB,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG;AAC/B,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACrD;AACA;AAAA,MACF,KAAK;AACH,YAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG;AAC7B,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACrD;AAEA,qBAAa,QAAQ,CAAC,CAAC,IAAI;AAC3B;AAAA,MACF,KAAK;AACH,YAAI,QAAQ,CAAC,MAAM,QAAQ,CAAC,KACtB,QAAQ,CAAC,MAAM,QAAQ,CAAC,KACxB,QAAQ,CAAC,MAAM,QAAQ,CAAC,KACxB,QAAQ,CAAC,MAAM,QAAQ,CAAC,KACxB,QAAQ,CAAC,MAAM,QAAQ,CAAC,KACxB,QAAQ,CAAC,MAAM,QAAQ,CAAC,GAAG;AAC/B,gBAAM,IAAI,MAAM,mCAAmC;AAAA,QACrD;AAEA,YAAI,GAAG,SAAS,CAAC,GAAG;AAClB,uBAAa,QAAQ,CAAC,CAAC,IAAI;AAC3B,uBAAa,QAAQ,CAAC,CAAC,IAAI;AAAA,QAC7B,OAAO;AACL,uBAAa,QAAQ,CAAC,CAAC,IAAI;AAAA,QAC7B;AACA;AAAA,IACF;AAAA,EACF,OAAO;AACL,UAAM,2BAA2B,IAAI,WAAW,iBAAiB;AACjE,QAAI,QAAQ;AACZ,QAAI,YAAY;AAEhB,UAAM,OAAO;AAAA,MACX,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MACzF,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MACzF,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MACzF,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,MAAG,IAAI,YAAY,GAAG,CAAC;AAAA,IAC3F;AACA,aAAS,IAAI,qBAAqB,IAAI,qBAAqB,QAAQ,GAAG,KAAK;AACzE,YAAM,eAAe,qBAAqB,CAAC;AAC3C,UAAI,IAAI;AACR,SAAG,cAAc;AACjB,WAAK,GAAG,SAAS,GAAG,WAAW;AAC/B,SAAG,YAAY,KAAK,CAAC,EAAE;AACvB,YAAM,IAAI,KAAK,CAAC,EAAE;AAClB,+BAAyB,YAAY,IAAI;AACzC,UAAI,MAAM,GAAG;AACX,iBAAS,MAAM;AACf;AAAA,MACF;AAAA,IACF;AAEA,QAAI,EAAE,cAAc,KAAK,UAAU;AACjC,YAAM,IAAI,MAAM,8CAA8C;AAEhE,2BAAuB,0BAA0B,eAAe,cAAc,EAAE;AAAA,EAClF;AAEA,QAAM,aAAa,kBAAkB,QAAQ,OAAO,oBAAoB,cAAc,aAAa;AACnG,MAAI,CAAC,WAAY,OAAM,IAAI,MAAM,iCAAiC;AAClE,SAAO;AACT;AAUO,SAAS,WAAW,OAAO,OAAO,IAAI;AAC3C,KAAG,cAAc;AACjB,WAAS,GAAG,SAAS,GAAG,WAAW;AACnC,QAAM,QAAQ,MAAM,KAAK,EAAE,OAAO;AAClC,MAAI,QAAQ,GAAG;AACb,OAAG,YAAY;AACf,aAAS,MAAM,KAAK,EAAE;AACtB,aAAS,GAAG,SAAS,GAAG,YAAY,KAAK,SAAS;AAAA,EACpD;AACA,KAAG,YAAY,MAAM,KAAK,EAAE;AAC5B,SAAO,MAAM,KAAK,EAAE;AACtB;AAQA,SAAS,uBAAuB,0BAA0B,aAAa,cAAc,IAAI;AACvF,MAAI,SAAS;AACb,MAAI,gBAAgB;AACpB,MAAI,SAAS;AACb,MAAI,kBAAkB;AACtB,MAAI,QAAQ;AAEZ,QAAM,QAAQ,CAAC;AACf,WAAS,IAAI,GAAG,IAAI,IAAI;AACtB,UAAM,KAAK,IAAI,YAAY,GAAG,CAAC,CAAC;AAElC,oBAAkB,OAAO,GAAG,GAAG,0BAA0B,iBAAiB;AAE1E,SAAO,SAAS,eAAe,QAAQ,GAAG;AACxC,QAAI,IAAI;AAER,OAAG,cAAc;AACjB,OAAG,cAAc;AACjB,SAAK,GAAG,SAAS,GAAG,WAAW;AAC/B,OAAG,YAAY,MAAM,CAAC,EAAE;AACxB,UAAM,WAAW,MAAM,CAAC,EAAE,QAAQ;AAClC,QAAI,WAAW,uBAAuB;AACpC,eAAS;AACT,mBAAa,QAAQ,IAAI;AACzB,UAAI,aAAa,GAAG;AAClB,wBAAgB;AAChB,iBAAS,SAAS;AAAA,MACpB;AAAA,IACF,OAAO;AACL,YAAM,aAAa,WAAW;AAC9B,UAAI,UAAU;AACd,UAAI,aAAa,uBAAuB;AACtC,kBAAU;AAAA,MACZ;AACA,UAAI,oBAAoB,SAAS;AAC/B,iBAAS;AACT,0BAAkB;AAAA,MACpB;AACA,YAAM,aAAa;AACnB,UAAI,SAAS,GAAG;AACd,kBAAU;AACV,mBAAW;AAAA,MACb;AACA,gBAAU,GAAG,SAAS,UAAU,IAAI;AACpC,YAAM,eAAe,SAAS;AAC9B,UAAI,SAAS,eAAe,aAAa;AACvC,cAAM,IAAI,MAAM,8DAA8D;AAAA,MAChF;AAEA,eAAS,IAAI,GAAG,IAAI,cAAc;AAChC,qBAAa,SAAS,CAAC,IAAI;AAE7B,gBAAU;AAEV,UAAI,oBAAoB,GAAG;AACzB,iBAAS,gBAAgB,KAAK;AAAA,MAChC;AAAA,IACF;AAAA,EACF;AACA,MAAI,UAAU,GAAG;AACf,UAAM,IAAI,MAAM,sCAAsC,KAAK;AAAA,EAC7D;AAEA,SAAO,SAAS,aAAa;AAC3B,iBAAa,MAAM,IAAI;AAC3B;AASO,SAAS,iBAAiB,eAAe,YAAY;AAC1D,OAAK,gBAAgB;AACrB,OAAK,aAAa;AAClB,OAAK,QAAQ,IAAI,MAAM,aAAa,aAAa,qBAAqB,gBAAgB,OAAO,CAAC,CAAC;AAC/F,OAAK,SAAS,IAAI,YAAY,UAAU;AAC1C;AAKA,iBAAiB,UAAU,SAAS,SAAS,IAAI;AAC/C,MAAI,OAAO;AACX,WAAS,IAAI,GAAG,IAAI,KAAK,YAAY,KAAK;AACxC,SAAK,OAAO,CAAC,IAAI;AACjB,YAAQ,gBAAgB,KAAK,eAAe,KAAK,OAAO,MAAM,EAAE;AAAA,EAClE;AACF;;;AC/WA,SAAS,OAAO,CAAE,QAAQ,KAAM,GAAG;AACjC,SAAO,EAAE,QAAQ,MAAM;AACzB;AAEO,IAAM,yBAAyB;AAAA,EACpC,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAC9B,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EACrC,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EACrC,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,MAAM,EAAE;AAAA,EAAG,CAAC,MAAM,EAAE;AAAA,EAAG,CAAC,MAAM,EAAE;AAAA,EAC3C,CAAC,MAAM,EAAE;AAAA,EAAG,CAAC,OAAO,EAAE;AACxB,EAAE,IAAI,MAAM;AAEL,IAAM,0BAA0B;AAAA,EACrC,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAC7B,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EACrC,CAAC,MAAM,EAAE;AAAA,EAAG,CAAC,MAAM,EAAE;AAAA,EAAG,CAAC,MAAM,EAAE;AAAA,EAAG,CAAC,OAAO,EAAE;AAChD,EAAE,IAAI,MAAM;AAEL,IAAM,wBAAwB;AAAA,EACnC,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAC7B,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAAG,CAAC,GAAG,CAAC;AAAA,EAC7B,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,IAAI,CAAC;AAAA,EACjC,CAAC,IAAI,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EACpC,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,KAAK,CAAC;AAAA,EAAG,CAAC,MAAM,EAAE;AAAA,EAAG,CAAC,MAAM,EAAE;AAC3C,EAAE,IAAI,MAAM;AAEL,IAAM,kBAAkB;AAAA,EAC7B;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAC5B;AAEO,IAAM,gBAAgB;AAAA,EAC3B;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAAA,EAAI;AAAA,EAAG;AAC5B;;;AC5CO,IAAM,yBAAyB;AAG/B,IAAM,uBAAuB,IAAI,WAAW;AAAA,EACjD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA;AAAA,EAAgB;AAAA,EAAG;AAAA;AAAA,EAAoB;AAC7H,CAAC;AACM,IAAM,yBAAyB,IAAI,WAAW;AAAA,EACnD;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAAiB;AAAA,EAAG;AACpH,CAAC;AAQD,SAAS,KAAK,IAAI,OAAO;AACvB,QAAM,OAAO,IAAI,YAAY,EAAE;AAC/B,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,SAAK,CAAC,IAAI,SAAS,KAAK,GAAG,IAAI,CAAC;AAAA,EAClC;AAEA,QAAMC,OAAM,IAAI,WAAW,KAAK,EAAE,CAAC;AACnC,WAAS,IAAI,GAAG,IAAI,IAAI,KAAK;AAC3B,aAAS,IAAI,KAAK,CAAC,GAAG,IAAI,KAAK,IAAI,CAAC,GAAG,EAAE,GAAG;AAC1C,MAAAA,KAAI,CAAC,IAAI,IAAI,KAAK,CAAC,KAAK,IAAI;AAAA,IAC9B;AAAA,EACF;AACA,SAAO,EAAE,MAAM,KAAAA,KAAI;AACrB;AAEA,IAAM,EAAE,MAAM,aAAa,KAAK,MAAM,IAAI,KAAK,sBAAsB,CAAC;AAEtE,YAAY,EAAE,IAAI;AAClB,MAAM,GAAG,IAAI;AACb,IAAM,EAAE,MAAM,cAAc,IAAI,KAAK,wBAAwB,CAAC;AAG9D,IAAM,MAAM,IAAI,YAAY,KAAK;AACjC,SAAS,IAAI,GAAG,IAAI,OAAO,KAAK;AAE9B,MAAI,KAAK,IAAI,UAAW,KAAK,IAAI,UAAW;AAC5C,OAAK,IAAI,UAAW,KAAK,IAAI,UAAW;AACxC,OAAK,IAAI,UAAW,KAAK,IAAI,SAAW;AACxC,MAAI,CAAC,MAAM,IAAI,UAAW,KAAK,IAAI,QAAW,MAAM;AACtD;AAUO,SAAS,QAAQ,IAAI,SAAS,GAAG;AAEtC,QAAM,IAAI,IAAI,YAAY,OAAO;AAEjC,WAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAClC,QAAI,GAAG,CAAC,EAAG,GAAE,EAAE,GAAG,CAAC,IAAI,CAAC;AAAA,EAC1B;AAEA,QAAM,KAAK,IAAI,YAAY,OAAO;AAClC,WAAS,IAAI,GAAG,IAAI,SAAS,KAAK;AAChC,OAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,KAAK;AAAA,EAClC;AACA,MAAI;AACJ,MAAI,GAAG;AAEL,SAAK,IAAI,YAAY,KAAK,OAAO;AAEjC,UAAM,MAAM,KAAK;AACjB,aAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAElC,UAAI,GAAG,CAAC,GAAG;AAET,cAAM,KAAK,KAAK,IAAI,GAAG,CAAC;AACxB,cAAM,WAAW,UAAU,GAAG,CAAC;AAC/B,YAAI,aAAa,GAAG,GAAG,CAAC,IAAI,CAAC,OAAO;AACpC,mBAAW,WAAW,cAAc,KAAK,YAAY,GAAG,cAAc,UAAU,cAAc;AAE5F,aAAG,IAAI,UAAU,KAAK,GAAG,IAAI;AAAA,QAC/B;AAAA,MACF;AAAA,IACF;AAAA,EACF,OAAO;AACL,SAAK,IAAI,YAAY,GAAG,MAAM;AAC9B,aAAS,IAAI,GAAG,IAAI,GAAG,QAAQ,KAAK;AAClC,UAAI,GAAG,CAAC,GAAG;AACT,WAAG,CAAC,IAAI,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC,GAAG,KAAK,KAAK,GAAG,CAAC;AAAA,MAC3C;AAAA,IACF;AAAA,EACF;AACA,SAAO;AACT;AAGA,IAAM,kBAAkB,IAAI,WAAW,GAAG;AAC1C,SAAS,IAAI,GAAG,IAAI,KAAK,IAAK,iBAAgB,CAAC,IAAI;AACnD,SAAS,IAAI,KAAK,IAAI,KAAK,IAAK,iBAAgB,CAAC,IAAI;AACrD,SAAS,IAAI,KAAK,IAAI,KAAK,IAAK,iBAAgB,CAAC,IAAI;AACrD,SAAS,IAAI,KAAK,IAAI,KAAK,IAAK,iBAAgB,CAAC,IAAI;AACrD,IAAM,oBAAoB,IAAI,WAAW,EAAE;AAC3C,SAAS,IAAI,GAAG,IAAI,IAAI,IAAK,mBAAkB,CAAC,IAAI;AAE7C,IAAM,iBAA+B,wBAAQ,iBAAiB,GAAG,CAAC;AAClE,IAAM,mBAAiC,wBAAQ,mBAAmB,GAAG,CAAC;;;ACjGtE,SAAS,gBAAgB,gBAAgB,OAAO,WAAW,aAAa,aAAa,SAAS,IAAI;AACvG,QAAM,aAAa,YAAY;AAC/B,QAAM,QAAQ;AACd,QAAM,YAAY,WAAW,OAAO,YAAY,wBAAwB,EAAE;AAC1E,MAAI;AACJ,MAAI,cAAc,GAAG;AACnB,iBAAa,YAAY,cAAc,QAAQ,KAAK,IAAI,EAAE;AAAA,EAC5D,WAAW,cAAc,GAAG;AAC1B,iBAAa,YAAY,cAAc,QAAQ,KAAK,IAAI,IAAI,EAAE,IAAI;AAAA,EACpE,OAAO;AACL,iBAAa,YAAY;AAAA,EAC3B;AACA,MAAI,cAAc,gBAAgB;AAChC,kBAAc;AAAA,EAChB;AACA,cAAY,SAAS,IAAI;AACzB,cAAY,cAAc,QAAQ,KAAK,IAAI,EAAE,IAAI;AACjD,UAAQ,KAAK;AACf;AAOO,SAAS,sBAAsB,IAAI;AACxC,QAAM,MAAM;AAAA,IACV,mBAAmB;AAAA,IACnB,WAAW;AAAA,IACX,iBAAiB;AAAA,IACjB,aAAa;AAAA,EACf;AAEA,MAAI,YAAY,GAAG,SAAS,CAAC;AAC7B,MAAI,IAAI,aAAa,GAAG,SAAS,CAAC,GAAG;AACnC,WAAO;AAAA,EACT;AAEA,QAAM,eAAe,GAAG,SAAS,CAAC,IAAI;AACtC,MAAI,iBAAiB,GAAG;AACtB,QAAI,cAAc;AAElB,QAAI,GAAG,SAAS,CAAC,MAAM;AACrB,YAAM,IAAI,MAAM,sBAAsB;AAExC,UAAM,aAAa,GAAG,SAAS,CAAC;AAChC,QAAI,eAAe;AACjB,aAAO;AAET,aAAS,IAAI,GAAG,IAAI,YAAY,KAAK;AACnC,YAAM,YAAY,GAAG,SAAS,CAAC;AAC/B,UAAI,IAAI,MAAM,cAAc,aAAa,KAAK,cAAc;AAC1D,cAAM,IAAI,MAAM,mBAAmB;AAErC,UAAI,qBAAqB,aAAa,IAAI;AAAA,IAC5C;AAAA,EACF,OAAO;AACL,aAAS,IAAI,GAAG,IAAI,cAAc,KAAK;AACrC,YAAM,cAAc,GAAG,SAAS,CAAC;AACjC,UAAI,IAAI,MAAM,gBAAgB,eAAe,KAAK,gBAAgB;AAChE,cAAM,IAAI,MAAM,qBAAqB;AAEvC,UAAI,qBAAqB,eAAe,IAAI;AAAA,IAC9C;AAAA,EACF;AAEA,MAAI;AAEJ,MAAI,CAAC,IAAI,aAAa,CAAC,IAAI,aAAa;AACtC,QAAI,kBAAkB,GAAG,SAAS,CAAC;AAAA,EACrC;AAEA,SAAO;AACT;AAYO,SAAS,8BAA8B,QAAQ,KAAK,KAAK,YAAY,iBAAiB,IAAI;AAC/F,QAAM,UAAU,kBAAkB;AAClC,MAAI,SAAS,MAAM;AACnB,MAAI,SAAS,GAAG,OAAO,gBAAgB;AAGvC,MAAI,MAAM,KAAK,GAAG,YAAY,OAAO,KAAK,GAAG,cAAc;AACzD,WAAO,QAAQ,GAAG;AAChB,SAAG,cAAc;AACjB,iBAAW,QAAQ,IAAI,GAAG,SAAS,CAAC;AACpC,UAAI,WAAW,SAAS;AACtB,eAAO,MAAM,YAAY,OAAO;AAChC,iBAAS;AAAA,MACX;AAAA,IACF;AACA;AAAA,EACF;AAEA,MAAI,GAAG,eAAe,IAAI;AACxB,UAAM,IAAI,MAAM,qDAAqD;AAAA,EACvE;AAGA,SAAO,GAAG,WAAW,IAAI;AACvB,eAAW,MAAM,IAAI,GAAG,SAAS,GAAG;AACpC,OAAG,YAAY;AACf;AACA;AAAA,EACF;AAGA,MAAI,SAAS,GAAG,eAAe,GAAG,YAAY;AAC9C,MAAI,SAAS,SAAS,gBAAgB,WAAW;AAC/C,UAAM,OAAO,gBAAgB,YAAY,IAAI;AAC7C,aAAS,IAAI,GAAG,IAAI,MAAM;AACxB,iBAAW,SAAS,CAAC,IAAI,GAAG,KAAK,SAAS,CAAC;AAE7C,cAAU;AACV,cAAU;AACV,WAAO;AACP,aAAS;AAAA,EACX;AAEA,WAAS,IAAI,GAAG,IAAI,QAAQ;AAC1B,eAAW,SAAS,CAAC,IAAI,GAAG,KAAK,SAAS,CAAC;AAE7C,YAAU;AACV,SAAO;AAIP,MAAI,UAAU,SAAS;AACrB,WAAO,MAAM,YAAY,OAAO;AAChC,cAAU;AACV,aAAS,IAAI,GAAG,IAAI,QAAQ;AAC1B,iBAAW,CAAC,IAAI,WAAW,UAAU,CAAC;AAAA,EAC1C;AAIA,SAAO,SAAS,OAAO,SAAS;AAC9B,aAAS,UAAU;AACnB,QAAI,GAAG,OAAO,KAAK,YAAY,QAAQ,MAAM,IAAI,QAAQ;AACvD,YAAM,IAAI,MAAM,iDAAiD;AAAA,IACnE;AACA,WAAO,MAAM,YAAY,OAAO;AAChC,WAAO;AACP,aAAS;AAAA,EACX;AAIA,MAAI,GAAG,OAAO,KAAK,YAAY,QAAQ,GAAG,IAAI,KAAK;AACjD,UAAM,IAAI,MAAM,iDAAiD;AAAA,EACnE;AAGA,KAAG,MAAM;AACX;AAOO,SAAS,kBAAkB,IAAI;AACpC,MAAI,GAAG,SAAS,CAAC,GAAG;AAClB,UAAM,QAAQ,GAAG,SAAS,CAAC;AAC3B,QAAI,UAAU,GAAG;AACf,aAAO;AAAA,IACT,OAAO;AACL,aAAO,GAAG,SAAS,KAAK,KAAK,KAAK;AAAA,IACpC;AAAA,EACF;AACA,SAAO;AACT;AAMO,SAAS,iBAAiB,IAAI;AACnC,MAAI,GAAG,SAAS,CAAC,MAAM,EAAG,QAAO;AAEjC,MAAI,IAAI,GAAG,SAAS,CAAC;AACrB,MAAI,IAAI,EAAG,QAAO,KAAK;AAEvB,MAAI,GAAG,SAAS,CAAC;AACjB,MAAI,IAAI,EAAG,QAAO,IAAI;AAEtB,SAAO;AACT;AAQO,SAAS,mBAAmB,IAAI;AACrC,QAAM,cAAc,GAAG,WAAW,IAAI,CAAC;AACvC,SAAO,CAAC,GAAG,SAAS,cAAc,GAAG,QAAQ;AAC/C;AAQO,SAAS,gBAAgB,OAAO,OAAO,IAAI;AAChD,QAAM,OAAO,WAAW,OAAO,OAAO,EAAE;AACxC,QAAM,EAAE,QAAQ,MAAM,IAAI,uBAAuB,IAAI;AACrD,SAAO,SAAS,GAAG,SAAS,KAAK;AACnC;;;AC3IO,IAAM,SAAS,IAAI,WAAW;AAAA;AAAA;AAAA,EAGnC;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC3D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA;AAAA,EAE7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA;AAAA;AAAA,EAG7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA;AAAA,EAE7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA;AAAA,EAE7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA;AAAA,EAE7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA;AAAA,EAE7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAClD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAClD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAClD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAClD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EACpD;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAC5D;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA,EAAI;AAAA;AAAA,EAE5D;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,EAC7C;AAAA,EAAG;AAAA,EAAG;AAAA,EAAG;AAAA,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AAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;A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",
|
|
6
|
+
"names": ["MAX_LENGTH", "MAX_LENGTH", "MAX_LENGTH", "prefix", "require_valid", "require_semver", "bits", "bits", "key", "rev", "prefix", "dictionary", "byte", "dictionary", "bits", "child", "schemaTree", "decoder", "logicalType", "decoder", "dictionary", "byteWidth", "bitWidth", "bits", "bitWidth", "fixedLength", "snappyUncompress", "len", "bitWidth", "compressors", "snappyUncompress", "dictionary", "compressors", "reader", "groupData", "schemaTree", "assembled", "schemaTree", "rowStart", "schemaTree", "semver", "err", "filter0"]
|
|
7
|
+
}
|