@xterm/addon-image 0.9.0-beta.9 → 0.9.0-beta.91

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.
@@ -1 +1 @@
1
- {"version":3,"file":"addon-image.js","mappings":";CAAA,SAA2CA,EAAMC,GAC1B,iBAAZC,SAA0C,iBAAXC,OACxCA,OAAOD,QAAUD,IACQ,mBAAXG,QAAyBA,OAAOC,IAC9CD,OAAO,GAAIH,GACe,iBAAZC,QACdA,QAAoB,WAAID,IAExBD,EAAiB,WAAIC,GACtB,CATD,CASGK,MAAM,0CCLT,SAASC,EAAKC,GACV,GAAsB,oBAAXC,OACP,OAAOA,OAAOC,KAAKF,EAAG,UAC1B,MAAMG,EAAKC,KAAKJ,GACVK,EAAI,IAAIC,WAAWH,EAAGI,QAC5B,IAAK,IAAIC,EAAI,EAAGA,EAAIH,EAAEE,SAAUC,EAC5BH,EAAEG,GAAKL,EAAGM,WAAWD,GACzB,OAAOH,CACX,CAXAK,OAAOC,eAAejB,EAAS,aAAc,CAAEkB,OAAO,IACtDlB,EAAQmB,YAAS,EA4CjBnB,EAAQmB,OAjCR,SAAgBC,GACZ,GAAIA,EAAIC,EAAG,CAIP,MAAM,EAAEC,EAAC,EAAEhB,EAAC,EAAEe,GAAMD,EAEpB,IAAIG,EACAC,EACJ,MAAMC,EAAIC,YACV,OAAU,IAANJ,EACIhB,EACO,IAAMiB,IAAUA,EAAQlB,EAAKgB,IACjC,IAAMM,QAAQC,QAAQL,IAAUA,EAAQlB,EAAKgB,KAE9C,IAANC,EACIhB,EACO,IAAMkB,IAAQA,EAAM,IAAIC,EAAEI,OAAON,IAAUA,EAAQlB,EAAKgB,MAC5D,IAAMG,EACPG,QAAQC,QAAQJ,GAChBC,EAAEK,QAAQP,IAAUA,EAAQlB,EAAKgB,KAAKU,MAAKC,GAAKR,EAAMQ,IAE5D1B,EACQ2B,GAAM,IAAIR,EAAES,SAASV,IAAQA,EAAM,IAAIC,EAAEI,OAAON,IAAUA,EAAQlB,EAAKgB,MAAOY,GAClFA,GAAMT,EACRC,EAAEU,YAAYX,EAAKS,GACnBR,EAAEU,YAAYZ,IAAUA,EAAQlB,EAAKgB,IAAKY,GAAGF,MAAKpB,IAAMa,EAAMb,EAAEV,SAAWU,EAAEyB,UACvF,CAEA,GAAwB,oBAAbC,SACP,MAAM,IAAIC,MAAM,qBACpBD,SAASE,IAAInB,EACjB,eC/BA,SAASoB,EAAIC,GACT,OAAW,IAAJA,CACX,CAEA,SAASC,EAAMD,GACX,OAAQA,IAAM,EAAK,GACvB,CAEA,SAASE,EAAKF,GACV,OAAQA,IAAM,GAAM,GACxB,CASA,SAASG,EAAWjC,EAAGkC,EAAGC,EAAGC,EAAI,KAC7B,QAAa,IAAJA,IAAa,IAAU,IAAJD,IAAa,IAAU,IAAJD,IAAa,EAAS,IAAJlC,KAAe,CACpF,CAqCA,SAASqC,EAAMC,EAAKC,EAAMhC,GACtB,OAAOiC,KAAKC,IAAIH,EAAKE,KAAKE,IAAInC,EAAOgC,GACzC,CACA,SAASI,EAAIC,EAAIC,EAAIC,GAKjB,OAJIA,EAAI,IACJA,GAAK,GACLA,EAAI,IACJA,GAAK,GACE,EAAJA,EAAQ,EACTD,EAAiB,GAAXD,EAAKC,GAAUC,EACjB,EAAJA,EAAQ,EACJF,EACI,EAAJE,EAAQ,EACJD,GAAMD,EAAKC,IAAO,EAAQ,EAAJC,GACtBD,CAClB,CAaA,SAASE,EAAa/C,EAAGkC,EAAGC,GACxB,OAAQ,WAAaK,KAAKQ,MAAMb,EAAI,IAAM,MAAQ,GAAKK,KAAKQ,MAAMd,EAAI,IAAM,MAAQ,EAAIM,KAAKQ,MAAMhD,EAAI,IAAM,QAAU,CAC3H,CAjGAK,OAAOC,eAAejB,EAAS,aAAc,CAAEkB,OAAO,IACtDlB,EAAQ4D,mBAAqB5D,EAAQ6D,mBAAqB7D,EAAQ8D,iBAAmB9D,EAAQ+D,mBAAqB/D,EAAQgE,oBAAsBhE,EAAQiE,aAAejE,EAAQ0D,aAAe1D,EAAQkE,kBAAoBlE,EAAQmE,aAAenE,EAAQ4C,WAAa5C,EAAQoE,MAAQpE,EAAQ2C,KAAO3C,EAAQ0C,MAAQ1C,EAAQwC,IAAMxC,EAAQqE,gBAAa,EAGxVrE,EAAQqE,WAAyE,MAA5D,IAAIzD,WAAW,IAAI0D,YAAY,CAAC,aAAaC,QAAQ,GACtEvE,EAAQqE,YACRG,QAAQC,KAAK,+EAMjBzE,EAAQwC,IAAMA,EAIdxC,EAAQ0C,MAAQA,EAIhB1C,EAAQ2C,KAAOA,EAIf3C,EAAQoE,MAHR,SAAe3B,GACX,OAAQA,IAAM,GAAM,GACxB,EAQAzC,EAAQ4C,WAAaA,EAOrB5C,EAAQmE,aAHR,SAAsBO,GAClB,MAAO,CAAS,IAARA,EAAeA,GAAS,EAAK,IAAOA,GAAS,GAAM,IAAMA,IAAU,GAC/E,EA2BA1E,EAAQkE,kBArBR,SAA2BQ,EAAOC,GAC9B,MAAMhE,EAAI6B,EAAIkC,GACR7B,EAAIH,EAAMgC,GACV5B,EAAIH,EAAK+B,GACf,IAAIrB,EAAMuB,OAAOC,iBACbC,GAAO,EAEX,IAAK,IAAIhE,EAAI,EAAGA,EAAI6D,EAAQ9D,SAAUC,EAAG,CACrC,MAAMiE,EAAKpE,EAAIgE,EAAQ7D,GAAG,GACpBkE,EAAKnC,EAAI8B,EAAQ7D,GAAG,GACpBmE,EAAKnC,EAAI6B,EAAQ7D,GAAG,GACpBO,EAAI0D,EAAKA,EAAKC,EAAKA,EAAKC,EAAKA,EACnC,IAAK5D,EACD,OAAOP,EACPO,EAAIgC,IACJA,EAAMhC,EACNyD,EAAMhE,EAEd,CACA,OAAOgE,CACX,EAmCA9E,EAAQ0D,aAAeA,EAQvB1D,EAAQiE,aAJR,SAAsBiB,EAAGC,EAAG7E,GAExB,OArBJ,SAAkB4E,EAAGC,EAAG7E,GACpB,IAAKA,EAAG,CACJ,MAAM8E,EAAIjC,KAAKQ,MAAU,IAAJwB,GACrB,OAAOvC,EAAWwC,EAAGA,EAAGA,EAC5B,CACA,MAAM7B,EAAK4B,EAAI,GAAMA,GAAK,EAAI7E,GAAK6E,EAAI7E,EAAI6E,EAAI7E,EACzCkD,EAAK,EAAI2B,EAAI5B,EACnB,OAAOX,EAAWI,EAAM,EAAG,IAAKG,KAAKQ,MAA+B,IAAzBL,EAAIC,EAAIC,EAAI0B,EAAI,EAAI,KAAYlC,EAAM,EAAG,IAAKG,KAAKQ,MAAuB,IAAjBL,EAAIC,EAAIC,EAAI0B,KAAYlC,EAAM,EAAG,IAAKG,KAAKQ,MAA+B,IAAzBL,EAAIC,EAAIC,EAAI0B,EAAI,EAAI,KAC7K,CAaWG,EAAUH,EAAI,KAAa,IAAKC,EAAI,IAAK7E,EAAI,IACxD,EA+BAN,EAAQgE,oBAAsB,IAAIM,YAAY,CAC1CZ,EAAa,EAAG,EAAG,GACnBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,MA0BzB1D,EAAQ+D,mBAAqB,IAAIO,YAAY,CACzCZ,EAAa,EAAG,EAAG,GACnBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,EAAG,EAAG,GACnBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,EAAG,EAAG,GACnBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,EAAG,EAAG,GACnBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,IACrBA,EAAa,GAAI,GAAI,MAOzB1D,EAAQ8D,iBAAmB,MAEvB,MAAMwB,EAAI,CACN1C,EAAW,EAAG,EAAG,GACjBA,EAAW,IAAK,EAAG,GACnBA,EAAW,EAAG,IAAK,GACnBA,EAAW,IAAK,IAAK,GACrBA,EAAW,EAAG,EAAG,KACjBA,EAAW,IAAK,EAAG,KACnBA,EAAW,EAAG,IAAK,KACnBA,EAAW,IAAK,IAAK,KACrBA,EAAW,IAAK,IAAK,KACrBA,EAAW,IAAK,EAAG,GACnBA,EAAW,EAAG,IAAK,GACnBA,EAAW,IAAK,IAAK,GACrBA,EAAW,GAAI,GAAI,KACnBA,EAAW,IAAK,EAAG,KACnBA,EAAW,EAAG,IAAK,KACnBA,EAAW,IAAK,IAAK,MAGnBvB,EAAI,CAAC,EAAG,GAAI,IAAK,IAAK,IAAK,KACjC,IAAK,IAAIV,EAAI,EAAGA,EAAI,IAAKA,EACrB,IAAK,IAAIkC,EAAI,EAAGA,EAAI,IAAKA,EACrB,IAAK,IAAIC,EAAI,EAAGA,EAAI,IAAKA,EACrBwC,EAAEC,KAAK3C,EAAWvB,EAAEV,GAAIU,EAAEwB,GAAIxB,EAAEyB,KAK5C,IAAK,IAAIsC,EAAI,EAAGA,GAAK,IAAKA,GAAK,GAC3BE,EAAEC,KAAK3C,EAAWwC,EAAGA,EAAGA,IAE5B,OAAO,IAAId,YAAYgB,EAC1B,EAlC0B,GA0C3BtF,EAAQ6D,mBAAqBjB,EAAW,EAAG,EAAG,EAAG,KACjD5C,EAAQ4D,mBAAqBhB,EAAW,IAAK,IAAK,IAAK,oBCpPvD5B,OAAOC,eAAejB,EAAS,aAAc,CAAEkB,OAAO,IACtDlB,EAAQwF,YAAcxF,EAAQyF,OAASzF,EAAQ0F,QAAU1F,EAAQ2F,kBAAe,EAChF,MAAMC,EAAW,EAAQ,KACnBC,EAAS,EAAQ,KAajBC,EAXN,SAAsBxF,GAClB,GAAsB,oBAAXC,OACP,OAAOA,OAAOC,KAAKF,EAAG,UAE1B,MAAMyF,EAAarF,KAAKJ,GAClB0F,EAAS,IAAIpF,WAAWmF,EAAWlF,QACzC,IAAK,IAAIC,EAAI,EAAGA,EAAIkF,EAAOnF,SAAUC,EACjCkF,EAAOlF,GAAKiF,EAAWhF,WAAWD,GAEtC,OAAOkF,CACX,CACmBC,CAAaJ,EAAOK,OAAOC,OAC9C,IAAIC,EAEJ,MAAMC,EAAc,IAAI/B,YAExB,MAAMgC,EACF,WAAAC,GACIC,KAAKC,YAAeC,GAAU,EAC9BF,KAAKG,YAAeC,GAAS,CACjC,CACA,WAAAC,CAAYH,GACR,OAAOF,KAAKC,YAAYC,EAC5B,CACA,WAAAI,CAAYF,GACR,OAAOJ,KAAKG,YAAYC,EAC5B,EAGJ,MAAMG,EAAkB,CACpBC,YAAa,UACbC,WAAYrB,EAAShC,mBACrBsD,UAAWtB,EAAS/B,mBACpBc,QAASiB,EAAS5B,oBAClBmD,aAActB,EAAOK,OAAOkB,aAC5BC,UAAU,GAMd,SAAS1B,EAAa2B,GAClB,MAAMC,EAAU,IAAIjB,EACdkB,EAAY,CACdC,IAAK,CACDZ,YAAaU,EAAQV,YAAYa,KAAKH,GACtCT,YAAaS,EAAQT,YAAYY,KAAKH,KAG9C,OAAO7F,YAAYS,YAAYiE,GAAeN,EAAY0B,GACrDzF,MAAM4F,IACPvB,EAAcA,GAAeuB,EAAK1H,OAC3B,IAAIyF,EAAQ4B,EAAMK,EAAKvF,UAAYuF,EAAMJ,KAExD,CACAvH,EAAQ2F,aAAeA,EAiCvB,MAAMD,EAKF,WAAAa,CAAYe,EAAMM,EAAWC,GASzB,GARArB,KAAKsB,cAAgBjC,EAAOK,OAAO6B,UAAY,EAC/CvB,KAAKwB,QAAU3B,EACfG,KAAKyB,YAAc,GACnBzB,KAAK0B,UAAY,EACjB1B,KAAK2B,UAAYtC,EAAOK,OAAO6B,UAC/BvB,KAAK4B,YAAc,EACnB5B,KAAK6B,eAAiB,EACtB7B,KAAK8B,MAAQtH,OAAOuH,OAAO,CAAC,EAAGxB,EAAiBO,GAC5Cd,KAAK8B,MAAMnB,aAAetB,EAAOK,OAAOkB,aACxC,MAAM,IAAI9E,MAAM,+CAA+CuD,EAAOK,OAAOkB,gBAEjF,GAAKQ,EAUDC,EAASpB,YAAcD,KAAKgC,aAAad,KAAKlB,MAC9CqB,EAASlB,YAAcH,KAAKiC,YAAYf,KAAKlB,UAXjC,CACZ,MAAMvG,EAASmG,IAAgBA,EAAc,IAAI1E,YAAYG,OAAOiE,IACpE8B,EAAY,IAAIlG,YAAYQ,SAASjC,EAAQ,CACzCwH,IAAK,CACDZ,YAAaL,KAAKgC,aAAad,KAAKlB,MACpCM,YAAaN,KAAKiC,YAAYf,KAAKlB,QAG/C,CAKAA,KAAKoB,UAAYA,EACjBpB,KAAKkC,MAAQlC,KAAKoB,UAAU5H,QAC5BwG,KAAKmC,OAAS,IAAI/H,WAAW4F,KAAKkC,MAAME,OAAOrE,OAAQiC,KAAKkC,MAAMG,oBAAqBhD,EAAOK,OAAO4C,YACrGtC,KAAKuC,QAAU,IAAIzE,YAAYkC,KAAKkC,MAAME,OAAOrE,OAAQiC,KAAKkC,MAAMM,oBAAqB,IACzFxC,KAAKyC,SAAW,IAAI3E,YAAYkC,KAAKkC,MAAME,OAAOrE,OAAQiC,KAAKkC,MAAMQ,sBAAuBrD,EAAOK,OAAOkB,cAC1GZ,KAAKyC,SAASE,IAAI3C,KAAK8B,MAAM3D,SAC7B6B,KAAK4C,MAAQ,IAAI9E,YAAYkC,KAAKkC,MAAME,OAAOrE,OAAQiC,KAAKkC,MAAMW,kBAClE7C,KAAKkC,MAAMY,KAAK1D,EAAShC,mBAAoB,EAAG4C,KAAK8B,MAAMnB,aAAc,EAC7E,CAEA,cAAIoC,GAAe,OAAO/C,KAAKuC,QAAQ,EAAI,CAC3C,aAAIS,GAAc,OAAOhD,KAAKuC,QAAQ,EAAI,CAC1C,gBAAIU,GAAiB,OAAOjD,KAAKuC,QAAQ,EAAI,CAC7C,iBAAIW,GAAkB,OAAOlD,KAAKuC,QAAQ,EAAI,CAC9C,UAAIY,GAAW,OAAOnD,KAAKuC,QAAQ,GAAKvC,KAAKuC,QAAQ,GAAK,EAAI,CAAG,CACjE,WAAIa,GAAY,OAAOpD,KAAKuC,QAAQ,EAAI,CACxC,UAAIc,GAAW,OAAOrD,KAAKuC,QAAQ,EAAI,CACvC,SAAIe,GAAU,OAAOtD,KAAKuC,QAAQ,GAAK,CACvC,iBAAIgB,GAAkB,OAAOvD,KAAKuC,QAAQ,GAAK,CAC/C,WAAAN,CAAY7B,GACR,GAAa,IAATA,EAAqB,CACrB,MAAMoD,EAASxD,KAAKE,MAAQF,KAAKyD,OACjC,GAAID,EAASxD,KAAKwB,QAAQnH,OAAQ,CAC9B,GAAI2F,KAAK8B,MAAMtB,aAAwB,EAATgD,EAAaxD,KAAK8B,MAAMtB,YAElD,MADAR,KAAK0D,UACC,IAAI5H,MAAM,8BAEpBkE,KAAKwB,QAAU,IAAI1D,YAAY0F,EACnC,CACAxD,KAAK0B,UAAY1B,KAAKmD,MAC1B,MACK,GAAa,IAAT/C,EACL,GAAoB,IAAhBJ,KAAKqD,OAAc,CAEnB,MAAMG,EAAS7G,KAAKE,IAAImD,KAAKiD,aAAc5D,EAAOK,OAAO6B,WAAavB,KAAKkD,cAC3E,GAAIM,EAASxD,KAAKwB,QAAQnH,OAAQ,CAC9B,GAAI2F,KAAK8B,MAAMtB,aAAwB,EAATgD,EAAaxD,KAAK8B,MAAMtB,YAElD,MADAR,KAAK0D,UACC,IAAI5H,MAAM,8BAEpBkE,KAAKwB,QAAU,IAAI1D,YAAY0F,EACnC,CACJ,MAGQxD,KAAKwB,QAAQnH,OAAS,QACtB2F,KAAKwB,QAAU,IAAI1D,YAAY,QAI3C,OAAO,CACX,CACA,QAAA6F,CAASC,EAAQC,GACb,MAAML,EAASI,EAASC,EACxB,GAAIL,EAASxD,KAAKwB,QAAQnH,OAAQ,CAC9B,GAAI2F,KAAK8B,MAAMtB,aAAwB,EAATgD,EAAaxD,KAAK8B,MAAMtB,YAElD,MADAR,KAAK0D,UACC,IAAI5H,MAAM,8BAGpB,MAAMgI,EAAY,IAAIhG,YAAwC,MAA5BnB,KAAKoH,KAAKP,EAAS,QACrDM,EAAUnB,IAAI3C,KAAKwB,SACnBxB,KAAKwB,QAAUsC,CACnB,CACJ,CACA,YAAA9B,CAAa9B,GACT,MAAM8D,EAAMhE,KAAKsB,cACjB,IAAIsC,EAAS5D,KAAK4B,YAClB,GAAmB,IAAf5B,KAAKsD,MAAsB,CAC3B,IAAIW,EAAYjE,KAAKyD,OAASzD,KAAK6B,eAC/B5E,EAAI,EACR,KAAOA,EAAI,GAAKgH,EAAY,GACxBjE,KAAKwB,QAAQmB,IAAI3C,KAAK4C,MAAMsB,SAASF,EAAM/G,EAAG+G,EAAM/G,EAAIiD,GAAQ0D,EAAS1D,EAAQjD,GACjFA,IACAgH,IAEJjE,KAAK4B,aAAe1B,EAAQjD,EAC5B+C,KAAK6B,gBAAkB5E,CAC3B,MACK,GAAmB,IAAf+C,KAAKsD,MAAsB,CAChCtD,KAAK2D,SAASC,EAAgB,EAAR1D,GACtBF,KAAK0B,UAAY/E,KAAKC,IAAIoD,KAAK0B,UAAWxB,GAC1CF,KAAK2B,UAAYhF,KAAKE,IAAImD,KAAK2B,UAAWzB,GAC1C,IAAK,IAAI5F,EAAI,EAAGA,EAAI,IAAKA,EACrB0F,KAAKwB,QAAQmB,IAAI3C,KAAK4C,MAAMsB,SAASF,EAAM1J,EAAG0J,EAAM1J,EAAI4F,GAAQ0D,EAAS1D,EAAQ5F,GAErF0F,KAAKyB,YAAY1C,KAAKmB,GACtBF,KAAK4B,aAAuB,EAAR1B,EACpBF,KAAK6B,gBAAkB,CAC3B,CACA,OAAO,CACX,CAMA,SAAI3B,GACA,OAAsB,IAAfF,KAAKsD,MACNtD,KAAKmD,OACLxG,KAAKC,IAAIoD,KAAK0B,UAAW1B,KAAKkC,MAAMiC,gBAC9C,CAMA,UAAIV,GACA,OAAsB,IAAfzD,KAAKsD,MACNtD,KAAKoD,QACLpD,KAAKkC,MAAMiC,gBACmB,EAA1BnE,KAAKyB,YAAYpH,OAAa2F,KAAKkC,MAAMkC,iBACf,EAA1BpE,KAAKyB,YAAYpH,MAC/B,CAIA,WAAI8D,GACA,OAAO6B,KAAKyC,SAASyB,SAAS,EAAGlE,KAAKuD,cAC1C,CAUA,eAAIc,GACA,OAAOrE,KAAKwB,QAAQ8C,WAAatE,KAAKkC,MAAME,OAAOrE,OAAOuG,WAAa,EAAItE,KAAKyB,YAAYpH,MAChG,CAIA,cAAIkK,GACA,MAAO,CACHrE,MAAOF,KAAKE,MACZuD,OAAQzD,KAAKyD,OACbrD,KAAMJ,KAAKsD,MACXkB,MAAOxE,KAAKqD,OACZxC,WAAYb,KAAKgD,UACjBrC,aAAcX,KAAKuD,cACnB7C,UAAWV,KAAK+C,WAChB0B,SAAUzE,KAAKqE,YACfK,iBAAkB,CACdC,UAAW3E,KAAKuC,QAAQ,GACxBqC,YAAa5E,KAAKuC,QAAQ,GAC1BrC,MAAOF,KAAKiD,aACZQ,OAAQzD,KAAKkD,eAGzB,CAMA,IAAAJ,CAAKpC,EAAYV,KAAK8B,MAAMpB,UAAWvC,EAAU6B,KAAK8B,MAAM3D,QAASwC,EAAeX,KAAK8B,MAAMnB,aAAcE,EAAWb,KAAK8B,MAAMjB,UAC/Hb,KAAKkC,MAAMY,KAAK9C,KAAK8B,MAAMrB,WAAYC,EAAWC,EAAcE,EAAW,EAAI,GAC3E1C,GACA6B,KAAKyC,SAASE,IAAIxE,EAAQ+F,SAAS,EAAG7E,EAAOK,OAAOkB,eAExDZ,KAAKyB,YAAYpH,OAAS,EAC1B2F,KAAK0B,UAAY,EACjB1B,KAAK2B,UAAYtC,EAAOK,OAAO6B,UAC/BvB,KAAK4B,YAAc,EACnB5B,KAAK6B,eAAiB,CAC1B,CAKA,MAAA5C,CAAO4F,EAAMC,EAAQ,EAAGC,EAAMF,EAAKxK,QAC/B,IAAIyE,EAAIgG,EACR,KAAOhG,EAAIiG,GAAK,CACZ,MAAM1K,EAASsC,KAAKE,IAAIkI,EAAMjG,EAAGO,EAAOK,OAAO4C,YAC/CtC,KAAKmC,OAAOQ,IAAIkC,EAAKX,SAASpF,EAAGA,GAAKzE,IACtC2F,KAAKkC,MAAMjD,OAAO,EAAG5E,EACzB,CACJ,CAMA,YAAA2K,CAAaH,EAAMC,EAAQ,EAAGC,EAAMF,EAAKxK,QACrC,IAAIyE,EAAIgG,EACR,KAAOhG,EAAIiG,GAAK,CACZ,MAAM1K,EAASsC,KAAKE,IAAIkI,EAAMjG,EAAGO,EAAOK,OAAO4C,YAC/C,IAAK,IAAIhI,EAAI,EAAG2K,EAAInG,EAAGxE,EAAID,IAAUC,IAAK2K,EACtCjF,KAAKmC,OAAO7H,GAAKuK,EAAKtK,WAAW0K,GAErCnG,GAAKzE,EACL2F,KAAKkC,MAAMjD,OAAO,EAAG5E,EACzB,CACJ,CAKA,UAAI6K,GACA,GAAmB,IAAflF,KAAKsD,QAAyBtD,KAAKE,QAAUF,KAAKyD,OAClD,OAAO5D,EAGX,MAAMsF,EAAenF,KAAKkC,MAAMiC,gBAChC,GAAmB,IAAfnE,KAAKsD,MAAsB,CAC3B,IAAIW,EAAYjE,KAAKyD,OAASzD,KAAK6B,eACnC,GAAIoC,EAAY,EAAG,CACf,MAAMD,EAAMhE,KAAKsB,cACjB,IAAIsC,EAAS5D,KAAK4B,YACd3E,EAAI,EACR,KAAOA,EAAI,GAAKgH,EAAY,GACxBjE,KAAKwB,QAAQmB,IAAI3C,KAAK4C,MAAMsB,SAASF,EAAM/G,EAAG+G,EAAM/G,EAAIkI,GAAevB,EAASuB,EAAelI,GAC/FA,IACAgH,IAEAA,GACAjE,KAAKwB,QAAQ4D,KAAKpF,KAAK+C,WAAYa,EAASuB,EAAelI,EAEnE,CACA,OAAO+C,KAAKwB,QAAQ0C,SAAS,EAAGlE,KAAKE,MAAQF,KAAKyD,OACtD,CACA,GAAmB,IAAfzD,KAAKsD,MAAsB,CAC3B,GAAItD,KAAK2B,YAAc3B,KAAK0B,UAAW,CACnC,IAAI2D,GAAS,EACb,GAAIF,EACA,GAAIA,IAAiBnF,KAAK2B,UACtB0D,GAAS,MAER,CACD,MAAMrB,EAAMhE,KAAKsB,cACjB,IAAIsC,EAAS5D,KAAK4B,YAClB5B,KAAK2D,SAASC,EAAuB,EAAfuB,GACtB,IAAK,IAAI7K,EAAI,EAAGA,EAAI,IAAKA,EACrB0F,KAAKwB,QAAQmB,IAAI3C,KAAK4C,MAAMsB,SAASF,EAAM1J,EAAG0J,EAAM1J,EAAI6K,GAAevB,EAASuB,EAAe7K,EAEvG,CAEJ,IAAK+K,EACD,OAAOrF,KAAKwB,QAAQ0C,SAAS,EAAGlE,KAAKE,MAAQF,KAAKyD,OAE1D,CAGA,MAAM6B,EAAQ,IAAIxH,YAAYkC,KAAKE,MAAQF,KAAKyD,QAChD6B,EAAMF,KAAKpF,KAAK+C,YAChB,IAAIwC,EAAc,EACdT,EAAQ,EACZ,IAAK,IAAIxK,EAAI,EAAGA,EAAI0F,KAAKyB,YAAYpH,SAAUC,EAAG,CAC9C,MAAMkL,EAAKxF,KAAKyB,YAAYnH,GAC5B,IAAK,IAAIwE,EAAI,EAAGA,EAAI,IAAKA,EACrBwG,EAAM3C,IAAI3C,KAAKwB,QAAQ0C,SAASY,EAAOA,GAASU,GAAKD,GACrDA,GAAevF,KAAKE,KAE5B,CAEA,GAAIiF,EAAc,CACd,MAAMnB,EAAMhE,KAAKsB,cAEXmE,EAAgBzF,KAAKkC,MAAMkC,iBACjC,IAAK,IAAI9J,EAAI,EAAGA,EAAImL,IAAiBnL,EACjCgL,EAAM3C,IAAI3C,KAAK4C,MAAMsB,SAASF,EAAM1J,EAAG0J,EAAM1J,EAAI6K,GAAeI,EAAcvF,KAAKE,MAAQ5F,EAEnG,CACA,OAAOgL,CACX,CAEA,OAAOzF,CACX,CAKA,SAAI6F,GACA,OAAO,IAAIC,kBAAkB3F,KAAKkF,OAAOnH,OAAQ,EAAGiC,KAAKE,MAAQF,KAAKyD,OAAS,EACnF,CAaA,OAAAC,GACI1D,KAAKwB,QAAU3B,EACfG,KAAKyB,YAAYpH,OAAS,EAC1B2F,KAAK0B,UAAY,EACjB1B,KAAK2B,UAAYtC,EAAOK,OAAO6B,UAG/BvB,KAAKkC,MAAMY,KAAK1D,EAAShC,mBAAoB,EAAG4C,KAAK8B,MAAMnB,aAAc,EAC7E,EAEJnH,EAAQ0F,QAAUA,EAyBlB1F,EAAQyF,OAXR,SAAgB4F,EAAM/D,GAClB,MAAM8E,EAAM,IAAI1G,EAAQ4B,GAGxB,OAFA8E,EAAI9C,OACY,iBAAT+B,EAAoBe,EAAIZ,aAAaH,GAAQe,EAAI3G,OAAO4F,GACxD,CACH3E,MAAO0F,EAAI1F,MACXuD,OAAQmC,EAAInC,OACZyB,OAAQU,EAAIV,OACZQ,MAAOE,EAAIF,MAEnB,EAkBAlM,EAAQwF,YAXR6G,eAA2BhB,EAAM/D,GAC7B,MAAM8E,QAAYzG,EAAa2B,GAG/B,OAFA8E,EAAI9C,OACY,iBAAT+B,EAAoBe,EAAIZ,aAAaH,GAAQe,EAAI3G,OAAO4F,GACxD,CACH3E,MAAO0F,EAAI1F,MACXuD,OAAQmC,EAAInC,OACZyB,OAAQU,EAAIV,OACZQ,MAAOE,EAAIF,MAEnB,eCpdAlL,OAAOC,eAAejB,EAAS,aAAc,CAAEkB,OAAO,IACtDlB,EAAQkG,YAAS,EACjBlG,EAAQkG,OAAS,CACb4C,WAAY,MACZ1B,aAAc,KACdW,UAAW,MACX5B,MAAO,mmdCNXnF,OAAOC,eAAejB,EAAS,aAAc,CAAEkB,OAAO,IAKtD,MAIMoL,GAAa,EAJF,EAAQ,KAIOnL,QAAuD,CAACb,EAAE,EAAEgB,EAAE,EAAED,EAAE,62BAE5FkL,EAAM,IAAI3L,WAAW,mEACtB4L,MAAM,IACNC,KAAIC,GAAMA,EAAG3L,WAAW,MAEvB4L,EAAI,IAAIrI,YAAY,MAC1BqI,EAAEf,KAAK,YACP,IAAK,IAAI9K,EAAI,EAAGA,EAAIyL,EAAI1L,SAAUC,EAC9B6L,EAAEJ,EAAIzL,IAAMA,GAAK,EACrB,IAAK,IAAIA,EAAI,EAAGA,EAAIyL,EAAI1L,SAAUC,EAC9B6L,EAAE,IAAMJ,EAAIzL,IAAMA,GAAK,GAAMA,GAAK,EAAK,MAAS,EACpD,IAAK,IAAIA,EAAI,EAAGA,EAAIyL,EAAI1L,SAAUC,EAC9B6L,EAAE,IAAMJ,EAAIzL,IAAOA,GAAK,GAAM,GAAMA,GAAK,EAAK,MAAS,GAC3D,IAAK,IAAIA,EAAI,EAAGA,EAAIyL,EAAI1L,SAAUC,EAC9B6L,EAAE,IAAMJ,EAAIzL,IAAMA,GAAK,GAC3B,MAAM8L,EAAQ,IAAIhM,WAAW,GAgG7BZ,EAAA,QApFA,MACI,WAAAuG,CAAYsG,GACRrG,KAAKqG,SAAWA,CACpB,CAKA,SAAIX,GACA,OAAO1F,KAAKsG,MAAQtG,KAAKuG,GAAGrC,SAAS,EAAGlE,KAAKwG,KAAK,OAA4BJ,CAClF,CAMA,OAAA1C,GACS1D,KAAKsG,QAENtG,KAAKyG,KAAK1I,OAAOuG,WAAatE,KAAKqG,SACnCrG,KAAKsG,MAAQtG,KAAKwG,KAAOxG,KAAKuG,GAAKvG,KAAKyG,KAAO,MAG/CzG,KAAKwG,KAAK,MAA2B,EACrCxG,KAAKwG,KAAK,MAA2B,EACrCxG,KAAKwG,KAAK,MAA2B,GAE7C,CAQA,IAAA1D,CAAK4D,GACD,IAAIlL,EAAIwE,KAAKwG,KACb,MAAMzL,EAA4D,GAAnD4B,KAAKoH,KAAK2C,EAAO,GAAK,MAChC1G,KAAKsG,MAODtG,KAAKyG,KAAK1I,OAAOuG,WAAavJ,IACnCiF,KAAKyG,KAAKE,KAAKhK,KAAKoH,MAAMhJ,EAAQiF,KAAKyG,KAAK1I,OAAOuG,YAAc,QACjE9I,EAAI,IAAIsC,YAAYkC,KAAKyG,KAAK1I,OAAQ,GACtCiC,KAAKuG,GAAK,IAAInM,WAAW4F,KAAKyG,KAAK1I,OAAQ,QAT3CiC,KAAKyG,KAAO,IAAIvL,YAAY0L,OAAO,CAAEC,QAASlK,KAAKoH,KAAKhJ,EAAQ,SAChEiF,KAAKsG,MAAQR,EAAW,CAAE7E,IAAK,CAAEmB,OAAQpC,KAAKyG,QAC9CjL,EAAI,IAAIsC,YAAYkC,KAAKyG,KAAK1I,OAAQ,GACtCvC,EAAEmH,IAAIwD,EAAG,KACTnG,KAAKuG,GAAK,IAAInM,WAAW4F,KAAKyG,KAAK1I,OAAQ,OAO/CvC,EAAE,MAA8BkL,EAChClL,EAAE,MAAoD,EAAtBmB,KAAKoH,KAAK2C,EAAO,GACjDlL,EAAE,MAA2B,EAC7BA,EAAE,MAA2B,EAC7BA,EAAE,MAA2B,EAC7BwE,KAAKwG,KAAOhL,CAChB,CAMA,GAAAsL,CAAIjC,EAAMC,EAAOC,GACb,IAAK/E,KAAKsG,MACN,OAAO,EACX,MAAM9K,EAAIwE,KAAKwG,KACf,OAAIzB,EAAMD,EAAQtJ,EAAE,MAA2BA,EAAE,MACtC,GACXwE,KAAKuG,GAAG5D,IAAIkC,EAAKX,SAASY,EAAOC,GAAMvJ,EAAE,OACzCA,EAAE,OAA4BuJ,EAAMD,EAG7BtJ,EAAE,MAA2BA,EAAE,OAA4B,OAASwE,KAAKsG,MAAM9M,QAAQoM,MAAQ,EAC1G,CAOA,GAAAb,GACI,OAAO/E,KAAKsG,MAAQtG,KAAKsG,MAAM9M,QAAQuL,MAAQ,CACnD,uFCnHJ,eACA,SACA,SACA,SACA,SAUMgC,EAAgC,CACpCC,KAAM,eACNN,KAAM,EACNxG,MAAO,OACPuD,OAAQ,OACRwD,oBAAqB,EACrBC,OAAQ,GAIV,mBAOE,WAAAnH,CACmB+B,EACAqF,EACAC,EACAC,GAHA,KAAAvF,MAAAA,EACA,KAAAqF,UAAAA,EACA,KAAAC,SAAAA,EACA,KAAAC,cAAAA,EAVX,KAAAC,UAAW,EACX,KAAAC,IAAM,IAAI,EAAAC,aACV,KAAAC,QAAyBV,EACzB,KAAAlN,KAAO,IAAI,UAjBH,SAkBR,KAAA6N,SAAW,EAAAC,gBAOhB,CAEI,KAAAC,GAAe,CAEf,KAAA9C,GACL9E,KAAKsH,UAAW,EAChBtH,KAAKyH,QAAUV,EACf/G,KAAK0H,SAAY,EAAAC,iBACjB3H,KAAKuH,IAAIK,OACX,CAEO,GAAAd,CAAIjC,EAAmBC,EAAeC,GAC3C,IAAI/E,KAAKsH,SAET,GAAuB,IAAnBtH,KAAKuH,IAAIM,MACP7H,KAAKnG,KAAKiN,IAAIjC,EAAMC,EAAOC,KAC7B/E,KAAKnG,KAAK6J,UACV1D,KAAKsH,UAAW,OAEb,CACL,MAAMQ,EAAU9H,KAAKuH,IAAIQ,MAAMlD,EAAMC,EAAOC,GAC5C,IAAiB,IAAb+C,EAEF,YADA9H,KAAKsH,UAAW,GAGlB,GAAIQ,EAAU,EAAG,CAEf,GADA9H,KAAKyH,QAAUjN,OAAOuH,OAAO,CAAC,EAAGgF,EAAgB/G,KAAKuH,IAAIS,SACrDhI,KAAKyH,QAAQP,SAAWlH,KAAKyH,QAAQf,MAAQ1G,KAAKyH,QAAQf,KAAO1G,KAAK8B,MAAMmG,aAE/E,YADAjI,KAAKsH,UAAW,GAGlBtH,KAAKnG,KAAKiJ,KAAK9C,KAAKyH,QAAQf,MACxB1G,KAAKnG,KAAKiN,IAAIjC,EAAMiD,EAAS/C,KAC/B/E,KAAKnG,KAAK6J,UACV1D,KAAKsH,UAAW,IAIxB,CAEO,GAAAvC,CAAImD,GACT,GAAIlI,KAAKsH,SAAU,OAAO,EAE1B,IAAIa,EAAI,EACJzJ,EAAI,EAGJ0J,GAAyB,EAc7B,IAbIA,EAAOF,KACLE,GAAQpI,KAAKnG,KAAKkL,SACpB/E,KAAK0H,UAAW,IAAAW,WAAUrI,KAAKnG,KAAK6L,QAChC0C,EAA8B,gBAAvBpI,KAAK0H,SAASY,QACvBH,EAAInI,KAAK0H,SAASxH,MAClBxB,EAAIsB,KAAK0H,SAASjE,QACd2E,EAAOD,GAAKzJ,GAAKyJ,EAAIzJ,EAAIsB,KAAK8B,MAAMyG,eACrCJ,EAAGzJ,GAAKsB,KAAKwI,QAAQL,EAAGzJ,GAAGuH,IAAItJ,KAAK8L,OACrCL,EAAOD,GAAKzJ,GAAKyJ,EAAIzJ,EAAIsB,KAAK8B,MAAMyG,eAKvCH,EAEH,OADApI,KAAKnG,KAAK6J,WACH,EAGT,MAAMgF,EAAO,IAAIC,KAAK,CAAC3I,KAAKnG,KAAK6L,OAAQ,CAAEkD,KAAM5I,KAAK0H,SAASY,OAG/D,GAFAtI,KAAKnG,KAAK6J,WAELmF,OAAOC,kBAAmB,CAC7B,MAAMC,EAAMC,IAAIC,gBAAgBP,GAC1BQ,EAAM,IAAIC,MAChB,OAAO,IAAIhO,SAAiBhB,IAC1B+O,EAAIE,iBAAiB,QAAQ,WAC3BJ,IAAIK,gBAAgBN,GACpB,MAAMO,EAAS,EAAAC,cAAcC,aAAaX,OAAOY,SAAUtB,EAAGzJ,GACvC,QAAvB,EAAA4K,EAAOI,WAAW,aAAK,SAAEC,UAAUT,EAAK,EAAG,EAAGf,EAAGzJ,GACjDsB,KAAKoH,SAASwC,SAASN,GACvBnP,GAAE,EAAK,IAET+O,EAAIW,IAAMd,EAGVe,YAAW,IAAM3P,GAAE,IAAO,IAAK,IAGnC,OAAO2O,kBAAkBJ,EAAM,CAAEqB,YAAa5B,EAAG6B,aAActL,IAC5DnD,MAAK0O,IACJjK,KAAKoH,SAASwC,SAASK,IAChB,IAEb,CAEQ,OAAAzB,CAAQL,EAAWzJ,eACzB,MAAMwL,GAA8B,QAAzB,EAAAlK,KAAKmH,UAAUgD,kBAAU,eAAEC,IAAIC,KAAKnK,QAAS,EAAAoK,kBAAkBpK,MACpEqK,GAA8B,QAAzB,EAAAvK,KAAKmH,UAAUgD,kBAAU,eAAEC,IAAIC,KAAK5G,SAAU,EAAA6G,kBAAkB7G,OACrEvD,GAAiC,QAAzB,EAAAF,KAAKmH,UAAUgD,kBAAU,eAAEC,IAAId,OAAOpJ,QAASgK,EAAKlK,KAAKqH,cAAcmD,KAC/E/G,GAAkC,QAAzB,EAAAzD,KAAKmH,UAAUgD,kBAAU,eAAEC,IAAId,OAAO7F,SAAU8G,EAAKvK,KAAKqH,cAAcoD,KAEjFC,EAAK1K,KAAK2K,KAAK3K,KAAKyH,QAAQvH,MAAQA,EAAOgK,GAC3CU,EAAK5K,KAAK2K,KAAK3K,KAAKyH,QAAQhE,OAASA,EAAQ8G,GACnD,IAAKG,IAAOE,EAAI,CACd,MAAMC,EAAK3K,EAAQiI,EACb2C,GAAMrH,EAAS8G,GAAM7L,EACrBqM,EAAIpO,KAAKE,IAAIgO,EAAIC,GACvB,OAAOC,EAAI,EAAI,CAAC5C,EAAI4C,EAAGrM,EAAIqM,GAAK,CAAC5C,EAAGzJ,GAEtC,OAAQgM,GAEJ1K,KAAKyH,QAAQR,qBAAwByD,GAAOE,EACvB,CAACF,EAAIE,GAAxB,CAACF,EAAIhM,EAAIgM,EAAKvC,GAFhB,CAACA,EAAIyC,EAAKlM,EAAGkM,EAGnB,CAEQ,IAAAD,CAAK7Q,EAAWkR,EAAeC,GACrC,MAAU,SAANnR,EAAqB,EACrBA,EAAEoR,SAAS,KAAaC,SAASrR,EAAEsR,MAAM,GAAI,IAAMJ,EAAQ,IAC3DlR,EAAEoR,SAAS,MAAcC,SAASrR,EAAEsR,MAAM,GAAI,IAC3CD,SAASrR,GAAKmR,CACvB,gBCtHF,SAASI,EAAMxG,GACb,IAAI/K,EAAI,GACR,IAAK,IAAIQ,EAAI,EAAGA,EAAIuK,EAAKxK,SAAUC,EACjCR,GAAKwR,OAAOC,aAAa1G,EAAKvK,IAEhC,OAAOR,CACT,CAGA,SAAS0R,EAAM3G,GACb,IAAIjG,EAAI,EACR,IAAK,IAAItE,EAAI,EAAGA,EAAIuK,EAAKxK,SAAUC,EAAG,CACpC,GAAIuK,EAAKvK,GAAK,IAAMuK,EAAKvK,GAAK,GAC5B,MAAM,IAAIwB,MAAM,gBAElB8C,EAAQ,GAAJA,EAASiG,EAAKvK,GAAK,GAEzB,OAAOsE,CACT,CAGA,SAAS6M,EAAO5G,GACd,MAAMjG,EAAIyM,EAAMxG,GAChB,IAAKjG,EAAE8M,MAAM,oCACX,MAAM,IAAI5P,MAAM,gBAElB,OAAO8C,CACT,wEAeA,MAAM+M,EAAqD,CACzDzE,OAAQsE,EACR9E,KAAM8E,EACNxE,KAfF,SAAgBnC,GACd,GAAsB,oBAAX9K,OACT,OAAOA,OAAOC,KAAKqR,EAAMxG,GAAO,UAAU+G,WAE5C,MAAM3R,EAAKC,KAAKmR,EAAMxG,IAChBvI,EAAI,IAAIlC,WAAWH,EAAGI,QAC5B,IAAK,IAAIC,EAAI,EAAGA,EAAIgC,EAAEjC,SAAUC,EAC9BgC,EAAEhC,GAAKL,EAAGM,WAAWD,GAEvB,OAAO,IAAIuR,aAAc5M,OAAO3C,EAClC,EAME4D,MAAOuL,EACPhI,OAAQgI,EACRxE,oBAAqBuE,GAIjBM,EAAc,CAAC,GAAI,IAAK,IAAK,KAC7BC,EAAiB,KAGvB,mCACS,KAAAlE,MAAK,EACJ,KAAAmE,QAAU,IAAIlO,YAAYiO,GAC1B,KAAAE,UAAY,EACZ,KAAAC,KAAO,GACR,KAAAlE,OAA+B,CAAC,CAmFzC,CAjFS,KAAAJ,GACL5H,KAAKgM,QAAQ5G,KAAK,GAClBpF,KAAK6H,MAAQ,EACb7H,KAAKiM,UAAY,EACjBjM,KAAKgI,OAAS,CAAC,EACfhI,KAAKkM,KAAO,EACd,CAEO,KAAAnE,CAAMlD,EAAmBC,EAAeC,GAC7C,IAAI8C,EAAQ7H,KAAK6H,MACbsE,EAAMnM,KAAKiM,UACf,MAAMlO,EAASiC,KAAKgM,QACpB,GAAc,IAAVnE,GAAyC,IAAVA,EAA2B,OAAQ,EACtE,GAAc,IAAVA,GAA+BsE,EAAM,EAAG,OAAQ,EACpD,IAAK,IAAI7R,EAAIwK,EAAOxK,EAAIyK,IAAOzK,EAAG,CAChC,MAAM2C,EAAI4H,EAAKvK,GACf,OAAQ2C,GACN,KAAK,GACH,IAAK+C,KAAKoM,YAAYD,GAAM,OAAOnM,KAAKqM,KACxCxE,EAAQ,EACRsE,EAAM,EACN,MACF,KAAK,GACH,GAAc,IAAVtE,EAA6B,CAC/B,IAAK,IAAIyE,EAAI,EAAGA,EAAIR,EAAYzR,SAAUiS,EACxC,GAAIvO,EAAOuO,KAAOR,EAAYQ,GAAI,OAAOtM,KAAKqM,KAEhDxE,EAAQ,EACRsE,EAAM,OACD,GAAc,IAAVtE,EAA2B,CACpC,IAAK7H,KAAKuM,UAAUJ,GAAM,OAAOnM,KAAKqM,KACtCxE,EAAQ,EACRsE,EAAM,OACD,GAAc,IAAVtE,EAA6B,CACtC,GAAIsE,GAAOJ,EAAgB,OAAO/L,KAAKqM,KACvCtO,EAAOoO,KAASlP,EAElB,MACF,KAAK,GACH,OAAc,IAAV4K,GACG7H,KAAKoM,YAAYD,IAExBnM,KAAK6H,MAAQ,EACNvN,EAAI,GAH0B0F,KAAKqM,KAI5C,QACE,GAAIF,GAAOJ,EAAgB,OAAO/L,KAAKqM,KACvCtO,EAAOoO,KAASlP,GAKtB,OAFA+C,KAAK6H,MAAQA,EACb7H,KAAKiM,UAAYE,GACT,CACV,CAEQ,EAAAE,GAEN,OADArM,KAAK6H,MAAQ,GACL,CACV,CAEQ,SAAA0E,CAAUJ,GAChB,MAAMG,EAAIjB,EAAMrL,KAAKgM,QAAQ9H,SAAS,EAAGiI,IACzC,QAAIG,IACFtM,KAAKkM,KAAOI,EACZtM,KAAKgI,OAAOsE,GAAK,MACV,EAGX,CAEQ,WAAAF,CAAYD,GAClB,GAAInM,KAAKkM,KAAM,CACb,IACE,MAAMtN,EAAIoB,KAAKgM,QAAQZ,MAAM,EAAGe,GAChCnM,KAAKgI,OAAOhI,KAAKkM,MAAQP,EAAS3L,KAAKkM,MAAQP,EAAS3L,KAAKkM,MAAMtN,GAAKA,EACxE,MAAOnD,GACP,OAAO,EAET,OAAO,EAET,OAAO,CACT,uGC1KW,EAAAkM,iBAA6B,CACxCW,KAAM,cACNpI,MAAO,EACPuD,OAAQ,GAGV,qBAA0B5I,GACxB,GAAIA,EAAER,OAAS,GACb,OAAO,EAAAsN,iBAET,MAAM6E,EAAM,IAAI1O,YAAYjD,EAAEkD,OAAQlD,EAAE4R,WAAY,GAGpD,GAAe,aAAXD,EAAI,IAAgC,YAAXA,EAAI,IAAgC,aAAXA,EAAI,GACxD,MAAO,CACLlE,KAAM,YACNpI,MAAOrF,EAAE,KAAO,GAAKA,EAAE,KAAO,GAAKA,EAAE,KAAO,EAAIA,EAAE,IAClD4I,OAAQ5I,EAAE,KAAO,GAAKA,EAAE,KAAO,GAAKA,EAAE,KAAO,EAAIA,EAAE,KAIvD,IAAgB,aAAX2R,EAAI,IAAgC,aAAXA,EAAI,MAEpB,KAAT3R,EAAE,IAAwB,KAATA,EAAE,IAAwB,KAATA,EAAE,IAAwB,KAATA,EAAE,IACtC,KAATA,EAAE,IAAwB,MAATA,EAAE,IAAwB,MAATA,EAAE,IAAwB,MAATA,EAAE,IAE9D,CACA,MAAOqF,EAAOuD,GAclB,SAAiB5I,GACf,MAAM6R,EAAM7R,EAAER,OACd,IAAIC,EAAI,EACJqS,EAAc9R,EAAEP,IAAM,EAAIO,EAAEP,EAAI,GACpC,OAAa,CAEX,GADAA,GAAKqS,EACDrS,GAAKoS,EAEP,MAAO,CAAC,EAAG,GAEb,GAAa,MAAT7R,EAAEP,GACJ,MAAO,CAAC,EAAG,GAEb,GAAiB,MAAbO,EAAEP,EAAI,IAA4B,MAAbO,EAAEP,EAAI,GAC7B,OAAIA,EAAI,EAAIoS,EACH,CACL7R,EAAEP,EAAI,IAAM,EAAIO,EAAEP,EAAI,GACtBO,EAAEP,EAAI,IAAM,EAAIO,EAAEP,EAAI,IAGnB,CAAC,EAAG,GAEbA,GAAK,EACLqS,EAAc9R,EAAEP,IAAM,EAAIO,EAAEP,EAAI,GAEpC,CAvC4BsS,CAAQ/R,GAChC,MAAO,CAAEyN,KAAM,aAAcpI,QAAOuD,UAGtC,OAAe,YAAX+I,EAAI,IAA+B,KAAT3R,EAAE,IAAwB,KAATA,EAAE,IAAyB,KAATA,EAAE,GAO5D,EAAA8M,iBANE,CACLW,KAAM,YACNpI,MAAOrF,EAAE,IAAM,EAAIA,EAAE,GACrB4I,OAAQ5I,EAAE,IAAM,EAAIA,EAAE,GAI5B,yFChDA,eAGA,SAYA,MAAa0O,UAAsB,EAAAsD,WAW1B,mBAAOrD,CAAasD,EAAqC5M,EAAeuD,GAU7E,MAAM6F,GAAUwD,GAAiBrD,UAAUsD,cAAc,UAGzD,OAFAzD,EAAOpJ,MAAgB,EAARA,EACfoJ,EAAO7F,OAAkB,EAATA,EACT6F,CACT,CAGO,sBAAO0D,CAAgBC,EAA+B/M,EAAeuD,EAAgB1F,GAC1F,GAAyB,mBAAdmP,UAA0B,CACnC,MAAMC,EAAUF,EAAID,gBAAgB9M,EAAOuD,GAI3C,OAHI1F,GACFoP,EAAQtI,KAAKlC,IAAI,IAAIgD,kBAAkB5H,EAAQ,EAAGmC,EAAQuD,EAAS,IAE9D0J,EAET,OAAOpP,EACH,IAAImP,UAAU,IAAIvH,kBAAkB5H,EAAQ,EAAGmC,EAAQuD,EAAS,GAAIvD,EAAOuD,GAC3E,IAAIyJ,UAAUhN,EAAOuD,EAC3B,CAGO,wBAAOqF,CAAkBI,GAC9B,MAAiC,mBAAtBJ,kBACF3N,QAAQC,aAAQgS,GAElBtE,kBAAkBI,EAC3B,CAGA,WAAAnJ,CAAoBsN,GAClBC,QADkB,KAAAD,UAAAA,EA7CZ,KAAAE,gBAAkBvN,KAAKwN,SAAS,IAAI,EAAAC,mBA+C1CzN,KAAK0N,SAAW1N,KAAKqN,UAAUM,MAAMC,KACrC5N,KAAKqN,UAAUM,MAAMC,KAAQC,UACd,QAAb,EAAA7N,KAAK0N,gBAAQ,SAAEI,KAAK9N,KAAKqN,UAAUM,MAAOE,GAC1C7N,KAAK+N,OAAO,EAEV/N,KAAKqN,UAAUM,MAAMK,eACvBhO,KAAK+N,QAGP/N,KAAKuN,gBAAgB7S,MAAQsF,KAAKqN,UAAUM,MAAMM,eAAeC,gBAAeC,UAC/D,aAAXA,IACFnO,KAAKoO,gBACc,QAAnB,EAAApO,KAAKqO,sBAAc,SAAEC,YAAY,EAAGtO,KAAKqN,UAAU5C,UAGvDzK,KAAKwN,UAAS,IAAAe,eAAa,WACzBvO,KAAKwO,qBACDxO,KAAKqN,UAAUM,OAAS3N,KAAK0N,WAC/B1N,KAAKqN,UAAUM,MAAMC,KAAO5N,KAAK0N,SACjC1N,KAAK0N,cAAWN,GAEdpN,KAAKqO,gBAAkBrO,KAAKyO,kBAC9BzO,KAAKqO,eAAeK,YAAc1O,KAAKyO,gBACvCzO,KAAKyO,qBAAkBrB,GAEzBpN,KAAKqO,oBAAiBjB,EACtBpN,KAAKsJ,YAAS8D,EACdpN,KAAK2O,UAAOvB,EACW,QAAvB,EAAApN,KAAK4O,0BAAkB,SAAEC,QACzB7O,KAAK4O,wBAAqBxB,EAC1BpN,KAAK8O,kBAAe1B,CAAS,IAEjC,CAKO,eAAA2B,CAAgBrU,WACjBA,EACGsF,KAAK8O,eAA0C,IAA1B9O,KAAKgP,SAASvL,QACtCzD,KAAKiP,mBAAmBtS,KAAKC,IAAIoD,KAAKgP,SAASvL,OAAS,EApGrC,MAuGE,QAAvB,EAAAzD,KAAK4O,0BAAkB,SAAEC,QACzB7O,KAAK4O,wBAAqBxB,EAC1BpN,KAAK8O,kBAAe1B,GAEH,QAAnB,EAAApN,KAAKqO,sBAAc,SAAEC,YAAY,EAAGtO,KAAKqN,UAAU5C,KACrD,CAMA,cAAWN,SACT,OAA0B,QAAnB,EAAAnK,KAAKqO,sBAAc,eAAElE,UAC9B,CAKA,YAAW6E,WACT,MAAO,CACL9O,OAAsB,QAAf,EAAAF,KAAKmK,kBAAU,eAAEC,IAAIC,KAAKnK,SAAU,EAC3CuD,QAAuB,QAAf,EAAAzD,KAAKmK,kBAAU,eAAEC,IAAIC,KAAK5G,UAAW,EAEjD,CAKO,UAAAyL,CAAWpK,EAAeC,eACtB,QAAT,EAAA/E,KAAK2O,YAAI,SAAEQ,UACT,EACArK,IAAwB,QAAf,EAAA9E,KAAKmK,kBAAU,eAAEC,IAAIC,KAAK5G,SAAU,IAC9B,QAAf,EAAAzD,KAAKmK,kBAAU,eAAEC,IAAId,OAAOpJ,QAAS,KAClC6E,EAAMD,KAAyB,QAAf,EAAA9E,KAAKmK,kBAAU,eAAEC,IAAIC,KAAK5G,SAAU,GAE3D,CAKO,QAAA2L,aACI,QAAT,EAAApP,KAAK2O,YAAI,SAAEQ,UAAU,EAAG,GAAc,QAAX,EAAAnP,KAAKsJ,cAAM,eAAEpJ,QAAS,GAAc,QAAX,EAAAF,KAAKsJ,cAAM,eAAE7F,SAAU,EAC7E,CAKO,IAAA4L,CAAKC,EAAqBC,EAAgBC,EAAaC,EAAaC,EAAgB,GACzF,IAAK1P,KAAK2O,KACR,OAEF,MAAM,MAAEzO,EAAK,OAAEuD,GAAWzD,KAAKgP,SAG/B,IAAe,IAAX9O,IAA4B,IAAZuD,EAClB,OAGFzD,KAAK2P,cAAcL,EAASpP,EAAOuD,GACnC,MAAMyF,EAAMoG,EAAQM,OACdpF,EAAO7N,KAAKoH,KAAKmF,EAAIhJ,MAAQA,GAE7B2P,EAAMN,EAAS/E,EAAQtK,EACvB4P,EAAKnT,KAAK8L,MAAM8G,EAAS/E,GAAQ/G,EACjCsM,EAAKP,EAAMtP,EACX8P,EAAKP,EAAMhM,EAGXwM,EAAaP,EAAQxP,EAAQ2P,EAAK3G,EAAIhJ,MAAQgJ,EAAIhJ,MAAQ2P,EAAKH,EAAQxP,EACvEgQ,EAAcJ,EAAKrM,EAASyF,EAAIzF,OAASyF,EAAIzF,OAASqM,EAAKrM,EAMjEzD,KAAK2O,KAAKhF,UACRT,EACAvM,KAAK8L,MAAMoH,GAAKlT,KAAK8L,MAAMqH,GAAKnT,KAAKoH,KAAKkM,GAAatT,KAAKoH,KAAKmM,GACjEvT,KAAK8L,MAAMsH,GAAKpT,KAAK8L,MAAMuH,GAAKrT,KAAKoH,KAAKkM,GAAatT,KAAKoH,KAAKmM,GAErE,CAKO,WAAAC,CAAYb,EAAqBC,GACtC,MAAM,MAAErP,EAAK,OAAEuD,GAAWzD,KAAKgP,SAE/B,IAAe,IAAX9O,IAA4B,IAAZuD,EAClB,OAEFzD,KAAK2P,cAAcL,EAASpP,EAAOuD,GACnC,MAAMyF,EAAMoG,EAAQM,OACdpF,EAAO7N,KAAKoH,KAAKmF,EAAIhJ,MAAQA,GAC7B2P,EAAMN,EAAS/E,EAAQtK,EACvB4P,EAAKnT,KAAK8L,MAAM8G,EAAS/E,GAAQ/G,EACjCwM,EAAa/P,EAAQ2P,EAAK3G,EAAIhJ,MAAQgJ,EAAIhJ,MAAQ2P,EAAK3P,EACvDgQ,EAAcJ,EAAKrM,EAASyF,EAAIzF,OAASyF,EAAIzF,OAASqM,EAAKrM,EAE3D6F,EAASC,EAAcC,aAAaxJ,KAAKyJ,SAAUwG,EAAYC,GAC/DjD,EAAM3D,EAAOI,WAAW,MAC9B,OAAIuD,GACFA,EAAItD,UACFT,EACAvM,KAAK8L,MAAMoH,GAAKlT,KAAK8L,MAAMqH,GAAKnT,KAAK8L,MAAMwH,GAAatT,KAAK8L,MAAMyH,GACnE,EAAG,EAAGvT,KAAK8L,MAAMwH,GAAatT,KAAK8L,MAAMyH,IAEpC5G,QANT,CAQF,CAKO,eAAA8G,CAAgBZ,EAAaC,EAAaC,EAAgB,GAC/D,GAAI1P,KAAK2O,KAAM,CACb,MAAM,MAAEzO,EAAK,OAAEuD,GAAWzD,KAAKgP,SAG/B,IAAe,IAAX9O,IAA4B,IAAZuD,EAClB,OAQF,GALKzD,KAAK8O,aAECrL,GAAUzD,KAAK8O,aAAcrL,QACtCzD,KAAKiP,mBAAmBxL,EAAS,GAFjCzD,KAAKiP,mBAAmBtS,KAAKC,IAAI6G,EAAS,EAnOvB,MAuOhBzD,KAAK8O,aAAc,OACxB9O,KAAK2O,KAAKhF,UACR3J,KAAK4O,oBAAsB5O,KAAK8O,aAChCU,EAAMtP,EACLuP,EAAMhM,EAAU,EAAI,EAAI,EACzBvD,EAAQwP,EACRjM,EACA+L,EAAMtP,EACNuP,EAAMhM,EACNvD,EAAQwP,EACRjM,GAGN,CAMO,aAAA2K,GACApO,KAAKsJ,SAGNtJ,KAAKsJ,OAAOpJ,QAAUF,KAAKmK,WAAYC,IAAId,OAAOpJ,OAASF,KAAKsJ,OAAO7F,SAAWzD,KAAKmK,WAAYC,IAAId,OAAO7F,SAChHzD,KAAKsJ,OAAOpJ,MAAQF,KAAKmK,WAAYC,IAAId,OAAOpJ,OAAS,EACzDF,KAAKsJ,OAAO7F,OAASzD,KAAKmK,WAAYC,IAAId,OAAO7F,QAAU,GAE/D,CAKQ,aAAAkM,CAAcU,EAAkBlL,EAAsBM,GAC5D,GAAIN,IAAiBkL,EAAKC,eAAepQ,OAASuF,IAAkB4K,EAAKC,eAAe7M,OACtF,OAEF,MAAQvD,MAAOqQ,EAAe9M,OAAQ+M,GAAmBH,EAAKI,aAC9D,GAAItL,IAAiBoL,GAAiB9K,IAAkB+K,EAItD,OAHAH,EAAKT,OAASS,EAAKK,KACnBL,EAAKC,eAAepQ,MAAQqQ,OAC5BF,EAAKC,eAAe7M,OAAS+M,GAG/B,MAAMlH,EAASC,EAAcC,aAC3BxJ,KAAKyJ,SACL9M,KAAKoH,KAAKsM,EAAKK,KAAMxQ,MAAQiF,EAAeoL,GAC5C5T,KAAKoH,KAAKsM,EAAKK,KAAMjN,OAASgC,EAAgB+K,IAE1CvD,EAAM3D,EAAOI,WAAW,MAC1BuD,IACFA,EAAItD,UAAU0G,EAAKK,KAAO,EAAG,EAAGpH,EAAOpJ,MAAOoJ,EAAO7F,QACrD4M,EAAKT,OAAStG,EACd+G,EAAKC,eAAepQ,MAAQiF,EAC5BkL,EAAKC,eAAe7M,OAASgC,EAEjC,CAKQ,KAAAsI,GACN/N,KAAKqO,eAAiBrO,KAAKqN,UAAUM,MAAMU,eAC3CrO,KAAKyO,gBAAkBzO,KAAKqO,eAAeK,YAAYxN,KAAKlB,KAAKqO,gBACjErO,KAAKqO,eAAeK,YAAeiC,UACjC3Q,KAAKwO,qBACe,QAApB,EAAAxO,KAAKyO,uBAAe,SAAEX,KAAK9N,KAAKqO,eAAgBsC,EAAS,CAE7D,CAEO,gBAAAC,WAED5Q,KAAKyJ,UAAYzJ,KAAKqN,UAAUM,MAAMK,cACnChO,KAAKsJ,SACRtJ,KAAKsJ,OAASC,EAAcC,aAC1BxJ,KAAKyJ,UAAyB,QAAf,EAAAzJ,KAAKmK,kBAAU,eAAEC,IAAId,OAAOpJ,QAAS,GACrC,QAAf,EAAAF,KAAKmK,kBAAU,eAAEC,IAAId,OAAO7F,SAAU,GAExCzD,KAAKsJ,OAAOuH,UAAU9U,IAAI,qBAC1BiE,KAAKqN,UAAUM,MAAMK,cAAc8C,YAAY9Q,KAAKsJ,QACpDtJ,KAAK2O,KAAO3O,KAAKsJ,OAAOI,WAAW,KAAM,CAAE9L,OAAO,EAAMmT,gBAAgB,IACxE/Q,KAAKoP,YAGPpR,QAAQC,KAAK,qFAEjB,CAEO,kBAAAuQ,GACDxO,KAAKsJ,SACPtJ,KAAK2O,UAAOvB,EACZpN,KAAKsJ,OAAO0H,SACZhR,KAAKsJ,YAAS8D,EAElB,CAEQ,kBAAA6B,CAAmBxL,EAtUF,UAuUA,QAAvB,EAAAzD,KAAK4O,0BAAkB,SAAEC,QACzB7O,KAAK4O,wBAAqBxB,EAG1B,MAAM6D,EAAS,GACTC,EAAY3H,EAAcC,aAAaxJ,KAAKyJ,SAAUwH,EAAQxN,GAC9DwJ,EAAMiE,EAAUxH,WAAW,KAAM,CAAE9L,OAAO,IAChD,IAAKqP,EAAK,OACV,MAAME,EAAU5D,EAAcyD,gBAAgBC,EAAKgE,EAAQxN,GACrD+I,EAAM,IAAI1O,YAAYqP,EAAQtI,KAAK9G,QACnCoT,GAAQ,IAAA/U,YAAW,EAAG,EAAG,GACzBgV,GAAQ,IAAAhV,YAAW,IAAK,IAAK,KACnCoQ,EAAIpH,KAAK+L,GACT,IAAK,IAAIE,EAAI,EAAGA,EAAI5N,IAAU4N,EAAG,CAC/B,MAAMC,EAAQD,EAAI,EACZzN,EAASyN,EAAIJ,EACnB,IAAK,IAAIM,EAAI,EAAGA,EAAIN,EAAQM,GAAK,EAC/B/E,EAAI5I,EAAS2N,EAAID,GAASF,EAG9BnE,EAAIuE,aAAarE,EAAS,EAAG,GAG7B,MAAMjN,EAASuR,OAAOvR,MAAQ+Q,EAAS,GAAK,IA/VrB,KAgWvBjR,KAAK8O,aAAevF,EAAcC,aAAaxJ,KAAKyJ,SAAUvJ,EAAOuD,GACrE,MAAMiO,EAAO1R,KAAK8O,aAAapF,WAAW,KAAM,CAAE9L,OAAO,IACzD,GAAK8T,EAAL,CAIA,IAAK,IAAIpX,EAAI,EAAGA,EAAI4F,EAAO5F,GAAK2W,EAC9BS,EAAK/H,UAAUuH,EAAW5W,EAAG,GAE/BiP,EAAcT,kBAAkB9I,KAAK8O,cAAcvT,MAAKoW,GAAU3R,KAAK4O,mBAAqB+C,SAN1F3R,KAAK8O,kBAAe1B,CAOxB,CAEA,YAAW3D,SACT,OAA+C,QAAxC,EAAAzJ,KAAKqN,UAAUM,MAAMiE,2BAAmB,eAAE/I,OAAOY,QAC1D,EArWF,4HCdA,eAKa,EAAAa,kBAA+B,CAC1CpK,MAAO,EACPuD,OAAQ,IASV,MAAMoO,EAEJ,OAAWC,GACT,OAAI9R,KAAK+R,QAEQ,UAAZ/R,KAAKgS,KACLhS,KAAKiS,gBAAkB,GAGrBjS,KAAKgS,IACd,CACA,OAAWF,CAAIpX,GAAiBsF,KAAKgS,KAAOtX,CAAO,CAEnD,kBAAWuX,GAET,OAAIjS,KAAK+R,OACA,GAEW,UAAZ/R,KAAKgS,OAAoC,EACnD,CACA,kBAAWC,CAAevX,GACxBsF,KAAKgS,OAAQ,UACbhS,KAAKgS,MAAStX,GAAS,GAAM,SAC/B,CAEA,kBAAWwX,GACT,OAAmB,SAAZlS,KAAKgS,IACd,CACA,kBAAWE,CAAexX,GACxBsF,KAAKgS,OAAQ,SACbhS,KAAKgS,MAAgB,SAARtX,CACf,CAEA,0BAAWyX,GACT,MAAMC,GAAmB,WAAZpS,KAAKgS,OAAmC,GACrD,OAAII,EAAM,EACK,WAANA,EAEFA,CACT,CACA,0BAAWD,CAAuBzX,GAChCsF,KAAKgS,MAAQ,UACbhS,KAAKgS,MAAStX,GAAS,GAAM,UAC/B,CAGA,SAAW2X,GACT,OAAOrS,KAAK+R,MACd,CACA,SAAWM,CAAM3X,GACfsF,KAAK+R,OAASrX,CAChB,CAEA,WAAAqF,CACE+R,EAAc,EACdO,EAAgB,EACTC,GAAU,EACV/C,GAAS,GADT,KAAA+C,QAAAA,EACA,KAAA/C,OAAAA,EAxDD,KAAAyC,KAAe,EA4Cf,KAAAD,OAAiB,EAcvB/R,KAAKgS,KAAOF,EACZ9R,KAAK+R,OAASM,CAChB,CAEO,KAAAE,GASL,OAAO,IAAIV,EAAmB7R,KAAKgS,KAAMhS,KAAK+R,OAAQ/R,KAAKsS,QAAStS,KAAKuP,OAC3E,CAEO,OAAAiD,GACL,OAA+B,IAAxBxS,KAAKiS,gBAA0D,IAAhBjS,KAAK+R,SAAkC,IAAlB/R,KAAKsS,OAClF,EAEF,MAAMG,EAAc,IAAIZ,EAUxB,qBAgBE,WAAA9R,CACUsN,EACAlG,EACArF,GAFA,KAAAuL,UAAAA,EACA,KAAAlG,UAAAA,EACA,KAAArF,MAAAA,EAjBF,KAAA4Q,QAAmC,IAAIC,IAEvC,KAAAC,QAAU,EAEV,KAAAC,UAAY,EAEZ,KAAAC,eAAgB,EAEhB,KAAAC,iBAAkB,EAElB,KAAAC,YAAsB,KAS5B,IACEhT,KAAKiT,SAASjT,KAAK8B,MAAMoR,cACzB,MAAOzX,GACPuC,QAAQmV,MAAM1X,EAAE2X,SAChBpV,QAAQC,KAAK,0BAA0B+B,KAAKqT,iBAE9CrT,KAAKsT,iBAAmB,CACtB9I,KAAMxK,KAAKqN,UAAU7C,KACrBC,KAAMzK,KAAKqN,UAAU5C,KAEzB,CAEO,OAAA8I,GACLvT,KAAK4H,OACP,CAEO,KAAAA,SACL,IAAK,MAAMyI,KAAQrQ,KAAK0S,QAAQc,SACnB,QAAX,EAAAnD,EAAKoD,cAAM,SAAEF,UAIfvT,KAAK0S,QAAQgB,QACb1T,KAAKmH,UAAUiI,UACjB,CAEO,QAAAiE,GACL,OAA0B,EAAnBrT,KAAKgT,YAAkB,GAChC,CAEO,QAAAC,CAASvY,GACd,GAAIA,EAAQ,IAAOA,EAAQ,IACzB,MAAMiZ,WAAW,qEAEnB3T,KAAKgT,YAAetY,EAAQ,EAAI,MAAa,EAC7CsF,KAAK4T,aAAa,EACpB,CAEO,QAAAC,GACL,OAAiC,EAA1B7T,KAAK8T,mBAAyB,GACvC,CAEQ,gBAAAA,GACN,IAAIC,EAAe,EACnB,IAAK,MAAM1D,KAAQrQ,KAAK0S,QAAQc,SAC1BnD,EAAKK,OACPqD,GAAgB1D,EAAKK,KAAKxQ,MAAQmQ,EAAKK,KAAKjN,OACxC4M,EAAKT,QAAUS,EAAKT,SAAWS,EAAKK,OACtCqD,GAAgB1D,EAAKT,OAAO1P,MAAQmQ,EAAKT,OAAOnM,SAItD,OAAOsQ,CACT,CAEQ,OAAAC,CAAQC,GACd,MAAM5D,EAAOrQ,KAAK0S,QAAQwB,IAAID,GAC9BjU,KAAK0S,QAAQyB,OAAOF,GAEhB5D,GAAQxH,OAAOuL,aAAe/D,EAAKK,gBAAgB0D,aACrD/D,EAAKK,KAAK7B,OAEd,CAKO,aAAAwF,SAEL,MAAMC,EAAO,GACb,IAAK,MAAOL,EAAI5D,KAASrQ,KAAK0S,QAAQ6B,UACZ,cAApBlE,EAAKmE,aACI,QAAX,EAAAnE,EAAKoD,cAAM,SAAEF,UACbe,EAAKvV,KAAKkV,IAGd,IAAK,MAAMA,KAAMK,EACftU,KAAKgU,QAAQC,GAGfjU,KAAK+S,iBAAkB,EACvB/S,KAAK8S,eAAgB,CACvB,CAOO,aAAA2B,CAAchR,GACnB,GAAIzD,KAAK8B,MAAM4S,eAAgB,CAC7B,IAAI1F,EAAWhP,KAAKmH,UAAU6H,UACN,IAApBA,EAAS9O,QAAqC,IAArB8O,EAASvL,SACpCuL,EAAW,EAAA1E,mBAEb,MAAMG,EAAO9N,KAAKoH,KAAKN,EAASuL,EAASvL,QACzC,IAAK,IAAInJ,EAAI,EAAGA,EAAImQ,IAAQnQ,EAC1B0F,KAAKqN,UAAUM,MAAMgH,cAAcC,WAGzC,CAKO,QAAAhL,CAASV,SAEdlJ,KAAK4T,aAAa1K,EAAIhJ,MAAQgJ,EAAIzF,QAGlC,IAAIuL,EAAWhP,KAAKmH,UAAU6H,UACN,IAApBA,EAAS9O,QAAqC,IAArB8O,EAASvL,SACpCuL,EAAW,EAAA1E,mBAEb,MAAME,EAAO7N,KAAKoH,KAAKmF,EAAIhJ,MAAQ8O,EAAS9O,OACtCuK,EAAO9N,KAAKoH,KAAKmF,EAAIzF,OAASuL,EAASvL,QAEvC6O,IAAYtS,KAAK4S,QAEjB7U,EAASiC,KAAKqN,UAAUM,MAAM5P,OAC9B8W,EAAW7U,KAAKqN,UAAU7C,KAC1BsK,EAAW9U,KAAKqN,UAAU5C,KAC1BsK,EAAUhX,EAAOwT,EACjByD,EAAUjX,EAAOsT,EACvB,IAAIzN,EAASmR,EACTE,EAAY,EAEXjV,KAAK8B,MAAM4S,iBACd3W,EAAOwT,EAAI,EACXxT,EAAOsT,EAAI,EACXzN,EAAS,GAGX5D,KAAKqN,UAAUM,MAAMgH,cAAcO,iBAAiBC,UAAUpX,EAAOsT,GACrE,IAAK,IAAI5B,EAAM,EAAGA,EAAMhF,IAAQgF,EAAK,CACnC,MAAM2F,EAAOrX,EAAOsX,MAAMnB,IAAInW,EAAOsT,EAAItT,EAAOuX,OAChD,IAAK,IAAI9F,EAAM,EAAGA,EAAMhF,KAClB5G,EAAS4L,GAAOqF,KADUrF,EAE9BxP,KAAKuV,aAAaH,EAAwBxR,EAAS4L,EAAK8C,EAAS7C,EAAMjF,EAAOgF,GAC9EyF,IAEF,GAAIjV,KAAK8B,MAAM4S,eACTjF,EAAMhF,EAAO,GAAGzK,KAAKqN,UAAUM,MAAMgH,cAAcC,gBAEvD,KAAM7W,EAAOsT,GAAKyD,EAAU,MAE9B/W,EAAOwT,EAAI3N,EAEb5D,KAAKqN,UAAUM,MAAMgH,cAAcO,iBAAiBC,UAAUpX,EAAOsT,GAGjErR,KAAK8B,MAAM4S,eACb3W,EAAOwT,EAAI3N,GAEX7F,EAAOwT,EAAIwD,EACXhX,EAAOsT,EAAI2D,GAIb,MAAMV,EAAO,GACb,IAAK,MAAOL,EAAI5D,KAASrQ,KAAK0S,QAAQ6B,UAChClE,EAAK4E,UAAY,IACR,QAAX,EAAA5E,EAAKoD,cAAM,SAAEF,UACbe,EAAKvV,KAAKkV,IAGd,IAAK,MAAMA,KAAMK,EACftU,KAAKgU,QAAQC,GAKf,MAAMuB,EAAYxV,KAAKqN,UAAUoI,eAAe,GAChDD,SAAAA,EAAWE,WAAU,KACN1V,KAAK0S,QAAQwB,IAAI5B,IAE5BtS,KAAKgU,QAAQ1B,MAMyB,cAAtCtS,KAAKqN,UAAUtP,OAAO4X,OAAO/M,MAC/B5I,KAAK4V,oBAIP,MAAMtG,EAAsB,CAC1BoB,KAAMxH,EACNuH,aAAczB,EACdY,OAAQ1G,EACRoH,eAAgB,OAAF,UAAOtB,GACrByE,OAAQ+B,QAAapI,EACrB6H,YACAT,WAAYxU,KAAKqN,UAAUtP,OAAO4X,OAAO/M,MAI3C5I,KAAK0S,QAAQ/P,IAAI2P,EAAShD,EAC5B,CAQO,MAAAuG,CAAOC,GAEZ,IAAK9V,KAAKmH,UAAUmC,QAAUtJ,KAAK0S,QAAQhM,OACzC1G,KAAKmH,UAAUyJ,oBAEV5Q,KAAKmH,UAAUmC,QAClB,OAMJ,GAFAtJ,KAAKmH,UAAUiH,iBAEVpO,KAAK0S,QAAQhM,KAShB,OARK1G,KAAK8S,gBACR9S,KAAKmH,UAAUiI,WACfpP,KAAK8S,eAAgB,EACrB9S,KAAK+S,iBAAkB,QAErB/S,KAAKmH,UAAUmC,QACjBtJ,KAAKmH,UAAUqH,sBAMfxO,KAAK+S,kBACP/S,KAAKmH,UAAUiI,WACfpP,KAAK8S,eAAgB,EACrB9S,KAAK+S,iBAAkB,GAGzB,MAAM,MAAEjO,EAAK,IAAEC,GAAQ+Q,EACjB/X,EAASiC,KAAKqN,UAAUM,MAAM5P,OAC9ByM,EAAOxK,KAAKqN,UAAUM,MAAMnD,KAGlCxK,KAAKmH,UAAU+H,WAAWpK,EAAOC,GAGjC,IAAK,IAAI0K,EAAM3K,EAAO2K,GAAO1K,IAAO0K,EAAK,CACvC,MAAM2F,EAAOrX,EAAOsX,MAAMnB,IAAIzE,EAAM1R,EAAOgY,OAC3C,IAAKX,EAAM,OACX,IAAK,IAAI5F,EAAM,EAAGA,EAAMhF,IAAQgF,EAC9B,GAAsB,UAAlB4F,EAAKY,MAAMxG,GAA6B,CAC1C,IAAI/T,EAAyB2Z,EAAKa,eAAezG,IAAQiD,EACzD,MAAMH,EAAU7W,EAAE6W,QAClB,QAAgBlF,IAAZkF,IAAsC,IAAbA,EAC3B,SAEF,MAAMhD,EAAUtP,KAAK0S,QAAQwB,IAAI5B,GACjC,IAAkB,IAAd7W,EAAE8T,OAAe,CACnB,MAAM2G,EAAYza,EAAE8T,OACd4G,EAAW3G,EACjB,IAAIE,EAAQ,EAOZ,OACIF,EAAMhF,GACc,UAAlB4K,EAAKY,MAAMxG,KACX/T,EAAI2Z,EAAKa,eAAezG,IAAQiD,IAChChX,EAAE6W,UAAYA,GACd7W,EAAE8T,SAAW2G,EAAYxG,GAE7BA,IAEFF,IACIF,EACEA,EAAQM,QACV5P,KAAKmH,UAAUkI,KAAKC,EAAS4G,EAAWC,EAAU1G,EAAKC,GAEhD1P,KAAK8B,MAAMiN,iBACpB/O,KAAKmH,UAAUiJ,gBAAgB+F,EAAU1G,EAAKC,GAEhD1P,KAAK8S,eAAgB,IAK/B,CAEO,cAAAsD,CAAeC,SAEpB,IAAKrW,KAAK0S,QAAQhM,KAEhB,YADA1G,KAAKsT,iBAAmB+C,GAM1B,GAAIrW,KAAKsT,iBAAiB9I,MAAQ6L,EAAQ7L,KAExC,YADAxK,KAAKsT,iBAAmB+C,GAK1B,MAAMtY,EAASiC,KAAKqN,UAAUM,MAAM5P,OAC9B0M,EAAO1M,EAAOsX,MAAMhb,OACpBic,EAAStW,KAAKsT,iBAAiB9I,KAAO,EAC5C,IAAK,IAAIiF,EAAM,EAAGA,EAAMhF,IAAQgF,EAAK,CACnC,MAAM2F,EAAOrX,EAAOsX,MAAMnB,IAAIzE,GAC9B,GAAyB,UAArB2F,EAAKY,MAAMM,GAAgC,CAC7C,MAAM7a,EAAyB2Z,EAAKa,eAAeK,IAAW7D,EACxDH,EAAU7W,EAAE6W,QAClB,QAAgBlF,IAAZkF,IAAsC,IAAbA,EAC3B,SAEF,MAAMhD,EAAUtP,KAAK0S,QAAQwB,IAAI5B,GACjC,IAAKhD,EACH,SAGF,MAAMiH,EAAc5Z,KAAKoH,OAAoB,QAAd,EAAAuL,EAAQM,cAAM,eAAE1P,QAAS,GAAKoP,EAAQgB,eAAepQ,OACpF,GAAKzE,EAAE8T,OAASgH,EAAe,GAAKA,EAClC,SAGF,IAAIC,GAAU,EACd,IAAK,IAAIC,EAAWH,EAAS,EAAGG,EAAWJ,EAAQ7L,OAAQiM,EACzD,GAAsD,QAAlDrB,EAAKsB,MAAiB,EAAXD,EAAuB,GAA0C,CAC9ED,GAAU,EACV,MAGJ,GAAIA,EACF,SAGF,MAAMzR,EAAMpI,KAAKE,IAAIwZ,EAAQ7L,KAAM+L,EAAe9a,EAAE8T,OAASgH,EAAeD,GAC5E,IAAIK,EAAWlb,EAAE8T,OACjB,IAAK,IAAIqH,EAAYN,EAAS,EAAGM,EAAY7R,IAAO6R,EAClD5W,KAAKuV,aAAaH,EAAwBwB,EAAWtE,IAAWqE,GAChErH,EAAQ2F,aAKdjV,KAAKsT,iBAAmB+C,CAC1B,CAKO,oBAAAQ,CAAqBtF,EAAWF,WACrC,MACM+D,EADSpV,KAAKqN,UAAUM,MAAM5P,OAChBsX,MAAMnB,IAAI7C,GAC9B,GAAI+D,GAAwB,UAAhBA,EAAKY,MAAMzE,GAA2B,CAChD,MAAM9V,EAAyB2Z,EAAKa,eAAe1E,IAAMkB,EACzD,GAAIhX,EAAE6W,UAA0B,IAAf7W,EAAE6W,QAAgB,CACjC,MAAM5B,EAAkC,QAA3B,EAAA1Q,KAAK0S,QAAQwB,IAAIzY,EAAE6W,gBAAQ,eAAE5B,KAC1C,GAAI7H,OAAOuL,aAAe1D,aAAgB0D,YAAa,CACrD,MAAM9K,EAAS,EAAAC,cAAcC,aAAaX,OAAOY,SAAUiH,EAAKxQ,MAAOwQ,EAAKjN,QAE5E,OADuB,QAAvB,EAAA6F,EAAOI,WAAW,aAAK,SAAEC,UAAU+G,EAAM,EAAG,EAAGA,EAAKxQ,MAAOwQ,EAAKjN,QACzD6F,EAET,OAAOoH,GAGb,CAKO,uBAAAoG,CAAwBvF,EAAWF,GACxC,MACM+D,EADSpV,KAAKqN,UAAUM,MAAM5P,OAChBsX,MAAMnB,IAAI7C,GAC9B,GAAI+D,GAAwB,UAAhBA,EAAKY,MAAMzE,GAA2B,CAChD,MAAM9V,EAAyB2Z,EAAKa,eAAe1E,IAAMkB,EACzD,GAAIhX,EAAE6W,UAA0B,IAAf7W,EAAE6W,UAAgC,IAAd7W,EAAE8T,OAAe,CACpD,MAAMc,EAAOrQ,KAAK0S,QAAQwB,IAAIzY,EAAE6W,SAChC,GAAIjC,EACF,OAAOrQ,KAAKmH,UAAUgJ,YAAYE,EAAM5U,EAAE8T,SAIlD,CAIQ,YAAAqE,CAAamD,SACnB,MAAMC,EAAOhX,KAAK8T,mBAClB,IAAImD,EAAUD,EACd,KAAOhX,KAAKgT,YAAciE,EAAUF,GAAQ/W,KAAK0S,QAAQhM,MAAM,CAC7D,MAAM2J,EAAOrQ,KAAK0S,QAAQwB,MAAMlU,KAAK6S,WACjCxC,GAAQA,EAAKK,OACfuG,GAAW5G,EAAKK,KAAKxQ,MAAQmQ,EAAKK,KAAKjN,OACnC4M,EAAKT,QAAUS,EAAKK,OAASL,EAAKT,SACpCqH,GAAW5G,EAAKT,OAAO1P,MAAQmQ,EAAKT,OAAOnM,QAElC,QAAX,EAAA4M,EAAKoD,cAAM,SAAEF,UACbvT,KAAKgU,QAAQhU,KAAK6S,YAGtB,OAAOmE,EAAOC,CAChB,CAEQ,YAAA1B,CAAaH,EAAsB7D,EAAWe,EAAiB/C,GACrE,GAA0C,UAAtC6F,EAAKsB,MAAU,EAAJnF,EAAgB,GAAiC,CAC9D,MAAM2F,EAAM9B,EAAKa,eAAe1E,GAChC,GAAI2F,EAAK,CACP,QAAoB9J,IAAhB8J,EAAI5E,QAAuB,CAI7B,MAAM6E,EAAUnX,KAAK0S,QAAQwB,IAAIgD,EAAI5E,SAOrC,OANI6E,GAEFA,EAAQlC,YAEViC,EAAI5E,QAAUA,OACd4E,EAAI3H,OAASA,GAKf,YADA6F,EAAKa,eAAe1E,GAAK,IAAIM,EAAmBqF,EAAIpF,IAAKoF,EAAI7E,MAAOC,EAAS/C,KAKjF6F,EAAKsB,MAAU,EAAJnF,EAAgB,IAAY,UACvC6D,EAAKa,eAAe1E,GAAK,IAAIM,EAAmB,EAAG,EAAGS,EAAS/C,EACjE,CAEQ,iBAAAqG,WAEN,IAAK,MAAMvF,KAAQrQ,KAAK0S,QAAQc,SACN,cAApBnD,EAAKmE,aACPnE,EAAK4E,UAAY,GAIrB,MAAMlX,EAASiC,KAAKqN,UAAUM,MAAM5P,OACpC,IAAK,IAAIsT,EAAI,EAAGA,EAAIrR,KAAKqN,UAAU5C,OAAQ4G,EAAG,CAC5C,MAAM+D,EAAOrX,EAAOsX,MAAMnB,IAAI7C,GAC9B,GAAK+D,EAGL,IAAK,IAAI7D,EAAI,EAAGA,EAAIvR,KAAKqN,UAAU7C,OAAQ+G,EACzC,GAA0C,UAAtC6D,EAAKsB,MAAU,EAAJnF,EAAgB,GAAiC,CAC9D,MAAM6F,EAA8B,QAAtB,EAAAhC,EAAKa,eAAe1E,UAAE,eAAEe,QACtC,GAAI8E,EAAO,CACT,MAAM/G,EAAOrQ,KAAK0S,QAAQwB,IAAIkD,GAC1B/G,GACFA,EAAK4E,cAOf,MAAMX,EAAO,GACb,IAAK,MAAOL,EAAI5D,KAASrQ,KAAK0S,QAAQ6B,UACZ,cAApBlE,EAAKmE,YAA+BnE,EAAK4E,YAChC,QAAX,EAAA5E,EAAKoD,cAAM,SAAEF,UACbe,EAAKvV,KAAKkV,IAGd,IAAK,MAAMA,KAAMK,EACftU,KAAKgU,QAAQC,EAEjB,yFCnlBF,eAEA,SAEA,SAMMoD,EAAkB,EAAA/Z,iBAkIxB,SAASga,EAAUpZ,GACjB,OAAI,EAAAL,WAAmBK,GACP,IAARA,IAAiB,IAAMA,IAAU,EAAI,MAAS,IAAMA,IAAU,GAAK,MAAS,EAAIA,IAAU,GAAK,GACzG,CApIAmZ,EAAgB1U,IAAI,EAAAnF,qBAGpB,qBAKE,WAAAuC,CACmB+B,EACAsF,EACAC,GAFA,KAAAvF,MAAAA,EACA,KAAAsF,SAAAA,EACA,KAAAC,cAAAA,EAPX,KAAAkQ,MAAQ,EACR,KAAAjQ,UAAW,GAQjB,IAAAnI,cAAa,CACXqB,YAAqC,EAAxBR,KAAK8B,MAAMyG,WACxBpK,QAASkZ,EACT1W,aAAcX,KAAK8B,MAAM0V,oBACxBjc,MAAKV,GAAKmF,KAAKnG,KAAOgB,GAC3B,CAEO,KAAA+M,GAOD5H,KAAKnG,OACPmG,KAAKnG,KAAK6J,UAET1D,KAAKnG,KAAa4I,SAAS2C,KAAK,GACjCpF,KAAKnG,KAAKiJ,KAAK,EAAGuU,EAAiBrX,KAAK8B,MAAM0V,mBAElD,CAEO,IAAAC,CAAKC,SAGV,GAFA1X,KAAKuX,MAAQ,EACbvX,KAAKsH,UAAW,EACZtH,KAAKnG,KAAM,CACb,MAAM6G,EAAiC,IAArBgX,EAAOA,OAAO,GAAW,EA4DjD,SAAyBC,EAAqBC,GAC5C,IAAIC,EAAK,EACT,IAAKD,EAGH,OAAOC,EAET,GAAIF,EAAKG,YACP,GAAIH,EAAKI,cACPF,EAAKP,EAAUM,EAAOI,WAAWC,WAC5B,GAAIN,EAAKO,UAAW,CACzB,MAAMpd,EAAK6c,EAAK5X,YAAqCoY,WAAWR,EAAKS,cACrEP,GAAK,IAAAzb,eAActB,QAEnB+c,EAAKP,EAAUM,EAAOS,KAAKV,EAAKS,cAAcH,WAGhD,GAAIN,EAAKW,cACPT,EAAKP,EAAUM,EAAOW,WAAWN,WAC5B,GAAIN,EAAKa,UAAW,CACzB,MAAM1d,EAAK6c,EAAK5X,YAAqCoY,WAAWR,EAAKc,cACrEZ,GAAK,IAAAzb,eAActB,QAEnB+c,EAAKP,EAAUM,EAAOS,KAAKV,EAAKc,cAAcR,MAGlD,OAAOJ,CACT,CAvFqDa,CAC7C1Y,KAAKqH,cAAcsG,MAAMgH,cAAcgE,aACD,QAAtC,EAAA3Y,KAAKqH,cAAcsG,MAAMiL,qBAAa,eAAEhB,QAC1C5X,KAAKnG,KAAKiJ,KAAKpC,EAAW,KAAMV,KAAK8B,MAAM0V,mBAE/C,CAEO,GAAA1Q,CAAIjC,EAAmBC,EAAeC,GAC3C,IAAI/E,KAAKsH,UAAatH,KAAKnG,KAA3B,CAIA,GADAmG,KAAKuX,OAASxS,EAAMD,EAChB9E,KAAKuX,MAAQvX,KAAK8B,MAAM+W,eAI1B,OAHA7a,QAAQC,KAAK,kCACb+B,KAAKsH,UAAW,OAChBtH,KAAKnG,KAAK6J,UAGZ,IACE1D,KAAKnG,KAAKoF,OAAO4F,EAAMC,EAAOC,GAC9B,MAAOtJ,GACPuC,QAAQC,KAAK,uCAAuCxC,KACpDuE,KAAKsH,UAAW,EAChBtH,KAAKnG,KAAK6J,WAEd,CAEO,MAAAoV,CAAO5Q,SACZ,GAAIlI,KAAKsH,WAAaY,IAAYlI,KAAKnG,KACrC,OAAO,EAGT,MAAMqG,EAAQF,KAAKnG,KAAKqG,MAClBuD,EAASzD,KAAKnG,KAAK4J,OAGzB,IAAKvD,IAAWuD,EAId,OAHIA,GACFzD,KAAKoH,SAASqN,cAAchR,IAEvB,EAGT,MAAM6F,EAAS,EAAAC,cAAcC,kBAAa4D,EAAWlN,EAAOuD,GAM5D,OALuB,QAAvB,EAAA6F,EAAOI,WAAW,aAAK,SAAE8H,aAAa,IAAItE,UAAUlN,KAAKnG,KAAK6L,MAAOxF,EAAOuD,GAAS,EAAG,GACpFzD,KAAKnG,KAAKwK,YAxFM,SAyFlBrE,KAAKnG,KAAK6J,UAEZ1D,KAAKoH,SAASwC,SAASN,IAChB,CACT,gBCZF,SAAgByP,EAAaC,GAC3B,IAAK,MAAMne,KAAKme,EACdne,EAAE0Y,UAEJyF,EAAY3e,OAAS,CACvB,oJAzFA,iCACY,KAAA4e,aAA8B,GAC9B,KAAAC,aAAuB,CAkCnC,CA7BS,OAAA3F,GACLvT,KAAKkZ,aAAc,EACnB,IAAK,MAAMre,KAAKmF,KAAKiZ,aACnBpe,EAAE0Y,UAEJvT,KAAKiZ,aAAa5e,OAAS,CAC7B,CAOO,QAAAmT,CAAgC3S,GAErC,OADAmF,KAAKiZ,aAAala,KAAKlE,GAChBA,CACT,CAOO,UAAAse,CAAkCte,GACvC,MAAMue,EAAQpZ,KAAKiZ,aAAaI,QAAQxe,IACzB,IAAXue,GACFpZ,KAAKiZ,aAAaK,OAAOF,EAAO,EAEpC,GAGF,wCAEU,KAAAF,aAAc,CAgCxB,CA3BE,SAAWxe,GACT,OAAOsF,KAAKkZ,iBAAc9L,EAAYpN,KAAKuZ,MAC7C,CAKA,SAAW7e,CAAMA,GACXsF,KAAKkZ,aAAexe,IAAUsF,KAAKuZ,SAGvCvZ,KAAKuZ,QAAQhG,UACbvT,KAAKuZ,OAAS7e,EAChB,CAKO,KAAAgZ,GACL1T,KAAKtF,WAAQ0S,CACf,CAEO,OAAAmG,GACLvT,KAAKkZ,aAAc,EACnBlZ,KAAKuZ,QAAQhG,UACbvT,KAAKuZ,YAASnM,CAChB,GAMF,wBAA6BrC,GAC3B,MAAO,CAAEwI,QAASxI,EACpB,EAKA,iBAUA,qCAA0CyO,GACxC,MAAO,CAAEjG,QAAS,IAAMwF,EAAaS,GACvC,IC1GIC,EAA2B,CAAC,EAGhC,SAASC,EAAoBC,GAE5B,IAAIC,EAAeH,EAAyBE,GAC5C,QAAqBvM,IAAjBwM,EACH,OAAOA,EAAapgB,QAGrB,IAAIC,EAASggB,EAAyBE,GAAY,CAGjDngB,QAAS,CAAC,GAOX,OAHAqgB,EAAoBF,GAAUlgB,EAAQA,EAAOD,QAASkgB,GAG/CjgB,EAAOD,OACf,mGCfA,eACA,SACA,SACA,SAIM+G,EAAsC,CAC1CuZ,mBAAmB,EACnBvR,WAAY,SACZwR,cAAc,EACdrF,gBAAgB,EAChB8C,kBAAmB,IACnBqB,eAAgB,KAChB3F,aAAc,IACdnE,iBAAiB,EACjBiL,YAAY,EACZ/R,aAAc,KA0BhB,mBASE,WAAAlI,CAAYe,GAJJ,KAAAmY,aAA8B,GAE9B,KAAAgB,UAAwC,IAAItH,IAGlD3S,KAAK8B,MAAQtH,OAAOuH,OAAO,CAAC,EAAGxB,EAAiBO,GAChDd,KAAKka,aAAe1f,OAAOuH,OAAO,CAAC,EAAGxB,EAAiBO,EACzD,CAEO,OAAAyS,GACL,IAAK,MAAM4G,KAAOna,KAAKiZ,aACrBkB,EAAI5G,UAENvT,KAAKiZ,aAAa5e,OAAS,EAC3B2F,KAAKia,UAAUvG,OACjB,CAEQ,aAAA0G,IAAiBC,GACvB,IAAK,MAAMF,KAAOE,EAChBra,KAAKiZ,aAAala,KAAKob,EAE3B,CAEO,QAAAG,CAASC,GAQd,GAPAva,KAAKqN,UAAYkN,EAGjBva,KAAKmH,UAAY,IAAI,EAAAoC,cAAcgR,GACnCva,KAAKoH,SAAW,IAAI,EAAAoT,aAAaD,EAAUva,KAAKmH,UAAWnH,KAAK8B,OAG5D9B,KAAK8B,MAAMgY,kBAAmB,CAMhC,MAAMW,EAAYF,EAASG,QAAQC,eAAiB,CAAC,EACrDF,EAAUG,kBAAmB,EAC7BH,EAAUI,mBAAoB,EAC9BJ,EAAUK,iBAAkB,EAC5BP,EAASG,QAAQC,cAAgBF,EAkCnC,GA/BAza,KAAKoa,cACHpa,KAAKmH,UACLnH,KAAKoH,SAGLmT,EAASQ,OAAOC,mBAAmB,CAAEC,OAAQ,IAAK3V,MAAO,MAAOoS,GAAU1X,KAAKkb,QAAQxD,KACvF6C,EAASQ,OAAOC,mBAAmB,CAAEC,OAAQ,IAAK3V,MAAO,MAAOoS,GAAU1X,KAAKmb,QAAQzD,KACvF6C,EAASQ,OAAOC,mBAAmB,CAAE1V,MAAO,MAAOoS,GAAU1X,KAAKob,KAAK1D,KACvE6C,EAASQ,OAAOC,mBAAmB,CAAEC,OAAQ,IAAK3V,MAAO,MAAOoS,GAAU1X,KAAKqb,yBAAyB3D,KAGxG6C,EAASe,UAASxF,IAAQ,MAAC,OAAa,QAAb,EAAA9V,KAAKoH,gBAAQ,eAAEyO,OAAOC,EAAM,IAQvDyE,EAASQ,OAAOC,mBAAmB,CAAEO,cAAe,IAAKjW,MAAO,MAAO,IAAMtF,KAAK4H,UAClF2S,EAASQ,OAAOS,mBAAmB,CAAElW,MAAO,MAAO,IAAMtF,KAAK4H,UAC9D2S,EAAS5M,MAAMgH,cAAc8G,gBAAe,IAAMzb,KAAK4H,UAGvD2S,EAASxc,OAAO2d,gBAAe,KAAK,MAAC,OAAa,QAAb,EAAA1b,KAAKoH,gBAAQ,eAAEiN,eAAe,IAGnEkG,EAASoB,UAAStF,IAAU,MAAC,OAAa,QAAb,EAAArW,KAAKoH,gBAAQ,eAAEgP,eAAeC,EAAQ,KAIjErW,KAAK8B,MAAMiY,aAAc,CAC3B,MAAM6B,EAAe,IAAI,EAAAC,aAAa7b,KAAK8B,MAAO9B,KAAKoH,SAAWmT,GAClEva,KAAKia,UAAUtX,IAAI,QAASiZ,GAC5B5b,KAAKoa,cACHG,EAAS5M,MAAMgH,cAAcmH,QAAQC,mBAAmB,CAAEzW,MAAO,KAAOsW,IAK5E,GAAI5b,KAAK8B,MAAMkY,WAAY,CACzB,MAAMgC,EAAa,IAAI,EAAAC,WAAWjc,KAAK8B,MAAO9B,KAAKmH,UAAYnH,KAAKoH,SAAWmT,GAC/Eva,KAAKia,UAAUtX,IAAI,MAAOqZ,GAC1Bhc,KAAKoa,cACHG,EAAS5M,MAAMgH,cAAcmH,QAAQI,mBAAmB,KAAMF,IAGpE,CAGO,KAAApU,SAEL5H,KAAK8B,MAAM4S,eAAiB1U,KAAKka,aAAaxF,eAC9C1U,KAAK8B,MAAM0V,kBAAoBxX,KAAKka,aAAa1C,kBAEpC,QAAb,EAAAxX,KAAKoH,gBAAQ,SAAEQ,QAEf,IAAK,MAAMuU,KAAWnc,KAAKia,UAAUzG,SACnC2I,EAAQvU,QAEV,OAAO,CACT,CAEA,gBAAWsL,SACT,OAAoB,QAAb,EAAAlT,KAAKoH,gBAAQ,eAAEiM,cAAe,CACvC,CAEA,gBAAWH,CAAakJ,SACT,QAAb,EAAApc,KAAKoH,gBAAQ,SAAE6L,SAASmJ,GACxBpc,KAAK8B,MAAMoR,aAAekJ,CAC5B,CAEA,gBAAWC,GACT,OAAIrc,KAAKoH,SACApH,KAAKoH,SAASyM,YAEf,CACV,CAEA,mBAAW9E,GACT,OAAO/O,KAAK8B,MAAMiN,eACpB,CAEA,mBAAWA,CAAgBrU,SACzBsF,KAAK8B,MAAMiN,gBAAkBrU,EACf,QAAd,EAAAsF,KAAKmH,iBAAS,SAAE4H,gBAAgBrU,EAClC,CAEO,oBAAAmc,CAAqBtF,EAAWF,SACrC,OAAoB,QAAb,EAAArR,KAAKoH,gBAAQ,eAAEyP,qBAAqBtF,EAAGF,EAChD,CAEO,uBAAAyF,CAAwBvF,EAAWF,SACxC,OAAoB,QAAb,EAAArR,KAAKoH,gBAAQ,eAAE0P,wBAAwBvF,EAAGF,EACnD,CAEQ,OAAAiL,CAAQxiB,SACA,QAAd,EAAAkG,KAAKqN,iBAAS,SAAEM,MAAM4O,YAAYC,iBAAiB1iB,EACrD,CAEQ,OAAAohB,CAAQxD,GACd,IAAK,IAAIpd,EAAI,EAAGA,EAAIod,EAAOrd,SAAUC,EAE5B,KADCod,EAAOpd,KAEX0F,KAAK8B,MAAM4S,gBAAiB,GAIlC,OAAO,CACT,CAEQ,OAAAyG,CAAQzD,GACd,IAAK,IAAIpd,EAAI,EAAGA,EAAIod,EAAOrd,SAAUC,EAE5B,KADCod,EAAOpd,KAEX0F,KAAK8B,MAAM4S,gBAAiB,GAIlC,OAAO,CACT,CAGQ,IAAA0G,CAAK1D,GACX,QAAIA,EAAO,MAQP1X,KAAK8B,MAAMiY,eACb/Z,KAAKsc,QAAQ,kBACN,EAGX,CAYQ,wBAAAjB,CAAyB3D,mBAC/B,GAAIA,EAAOrd,OAAS,EAClB,OAAO,EAET,GAAkB,IAAdqd,EAAO,GACT,OAAQA,EAAO,IACb,KAAK,EAEH,OADA1X,KAAKsc,QAAQ,MAAS5E,EAAO,QAA0B1X,KAAK8B,MAAM0V,uBAC3D,EACT,KAAK,EACHxX,KAAK8B,MAAM0V,kBAAoBxX,KAAKka,aAAa1C,kBACjDxX,KAAKsc,QAAQ,MAAS5E,EAAO,QAA0B1X,KAAK8B,MAAM0V,sBAElE,IAAK,MAAM2E,KAAWnc,KAAKia,UAAUzG,SACnC2I,EAAQvU,QAEV,OAAO,EACT,KAAK,EAOH,OANI8P,EAAOrd,OAAS,KAAOqd,EAAO,aAAc+E,QAAU/E,EAAO,IA9O5C,MA+OnB1X,KAAK8B,MAAM0V,kBAAoBE,EAAO,GACtC1X,KAAKsc,QAAQ,MAAS5E,EAAO,QAA0B1X,KAAK8B,MAAM0V,uBAElExX,KAAKsc,QAAQ,MAAS5E,EAAO,UAExB,EACT,KAAK,EAEH,OADA1X,KAAKsc,QAAQ,MAAS5E,EAAO,eACtB,EACT,QAEE,OADA1X,KAAKsc,QAAQ,MAAS5E,EAAO,UACtB,EAGb,GAAkB,IAAdA,EAAO,GACT,OAAQA,EAAO,IAEb,KAAK,EACH,IAAIxX,EAAkC,QAA1B,EAAc,QAAd,EAAAF,KAAKmH,iBAAS,eAAEgD,kBAAU,eAAEC,IAAId,OAAOpJ,MAC/CuD,EAAmC,QAA1B,EAAc,QAAd,EAAAzD,KAAKmH,iBAAS,eAAEgD,kBAAU,eAAEC,IAAId,OAAO7F,OACpD,IAAKvD,IAAUuD,EAAQ,CAGrB,MAAMuL,EAAW,EAAA1E,kBACjBpK,IAAuB,QAAd,EAAAF,KAAKqN,iBAAS,eAAE7C,OAAQ,IAAMwE,EAAS9O,MAChDuD,IAAwB,QAAd,EAAAzD,KAAKqN,iBAAS,eAAE5C,OAAQ,IAAMuE,EAASvL,OAEnD,GAAIvD,EAAQuD,EAASzD,KAAK8B,MAAMyG,WAC9BvI,KAAKsc,QAAQ,MAAS5E,EAAO,QAA0BxX,EAAMwc,QAAQ,MAAMjZ,EAAOiZ,QAAQ,WACrF,CAEL,MAAMnL,EAAI5U,KAAK8L,MAAM9L,KAAKggB,KAAK3c,KAAK8B,MAAMyG,aAC1CvI,KAAKsc,QAAQ,MAAS5E,EAAO,QAA0BnG,KAAKA,MAE9D,OAAO,EACT,KAAK,EAEH,MAAMA,EAAI5U,KAAK8L,MAAM9L,KAAKggB,KAAK3c,KAAK8B,MAAMyG,aAE1C,OADAvI,KAAKsc,QAAQ,MAAS5E,EAAO,QAA0BnG,KAAKA,OACrD,EACT,QAEE,OADAvR,KAAKsc,QAAQ,MAAS5E,EAAO,UACtB,EAKb,OADA1X,KAAKsc,QAAQ,MAAS5E,EAAO,UACtB,CACT","sources":["webpack://ImageAddon/webpack/universalModuleDefinition","webpack://ImageAddon/./node_modules/inwasm/lib/index.js","webpack://ImageAddon/./node_modules/sixel/lib/Colors.js","webpack://ImageAddon/./node_modules/sixel/lib/Decoder.js","webpack://ImageAddon/./node_modules/sixel/lib/wasm.js","webpack://ImageAddon/./node_modules/xterm-wasm-parts/lib/base64/Base64Decoder.wasm.js","webpack://ImageAddon/./src/IIPHandler.ts","webpack://ImageAddon/./src/IIPHeaderParser.ts","webpack://ImageAddon/./src/IIPMetrics.ts","webpack://ImageAddon/./src/ImageRenderer.ts","webpack://ImageAddon/./src/ImageStorage.ts","webpack://ImageAddon/./src/SixelHandler.ts","webpack://ImageAddon/../../src/common/Lifecycle.ts","webpack://ImageAddon/webpack/bootstrap","webpack://ImageAddon/./src/ImageAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageAddon\"] = factory();\n\telse\n\t\troot[\"ImageAddon\"] = factory();\n})(self, () => {\nreturn ","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = void 0;\n// runtime helper - decode base64\nfunction _dec(s) {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const bs = atob(s);\n const r = new Uint8Array(bs.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = bs.charCodeAt(i);\n return r;\n}\nfunction InWasm(def) {\n if (def.d) {\n // default compiled call: wasm loading during runtime\n // for the sake of small bundling size (<900 bytes) the code is somewhat degenerated\n // see cli.ts for the meaning of the {t, s, d, e} object properties\n const { t, s, d } = def;\n // memorize bytes and module\n let bytes;\n let mod;\n const W = WebAssembly;\n if (t === 2 /* OutputType.BYTES */) {\n if (s)\n return () => bytes || (bytes = _dec(d));\n return () => Promise.resolve(bytes || (bytes = _dec(d)));\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => mod || (mod = new W.Module(bytes || (bytes = _dec(d))));\n return () => mod\n ? Promise.resolve(mod)\n : W.compile(bytes || (bytes = _dec(d))).then(m => mod = m);\n }\n if (s)\n return (e) => new W.Instance(mod || (mod = new W.Module(bytes || (bytes = _dec(d)))), e);\n return (e) => mod\n ? W.instantiate(mod, e)\n : W.instantiate(bytes || (bytes = _dec(d)), e).then(r => (mod = r.module) && r.instance);\n }\n // invalid call: uncompiled normal run throws\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\nexports.InWasm = InWasm;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: '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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJ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'\n};\n//# sourceMappingURL=wasm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_1 = require(\"inwasm\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_1.InWasm)(/*inwasm#6ccf778dadd2ee40:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqxAwKuAQEFf0GIKCgCAEGgKGohAUGEKCgCACIAQYAoKAIAQQFrQXxxIgJIBEAgAkGgKGohAyAAQaAoaiEAA0AgAC0AA0ECdCgCgCAgAC0AAkECdCgCgBggAC0AAUECdCgCgBAgAC0AAEECdCgCgAhycnIiBEH///8HSwRAQQEPCyABIAQ2AgAgAUEDaiEBIABBBGoiACADSQ0ACwtBhCggAjYCAEGIKCABQaAoazYCAEEAC/4BAQZ/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQQEhAxAADQFBgCgoAgAhAUGEKCgCACEAC0EBIQMgASAAayIEQQJIDQAgAEGhKGotAABBAnQoAoAQIABBoChqLQAAQQJ0KAKACHIhAQJAIARBAkYEQEEBIQIMAQtBASECIAAtAKIoIgVBPUcEQEECIQIgBUECdCgCgBggAXIhAQsgBEEERw0AIAAtAKMoIgBBPUYNACACQQFqIQIgAEECdCgCgCAgAXIhAQsgAUH///8HSw0AQYgoKAIAQaAoaiABNgIAQYgoQYgoKAIAIAJqIgA2AgAgAEGQKCgCAEchAwsgAwsAdglwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQEFY2xhbmdWMTguMC4wIChodHRwczovL2dpdGh1Yi5jb20vbGx2bS9sbHZtLXByb2plY3QgZDFlNjg1ZGY0NWRjNTk0NGI0M2QyNTQ3ZDAxMzhjZDRhM2VlNGVmZSkALA90YXJnZXRfZmVhdHVyZXMCKw9tdXRhYmxlLWdsb2JhbHMrCHNpZ24tZXh0'}/*inwasm#6ccf778dadd2ee40:rdef-end:\"decode\"*/);\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 streamline inplace decoder.\n *\n * Features / assumptions:\n * - optimized uint32 read/write (only LE support!)\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * `size` is the amount of decoded bytes to be expected.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n */\n init(size) {\n let m = this._m32;\n const bytes = (Math.ceil(size / 3) + 1288 /* P32.STATE_DATA */) * 4;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 1288 /* P32.STATE_DATA */ * 4);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 1288 /* P32.STATE_DATA */ * 4);\n }\n m[1284 /* P32.STATE_BSIZE */] = size;\n m[1283 /* P32.STATE_ESIZE */] = Math.ceil(size / 3) * 4;\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n }\n /**\n * Put bytes in `data` from `start` to `end` (exclusive) into the decoder.\n * Also decodes base64 data inplace once the payload exceeds 2^17 bytes.\n * Returns 1 on error, else 0.\n */\n put(data, start, end) {\n if (!this._inst)\n return 1;\n const m = this._m32;\n if (end - start + m[1280 /* P32.STATE_WP */] > m[1283 /* P32.STATE_ESIZE */])\n return 1;\n this._d.set(data.subarray(start, end), m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += end - start;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n // also assures that we dont run into illegal offsets in the wasm part\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072 ? this._inst.exports.dec() : 0;\n }\n /**\n * End the current decoding.\n * Decodes leftover payload and finally checks for the correct amount of\n * decoded bytes by comparing to the value given to `init`.\n * Returns 1 on error, else 0.\n */\n end() {\n return this._inst ? this._inst.exports.end() : 1;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\n// limit hold memory in base64 decoder\nconst KEEP_DATA = 4194304;\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec = new Base64Decoder(KEEP_DATA);\n private _metrics = UNSUPPORTED_TYPE;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: ImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {}\n\n public reset(): void {}\n\n public start(): void {\n this._aborted = false;\n this._header = DEFAULT_HEADER;\n this._metrics = UNSUPPORTED_TYPE;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if (this._dec.put(data, start, end)) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline || !this._header.size || this._header.size > this._opts.iipSizeLimit) {\n this._aborted = true;\n return;\n }\n this._dec.init(this._header.size);\n if (this._dec.put(data, dataPos, end)) {\n this._dec.release();\n this._aborted = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise<boolean> {\n if (this._aborted) return true;\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean = true;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n this._metrics = imageType(this._dec.data8);\n if (cond = this._metrics.mime !== 'unsupported') {\n w = this._metrics.width;\n h = this._metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n }\n }\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n const blob = new Blob([this._dec.data8], { type: this._metrics.mime });\n this._dec.release();\n\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise<boolean>(r => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, w, h);\n canvas.getContext('2d')?.drawImage(img, 0, 0, w, h);\n this._storage.addImage(canvas);\n r(true);\n });\n img.src = url;\n // sanity measure to avoid terminal blocking from dangling promise\n // happens from corrupt data (onload never gets fired)\n setTimeout(() => r(true), 1000);\n });\n }\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n this._storage.addImage(bm);\n return true;\n });\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1)) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2));\n return parseInt(s) * cdim;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\n\nexport interface IHeaderFields {\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => any} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\nconst FILE_MARKER = [70, 105, 108, 101];\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: any} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 6) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n for (let k = 0; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 24) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 6);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF E0 xx xx JFIF or FF D8 FF E1 xx xx Exif 00 00\n if ((d32[0] === 0xE0FFD8FF || d32[0] === 0xE1FFD8FF)\n && (\n (d[6] === 0x4a && d[7] === 0x46 && d[8] === 0x49 && d[9] === 0x46)\n || (d[6] === 0x45 && d[7] === 0x78 && d[8] === 0x69 && d[9] === 0x66)\n )\n ) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n return UNSUPPORTED_TYPE;\n}\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'common/Lifecycle';\n\n\nconst PLACEHOLDER_LENGTH = 4096;\nconst PLACEHOLDER_HEIGHT = 24;\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n public canvas: HTMLCanvasElement | undefined;\n private _ctx: CanvasRenderingContext2D | null | undefined;\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this.register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument || document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise<ImageBitmap | undefined> {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this.register(toDisposable(() => {\n this.removeLayerFromDom();\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this.canvas = undefined;\n this._ctx = undefined;\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._renderService?.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number): void {\n this._ctx?.clearRect(\n 0,\n start * (this.dimensions?.css.cell.height || 0),\n this.dimensions?.css.canvas.width || 0,\n (++end - start) * (this.dimensions?.css.cell.height || 0)\n );\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(): void {\n this._ctx?.clearRect(0, 0, this.canvas?.width || 0, this.canvas?.height || 0);\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n if (!this._ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * width + sx > img.width ? img.width - sx : count * width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n this._ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const finalWidth = width + sx > img.width ? img.width - sx : width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, Math.floor(finalWidth), Math.floor(finalHeight)\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n if (this._ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n this._ctx.drawImage(\n this._placeholderBitmap || this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n if (!this.canvas) {\n return;\n }\n if (this.canvas.width !== this.dimensions!.css.canvas.width || this.canvas.height !== this.dimensions!.css.canvas.height) {\n this.canvas.width = this.dimensions!.css.canvas.width || 0;\n this.canvas.height = this.dimensions!.css.canvas.height || 0;\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document,\n Math.ceil(spec.orig!.width * currentWidth / originalWidth),\n Math.ceil(spec.orig!.height * currentHeight / originalHeight)\n );\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n this.removeLayerFromDom();\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(): void {\n // make sure that the terminal is attached to a document and to DOM\n if (this.document && this._terminal._core.screenElement) {\n if (!this.canvas) {\n this.canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n this.canvas.classList.add('xterm-image-layer');\n this._terminal._core.screenElement.appendChild(this.canvas);\n this._ctx = this.canvas.getContext('2d', { alpha: true, desynchronized: true });\n this.clearAll();\n }\n } else {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n }\n }\n\n public removeLayerFromDom(): void {\n if (this.canvas) {\n this._ctx = undefined;\n this.canvas.remove();\n this.canvas = undefined;\n }\n }\n\n private _createPlaceHolder(height: number = PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap);\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ITerminalExt, IExtendedAttrsImage, IImageAddonOptions, IImageSpec, IBufferLineExt, BgFlags, Cell, Content, ICellSize, ExtFlags, Attributes, UnderlineStyle } from './Types';\n\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\n/**\n * Extend extended attribute to also hold image tile information.\n *\n * Object definition is copied from base repo to fully mimick its behavior.\n * Image data is added as additional public properties `imageId` and `tileId`.\n */\nclass ExtendedAttrsImage implements IExtendedAttrsImage {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0,\n public imageId = -1,\n public tileId = -1\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrsImage {\n /**\n * Technically we dont need a clone variant of ExtendedAttrsImage,\n * as we never clone a cell holding image data.\n * Note: Clone is only meant to be used by the InputHandler for\n * sticky attributes, which is never the case for image data.\n * We still provide a proper clone method to reflect the full ext attr\n * state in case there are future use cases for clone.\n */\n return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);\n }\n\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.imageId === -1;\n }\n}\nconst EMPTY_ATTRS = new ExtendedAttrsImage();\n\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map<number, IImageSpec> = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n\n private _viewportMetrics: { cols: number, rows: number };\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: any) {\n console.error(e.message);\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (spec && window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n\n /**\n * Method to add an image to the storage.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!this._opts.sixelScrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase);\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line as IBufferLineExt, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (this._opts.sixelScrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (this._opts.sixelScrolling) {\n buffer.x = offset;\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // setup image canvas in case we have none yet, but have images in store\n if (!this._renderer.canvas && this._images.size) {\n this._renderer.insertLayerToDom();\n // safety measure - in case we cannot spawn a canvas at all, just exit\n if (!this._renderer.canvas) {\n return;\n }\n }\n // rescale if needed\n this._renderer.rescaleCanvas();\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.canvas) {\n this._renderer.removeLayerFromDom();\n }\n return;\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // walk all cells in viewport and draw tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp) as IBufferLineExt;\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n if (line.getBg(col) & BgFlags.HAS_EXTENDED) {\n let e: IExtendedAttrsImage = line._extendedAttrs[col] || EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (\n ++col < cols\n && (line.getBg(col) & BgFlags.HAS_EXTENDED)\n && (e = line._extendedAttrs[col] || EMPTY_ATTRS)\n && (e.imageId === imageId)\n && (e.tileId === startTile + count)\n ) {\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n this._renderer.draw(imgSpec, startTile, startCol, row, count);\n }\n } else if (this._opts.showPlaceholder) {\n this._renderer.drawPlaceholder(startCol, row, count);\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row) as IBufferLineExt;\n if (line.getBg(oldCol) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[oldCol] || EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line._data[rightCol * Cell.SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line as IBufferLineExt, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] || EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] || EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLineExt, x: number, imageId: number, tileId: number): void {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const old = line._extendedAttrs[x];\n if (old) {\n if (old.imageId !== undefined) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n // found a plain ExtendedAttrs instance, clone it to new entry\n line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);\n return;\n }\n }\n // fall-through: always create new ExtendedAttrsImage entry\n line._data[x * Cell.SIZE + Cell.BG] |= BgFlags.HAS_EXTENDED;\n line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const imgId = line._extendedAttrs[x]?.imageId;\n if (imgId) {\n const spec = this._images.get(imgId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n","/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage } from './ImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: ImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n DecoderAsync({\n memoryLimit: this._opts.pixelLimit * 4,\n palette: DEFAULT_PALETTE,\n paletteLimit: this._opts.sixelPaletteLimit\n }).then(d => this._dec = d);\n }\n\n public reset(): void {\n /**\n * reset sixel decoder to defaults:\n * - release all memory\n * - nullify palette (4096)\n * - apply default palette (256)\n */\n if (this._dec) {\n this._dec.release();\n // FIXME: missing interface on decoder to nullify full palette\n (this._dec as any)._palette.fill(0);\n this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit);\n }\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n if (this._dec) {\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, null, this._opts.sixelPaletteLimit);\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise<boolean> {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || ! height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8, width, height), 0, 0);\n if (this._dec.memoryUsage > MEM_PERMA_LIMIT) {\n this._dec.release();\n }\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n","/**\n * Copyright (c) 2018 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from 'common/Types';\n\n/**\n * A base class that can be extended to provide convenience methods for managing the lifecycle of an\n * object and its components.\n */\nexport abstract class Disposable implements IDisposable {\n protected _disposables: IDisposable[] = [];\n protected _isDisposed: boolean = false;\n\n /**\n * Disposes the object, triggering the `dispose` method on all registered IDisposables.\n */\n public dispose(): void {\n this._isDisposed = true;\n for (const d of this._disposables) {\n d.dispose();\n }\n this._disposables.length = 0;\n }\n\n /**\n * Registers a disposable object.\n * @param d The disposable to register.\n * @returns The disposable.\n */\n public register<T extends IDisposable>(d: T): T {\n this._disposables.push(d);\n return d;\n }\n\n /**\n * Unregisters a disposable object if it has been registered, if not do\n * nothing.\n * @param d The disposable to unregister.\n */\n public unregister<T extends IDisposable>(d: T): void {\n const index = this._disposables.indexOf(d);\n if (index !== -1) {\n this._disposables.splice(index, 1);\n }\n }\n}\n\nexport class MutableDisposable<T extends IDisposable> implements IDisposable {\n private _value?: T;\n private _isDisposed = false;\n\n /**\n * Gets the value if it exists.\n */\n public get value(): T | undefined {\n return this._isDisposed ? undefined : this._value;\n }\n\n /**\n * Sets the value, disposing of the old value if it exists.\n */\n public set value(value: T | undefined) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n this._value = value;\n }\n\n /**\n * Resets the stored value and disposes of the previously stored value.\n */\n public clear(): void {\n this.value = undefined;\n }\n\n public dispose(): void {\n this._isDisposed = true;\n this._value?.dispose();\n this._value = undefined;\n }\n}\n\n/**\n * Wrap a function in a disposable.\n */\nexport function toDisposable(f: () => void): IDisposable {\n return { dispose: f };\n}\n\n/**\n * Dispose of all disposables in an array and set its length to 0.\n */\nexport function disposeArray(disposables: IDisposable[]): void {\n for (const d of disposables) {\n d.dispose();\n }\n disposables.length = 0;\n}\n\n/**\n * Creates a disposable that will dispose of an array of disposables when disposed.\n */\nexport function getDisposeArrayDisposable(array: IDisposable[]): IDisposable {\n return { dispose: () => disposeArray(array) };\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 256,\n sixelSizeLimit: 25000000,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 20000000\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon , IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map<String, IResetHandler> = new Map();\n\n constructor(opts?: Partial<IImageAddonOptions>) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n // const windowOptions = terminal.getOption('windowOptions');\n // windowOptions.getWinSizePixels = true;\n // windowOptions.getCellSizePixels = true;\n // windowOptions.getWinSizeChars = true;\n // terminal.setOption('windowOptions', windowOptions);\n const windowOps = terminal.options.windowOptions || {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelHandler = new SixelHandler(this._opts, this._storage!, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipHandler = new IIPHandler(this._opts, this._renderer!, this._storage!, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.coreService.triggerDataEvent(s);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","self","_dec","s","Buffer","from","bs","atob","r","Uint8Array","length","i","charCodeAt","Object","defineProperty","value","InWasm","def","d","t","bytes","mod","W","WebAssembly","Promise","resolve","Module","compile","then","m","e","Instance","instantiate","instance","_wasmCtx","Error","add","red","n","green","blue","toRGBA8888","g","b","a","clamp","low","high","Math","max","min","h2c","t1","t2","c","normalizeRGB","round","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","PALETTE_ANSI_256","PALETTE_VT340_GREY","PALETTE_VT340_COLOR","normalizeHLS","nearestColorIndex","fromRGBA8888","alpha","BIG_ENDIAN","Uint32Array","buffer","console","warn","color","palette","Number","MAX_SAFE_INTEGER","idx","dr","dg","db","h","l","v","HLStoRGB","p","push","decodeAsync","decode","Decoder","DecoderAsync","Colors_1","wasm_1","WASM_BYTES","bytestring","result","decodeBase64","LIMITS","BYTES","WASM_MODULE","NULL_CANVAS","CallbackProxy","constructor","this","bandHandler","width","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","memoryLimit","sixelColor","fillColor","paletteLimit","PALETTE_SIZE","truncate","opts","cbProxy","importObj","env","bind","inst","_instance","_cbProxy","_PIXEL_OFFSET","MAX_WIDTH","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","_opts","assign","_handle_band","_initCanvas","_wasm","_chunk","memory","get_chunk_address","CHUNK_SIZE","_states","get_state_address","_palette","get_palette_address","set","_pSrc","get_p0_address","init","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","height","release","_realloc","offset","additionalPixels","newCanvas","ceil","adv","remaining","subarray","current_width","current_height","memoryUsage","byteLength","properties","level","memUsage","rasterAttributes","numerator","denominator","data","start","end","decodeString","j","data32","currentWidth","fill","escape","final","finalOffset","bw","currentHeight","data8","Uint8ClampedArray","dec","async","wasmDecode","MAP","split","map","el","D","EMPTY","keepSize","_inst","_d","_m32","_mem","size","grow","Memory","initial","put","DEFAULT_HEADER","name","preserveAspectRatio","inline","_renderer","_storage","_coreTerminal","_aborted","_hp","HeaderParser","_header","_metrics","UNSUPPORTED_TYPE","reset","state","dataPos","parse","fields","iipSizeLimit","success","w","cond","imageType","mime","pixelLimit","_resize","floor","blob","Blob","type","window","createImageBitmap","url","URL","createObjectURL","img","Image","addEventListener","revokeObjectURL","canvas","ImageRenderer","createCanvas","document","getContext","drawImage","addImage","src","setTimeout","resizeWidth","resizeHeight","bm","cw","dimensions","css","cell","CELL_SIZE_DEFAULT","ch","cols","rows","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","parseInt","slice","toStr","String","fromCharCode","toInt","toSize","match","DECODERS","toString","TextDecoder","FILE_MARKER","MAX_FIELDCHARS","_buffer","_position","_key","pos","_storeValue","_a","k","_storeKey","d32","byteOffset","len","blockLength","jpgSize","Disposable","localDocument","createElement","createImageData","ctx","ImageData","imgData","undefined","_terminal","super","_optionsRefresh","register","MutableDisposable","_oldOpen","_core","open","parent","call","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","_renderService","refreshRows","toDisposable","removeLayerFromDom","_oldSetRenderer","setRenderer","_ctx","_placeholderBitmap","close","_placeholder","showPlaceholder","cellSize","_createPlaceHolder","clearLines","clearRect","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sx","sy","dx","dy","finalWidth","finalHeight","extractTile","drawPlaceholder","spec","actualCellSize","originalWidth","originalHeight","origCellSize","orig","renderer","insertLayerToDom","classList","appendChild","desynchronized","remove","bWidth","blueprint","black","white","y","shift","x","putImageData","screen","ctx2","bitmap","_coreBrowserService","ExtendedAttrsImage","ext","_urlId","_ext","underlineStyle","underlineColor","underlineVariantOffset","val","urlId","imageId","clone","isEmpty","EMPTY_ATTRS","_images","Map","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","setLimit","storageLimit","error","message","getLimit","_viewportMetrics","dispose","values","marker","clear","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","id","get","delete","ImageBitmap","wipeAlternate","zero","entries","bufferType","advanceCursor","sixelScrolling","_inputHandler","lineFeed","termCols","termRows","originX","originY","tileCount","_dirtyRowTracker","markDirty","line","lines","ybase","_writeToCell","endMarker","registerMarker","onDispose","active","_evictOnAlternate","render","range","ydisp","getBg","_extendedAttrs","startTile","startCol","viewportResize","metrics","oldCol","tilesPerRow","hasData","rightCol","_data","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","old","oldSpec","imgId","DEFAULT_PALETTE","convertLe","_size","sixelPaletteLimit","hook","params","attr","colors","bg","isInverse","isFgDefault","foreground","rgba","isFgRGB","toColorRGB","getFgColor","ansi","isBgDefault","background","isBgRGB","getBgColor","extractActiveBg","_curAttrData","_themeService","sixelSizeLimit","unhook","disposeArray","disposables","_disposables","_isDisposed","unregister","index","indexOf","splice","_value","array","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","enableSizeReports","sixelSupport","iipSupport","_handlers","_defaultOpts","obj","_disposeLater","args","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipHandler","IIPHandler","registerOscHandler","handler","limit","storageUsage","_report","coreService","triggerDataEvent","Array","toFixed","sqrt"],"sourceRoot":""}
1
+ {"version":3,"file":"addon-image.js","mappings":"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","sources":["webpack://ImageAddon/webpack/universalModuleDefinition","webpack://ImageAddon/./node_modules/inwasm/lib/index.js","webpack://ImageAddon/./node_modules/sixel/lib/Colors.js","webpack://ImageAddon/./node_modules/sixel/lib/Decoder.js","webpack://ImageAddon/./node_modules/sixel/lib/wasm.js","webpack://ImageAddon/./node_modules/xterm-wasm-parts/lib/base64/Base64Decoder.wasm.js","webpack://ImageAddon/./src/IIPHandler.ts","webpack://ImageAddon/./src/IIPHeaderParser.ts","webpack://ImageAddon/./src/IIPMetrics.ts","webpack://ImageAddon/./src/ImageRenderer.ts","webpack://ImageAddon/./src/ImageStorage.ts","webpack://ImageAddon/./src/SixelHandler.ts","webpack://ImageAddon/../../out/vs/base/common/arrays.js","webpack://ImageAddon/../../out/vs/base/common/arraysFind.js","webpack://ImageAddon/../../out/vs/base/common/collections.js","webpack://ImageAddon/../../out/vs/base/common/errors.js","webpack://ImageAddon/../../out/vs/base/common/functional.js","webpack://ImageAddon/../../out/vs/base/common/iterator.js","webpack://ImageAddon/../../out/vs/base/common/lifecycle.js","webpack://ImageAddon/../../out/vs/base/common/map.js","webpack://ImageAddon/webpack/bootstrap","webpack://ImageAddon/./src/ImageAddon.ts"],"sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory();\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"ImageAddon\"] = factory();\n\telse\n\t\troot[\"ImageAddon\"] = factory();\n})(globalThis, () => {\nreturn ","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.InWasm = void 0;\n// runtime helper - decode base64\nfunction _dec(s) {\n if (typeof Buffer !== 'undefined')\n return Buffer.from(s, 'base64');\n const bs = atob(s);\n const r = new Uint8Array(bs.length);\n for (let i = 0; i < r.length; ++i)\n r[i] = bs.charCodeAt(i);\n return r;\n}\nfunction InWasm(def) {\n if (def.d) {\n // default compiled call: wasm loading during runtime\n // for the sake of small bundling size (<900 bytes) the code is somewhat degenerated\n // see cli.ts for the meaning of the {t, s, d, e} object properties\n const { t, s, d } = def;\n // memorize bytes and module\n let bytes;\n let mod;\n const W = WebAssembly;\n if (t === 2 /* OutputType.BYTES */) {\n if (s)\n return () => bytes || (bytes = _dec(d));\n return () => Promise.resolve(bytes || (bytes = _dec(d)));\n }\n if (t === 1 /* OutputType.MODULE */) {\n if (s)\n return () => mod || (mod = new W.Module(bytes || (bytes = _dec(d))));\n return () => mod\n ? Promise.resolve(mod)\n : W.compile(bytes || (bytes = _dec(d))).then(m => mod = m);\n }\n if (s)\n return (e) => new W.Instance(mod || (mod = new W.Module(bytes || (bytes = _dec(d)))), e);\n return (e) => mod\n ? W.instantiate(mod, e)\n : W.instantiate(bytes || (bytes = _dec(d)), e).then(r => (mod = r.module) && r.instance);\n }\n // invalid call: uncompiled normal run throws\n if (typeof _wasmCtx === 'undefined')\n throw new Error('must run \"inwasm\"');\n _wasmCtx.add(def);\n}\nexports.InWasm = InWasm;\n//# sourceMappingURL=index.js.map","\"use strict\";\n/**\n * Copyright (c) 2019 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DEFAULT_FOREGROUND = exports.DEFAULT_BACKGROUND = exports.PALETTE_ANSI_256 = exports.PALETTE_VT340_GREY = exports.PALETTE_VT340_COLOR = exports.normalizeHLS = exports.normalizeRGB = exports.nearestColorIndex = exports.fromRGBA8888 = exports.toRGBA8888 = exports.alpha = exports.blue = exports.green = exports.red = exports.BIG_ENDIAN = void 0;\n// FIXME: cleanup this mess, move things either to decoder/encoder, keep only shared things\n// system endianess\nexports.BIG_ENDIAN = new Uint8Array(new Uint32Array([0xFF000000]).buffer)[0] === 0xFF;\nif (exports.BIG_ENDIAN) {\n console.warn('BE platform detected. This version of node-sixel works only on LE properly.');\n}\n// channel values\nfunction red(n) {\n return n & 0xFF;\n}\nexports.red = red;\nfunction green(n) {\n return (n >>> 8) & 0xFF;\n}\nexports.green = green;\nfunction blue(n) {\n return (n >>> 16) & 0xFF;\n}\nexports.blue = blue;\nfunction alpha(n) {\n return (n >>> 24) & 0xFF;\n}\nexports.alpha = alpha;\n/**\n * Convert RGB channels to native color RGBA8888.\n */\nfunction toRGBA8888(r, g, b, a = 255) {\n return ((a & 0xFF) << 24 | (b & 0xFF) << 16 | (g & 0xFF) << 8 | (r & 0xFF)) >>> 0; // ABGR32\n}\nexports.toRGBA8888 = toRGBA8888;\n/**\n * Convert native color to [r, g, b, a].\n */\nfunction fromRGBA8888(color) {\n return [color & 0xFF, (color >> 8) & 0xFF, (color >> 16) & 0xFF, color >>> 24];\n}\nexports.fromRGBA8888 = fromRGBA8888;\n/**\n * Get index of nearest color in `palette` for `color`.\n * Uses euclidean distance without any luminescence correction.\n */\nfunction nearestColorIndex(color, palette) {\n const r = red(color);\n const g = green(color);\n const b = blue(color);\n let min = Number.MAX_SAFE_INTEGER;\n let idx = -1;\n // use euclidean distance (manhattan gives very poor results)\n for (let i = 0; i < palette.length; ++i) {\n const dr = r - palette[i][0];\n const dg = g - palette[i][1];\n const db = b - palette[i][2];\n const d = dr * dr + dg * dg + db * db;\n if (!d)\n return i;\n if (d < min) {\n min = d;\n idx = i;\n }\n }\n return idx;\n}\nexports.nearestColorIndex = nearestColorIndex;\n// color conversions\n// HLS taken from: http://www.niwa.nu/2013/05/math-behind-colorspace-conversions-rgb-hsl\nfunction clamp(low, high, value) {\n return Math.max(low, Math.min(value, high));\n}\nfunction h2c(t1, t2, c) {\n if (c < 0)\n c += 1;\n if (c > 1)\n c -= 1;\n return c * 6 < 1\n ? t2 + (t1 - t2) * 6 * c\n : c * 2 < 1\n ? t1\n : c * 3 < 2\n ? t2 + (t1 - t2) * (4 - c * 6)\n : t2;\n}\nfunction HLStoRGB(h, l, s) {\n if (!s) {\n const v = Math.round(l * 255);\n return toRGBA8888(v, v, v);\n }\n const t1 = l < 0.5 ? l * (1 + s) : l + s - l * s;\n const t2 = 2 * l - t1;\n return toRGBA8888(clamp(0, 255, Math.round(h2c(t1, t2, h + 1 / 3) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h) * 255)), clamp(0, 255, Math.round(h2c(t1, t2, h - 1 / 3) * 255)));\n}\n/**\n * Normalize SIXEL RGB values (percent based, 0-100) to RGBA8888.\n */\nfunction normalizeRGB(r, g, b) {\n return (0xFF000000 | Math.round(b / 100 * 255) << 16 | Math.round(g / 100 * 255) << 8 | Math.round(r / 100 * 255)) >>> 0; // ABGR32\n}\nexports.normalizeRGB = normalizeRGB;\n/**\n * Normalize SIXEL HLS values to RGBA8888. Applies hue correction of +240°.\n */\nfunction normalizeHLS(h, l, s) {\n // Note: hue value is turned by 240° in VT340, all values given as fractions\n return HLStoRGB((h + 240 % 360) / 360, l / 100, s / 100);\n}\nexports.normalizeHLS = normalizeHLS;\n/**\n * default palettes\n */\n// FIXME: move palettes to Decoder.ts\n/**\n * 16 predefined color registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Blue 20 20 80\n * 2 Red 80 13 13\n * 3 Green 20 80 20\n * 4 Magenta 80 20 80\n * 5 Cyan 20 80 80\n * 6 Yellow 80 80 20\n * 7 Gray 50% 53 53 53\n * 8 Gray 25% 26 26 26\n * 9 Blue* 33 33 60\n * 10 Red* 60 26 26\n * 11 Green* 33 60 33\n * 12 Magenta* 60 33 60\n * 13 Cyan* 33 60 60\n * 14 Yellow* 60 60 33\n * 15 Gray 75% 80 80 80\n * ```\n * (*) less saturated\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n*/\nexports.PALETTE_VT340_COLOR = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(20, 20, 80),\n normalizeRGB(80, 13, 13),\n normalizeRGB(20, 80, 20),\n normalizeRGB(80, 20, 80),\n normalizeRGB(20, 80, 80),\n normalizeRGB(80, 80, 20),\n normalizeRGB(53, 53, 53),\n normalizeRGB(26, 26, 26),\n normalizeRGB(33, 33, 60),\n normalizeRGB(60, 26, 26),\n normalizeRGB(33, 60, 33),\n normalizeRGB(60, 33, 60),\n normalizeRGB(33, 60, 60),\n normalizeRGB(60, 60, 33),\n normalizeRGB(80, 80, 80)\n]);\n/**\n * 16 predefined monochrome registers of VT340 (values in %):\n * ```\n * R G B\n * 0 Black 0 0 0\n * 1 Gray-2 13 13 13\n * 2 Gray-4 26 26 26\n * 3 Gray-6 40 40 40\n * 4 Gray-1 6 6 6\n * 5 Gray-3 20 20 20\n * 6 Gray-5 33 33 33\n * 7 White 7 46 46 46\n * 8 Black 0 0 0 0\n * 9 Gray-2 13 13 13\n * 10 Gray-4 26 26 26\n * 11 Gray-6 40 40 40\n * 12 Gray-1 6 6 6\n * 13 Gray-3 20 20 20\n * 14 Gray-5 33 33 33\n * 15 White 7 46 46 46\n * ```\n *\n * @see https://vt100.net/docs/vt3xx-gp/chapter2.html#S2.4\n */\nexports.PALETTE_VT340_GREY = new Uint32Array([\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46),\n normalizeRGB(0, 0, 0),\n normalizeRGB(13, 13, 13),\n normalizeRGB(26, 26, 26),\n normalizeRGB(40, 40, 40),\n normalizeRGB(6, 6, 6),\n normalizeRGB(20, 20, 20),\n normalizeRGB(33, 33, 33),\n normalizeRGB(46, 46, 46)\n]);\n/**\n * 256 predefined ANSI colors.\n *\n * @see https://en.wikipedia.org/wiki/ANSI_escape_code#8-bit\n */\nexports.PALETTE_ANSI_256 = (() => {\n // 16 lower colors (taken from xterm)\n const p = [\n toRGBA8888(0, 0, 0),\n toRGBA8888(205, 0, 0),\n toRGBA8888(0, 205, 0),\n toRGBA8888(205, 205, 0),\n toRGBA8888(0, 0, 238),\n toRGBA8888(205, 0, 205),\n toRGBA8888(0, 250, 205),\n toRGBA8888(229, 229, 229),\n toRGBA8888(127, 127, 127),\n toRGBA8888(255, 0, 0),\n toRGBA8888(0, 255, 0),\n toRGBA8888(255, 255, 0),\n toRGBA8888(92, 92, 255),\n toRGBA8888(255, 0, 255),\n toRGBA8888(0, 255, 255),\n toRGBA8888(255, 255, 255),\n ];\n // colors up to 232\n const d = [0, 95, 135, 175, 215, 255];\n for (let r = 0; r < 6; ++r) {\n for (let g = 0; g < 6; ++g) {\n for (let b = 0; b < 6; ++b) {\n p.push(toRGBA8888(d[r], d[g], d[b]));\n }\n }\n }\n // grey scale to up 255\n for (let v = 8; v <= 238; v += 10) {\n p.push(toRGBA8888(v, v, v));\n }\n return new Uint32Array(p);\n})();\n/**\n * Background: Black by default.\n * Foreground: White by default.\n *\n * Background color is used whenever a fill color is needed and not explicitly set.\n * Foreground color is used as default initial sixel color.\n */\nexports.DEFAULT_BACKGROUND = toRGBA8888(0, 0, 0, 255);\nexports.DEFAULT_FOREGROUND = toRGBA8888(255, 255, 255, 255);\n//# sourceMappingURL=Colors.js.map","\"use strict\";\n/**\n * Copyright (c) 2021 Joerg Breitbart.\n * @license MIT\n */\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.decodeAsync = exports.decode = exports.Decoder = exports.DecoderAsync = void 0;\nconst Colors_1 = require(\"./Colors\");\nconst wasm_1 = require(\"./wasm\");\n/* istanbul ignore next */\nfunction decodeBase64(s) {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(s, 'base64');\n }\n const bytestring = atob(s);\n const result = new Uint8Array(bytestring.length);\n for (let i = 0; i < result.length; ++i) {\n result[i] = bytestring.charCodeAt(i);\n }\n return result;\n}\nconst WASM_BYTES = decodeBase64(wasm_1.LIMITS.BYTES);\nlet WASM_MODULE;\n// empty canvas\nconst NULL_CANVAS = new Uint32Array();\n// proxy for lazy binding of decoder methods to wasm env callbacks\nclass CallbackProxy {\n constructor() {\n this.bandHandler = (width) => 1;\n this.modeHandler = (mode) => 1;\n }\n handle_band(width) {\n return this.bandHandler(width);\n }\n mode_parsed(mode) {\n return this.modeHandler(mode);\n }\n}\n// default decoder options\nconst DEFAULT_OPTIONS = {\n memoryLimit: 2048 * 65536,\n sixelColor: Colors_1.DEFAULT_FOREGROUND,\n fillColor: Colors_1.DEFAULT_BACKGROUND,\n palette: Colors_1.PALETTE_VT340_COLOR,\n paletteLimit: wasm_1.LIMITS.PALETTE_SIZE,\n truncate: true\n};\n/**\n * Create a decoder instance asynchronously.\n * To be used in the browser main thread.\n */\nfunction DecoderAsync(opts) {\n const cbProxy = new CallbackProxy();\n const importObj = {\n env: {\n handle_band: cbProxy.handle_band.bind(cbProxy),\n mode_parsed: cbProxy.mode_parsed.bind(cbProxy)\n }\n };\n return WebAssembly.instantiate(WASM_MODULE || WASM_BYTES, importObj)\n .then((inst) => {\n WASM_MODULE = WASM_MODULE || inst.module;\n return new Decoder(opts, inst.instance || inst, cbProxy);\n });\n}\nexports.DecoderAsync = DecoderAsync;\n/**\n * Decoder - web assembly based sixel stream decoder.\n *\n * Usage pattern:\n * - call `init` to initialize decoder for new image\n * - feed data chunks to `decode` or `decodeString`\n * - grab pixels from `data32`\n * - optional: call `release` to free memory (e.g. after big images)\n * - start over with next image by calling `init`\n *\n * Properties:\n * - max width of 2^14 - 4 pixels (compile time setting in wasm)\n * - no explicit height limit (only limited by memory)\n * - max 4096 colors palette (compile time setting in wasm)\n *\n * Explanation operation modes:\n * - M1 Mode chosen for level 1 images (no raster attributes),\n * or for level 2 images with `truncate=false`.\n * - M2 Mode chosen for level 2 images with `truncate=true` (default).\n * While this mode is not fully spec conform (decoder not expected to truncate),\n * it is what spec conform encoders should create (should not excess raster).\n * This mode has several advantages:\n * - ~15% faster decoding speed\n * - image dimensions can be evaluated early without processing the whole data\n * - faster pixel access in `data32` (precalulated)\n * - image height is not reported as multiple of 6 pixels\n * - M0 Undecided mode state after `init`.\n * The level of an image is determined during early decoding based on the fact,\n * whether the data contains valid raster attributes before any sixel data.\n * Until then the mode of an image is marked as M0, meaning the real operation mode\n * could not be decided yet.\n */\nclass Decoder {\n /**\n * Synchonous ctor. Can be called from nodejs or a webworker context.\n * For instantiation in the browser main thread use `WasmDecoderAsync` instead.\n */\n constructor(opts, _instance, _cbProxy) {\n this._PIXEL_OFFSET = wasm_1.LIMITS.MAX_WIDTH + 4;\n this._canvas = NULL_CANVAS;\n this._bandWidths = [];\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n if (this._opts.paletteLimit > wasm_1.LIMITS.PALETTE_SIZE) {\n throw new Error(`DecoderOptions.paletteLimit must not exceed ${wasm_1.LIMITS.PALETTE_SIZE}`);\n }\n if (!_instance) {\n const module = WASM_MODULE || (WASM_MODULE = new WebAssembly.Module(WASM_BYTES));\n _instance = new WebAssembly.Instance(module, {\n env: {\n handle_band: this._handle_band.bind(this),\n mode_parsed: this._initCanvas.bind(this)\n }\n });\n }\n else {\n _cbProxy.bandHandler = this._handle_band.bind(this);\n _cbProxy.modeHandler = this._initCanvas.bind(this);\n }\n this._instance = _instance;\n this._wasm = this._instance.exports;\n this._chunk = new Uint8Array(this._wasm.memory.buffer, this._wasm.get_chunk_address(), wasm_1.LIMITS.CHUNK_SIZE);\n this._states = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_state_address(), 12);\n this._palette = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_palette_address(), wasm_1.LIMITS.PALETTE_SIZE);\n this._palette.set(this._opts.palette);\n this._pSrc = new Uint32Array(this._wasm.memory.buffer, this._wasm.get_p0_address());\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n // some readonly parser states for internal usage\n get _fillColor() { return this._states[0]; }\n get _truncate() { return this._states[8]; }\n get _rasterWidth() { return this._states[6]; }\n get _rasterHeight() { return this._states[7]; }\n get _width() { return this._states[2] ? this._states[2] - 4 : 0; }\n get _height() { return this._states[3]; }\n get _level() { return this._states[9]; }\n get _mode() { return this._states[10]; }\n get _paletteLimit() { return this._states[11]; }\n _initCanvas(mode) {\n if (mode === 2 /* M2 */) {\n const pixels = this.width * this.height;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n this._maxWidth = this._width;\n }\n else if (mode === 1 /* M1 */) {\n if (this._level === 2) {\n // got raster attributes, use them as initial size hint\n const pixels = Math.min(this._rasterWidth, wasm_1.LIMITS.MAX_WIDTH) * this._rasterHeight;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n this._canvas = new Uint32Array(pixels);\n }\n }\n else {\n // else fallback to generic resizing, starting with 256*256 pixels\n if (this._canvas.length < 65536) {\n this._canvas = new Uint32Array(65536);\n }\n }\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n _realloc(offset, additionalPixels) {\n const pixels = offset + additionalPixels;\n if (pixels > this._canvas.length) {\n if (this._opts.memoryLimit && pixels * 4 > this._opts.memoryLimit) {\n this.release();\n throw new Error('image exceeds memory limit');\n }\n // extend in 65536 pixel blocks\n const newCanvas = new Uint32Array(Math.ceil(pixels / 65536) * 65536);\n newCanvas.set(this._canvas);\n this._canvas = newCanvas;\n }\n }\n _handle_band(width) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + width), offset + width * c);\n c++;\n remaining--;\n }\n this._lastOffset += width * c;\n this._currentHeight += c;\n }\n else if (this._mode === 1 /* M1 */) {\n this._realloc(offset, width * 6);\n this._maxWidth = Math.max(this._maxWidth, width);\n this._minWidth = Math.min(this._minWidth, width);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + width), offset + width * i);\n }\n this._bandWidths.push(width);\n this._lastOffset += width * 6;\n this._currentHeight += 6;\n }\n return 0; // 0 - continue, 1 - abort right away\n }\n /**\n * Width of the image data.\n * Returns the rasterWidth in level2/truncating mode,\n * otherwise the max width, that has been seen so far.\n */\n get width() {\n return this._mode !== 1 /* M1 */\n ? this._width\n : Math.max(this._maxWidth, this._wasm.current_width());\n }\n /**\n * Height of the image data.\n * Returns the rasterHeight in level2/truncating mode,\n * otherwise height touched by sixels.\n */\n get height() {\n return this._mode !== 1 /* M1 */\n ? this._height\n : this._wasm.current_width()\n ? this._bandWidths.length * 6 + this._wasm.current_height()\n : this._bandWidths.length * 6;\n }\n /**\n * Get active palette colors as RGBA8888[] (borrowed).\n */\n get palette() {\n return this._palette.subarray(0, this._paletteLimit);\n }\n /**\n * Get the memory used by the decoder.\n *\n * This is a rough estimate accounting the wasm instance memory\n * and pixel buffers held on JS side (real value will be slightly\n * higher due to JS book-keeping).\n * Note that the decoder does not free ressources on its own,\n * call `release` to free excess memory.\n */\n get memoryUsage() {\n return this._canvas.byteLength + this._wasm.memory.buffer.byteLength + 8 * this._bandWidths.length;\n }\n /**\n * Get various properties of the decoder and the current image.\n */\n get properties() {\n return {\n width: this.width,\n height: this.height,\n mode: this._mode,\n level: this._level,\n truncate: !!this._truncate,\n paletteLimit: this._paletteLimit,\n fillColor: this._fillColor,\n memUsage: this.memoryUsage,\n rasterAttributes: {\n numerator: this._states[4],\n denominator: this._states[5],\n width: this._rasterWidth,\n height: this._rasterHeight,\n }\n };\n }\n /**\n * Initialize decoder for next image. Must be called before\n * any calls to `decode` or `decodeString`.\n */\n // FIXME: reorder arguments, better palette handling\n init(fillColor = this._opts.fillColor, palette = this._opts.palette, paletteLimit = this._opts.paletteLimit, truncate = this._opts.truncate) {\n this._wasm.init(this._opts.sixelColor, fillColor, paletteLimit, truncate ? 1 : 0);\n if (palette) {\n this._palette.set(palette.subarray(0, wasm_1.LIMITS.PALETTE_SIZE));\n }\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n this._lastOffset = 0;\n this._currentHeight = 0;\n }\n /**\n * Decode next chunk of data from start to end index (exclusive).\n * @throws Will throw if the image exceeds the memory limit.\n */\n decode(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n this._chunk.set(data.subarray(p, p += length));\n this._wasm.decode(0, length);\n }\n }\n /**\n * Decode next chunk of string data from start to end index (exclusive).\n * Note: Decoding from string data is rather slow, use `decode` with byte data instead.\n * @throws Will throw if the image exceeds the memory limit.\n */\n decodeString(data, start = 0, end = data.length) {\n let p = start;\n while (p < end) {\n const length = Math.min(end - p, wasm_1.LIMITS.CHUNK_SIZE);\n for (let i = 0, j = p; i < length; ++i, ++j) {\n this._chunk[i] = data.charCodeAt(j);\n }\n p += length;\n this._wasm.decode(0, length);\n }\n }\n /**\n * Get current pixel data as 32-bit typed array (RGBA8888).\n * Also peeks into pixel data of the current band, that got not pushed yet.\n */\n get data32() {\n if (this._mode === 0 /* M0 */ || !this.width || !this.height) {\n return NULL_CANVAS;\n }\n // get width of pending band to peek into left-over data\n const currentWidth = this._wasm.current_width();\n if (this._mode === 2 /* M2 */) {\n let remaining = this.height - this._currentHeight;\n if (remaining > 0) {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n let c = 0;\n while (c < 6 && remaining > 0) {\n this._canvas.set(this._pSrc.subarray(adv * c, adv * c + currentWidth), offset + currentWidth * c);\n c++;\n remaining--;\n }\n if (remaining) {\n this._canvas.fill(this._fillColor, offset + currentWidth * c);\n }\n }\n return this._canvas.subarray(0, this.width * this.height);\n }\n if (this._mode === 1 /* M1 */) {\n if (this._minWidth === this._maxWidth) {\n let escape = false;\n if (currentWidth) {\n if (currentWidth !== this._minWidth) {\n escape = true;\n }\n else {\n const adv = this._PIXEL_OFFSET;\n let offset = this._lastOffset;\n this._realloc(offset, currentWidth * 6);\n for (let i = 0; i < 6; ++i) {\n this._canvas.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), offset + currentWidth * i);\n }\n }\n }\n if (!escape) {\n return this._canvas.subarray(0, this.width * this.height);\n }\n }\n // worst case: re-align pixels if we have bands with different width\n // This is somewhat allocation intensive, any way to do that in-place, and just once?\n const final = new Uint32Array(this.width * this.height);\n final.fill(this._fillColor);\n let finalOffset = 0;\n let start = 0;\n for (let i = 0; i < this._bandWidths.length; ++i) {\n const bw = this._bandWidths[i];\n for (let p = 0; p < 6; ++p) {\n final.set(this._canvas.subarray(start, start += bw), finalOffset);\n finalOffset += this.width;\n }\n }\n // also handle left-over pixels of the current band\n if (currentWidth) {\n const adv = this._PIXEL_OFFSET;\n // other than finished bands, this runs only up to currentHeight\n const currentHeight = this._wasm.current_height();\n for (let i = 0; i < currentHeight; ++i) {\n final.set(this._pSrc.subarray(adv * i, adv * i + currentWidth), finalOffset + this.width * i);\n }\n }\n return final;\n }\n // fallthrough for all not handled cases\n return NULL_CANVAS;\n }\n /**\n * Same as `data32`, but returning pixel data as Uint8ClampedArray suitable\n * for direct usage with `ImageData`.\n */\n get data8() {\n return new Uint8ClampedArray(this.data32.buffer, 0, this.width * this.height * 4);\n }\n /**\n * Release image ressources on JS side held by the decoder.\n *\n * The decoder tries to re-use memory ressources of a previous image\n * to lower allocation and GC pressure. Decoding a single big image\n * will grow the memory usage of the decoder permanently.\n * Call `release` to reset the internal buffers and free the memory.\n * Note that this destroys the image data, call it when done processing\n * a rather big image, otherwise it is not needed. Use `memoryUsage`\n * to decide, whether the held memory is still within your limits.\n * This does not affect the wasm module (operates on static memory).\n */\n release() {\n this._canvas = NULL_CANVAS;\n this._bandWidths.length = 0;\n this._maxWidth = 0;\n this._minWidth = wasm_1.LIMITS.MAX_WIDTH;\n // also nullify parser states in wasm to avoid\n // width/height reporting potential out-of-bound values\n this._wasm.init(Colors_1.DEFAULT_FOREGROUND, 0, this._opts.paletteLimit, 0);\n }\n}\nexports.Decoder = Decoder;\n/**\n * Convenient decoding functions for easier usage.\n *\n * These can be used for casual decoding of sixel images,\n * that dont come in as stream chunks.\n * Note that the functions instantiate a stream decoder for every call,\n * which comes with a performance penalty of ~25%.\n */\n/**\n * Decode function with synchronous wasm loading.\n * Can be used in a web worker or in nodejs. Does not work reliable in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nfunction decode(data, opts) {\n const dec = new Decoder(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decode = decode;\n/**\n * Decode function with asynchronous wasm loading.\n * Use this version in normal browser context.\n * @throws Will throw if the image exceeds the memory limit.\n */\nasync function decodeAsync(data, opts) {\n const dec = await DecoderAsync(opts);\n dec.init();\n typeof data === 'string' ? dec.decodeString(data) : dec.decode(data);\n return {\n width: dec.width,\n height: dec.height,\n data32: dec.data32,\n data8: dec.data8\n };\n}\nexports.decodeAsync = decodeAsync;\n//# sourceMappingURL=Decoder.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.LIMITS = void 0;\nexports.LIMITS = {\n CHUNK_SIZE: 16384,\n PALETTE_SIZE: 4096,\n MAX_WIDTH: 16384,\n BYTES: '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AEHAiwIgADcDAEG4iwIgADcDAEGwiwIgADcDAEGoiwIgADcDAEGgiwIgADcDAEGYiwIgADcDAEGQiwIgADcDAEGIiwIgADcDAEGAiwIgADcDAEH4igIgADcDAEHwigIgADcDAEHoigIgADcDAEHgigIgADcDAEHYigIgADcDAEHQigIgADcDAEHIigIgADcDAEHAigIgADcDAEG4igIgADcDAEGwigIgADcDAEGoigIgADcDAEGgigIgADcDAEGYigIgADcDAEGQigIgADcDAEGIigIgADcDAEGAigIgADcDAEH4iQIgADcDAEHwiQIgADcDAEHoiQIgADcDAEHgiQIgADcDAEHYiQIgADcDAEHQiQIgADcDAEHIiQIgADcDAEHAiQIgADcDAEG4iQIgADcDAEGwiQIgADcDAEGoCCgCACIEQf8AakGAAW0hCAJAIARBgQFIDQBBASEBIAhBAiAIQQJKG0EBayICQQFxIQMgBEGBAk4EQCACQX5xIQIDQCABQQl0IgdBEHJBoIkCakGwiQJBgAT8CgAAIAdBsI0CakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsLIANFDQAgAUEJdEEQckGgiQJqQbCJAkGABPwKAAALAkAgBEEBSA0AIAhBASAIQQFKGyIDQQFxIQUCQCADQQFrIgdFBEBBACEBDAELIANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQbCJBmpBsIkCQYAE/AoAACAGQZAEckGwiQZqQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACwsgBQRAIAFBCXRBEHJBsIkGakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEFIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiBkEQckHAiQpqQbCJAkGABPwKAAAgBkGQBHJBwIkKakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAFBEAgAUECdEHAiQpqQbCJAkGABPwKAAALIARBAUgNACADQQFxIQUgBwR/IANB/v///wdxIQJBACEBA0AgAUEJdCIGQRByQdCJDmpBsIkCQYAE/AoAACAGQZAEckHQiQ5qQbCJAkGABPwKAAAgAUECaiEBIAJBAmsiAg0ACyABQQd0QQRyBUEECyEBIAUEQCABQQJ0QdCJDmpBsIkCQYAE/AoAAAsgBEEBSA0AIANBAXEhBSAHBH8gA0H+////B3EhAkEAIQEDQCABQQl0IgZBEHJB4IkSakGwiQJBgAT8CgAAIAZBkARyQeCJEmpBsIkCQYAE/AoAACABQQJqIQEgAkECayICDQALIAFBB3RBBHIFQQQLIQEgBQRAIAFBAnRB4IkSakGwiQJBgAT8CgAACyAEQQFIDQAgA0EBcSEEIAcEfyADQf7///8HcSECQQAhAQNAIAFBCXQiA0EQckHwiRZqQbCJAkGABPwKAAAgA0GQBHJB8IkWakGwiQJBgAT8CgAAIAFBAmohASACQQJrIgINAAsgAUEHdEEEcgVBBAshASAERQ0AIAFBAnRB8IkWakGwiQJBgAT8CgAAC0HUCCAIQQd0QQRyNgIAC58TAgh/AX5B5AgoAgAhA0HgCCgCACECQegIKAIAIQcgAUGQiQFqIglB/wE6AAAgACABSARAIABBkIkBaiEIA0AgAiEEIAhBAWohAQJAIAgtAABB/wBxIgJBMGtBCUsEQCABIQgMAQtB7AgoAgBBAnRB7AhqIgUoAgAhAANAIAUgAiAAQQpsakEwayIANgIAIAEtAAAhAiABQQFqIgghASACQf8AcSICQTBrQQpJDQALCwJAAkACQAJAAkACQAJ/AkAgAkE/ayIAQT9NBEAgBEUNASAEQSFGBEBB8AgoAgAiAUEBIAEbIgQgB2ohAQJAIABFDQAgB0H//wBLDQBBgIABIAdrIAQgAUH//wBLGyEFAkAgAEEBcUUNACAHQQJ0QaCJAmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEECcUUNACAHQQJ0QbCJBmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEEEcUUNACAHQQJ0QcCJCmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEEIcUUNACAHQQJ0QdCJDmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLAkAgAEEQcUUNACAHQQJ0QeCJEmohAiAFIgRBB3EiBgRAA0AgAiADNgIAIAJBBGohAiAEQQFrIQQgBkEBayIGDQALCyAFQQFrQQdJDQADQCACIAM2AhwgAiADNgIYIAIgAzYCFCACIAM2AhAgAiADNgIMIAIgAzYCCCACIAM2AgQgAiADNgIAIAJBIGohAiAEQQhrIgQNAAsLIABBIHFFDQAgBUEBayEEIAdBAnRB8IkWaiEAIAVBB3EiAgRAA0AgACADNgIAIABBBGohACAFQQFrIQUgAkEBayICDQALCyAEQQdJDQADQCAAIAM2AhwgACADNgIYIAAgAzYCFCAAIAM2AhAgACADNgIMIAAgAzYCCCAAIAM2AgQgACADNgIAIABBIGohACAFQQhrIgUNAAsLIAhBAWoiBSAILQAAQf8AcSICQT9rIgBBP00NAxoMBAsCQEHsCCgCACIFQQFGBEBB8AgoAgAiAUHMCCgCACIESQ0BIAEgBHAhAQwBC0H4CCgCACEEQfQIKAIAIQECQAJAIAVBBUcNACABQQFHDQAgBEHpAk4NBAwBCyAEQeQASg0DQfwIKAIAQeQASg0DQYAJKAIAQeQASg0DCwJAIAFFDQAgAUECSg0AIARB/AgoAgBBgAkoAgAgAUECdEGICGooAgARAgAhBEHwCCgCACIBQcwIKAIAIgVPBH8gASAFcAUgAQtBAnRBkAlqIAQ2AgALQfAIKAIAIgFBzAgoAgAiBEkNACABIARwIQELIAFBAnRBkAlqKAIAIQMMAQsgAkH9AHFBIUcEQCAHIQEgAiEADAQLIARBI0cNBAJAQewIKAIAIgRBAUYEQEHwCCgCACIBQcwIKAIAIgBJDQEgASAAcCEBDAELQfgIKAIAIQFB9AgoAgAhAAJAAkAgBEEFRw0AIABBAUcNACABQekCSA0BDAcLIAFB5ABKDQZB/AgoAgBB5ABKDQZBgAkoAgBB5ABKDQYLAkAgAEUNACAAQQJKDQAgAUH8CCgCAEGACSgCACAAQQJ0QYgIaigCABECACEAQfAIKAIAIgFBzAgoAgAiBE8EfyABIARwBSABC0ECdEGQCWogADYCAAtB8AgoAgAiAUHMCCgCACIASQ0AIAEgAHAhAQsgAUECdEGQCWooAgAhAwwECyAHIQEgCAshBQNAIAFB//8ATQRAIABBAXEgAWxBAnRBoIkCaiADNgIAIABBAXZBAXEgAWxBAnRBsIkGaiADNgIAIABBAnZBAXEgAWxBAnRBwIkKaiADNgIAIABBA3ZBAXEgAWxBAnRB0IkOaiADNgIAIABBBHZBAXEgAWxBAnRB4IkSaiADNgIAIABBBXYgAWxBAnRB8IkWaiADNgIACyABQQFqIQEgBS0AACEAIAVBAWoiBCEFIABB/wBxIgJBP2siAEHAAEkNAAsgBCEFC0EAIQQgBSEIIAEhByACIQAgAkH9AHFBIUYNAQtBBCEHIAQhAiAAQSRrDgoDAgICAgICAgIBAgtB7AhCATcCAAwCC0GoCCgCAEEEaxAABEBB0AhBATYCAA8LAkBBqAgoAgAiBkEFSA0AQaAIKQMAIQogBkEDa0EBdiIBQQdxIQJBACEAIAFBAWtBB08EQCABQfj///8HcSEFA0AgAEEDdCIBQbCJAmogCjcDACABQQhyQbCJAmogCjcDACABQRByQbCJAmogCjcDACABQRhyQbCJAmogCjcDACABQSByQbCJAmogCjcDACABQShyQbCJAmogCjcDACABQTByQbCJAmogCjcDACABQThyQbCJAmogCjcDACAAQQhqIQAgBUEIayIFDQALCyACRQ0AA0AgAEEDdEGwiQJqIAo3AwAgAEEBaiEAIAJBAWsiAg0ACwtBwIkGQbCJAiAGQQJ0IgD8CgAAQdCJCkGwiQIgAPwKAABB4IkOQbCJAiAA/AoAAEHwiRJBsIkCIAD8CgAAQYCKFkGwiQIgAPwKAAAgBCECDAELAkAgAEE7Rw0AQewIKAIAIgBBB0oNAEHsCCAAQQFqNgIAIABBAnRB8AhqQQA2AgALIAEhBwsgCCAJSQ0ACwtB5AggAzYCAEHgCCACNgIAQegIIAc2AgAL4gcCBX8BfgJAQdAIAn8CQAJAIAAgAU4NACABQZCJAWohBiAAQZCJAWohBQNAIAUtAAAiA0H/AHEhAgJAAkACQAJAAkACQAJAQeAIKAIAIgRBIkcEQCAEDQcgAkEiRgRAQewIQgE3AgBB4AhBIjYCAAwICyACQT9rQcAASQ0GIANBIWsiAkEMTQ0BDAULAkAgAkEwayIEQQlNBEBB7AgoAgBBAnRB7AhqIgIgBCACKAIAQQpsajYCAAwBC0HsCCgCACEEIAJBO0YEQCAEQQdKDQFB7AggBEEBajYCACAEQQJ0QfAIakEANgIADAELIARBBEYEQEHECEECNgIAQbAIQfAIKQMANwMAQbgIQfgIKAIAIgI2AgBBvAhB/AgoAgAiBDYCAEHICEECQQFBwAgoAgAiAxs2AgBBrAggBEEAIAMbNgIAQagIIAJBgIABIAJBgIABSBtBBGpBACADGzYCAEHgCEEANgIADAoLIAJBP2tBwABJDQQLIANBIWsiAkEMTQ0BDAILQQEgAnRBjSBxRQ0DDAQLQQEgAnRBjSBxDQELIANBoQFrIgJBDEsNA0EBIAJ0QY0gcUUNAwtBxAhCgYCAgBA3AgBBsAhB8AgoAgBBAEHsCCgCACICQQBKGzYCAEG0CEH0CCgCAEEAIAJBAUobNgIAQbgIQfgIKAIAQQAgAkECShs2AgBB4AhBADYCAEG8CEEANgIADAQLIANBoQFrIgJBDEsNAUEBIAJ0QY0gcUUNAQtBxAhCgYCAgBA3AgBBsAhCADcDAEG4CEIANwMADAMLIAVBAWoiBSAGSQ0ACwsCQEHICCgCAA4DAwEAAQsCQEGoCCgCACIFQQVIDQBBoAgpAwAhByAFQQNrQQF2IgNBB3EhBEEAIQIgA0EBa0EHTwRAIANB+P///wdxIQYDQCACQQN0IgNBsIkCaiAHNwMAIANBCHJBsIkCaiAHNwMAIANBEHJBsIkCaiAHNwMAIANBGHJBsIkCaiAHNwMAIANBIHJBsIkCaiAHNwMAIANBKHJBsIkCaiAHNwMAIANBMHJBsIkCaiAHNwMAIANBOHJBsIkCaiAHNwMAIAJBCGohAiAGQQhrIgYNAAsLIARFDQADQCACQQN0QbCJAmogBzcDACACQQFqIQIgBEEBayIEDQALC0HAiQZBsIkCIAVBAnQiA/wKAABB0IkKQbCJAiAD/AoAAEHgiQ5BsIkCIAP8CgAAQfCJEkGwiQIgA/wKAABBgIoWQbCJAiAD/AoAAEECDAELEAhByAgoAgALEAEiAjYCACACDQAgACABQcgIKAIAQQJ0QYAIaigCABEBAAsLdABB6AhBBDYCAEHkCCAANgIAQewIQgE3AgBBxAhCADcCAEHACCADNgIAQdwIQgA3AgBBqAhCADcDAEGwCEIANwMAQbgIQgA3AwBBzAggAkGAICACQYAgSRs2AgBBoAggAa1CgYCAgBB+NwMAQdAIQQA2AgALIwBB0AgoAgBFBEAgACABQcgIKAIAQQJ0QYAIaigCABEBAAsLWgECfwJAAkACQEHICCgCAEEBaw4CAAECC0HYCEHoCCgCACIAQdgIKAIAIgEgACABShsiAEGAgAEgAEGAgAFIGyIANgIAIABBBGsPC0GoCCgCAEEEayEACyAAC0IBAX8Cf0EGQdwIKAIAIgBBIHENABpBBSAAQRBxDQAaQQQgAEEIcQ0AGkEDIABBBHENABpBAiAAQQFxIABBAnEbCwu9BQEFfQJ/IAJFBEAgAUH/AWxBMmpB5ABtIgBBCHQgAHIgAEEQdHIMAQsgArJDAADIQpUhBiAAQfABarJDAAC0Q5UhBQJ9IAGyQwAAyEKVIgNDAAAAP10EQCADIAZDAACAP5KUDAELIAYgA0MAAIA/IAaTlJILIQcgAyADkiEGAkAgBUOrqqo+kiIEQwAAAABdBEAgBEMAAIA/kiEEDAELIARDAACAP15FDQAgBEMAAIC/kiEECyAGIAeTIQMgBUMAAAAAXSEAAn8CfSADIAcgA5NDAADAQJQgBJSSIARDq6oqPl0NABogByAEQwAAAD9dDQAaIAMgBEOrqio/XUUNABogAyAHIAOTIARDAADAwJRDAACAQJKUkgtDAAB/Q5RDAAAAP5IiBkMAAIBPXSAGQwAAAABgcQRAIAapDAELQQALIQECQCAABEAgBUMAAIA/kiEEDAELIAUiBEMAAIA/XkUNACAFQwAAgL+SIQQLIAVDq6qqvpIiBUMAAAAAXSECAn8CfSADIAcgA5NDAADAQJQgBJSSIARDq6oqPl0NABogByAEQwAAAD9dDQAaIAMgBEOrqio/XUUNABogAyAHIAOTIARDAADAwJRDAACAQJKUkgtDAAB/Q5RDAAAAP5IiBkMAAIBPXSAGQwAAAABgcQRAIAapDAELQQALIQACQCACBEAgBUMAAIA/kiEFDAELIAVDAACAP15FDQAgBUMAAIC/kiEFCwJAIAVDq6oqPl0EQCADIAcgA5NDAADAQJQgBZSSIQcMAQsgBUMAAAA/XQ0AIAVDq6oqP11FBEAgAyEHDAELIAMgByADkyAFQwAAwMCUQwAAgECSlJIhBwsgAEEIdAJ/IAdDAAB/Q5RDAAAAP5IiBkMAAIBPXSAGQwAAAABgcQRAIAapDAELQQALQRB0ciABcgtBgICAeHILNwAgAEH/AWxBMmpB5ABtIAFB/wFsQTJqQeQAbUEIdHIgAkH/AWxBMmpB5ABtQRB0ckGAgIB4cgsEACMACwYAIAAkAAsQACMAIABrQXBxIgAkACAACwsYAQBBgAgLEQEAAAACAAAAAwAAAAQAAAAF'\n};\n//# sourceMappingURL=wasm.js.map","\"use strict\";\nObject.defineProperty(exports, \"__esModule\", { value: true });\n/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nconst inwasm_1 = require(\"inwasm\");\n/**\n * wasm base64 decoder.\n */\nconst wasmDecode = (0, inwasm_1.InWasm)(/*inwasm#6ccf778dadd2ee40:rdef-start:\"decode\"*/{s:1,t:0,d:'AGFzbQEAAAABBQFgAAF/Ag8BA2VudgZtZW1vcnkCAAEDAwIAAAcNAgNkZWMAAANlbmQAAQqxAwKuAQEFf0GIKCgCAEGgKGohAUGEKCgCACIAQYAoKAIAQQFrQXxxIgJIBEAgAkGgKGohAyAAQaAoaiEAA0AgAC0AA0ECdCgCgCAgAC0AAkECdCgCgBggAC0AAUECdCgCgBAgAC0AAEECdCgCgAhycnIiBEH///8HSwRAQQEPCyABIAQ2AgAgAUEDaiEBIABBBGoiACADSQ0ACwtBhCggAjYCAEGIKCABQaAoazYCAEEAC/4BAQZ/AkBBgCgoAgAiAUGEKCgCACIAa0EFTgRAQQEhAxAADQFBgCgoAgAhAUGEKCgCACEAC0EBIQMgASAAayIEQQJIDQAgAEGhKGotAABBAnQoAoAQIABBoChqLQAAQQJ0KAKACHIhAQJAIARBAkYEQEEBIQIMAQtBASECIAAtAKIoIgVBPUcEQEECIQIgBUECdCgCgBggAXIhAQsgBEEERw0AIAAtAKMoIgBBPUYNACACQQFqIQIgAEECdCgCgCAgAXIhAQsgAUH///8HSw0AQYgoKAIAQaAoaiABNgIAQYgoQYgoKAIAIAJqIgA2AgAgAEGQKCgCAEchAwsgAwsAdglwcm9kdWNlcnMBDHByb2Nlc3NlZC1ieQEFY2xhbmdWMTguMC4wIChodHRwczovL2dpdGh1Yi5jb20vbGx2bS9sbHZtLXByb2plY3QgZDFlNjg1ZGY0NWRjNTk0NGI0M2QyNTQ3ZDAxMzhjZDRhM2VlNGVmZSkALA90YXJnZXRfZmVhdHVyZXMCKw9tdXRhYmxlLWdsb2JhbHMrCHNpZ24tZXh0'}/*inwasm#6ccf778dadd2ee40:rdef-end:\"decode\"*/);\n// base64 map\nconst MAP = new Uint8Array('ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/'\n .split('')\n .map(el => el.charCodeAt(0)));\n// init decoder maps in LE order\nconst D = new Uint32Array(1024);\nD.fill(0xFF000000);\nfor (let i = 0; i < MAP.length; ++i)\n D[MAP[i]] = i << 2;\nfor (let i = 0; i < MAP.length; ++i)\n D[256 + MAP[i]] = i >> 4 | ((i << 4) & 0xFF) << 8;\nfor (let i = 0; i < MAP.length; ++i)\n D[512 + MAP[i]] = (i >> 2) << 8 | ((i << 6) & 0xFF) << 16;\nfor (let i = 0; i < MAP.length; ++i)\n D[768 + MAP[i]] = i << 16;\nconst EMPTY = new Uint8Array(0);\n/**\n * base64 streamline inplace decoder.\n *\n * Features / assumptions:\n * - optimized uint32 read/write (only LE support!)\n * - lazy chunkwise decoding\n * - errors out on any non base64 chars (no support for NL formatted base64)\n * - decodes in wasm\n * - inplace decoding to save memory\n * - supports a keepSize for lazy memory release\n */\nclass Base64Decoder {\n constructor(keepSize) {\n this.keepSize = keepSize;\n }\n /**\n * Currently decoded bytes (borrowed).\n * Must be accessed before calling `release` or `init`.\n */\n get data8() {\n return this._inst ? this._d.subarray(0, this._m32[1282 /* P32.STATE_DP */]) : EMPTY;\n }\n /**\n * Release memory conditionally based on `keepSize`.\n * If memory gets released, also the wasm instance will be freed and recreated on next `init`,\n * otherwise the instance will be reused.\n */\n release() {\n if (!this._inst)\n return;\n if (this._mem.buffer.byteLength > this.keepSize) {\n this._inst = this._m32 = this._d = this._mem = null;\n }\n else {\n this._m32[1280 /* P32.STATE_WP */] = 0;\n this._m32[1281 /* P32.STATE_SP */] = 0;\n this._m32[1282 /* P32.STATE_DP */] = 0;\n }\n }\n /**\n * Initializes the decoder for new base64 data.\n * Must be called before doing any decoding attempts.\n * `size` is the amount of decoded bytes to be expected.\n * The method will either spawn a new wasm instance or grow\n * the needed memory of an existing instance.\n */\n init(size) {\n let m = this._m32;\n const bytes = (Math.ceil(size / 3) + 1288 /* P32.STATE_DATA */) * 4;\n if (!this._inst) {\n this._mem = new WebAssembly.Memory({ initial: Math.ceil(bytes / 65536) });\n this._inst = wasmDecode({ env: { memory: this._mem } });\n m = new Uint32Array(this._mem.buffer, 0);\n m.set(D, 256 /* P32.D0 */);\n this._d = new Uint8Array(this._mem.buffer, 1288 /* P32.STATE_DATA */ * 4);\n }\n else if (this._mem.buffer.byteLength < bytes) {\n this._mem.grow(Math.ceil((bytes - this._mem.buffer.byteLength) / 65536));\n m = new Uint32Array(this._mem.buffer, 0);\n this._d = new Uint8Array(this._mem.buffer, 1288 /* P32.STATE_DATA */ * 4);\n }\n m[1284 /* P32.STATE_BSIZE */] = size;\n m[1283 /* P32.STATE_ESIZE */] = Math.ceil(size / 3) * 4;\n m[1280 /* P32.STATE_WP */] = 0;\n m[1281 /* P32.STATE_SP */] = 0;\n m[1282 /* P32.STATE_DP */] = 0;\n this._m32 = m;\n }\n /**\n * Put bytes in `data` from `start` to `end` (exclusive) into the decoder.\n * Also decodes base64 data inplace once the payload exceeds 2^17 bytes.\n * Returns 1 on error, else 0.\n */\n put(data, start, end) {\n if (!this._inst)\n return 1;\n const m = this._m32;\n if (end - start + m[1280 /* P32.STATE_WP */] > m[1283 /* P32.STATE_ESIZE */])\n return 1;\n this._d.set(data.subarray(start, end), m[1280 /* P32.STATE_WP */]);\n m[1280 /* P32.STATE_WP */] += end - start;\n // max chunk in input handler is 2^17, try to run in \"tandem mode\"\n // also assures that we dont run into illegal offsets in the wasm part\n return m[1280 /* P32.STATE_WP */] - m[1281 /* P32.STATE_SP */] >= 131072 ? this._inst.exports.dec() : 0;\n }\n /**\n * End the current decoding.\n * Decodes leftover payload and finally checks for the correct amount of\n * decoded bytes by comparing to the value given to `init`.\n * Returns 1 on error, else 0.\n */\n end() {\n return this._inst ? this._inst.exports.end() : 1;\n }\n}\nexports.default = Base64Decoder;\n//# sourceMappingURL=Base64Decoder.wasm.js.map","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\nimport { IImageAddonOptions, IOscHandler, IResetHandler, ITerminalExt } from './Types';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport Base64Decoder from 'xterm-wasm-parts/lib/base64/Base64Decoder.wasm';\nimport { HeaderParser, IHeaderFields, HeaderState } from './IIPHeaderParser';\nimport { imageType, UNSUPPORTED_TYPE } from './IIPMetrics';\n\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\n// limit hold memory in base64 decoder\nconst KEEP_DATA = 4194304;\n\n// default IIP header values\nconst DEFAULT_HEADER: IHeaderFields = {\n name: 'Unnamed file',\n size: 0,\n width: 'auto',\n height: 'auto',\n preserveAspectRatio: 1,\n inline: 0\n};\n\n\nexport class IIPHandler implements IOscHandler, IResetHandler {\n private _aborted = false;\n private _hp = new HeaderParser();\n private _header: IHeaderFields = DEFAULT_HEADER;\n private _dec = new Base64Decoder(KEEP_DATA);\n private _metrics = UNSUPPORTED_TYPE;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _renderer: ImageRenderer,\n private readonly _storage: ImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {}\n\n public reset(): void {}\n\n public start(): void {\n this._aborted = false;\n this._header = DEFAULT_HEADER;\n this._metrics = UNSUPPORTED_TYPE;\n this._hp.reset();\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted) return;\n\n if (this._hp.state === HeaderState.END) {\n if (this._dec.put(data, start, end)) {\n this._dec.release();\n this._aborted = true;\n }\n } else {\n const dataPos = this._hp.parse(data, start, end);\n if (dataPos === -1) {\n this._aborted = true;\n return;\n }\n if (dataPos > 0) {\n this._header = Object.assign({}, DEFAULT_HEADER, this._hp.fields);\n if (!this._header.inline || !this._header.size || this._header.size > this._opts.iipSizeLimit) {\n this._aborted = true;\n return;\n }\n this._dec.init(this._header.size);\n if (this._dec.put(data, dataPos, end)) {\n this._dec.release();\n this._aborted = true;\n }\n }\n }\n }\n\n public end(success: boolean): boolean | Promise<boolean> {\n if (this._aborted) return true;\n\n let w = 0;\n let h = 0;\n\n // early exit condition chain\n let cond: number | boolean = true;\n if (cond = success) {\n if (cond = !this._dec.end()) {\n this._metrics = imageType(this._dec.data8);\n if (cond = this._metrics.mime !== 'unsupported') {\n w = this._metrics.width;\n h = this._metrics.height;\n if (cond = w && h && w * h < this._opts.pixelLimit) {\n [w, h] = this._resize(w, h).map(Math.floor);\n cond = w && h && w * h < this._opts.pixelLimit;\n }\n }\n }\n }\n if (!cond) {\n this._dec.release();\n return true;\n }\n\n const blob = new Blob([this._dec.data8], { type: this._metrics.mime });\n this._dec.release();\n\n if (!window.createImageBitmap) {\n const url = URL.createObjectURL(blob);\n const img = new Image();\n return new Promise<boolean>(r => {\n img.addEventListener('load', () => {\n URL.revokeObjectURL(url);\n const canvas = ImageRenderer.createCanvas(window.document, w, h);\n canvas.getContext('2d')?.drawImage(img, 0, 0, w, h);\n this._storage.addImage(canvas);\n r(true);\n });\n img.src = url;\n // sanity measure to avoid terminal blocking from dangling promise\n // happens from corrupt data (onload never gets fired)\n setTimeout(() => r(true), 1000);\n });\n }\n return createImageBitmap(blob, { resizeWidth: w, resizeHeight: h })\n .then(bm => {\n this._storage.addImage(bm);\n return true;\n });\n }\n\n private _resize(w: number, h: number): [number, number] {\n const cw = this._renderer.dimensions?.css.cell.width || CELL_SIZE_DEFAULT.width;\n const ch = this._renderer.dimensions?.css.cell.height || CELL_SIZE_DEFAULT.height;\n const width = this._renderer.dimensions?.css.canvas.width || cw * this._coreTerminal.cols;\n const height = this._renderer.dimensions?.css.canvas.height || ch * this._coreTerminal.rows;\n\n const rw = this._dim(this._header.width!, width, cw);\n const rh = this._dim(this._header.height!, height, ch);\n if (!rw && !rh) {\n const wf = width / w; // TODO: should this respect initial cursor offset?\n const hf = (height - ch) / h; // TODO: fix offset issues from float cell height\n const f = Math.min(wf, hf);\n return f < 1 ? [w * f, h * f] : [w, h];\n }\n return !rw\n ? [w * rh / h, rh]\n : this._header.preserveAspectRatio || !rw || !rh\n ? [rw, h * rw / w] : [rw, rh];\n }\n\n private _dim(s: string, total: number, cdim: number): number {\n if (s === 'auto') return 0;\n if (s.endsWith('%')) return parseInt(s.slice(0, -1)) * total / 100;\n if (s.endsWith('px')) return parseInt(s.slice(0, -2));\n return parseInt(s) * cdim;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n// eslint-disable-next-line\ndeclare const Buffer: any;\n\n\nexport interface IHeaderFields {\n // base-64 encoded filename. Defaults to \"Unnamed file\".\n name: string;\n // File size in bytes. The file transfer will be canceled if this size is exceeded.\n size: number;\n /**\n * Optional width and height to render:\n * - N: N character cells.\n * - Npx: N pixels.\n * - N%: N percent of the session's width or height.\n * - auto: The image's inherent size will be used to determine an appropriate dimension.\n */\n width?: string;\n height?: string;\n // Optional, defaults to 1 respecting aspect ratio (width takes precedence).\n preserveAspectRatio?: number;\n // Optional, defaults to 0. If set to 1, the file will be displayed inline, else downloaded\n // (download not supported).\n inline?: number;\n}\n\nexport const enum HeaderState {\n START = 0,\n ABORT = 1,\n KEY = 2,\n VALUE = 3,\n END = 4\n}\n\n// field value decoders\n\n// ASCII bytes to string\nfunction toStr(data: Uint32Array): string {\n let s = '';\n for (let i = 0; i < data.length; ++i) {\n s += String.fromCharCode(data[i]);\n }\n return s;\n}\n\n// digits to integer\nfunction toInt(data: Uint32Array): number {\n let v = 0;\n for (let i = 0; i < data.length; ++i) {\n if (data[i] < 48 || data[i] > 57) {\n throw new Error('illegal char');\n }\n v = v * 10 + data[i] - 48;\n }\n return v;\n}\n\n// check for correct size entry\nfunction toSize(data: Uint32Array): string {\n const v = toStr(data);\n if (!v.match(/^((auto)|(\\d+?((px)|(%)){0,1}))$/)) {\n throw new Error('illegal size');\n }\n return v;\n}\n\n// name is base64 encoded utf-8\nfunction toName(data: Uint32Array): string {\n if (typeof Buffer !== 'undefined') {\n return Buffer.from(toStr(data), 'base64').toString();\n }\n const bs = atob(toStr(data));\n const b = new Uint8Array(bs.length);\n for (let i = 0; i < b.length; ++i) {\n b[i] = bs.charCodeAt(i);\n }\n return new TextDecoder().decode(b);\n}\n\nconst DECODERS: {[key: string]: (v: Uint32Array) => any} = {\n inline: toInt,\n size: toInt,\n name: toName,\n width: toSize,\n height: toSize,\n preserveAspectRatio: toInt\n};\n\n\nconst FILE_MARKER = [70, 105, 108, 101];\nconst MAX_FIELDCHARS = 1024;\n\n\nexport class HeaderParser {\n public state: HeaderState = HeaderState.START;\n private _buffer = new Uint32Array(MAX_FIELDCHARS);\n private _position = 0;\n private _key = '';\n public fields: {[key: string]: any} = {};\n\n public reset(): void {\n this._buffer.fill(0);\n this.state = HeaderState.START;\n this._position = 0;\n this.fields = {};\n this._key = '';\n }\n\n public parse(data: Uint32Array, start: number, end: number): number {\n let state = this.state;\n let pos = this._position;\n const buffer = this._buffer;\n if (state === HeaderState.ABORT || state === HeaderState.END) return -1;\n if (state === HeaderState.START && pos > 6) return -1;\n for (let i = start; i < end; ++i) {\n const c = data[i];\n switch (c) {\n case 59: // ;\n if (!this._storeValue(pos)) return this._a();\n state = HeaderState.KEY;\n pos = 0;\n break;\n case 61: // =\n if (state === HeaderState.START) {\n for (let k = 0; k < FILE_MARKER.length; ++k) {\n if (buffer[k] !== FILE_MARKER[k]) return this._a();\n }\n state = HeaderState.KEY;\n pos = 0;\n } else if (state === HeaderState.KEY) {\n if (!this._storeKey(pos)) return this._a();\n state = HeaderState.VALUE;\n pos = 0;\n } else if (state === HeaderState.VALUE) {\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n break;\n case 58: // :\n if (state === HeaderState.VALUE) {\n if (!this._storeValue(pos)) return this._a();\n }\n this.state = HeaderState.END;\n return i + 1;\n default:\n if (pos >= MAX_FIELDCHARS) return this._a();\n buffer[pos++] = c;\n }\n }\n this.state = state;\n this._position = pos;\n return -2;\n }\n\n private _a(): number {\n this.state = HeaderState.ABORT;\n return -1;\n }\n\n private _storeKey(pos: number): boolean {\n const k = toStr(this._buffer.subarray(0, pos));\n if (k) {\n this._key = k;\n this.fields[k] = null;\n return true;\n }\n return false;\n }\n\n private _storeValue(pos: number): boolean {\n if (this._key) {\n try {\n const v = this._buffer.slice(0, pos);\n this.fields[this._key] = DECODERS[this._key] ? DECODERS[this._key](v) : v;\n } catch (e) {\n return false;\n }\n return true;\n }\n return false;\n }\n}\n","/**\n * Copyright (c) 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\n\nexport type ImageType = 'image/png' | 'image/jpeg' | 'image/gif' | 'unsupported' | '';\n\nexport interface IMetrics {\n mime: ImageType;\n width: number;\n height: number;\n}\n\nexport const UNSUPPORTED_TYPE: IMetrics = {\n mime: 'unsupported',\n width: 0,\n height: 0\n};\n\nexport function imageType(d: Uint8Array): IMetrics {\n if (d.length < 24) {\n return UNSUPPORTED_TYPE;\n }\n const d32 = new Uint32Array(d.buffer, d.byteOffset, 6);\n // PNG: 89 50 4E 47 0D 0A 1A 0A (8 first bytes == magic number for PNG)\n // + first chunk must be IHDR\n if (d32[0] === 0x474E5089 && d32[1] === 0x0A1A0A0D && d32[3] === 0x52444849) {\n return {\n mime: 'image/png',\n width: d[16] << 24 | d[17] << 16 | d[18] << 8 | d[19],\n height: d[20] << 24 | d[21] << 16 | d[22] << 8 | d[23]\n };\n }\n // JPEG: FF D8 FF\n if (d[0] === 0xFF && d[1] === 0xD8 && d[2] === 0xFF) {\n const [width, height] = jpgSize(d);\n return { mime: 'image/jpeg', width, height };\n }\n // GIF: GIF87a or GIF89a\n if (d32[0] === 0x38464947 && (d[4] === 0x37 || d[4] === 0x39) && d[5] === 0x61) {\n return {\n mime: 'image/gif',\n width: d[7] << 8 | d[6],\n height: d[9] << 8 | d[8]\n };\n }\n return UNSUPPORTED_TYPE;\n}\n\nfunction jpgSize(d: Uint8Array): [number, number] {\n const len = d.length;\n let i = 4;\n let blockLength = d[i] << 8 | d[i + 1];\n while (true) {\n i += blockLength;\n if (i >= len) {\n // exhausted without size info\n return [0, 0];\n }\n if (d[i] !== 0xFF) {\n return [0, 0];\n }\n if (d[i + 1] === 0xC0 || d[i + 1] === 0xC2) {\n if (i + 8 < len) {\n return [\n d[i + 7] << 8 | d[i + 8],\n d[i + 5] << 8 | d[i + 6]\n ];\n }\n return [0, 0];\n }\n i += 2;\n blockLength = d[i] << 8 | d[i + 1];\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { toRGBA8888 } from 'sixel/lib/Colors';\nimport { IDisposable } from '@xterm/xterm';\nimport { ICellSize, ITerminalExt, IImageSpec, IRenderDimensions, IRenderService } from './Types';\nimport { Disposable, MutableDisposable, toDisposable } from 'vs/base/common/lifecycle';\n\nconst PLACEHOLDER_LENGTH = 4096;\nconst PLACEHOLDER_HEIGHT = 24;\n\n/**\n * ImageRenderer - terminal frontend extension:\n * - provide primitives for canvas, ImageData, Bitmap (static)\n * - add canvas layer to DOM (browser only for now)\n * - draw image tiles onRender\n */\nexport class ImageRenderer extends Disposable implements IDisposable {\n public canvas: HTMLCanvasElement | undefined;\n private _ctx: CanvasRenderingContext2D | null | undefined;\n private _placeholder: HTMLCanvasElement | undefined;\n private _placeholderBitmap: ImageBitmap | undefined;\n private _optionsRefresh = this._register(new MutableDisposable());\n private _oldOpen: ((parent: HTMLElement) => void) | undefined;\n private _renderService: IRenderService | undefined;\n private _oldSetRenderer: ((renderer: any) => void) | undefined;\n\n // drawing primitive - canvas\n public static createCanvas(localDocument: Document | undefined, width: number, height: number): HTMLCanvasElement {\n /**\n * NOTE: We normally dont care, from which document the canvas\n * gets created, so we can fall back to global document,\n * if the terminal has no document associated yet.\n * This way early image loads before calling .open keep working\n * (still discouraged though, as the metrics will be screwed up).\n * Only the DOM output canvas should be on the terminal's document,\n * which gets explicitly checked in `insertLayerToDom`.\n */\n const canvas = (localDocument || document).createElement('canvas');\n canvas.width = width | 0;\n canvas.height = height | 0;\n return canvas;\n }\n\n // drawing primitive - ImageData with optional buffer\n public static createImageData(ctx: CanvasRenderingContext2D, width: number, height: number, buffer?: ArrayBuffer): ImageData {\n if (typeof ImageData !== 'function') {\n const imgData = ctx.createImageData(width, height);\n if (buffer) {\n imgData.data.set(new Uint8ClampedArray(buffer, 0, width * height * 4));\n }\n return imgData;\n }\n return buffer\n ? new ImageData(new Uint8ClampedArray(buffer, 0, width * height * 4), width, height)\n : new ImageData(width, height);\n }\n\n // drawing primitive - ImageBitmap\n public static createImageBitmap(img: ImageBitmapSource): Promise<ImageBitmap | undefined> {\n if (typeof createImageBitmap !== 'function') {\n return Promise.resolve(undefined);\n }\n return createImageBitmap(img);\n }\n\n\n constructor(private _terminal: ITerminalExt) {\n super();\n this._oldOpen = this._terminal._core.open;\n this._terminal._core.open = (parent: HTMLElement): void => {\n this._oldOpen?.call(this._terminal._core, parent);\n this._open();\n };\n if (this._terminal._core.screenElement) {\n this._open();\n }\n // hack to spot fontSize changes\n this._optionsRefresh.value = this._terminal._core.optionsService.onOptionChange(option => {\n if (option === 'fontSize') {\n this.rescaleCanvas();\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n });\n this._register(toDisposable(() => {\n this.removeLayerFromDom();\n if (this._terminal._core && this._oldOpen) {\n this._terminal._core.open = this._oldOpen;\n this._oldOpen = undefined;\n }\n if (this._renderService && this._oldSetRenderer) {\n this._renderService.setRenderer = this._oldSetRenderer;\n this._oldSetRenderer = undefined;\n }\n this._renderService = undefined;\n this.canvas = undefined;\n this._ctx = undefined;\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }));\n }\n\n /**\n * Enable the placeholder.\n */\n public showPlaceholder(value: boolean): void {\n if (value) {\n if (!this._placeholder && this.cellSize.height !== -1) {\n this._createPlaceHolder(Math.max(this.cellSize.height + 1, PLACEHOLDER_HEIGHT));\n }\n } else {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n this._placeholder = undefined;\n }\n this._renderService?.refreshRows(0, this._terminal.rows);\n }\n\n /**\n * Dimensions of the terminal.\n * Forwarded from internal render service.\n */\n public get dimensions(): IRenderDimensions | undefined {\n return this._renderService?.dimensions;\n }\n\n /**\n * Current cell size (float).\n */\n public get cellSize(): ICellSize {\n return {\n width: this.dimensions?.css.cell.width || -1,\n height: this.dimensions?.css.cell.height || -1\n };\n }\n\n /**\n * Clear a region of the image layer canvas.\n */\n public clearLines(start: number, end: number): void {\n this._ctx?.clearRect(\n 0,\n start * (this.dimensions?.css.cell.height || 0),\n this.dimensions?.css.canvas.width || 0,\n (++end - start) * (this.dimensions?.css.cell.height || 0)\n );\n }\n\n /**\n * Clear whole image canvas.\n */\n public clearAll(): void {\n this._ctx?.clearRect(0, 0, this.canvas?.width || 0, this.canvas?.height || 0);\n }\n\n /**\n * Draw neighboring tiles on the image layer canvas.\n */\n public draw(imgSpec: IImageSpec, tileId: number, col: number, row: number, count: number = 1): void {\n if (!this._ctx) {\n return;\n }\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const dx = col * width;\n const dy = row * height;\n\n // safari bug: never access image source out of bounds\n const finalWidth = count * width + sx > img.width ? img.width - sx : count * width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n // Floor all pixel offsets to get stable tile mapping without any overflows.\n // Note: For not pixel perfect aligned cells like in the DOM renderer\n // this will move a tile slightly to the top/left (subpixel range, thus ignore it).\n // FIX #34: avoid striping on displays with pixelDeviceRatio != 1 by ceiling height and width\n this._ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.ceil(finalWidth), Math.ceil(finalHeight),\n Math.floor(dx), Math.floor(dy), Math.ceil(finalWidth), Math.ceil(finalHeight)\n );\n }\n\n /**\n * Extract a single tile from an image.\n */\n public extractTile(imgSpec: IImageSpec, tileId: number): HTMLCanvasElement | undefined {\n const { width, height } = this.cellSize;\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n this._rescaleImage(imgSpec, width, height);\n const img = imgSpec.actual!;\n const cols = Math.ceil(img.width / width);\n const sx = (tileId % cols) * width;\n const sy = Math.floor(tileId / cols) * height;\n const finalWidth = width + sx > img.width ? img.width - sx : width;\n const finalHeight = sy + height > img.height ? img.height - sy : height;\n\n const canvas = ImageRenderer.createCanvas(this.document, finalWidth, finalHeight);\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(\n img,\n Math.floor(sx), Math.floor(sy), Math.floor(finalWidth), Math.floor(finalHeight),\n 0, 0, Math.floor(finalWidth), Math.floor(finalHeight)\n );\n return canvas;\n }\n }\n\n /**\n * Draw a line with placeholder on the image layer canvas.\n */\n public drawPlaceholder(col: number, row: number, count: number = 1): void {\n if (this._ctx) {\n const { width, height } = this.cellSize;\n\n // Don't try to draw anything, if we cannot get valid renderer metrics.\n if (width === -1 || height === -1) {\n return;\n }\n\n if (!this._placeholder) {\n this._createPlaceHolder(Math.max(height + 1, PLACEHOLDER_HEIGHT));\n } else if (height >= this._placeholder!.height) {\n this._createPlaceHolder(height + 1);\n }\n if (!this._placeholder) return;\n this._ctx.drawImage(\n this._placeholderBitmap || this._placeholder!,\n col * width,\n (row * height) % 2 ? 0 : 1, // needs %2 offset correction\n width * count,\n height,\n col * width,\n row * height,\n width * count,\n height\n );\n }\n }\n\n /**\n * Rescale image layer canvas if needed.\n * Checked once from `ImageStorage.render`.\n */\n public rescaleCanvas(): void {\n if (!this.canvas) {\n return;\n }\n if (this.canvas.width !== this.dimensions!.css.canvas.width || this.canvas.height !== this.dimensions!.css.canvas.height) {\n this.canvas.width = this.dimensions!.css.canvas.width || 0;\n this.canvas.height = this.dimensions!.css.canvas.height || 0;\n }\n }\n\n /**\n * Rescale image in storage if needed.\n */\n private _rescaleImage(spec: IImageSpec, currentWidth: number, currentHeight: number): void {\n if (currentWidth === spec.actualCellSize.width && currentHeight === spec.actualCellSize.height) {\n return;\n }\n const { width: originalWidth, height: originalHeight } = spec.origCellSize;\n if (currentWidth === originalWidth && currentHeight === originalHeight) {\n spec.actual = spec.orig;\n spec.actualCellSize.width = originalWidth;\n spec.actualCellSize.height = originalHeight;\n return;\n }\n const canvas = ImageRenderer.createCanvas(\n this.document,\n Math.ceil(spec.orig!.width * currentWidth / originalWidth),\n Math.ceil(spec.orig!.height * currentHeight / originalHeight)\n );\n const ctx = canvas.getContext('2d');\n if (ctx) {\n ctx.drawImage(spec.orig!, 0, 0, canvas.width, canvas.height);\n spec.actual = canvas;\n spec.actualCellSize.width = currentWidth;\n spec.actualCellSize.height = currentHeight;\n }\n }\n\n /**\n * Lazy init for the renderer.\n */\n private _open(): void {\n this._renderService = this._terminal._core._renderService;\n this._oldSetRenderer = this._renderService.setRenderer.bind(this._renderService);\n this._renderService.setRenderer = (renderer: any) => {\n this.removeLayerFromDom();\n this._oldSetRenderer?.call(this._renderService, renderer);\n };\n }\n\n public insertLayerToDom(): void {\n // make sure that the terminal is attached to a document and to DOM\n if (this.document && this._terminal._core.screenElement) {\n if (!this.canvas) {\n this.canvas = ImageRenderer.createCanvas(\n this.document, this.dimensions?.css.canvas.width || 0,\n this.dimensions?.css.canvas.height || 0\n );\n this.canvas.classList.add('xterm-image-layer');\n this._terminal._core.screenElement.appendChild(this.canvas);\n this._ctx = this.canvas.getContext('2d', { alpha: true, desynchronized: true });\n this.clearAll();\n }\n } else {\n console.warn('image addon: cannot insert output canvas to DOM, missing document or screenElement');\n }\n }\n\n public removeLayerFromDom(): void {\n if (this.canvas) {\n this._ctx = undefined;\n this.canvas.remove();\n this.canvas = undefined;\n }\n }\n\n private _createPlaceHolder(height: number = PLACEHOLDER_HEIGHT): void {\n this._placeholderBitmap?.close();\n this._placeholderBitmap = undefined;\n\n // create blueprint to fill placeholder with\n const bWidth = 32; // must be 2^n\n const blueprint = ImageRenderer.createCanvas(this.document, bWidth, height);\n const ctx = blueprint.getContext('2d', { alpha: false });\n if (!ctx) return;\n const imgData = ImageRenderer.createImageData(ctx, bWidth, height);\n const d32 = new Uint32Array(imgData.data.buffer);\n const black = toRGBA8888(0, 0, 0);\n const white = toRGBA8888(255, 255, 255);\n d32.fill(black);\n for (let y = 0; y < height; ++y) {\n const shift = y % 2;\n const offset = y * bWidth;\n for (let x = 0; x < bWidth; x += 2) {\n d32[offset + x + shift] = white;\n }\n }\n ctx.putImageData(imgData, 0, 0);\n\n // create placeholder line, width aligned to blueprint width\n const width = (screen.width + bWidth - 1) & ~(bWidth - 1) || PLACEHOLDER_LENGTH;\n this._placeholder = ImageRenderer.createCanvas(this.document, width, height);\n const ctx2 = this._placeholder.getContext('2d', { alpha: false });\n if (!ctx2) {\n this._placeholder = undefined;\n return;\n }\n for (let i = 0; i < width; i += bWidth) {\n ctx2.drawImage(blueprint, i, 0);\n }\n ImageRenderer.createImageBitmap(this._placeholder).then(bitmap => this._placeholderBitmap = bitmap);\n }\n\n public get document(): Document | undefined {\n return this._terminal._core._coreBrowserService?.window.document;\n }\n}\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { IDisposable } from '@xterm/xterm';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ITerminalExt, IExtendedAttrsImage, IImageAddonOptions, IImageSpec, IBufferLineExt, BgFlags, Cell, Content, ICellSize, ExtFlags, Attributes, UnderlineStyle } from './Types';\n\n\n// fallback default cell size\nexport const CELL_SIZE_DEFAULT: ICellSize = {\n width: 7,\n height: 14\n};\n\n/**\n * Extend extended attribute to also hold image tile information.\n *\n * Object definition is copied from base repo to fully mimick its behavior.\n * Image data is added as additional public properties `imageId` and `tileId`.\n */\nclass ExtendedAttrsImage implements IExtendedAttrsImage {\n private _ext: number = 0;\n public get ext(): number {\n if (this._urlId) {\n return (\n (this._ext & ~ExtFlags.UNDERLINE_STYLE) |\n (this.underlineStyle << 26)\n );\n }\n return this._ext;\n }\n public set ext(value: number) { this._ext = value; }\n\n public get underlineStyle(): UnderlineStyle {\n // Always return the URL style if it has one\n if (this._urlId) {\n return UnderlineStyle.DASHED;\n }\n return (this._ext & ExtFlags.UNDERLINE_STYLE) >> 26;\n }\n public set underlineStyle(value: UnderlineStyle) {\n this._ext &= ~ExtFlags.UNDERLINE_STYLE;\n this._ext |= (value << 26) & ExtFlags.UNDERLINE_STYLE;\n }\n\n public get underlineColor(): number {\n return this._ext & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n public set underlineColor(value: number) {\n this._ext &= ~(Attributes.CM_MASK | Attributes.RGB_MASK);\n this._ext |= value & (Attributes.CM_MASK | Attributes.RGB_MASK);\n }\n\n public get underlineVariantOffset(): number {\n const val = (this._ext & ExtFlags.VARIANT_OFFSET) >> 29;\n if (val < 0) {\n return val ^ 0xFFFFFFF8;\n }\n return val;\n }\n public set underlineVariantOffset(value: number) {\n this._ext &= ~ExtFlags.VARIANT_OFFSET;\n this._ext |= (value << 29) & ExtFlags.VARIANT_OFFSET;\n }\n\n private _urlId: number = 0;\n public get urlId(): number {\n return this._urlId;\n }\n public set urlId(value: number) {\n this._urlId = value;\n }\n\n constructor(\n ext: number = 0,\n urlId: number = 0,\n public imageId = -1,\n public tileId = -1\n ) {\n this._ext = ext;\n this._urlId = urlId;\n }\n\n public clone(): IExtendedAttrsImage {\n /**\n * Technically we dont need a clone variant of ExtendedAttrsImage,\n * as we never clone a cell holding image data.\n * Note: Clone is only meant to be used by the InputHandler for\n * sticky attributes, which is never the case for image data.\n * We still provide a proper clone method to reflect the full ext attr\n * state in case there are future use cases for clone.\n */\n return new ExtendedAttrsImage(this._ext, this._urlId, this.imageId, this.tileId);\n }\n\n public isEmpty(): boolean {\n return this.underlineStyle === UnderlineStyle.NONE && this._urlId === 0 && this.imageId === -1;\n }\n}\nconst EMPTY_ATTRS = new ExtendedAttrsImage();\n\n\n/**\n * ImageStorage - extension of CoreTerminal:\n * - hold image data\n * - write/read image data to/from buffer\n *\n * TODO: image composition for overwrites\n */\nexport class ImageStorage implements IDisposable {\n // storage\n private _images: Map<number, IImageSpec> = new Map();\n // last used id\n private _lastId = 0;\n // last evicted id\n private _lowestId = 0;\n // whether a full clear happened before\n private _fullyCleared = false;\n // whether render should do a full clear\n private _needsFullClear = false;\n // hard limit of stored pixels (fallback limit of 10 MB)\n private _pixelLimit: number = 2500000;\n\n private _viewportMetrics: { cols: number, rows: number };\n\n constructor(\n private _terminal: ITerminalExt,\n private _renderer: ImageRenderer,\n private _opts: IImageAddonOptions\n ) {\n try {\n this.setLimit(this._opts.storageLimit);\n } catch (e: any) {\n console.error(e.message);\n console.warn(`storageLimit is set to ${this.getLimit()} MB`);\n }\n this._viewportMetrics = {\n cols: this._terminal.cols,\n rows: this._terminal.rows\n };\n }\n\n public dispose(): void {\n this.reset();\n }\n\n public reset(): void {\n for (const spec of this._images.values()) {\n spec.marker?.dispose();\n }\n // NOTE: marker.dispose above already calls ImageBitmap.close\n // therefore we can just wipe the map here\n this._images.clear();\n this._renderer.clearAll();\n }\n\n public getLimit(): number {\n return this._pixelLimit * 4 / 1000000;\n }\n\n public setLimit(value: number): void {\n if (value < 0.5 || value > 1000) {\n throw RangeError('invalid storageLimit, should be at least 0.5 MB and not exceed 1G');\n }\n this._pixelLimit = (value / 4 * 1000000) >>> 0;\n this._evictOldest(0);\n }\n\n public getUsage(): number {\n return this._getStoredPixels() * 4 / 1000000;\n }\n\n private _getStoredPixels(): number {\n let storedPixels = 0;\n for (const spec of this._images.values()) {\n if (spec.orig) {\n storedPixels += spec.orig.width * spec.orig.height;\n if (spec.actual && spec.actual !== spec.orig) {\n storedPixels += spec.actual.width * spec.actual.height;\n }\n }\n }\n return storedPixels;\n }\n\n private _delImg(id: number): void {\n const spec = this._images.get(id);\n this._images.delete(id);\n // FIXME: really ugly workaround to get bitmaps deallocated :(\n if (spec && window.ImageBitmap && spec.orig instanceof ImageBitmap) {\n spec.orig.close();\n }\n }\n\n /**\n * Wipe canvas and images on alternate buffer.\n */\n public wipeAlternate(): void {\n // remove all alternate tagged images\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate') {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n // mark canvas to be wiped on next render\n this._needsFullClear = true;\n this._fullyCleared = false;\n }\n\n /**\n * Only advance text cursor.\n * This is an edge case from empty sixels carrying only a height but no pixels.\n * Partially fixes https://github.com/jerch/xterm-addon-image/issues/37.\n */\n public advanceCursor(height: number): void {\n if (this._opts.sixelScrolling) {\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const rows = Math.ceil(height / cellSize.height);\n for (let i = 1; i < rows; ++i) {\n this._terminal._core._inputHandler.lineFeed();\n }\n }\n }\n\n /**\n * Method to add an image to the storage.\n */\n public addImage(img: HTMLCanvasElement | ImageBitmap): void {\n // never allow storage to exceed memory limit\n this._evictOldest(img.width * img.height);\n\n // calc rows x cols needed to display the image\n let cellSize = this._renderer.cellSize;\n if (cellSize.width === -1 || cellSize.height === -1) {\n cellSize = CELL_SIZE_DEFAULT;\n }\n const cols = Math.ceil(img.width / cellSize.width);\n const rows = Math.ceil(img.height / cellSize.height);\n\n const imageId = ++this._lastId;\n\n const buffer = this._terminal._core.buffer;\n const termCols = this._terminal.cols;\n const termRows = this._terminal.rows;\n const originX = buffer.x;\n const originY = buffer.y;\n let offset = originX;\n let tileCount = 0;\n\n if (!this._opts.sixelScrolling) {\n buffer.x = 0;\n buffer.y = 0;\n offset = 0;\n }\n\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(buffer.y + buffer.ybase);\n for (let col = 0; col < cols; ++col) {\n if (offset + col >= termCols) break;\n this._writeToCell(line as IBufferLineExt, offset + col, imageId, row * cols + col);\n tileCount++;\n }\n if (this._opts.sixelScrolling) {\n if (row < rows - 1) this._terminal._core._inputHandler.lineFeed();\n } else {\n if (++buffer.y >= termRows) break;\n }\n buffer.x = offset;\n }\n this._terminal._core._inputHandler._dirtyRowTracker.markDirty(buffer.y);\n\n // cursor positioning modes\n if (this._opts.sixelScrolling) {\n buffer.x = offset;\n } else {\n buffer.x = originX;\n buffer.y = originY;\n }\n\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.tileCount < 1) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n\n // eviction marker:\n // delete the image when the marker gets disposed\n const endMarker = this._terminal.registerMarker(0);\n endMarker?.onDispose(() => {\n const spec = this._images.get(imageId);\n if (spec) {\n this._delImg(imageId);\n }\n });\n\n // since markers do not work on alternate for some reason,\n // we evict images here manually\n if (this._terminal.buffer.active.type === 'alternate') {\n this._evictOnAlternate();\n }\n\n // create storage entry\n const imgSpec: IImageSpec = {\n orig: img,\n origCellSize: cellSize,\n actual: img,\n actualCellSize: { ...cellSize }, // clone needed, since later modified\n marker: endMarker || undefined,\n tileCount,\n bufferType: this._terminal.buffer.active.type\n };\n\n // finally add the image\n this._images.set(imageId, imgSpec);\n }\n\n\n /**\n * Render method. Collects buffer information and triggers\n * canvas updates.\n */\n // TODO: Should we move this to the ImageRenderer?\n public render(range: { start: number, end: number }): void {\n // setup image canvas in case we have none yet, but have images in store\n if (!this._renderer.canvas && this._images.size) {\n this._renderer.insertLayerToDom();\n // safety measure - in case we cannot spawn a canvas at all, just exit\n if (!this._renderer.canvas) {\n return;\n }\n }\n // rescale if needed\n this._renderer.rescaleCanvas();\n // exit early if we dont have any images to test for\n if (!this._images.size) {\n if (!this._fullyCleared) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n if (this._renderer.canvas) {\n this._renderer.removeLayerFromDom();\n }\n return;\n }\n\n // buffer switches force a full clear\n if (this._needsFullClear) {\n this._renderer.clearAll();\n this._fullyCleared = true;\n this._needsFullClear = false;\n }\n\n const { start, end } = range;\n const buffer = this._terminal._core.buffer;\n const cols = this._terminal._core.cols;\n\n // clear drawing area\n this._renderer.clearLines(start, end);\n\n // walk all cells in viewport and draw tiles found\n for (let row = start; row <= end; ++row) {\n const line = buffer.lines.get(row + buffer.ydisp) as IBufferLineExt;\n if (!line) return;\n for (let col = 0; col < cols; ++col) {\n if (line.getBg(col) & BgFlags.HAS_EXTENDED) {\n let e: IExtendedAttrsImage = line._extendedAttrs[col] || EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (e.tileId !== -1) {\n const startTile = e.tileId;\n const startCol = col;\n let count = 1;\n /**\n * merge tiles to the right into a single draw call, if:\n * - not at end of line\n * - cell has same image id\n * - cell has consecutive tile id\n */\n while (\n ++col < cols\n && (line.getBg(col) & BgFlags.HAS_EXTENDED)\n && (e = line._extendedAttrs[col] || EMPTY_ATTRS)\n && (e.imageId === imageId)\n && (e.tileId === startTile + count)\n ) {\n count++;\n }\n col--;\n if (imgSpec) {\n if (imgSpec.actual) {\n this._renderer.draw(imgSpec, startTile, startCol, row, count);\n }\n } else if (this._opts.showPlaceholder) {\n this._renderer.drawPlaceholder(startCol, row, count);\n }\n this._fullyCleared = false;\n }\n }\n }\n }\n }\n\n public viewportResize(metrics: { cols: number, rows: number }): void {\n // exit early if we have nothing in storage\n if (!this._images.size) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // handle only viewport width enlargements, exit all other cases\n // TODO: needs patch for tile counter\n if (this._viewportMetrics.cols >= metrics.cols) {\n this._viewportMetrics = metrics;\n return;\n }\n\n // walk scrollbuffer at old col width to find all possible expansion matches\n const buffer = this._terminal._core.buffer;\n const rows = buffer.lines.length;\n const oldCol = this._viewportMetrics.cols - 1;\n for (let row = 0; row < rows; ++row) {\n const line = buffer.lines.get(row) as IBufferLineExt;\n if (line.getBg(oldCol) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[oldCol] || EMPTY_ATTRS;\n const imageId = e.imageId;\n if (imageId === undefined || imageId === -1) {\n continue;\n }\n const imgSpec = this._images.get(imageId);\n if (!imgSpec) {\n continue;\n }\n // found an image tile at oldCol, check if it qualifies for right exapansion\n const tilesPerRow = Math.ceil((imgSpec.actual?.width || 0) / imgSpec.actualCellSize.width);\n if ((e.tileId % tilesPerRow) + 1 >= tilesPerRow) {\n continue;\n }\n // expand only if right side is empty (nothing got wrapped from below)\n let hasData = false;\n for (let rightCol = oldCol + 1; rightCol > metrics.cols; ++rightCol) {\n if (line._data[rightCol * Cell.SIZE + Cell.CONTENT] & Content.HAS_CONTENT_MASK) {\n hasData = true;\n break;\n }\n }\n if (hasData) {\n continue;\n }\n // do right expansion on terminal buffer\n const end = Math.min(metrics.cols, tilesPerRow - (e.tileId % tilesPerRow) + oldCol);\n let lastTile = e.tileId;\n for (let expandCol = oldCol + 1; expandCol < end; ++expandCol) {\n this._writeToCell(line as IBufferLineExt, expandCol, imageId, ++lastTile);\n imgSpec.tileCount++;\n }\n }\n }\n // store new viewport metrics\n this._viewportMetrics = metrics;\n }\n\n /**\n * Retrieve original canvas at buffer position.\n */\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] || EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1) {\n const orig = this._images.get(e.imageId)?.orig;\n if (window.ImageBitmap && orig instanceof ImageBitmap) {\n const canvas = ImageRenderer.createCanvas(window.document, orig.width, orig.height);\n canvas.getContext('2d')?.drawImage(orig, 0, 0, orig.width, orig.height);\n return canvas;\n }\n return orig as HTMLCanvasElement;\n }\n }\n }\n\n /**\n * Extract active single tile at buffer position.\n */\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n const buffer = this._terminal._core.buffer;\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (line && line.getBg(x) & BgFlags.HAS_EXTENDED) {\n const e: IExtendedAttrsImage = line._extendedAttrs[x] || EMPTY_ATTRS;\n if (e.imageId && e.imageId !== -1 && e.tileId !== -1) {\n const spec = this._images.get(e.imageId);\n if (spec) {\n return this._renderer.extractTile(spec, e.tileId);\n }\n }\n }\n }\n\n // TODO: Do we need some blob offloading tricks here to avoid early eviction?\n // also see https://stackoverflow.com/questions/28307789/is-there-any-limitation-on-javascript-max-blob-size\n private _evictOldest(room: number): number {\n const used = this._getStoredPixels();\n let current = used;\n while (this._pixelLimit < current + room && this._images.size) {\n const spec = this._images.get(++this._lowestId);\n if (spec && spec.orig) {\n current -= spec.orig.width * spec.orig.height;\n if (spec.actual && spec.orig !== spec.actual) {\n current -= spec.actual.width * spec.actual.height;\n }\n spec.marker?.dispose();\n this._delImg(this._lowestId);\n }\n }\n return used - current;\n }\n\n private _writeToCell(line: IBufferLineExt, x: number, imageId: number, tileId: number): void {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const old = line._extendedAttrs[x];\n if (old) {\n if (old.imageId !== undefined) {\n // found an old ExtendedAttrsImage, since we know that\n // they are always isolated instances (single cell usage),\n // we can re-use it and just update their id entries\n const oldSpec = this._images.get(old.imageId);\n if (oldSpec) {\n // early eviction for in-viewport overwrites\n oldSpec.tileCount--;\n }\n old.imageId = imageId;\n old.tileId = tileId;\n return;\n }\n // found a plain ExtendedAttrs instance, clone it to new entry\n line._extendedAttrs[x] = new ExtendedAttrsImage(old.ext, old.urlId, imageId, tileId);\n return;\n }\n }\n // fall-through: always create new ExtendedAttrsImage entry\n line._data[x * Cell.SIZE + Cell.BG] |= BgFlags.HAS_EXTENDED;\n line._extendedAttrs[x] = new ExtendedAttrsImage(0, 0, imageId, tileId);\n }\n\n private _evictOnAlternate(): void {\n // nullify tile count of all images on alternate buffer\n for (const spec of this._images.values()) {\n if (spec.bufferType === 'alternate') {\n spec.tileCount = 0;\n }\n }\n // re-count tiles on whole buffer\n const buffer = this._terminal._core.buffer;\n for (let y = 0; y < this._terminal.rows; ++y) {\n const line = buffer.lines.get(y) as IBufferLineExt;\n if (!line) {\n continue;\n }\n for (let x = 0; x < this._terminal.cols; ++x) {\n if (line._data[x * Cell.SIZE + Cell.BG] & BgFlags.HAS_EXTENDED) {\n const imgId = line._extendedAttrs[x]?.imageId;\n if (imgId) {\n const spec = this._images.get(imgId);\n if (spec) {\n spec.tileCount++;\n }\n }\n }\n }\n }\n // deleted images with zero tile count\n const zero = [];\n for (const [id, spec] of this._images.entries()) {\n if (spec.bufferType === 'alternate' && !spec.tileCount) {\n spec.marker?.dispose();\n zero.push(id);\n }\n }\n for (const id of zero) {\n this._delImg(id);\n }\n }\n}\n","/**\n * Copyright (c) 2020, 2023 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport { ImageStorage } from './ImageStorage';\nimport { IDcsHandler, IParams, IImageAddonOptions, ITerminalExt, AttributeData, IResetHandler, ReadonlyColorSet } from './Types';\nimport { toRGBA8888, BIG_ENDIAN, PALETTE_ANSI_256, PALETTE_VT340_COLOR } from 'sixel/lib/Colors';\nimport { RGBA8888 } from 'sixel/lib/Types';\nimport { ImageRenderer } from './ImageRenderer';\n\nimport { DecoderAsync, Decoder } from 'sixel/lib/Decoder';\n\n// always free decoder ressources after decoding if it exceeds this limit\nconst MEM_PERMA_LIMIT = 4194304; // 1024 pixels * 1024 pixels * 4 channels = 4MB\n\n// custom default palette: VT340 (lower 16 colors) + ANSI256 (up to 256) + zeroed (up to 4096)\nconst DEFAULT_PALETTE = PALETTE_ANSI_256;\nDEFAULT_PALETTE.set(PALETTE_VT340_COLOR);\n\n\nexport class SixelHandler implements IDcsHandler, IResetHandler {\n private _size = 0;\n private _aborted = false;\n private _dec: Decoder | undefined;\n\n constructor(\n private readonly _opts: IImageAddonOptions,\n private readonly _storage: ImageStorage,\n private readonly _coreTerminal: ITerminalExt\n ) {\n DecoderAsync({\n memoryLimit: this._opts.pixelLimit * 4,\n palette: DEFAULT_PALETTE,\n paletteLimit: this._opts.sixelPaletteLimit\n }).then(d => this._dec = d);\n }\n\n public reset(): void {\n /**\n * reset sixel decoder to defaults:\n * - release all memory\n * - nullify palette (4096)\n * - apply default palette (256)\n */\n if (this._dec) {\n this._dec.release();\n // FIXME: missing interface on decoder to nullify full palette\n (this._dec as any)._palette.fill(0);\n this._dec.init(0, DEFAULT_PALETTE, this._opts.sixelPaletteLimit);\n }\n }\n\n public hook(params: IParams): void {\n this._size = 0;\n this._aborted = false;\n if (this._dec) {\n const fillColor = params.params[1] === 1 ? 0 : extractActiveBg(\n this._coreTerminal._core._inputHandler._curAttrData,\n this._coreTerminal._core._themeService?.colors);\n this._dec.init(fillColor, null, this._opts.sixelPaletteLimit);\n }\n }\n\n public put(data: Uint32Array, start: number, end: number): void {\n if (this._aborted || !this._dec) {\n return;\n }\n this._size += end - start;\n if (this._size > this._opts.sixelSizeLimit) {\n console.warn(`SIXEL: too much data, aborting`);\n this._aborted = true;\n this._dec.release();\n return;\n }\n try {\n this._dec.decode(data, start, end);\n } catch (e) {\n console.warn(`SIXEL: error while decoding image - ${e}`);\n this._aborted = true;\n this._dec.release();\n }\n }\n\n public unhook(success: boolean): boolean | Promise<boolean> {\n if (this._aborted || !success || !this._dec) {\n return true;\n }\n\n const width = this._dec.width;\n const height = this._dec.height;\n\n // partial fix for https://github.com/jerch/xterm-addon-image/issues/37\n if (!width || ! height) {\n if (height) {\n this._storage.advanceCursor(height);\n }\n return true;\n }\n\n const canvas = ImageRenderer.createCanvas(undefined, width, height);\n canvas.getContext('2d')?.putImageData(new ImageData(this._dec.data8, width, height), 0, 0);\n if (this._dec.memoryUsage > MEM_PERMA_LIMIT) {\n this._dec.release();\n }\n this._storage.addImage(canvas);\n return true;\n }\n}\n\n\n/**\n * Some helpers to extract current terminal colors.\n */\n\n// get currently active background color from terminal\n// also respect INVERSE setting\nfunction extractActiveBg(attr: AttributeData, colors: ReadonlyColorSet | undefined): RGBA8888 {\n let bg = 0;\n if (!colors) {\n // FIXME: theme service is prolly not available yet,\n // happens if .open() was not called yet (bug in core?)\n return bg;\n }\n if (attr.isInverse()) {\n if (attr.isFgDefault()) {\n bg = convertLe(colors.foreground.rgba);\n } else if (attr.isFgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getFgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getFgColor()].rgba);\n }\n } else {\n if (attr.isBgDefault()) {\n bg = convertLe(colors.background.rgba);\n } else if (attr.isBgRGB()) {\n const t = (attr.constructor as typeof AttributeData).toColorRGB(attr.getBgColor());\n bg = toRGBA8888(...t);\n } else {\n bg = convertLe(colors.ansi[attr.getBgColor()].rgba);\n }\n }\n return bg;\n}\n\n// rgba values on the color managers are always in BE, thus convert to LE\nfunction convertLe(color: number): RGBA8888 {\n if (BIG_ENDIAN) return color;\n return (color & 0xFF) << 24 | (color >>> 8 & 0xFF) << 16 | (color >>> 16 & 0xFF) << 8 | color >>> 24 & 0xFF;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Permutation = exports.CallbackIterable = exports.ArrayQueue = exports.booleanComparator = exports.numberComparator = exports.CompareResult = void 0;\nexports.tail = tail;\nexports.tail2 = tail2;\nexports.equals = equals;\nexports.removeFastWithoutKeepingOrder = removeFastWithoutKeepingOrder;\nexports.binarySearch = binarySearch;\nexports.binarySearch2 = binarySearch2;\nexports.quickSelect = quickSelect;\nexports.groupBy = groupBy;\nexports.groupAdjacentBy = groupAdjacentBy;\nexports.forEachAdjacent = forEachAdjacent;\nexports.forEachWithNeighbors = forEachWithNeighbors;\nexports.sortedDiff = sortedDiff;\nexports.delta = delta;\nexports.top = top;\nexports.topAsync = topAsync;\nexports.coalesce = coalesce;\nexports.coalesceInPlace = coalesceInPlace;\nexports.move = move;\nexports.isFalsyOrEmpty = isFalsyOrEmpty;\nexports.isNonEmptyArray = isNonEmptyArray;\nexports.distinct = distinct;\nexports.uniqueFilter = uniqueFilter;\nexports.firstOrDefault = firstOrDefault;\nexports.lastOrDefault = lastOrDefault;\nexports.commonPrefixLength = commonPrefixLength;\nexports.range = range;\nexports.index = index;\nexports.insert = insert;\nexports.remove = remove;\nexports.arrayInsert = arrayInsert;\nexports.shuffle = shuffle;\nexports.pushToStart = pushToStart;\nexports.pushToEnd = pushToEnd;\nexports.pushMany = pushMany;\nexports.mapArrayOrNot = mapArrayOrNot;\nexports.asArray = asArray;\nexports.getRandomElement = getRandomElement;\nexports.insertInto = insertInto;\nexports.splice = splice;\nexports.compareBy = compareBy;\nexports.tieBreakComparators = tieBreakComparators;\nexports.reverseOrder = reverseOrder;\nconst errors_1 = require(\"vs/base/common/errors\");\nconst arraysFind_1 = require(\"./arraysFind\");\n/**\n * Returns the last element of an array.\n * @param array The array.\n * @param n Which element from the end (default is zero).\n */\nfunction tail(array, n = 0) {\n return array[array.length - (1 + n)];\n}\nfunction tail2(arr) {\n if (arr.length === 0) {\n throw new Error('Invalid tail call');\n }\n return [arr.slice(0, arr.length - 1), arr[arr.length - 1]];\n}\nfunction equals(one, other, itemEquals = (a, b) => a === b) {\n if (one === other) {\n return true;\n }\n if (!one || !other) {\n return false;\n }\n if (one.length !== other.length) {\n return false;\n }\n for (let i = 0, len = one.length; i < len; i++) {\n if (!itemEquals(one[i], other[i])) {\n return false;\n }\n }\n return true;\n}\n/**\n * Remove the element at `index` by replacing it with the last element. This is faster than `splice`\n * but changes the order of the array\n */\nfunction removeFastWithoutKeepingOrder(array, index) {\n const last = array.length - 1;\n if (index < last) {\n array[index] = array[last];\n }\n array.pop();\n}\n/**\n * Performs a binary search algorithm over a sorted array.\n *\n * @param array The array being searched.\n * @param key The value we search for.\n * @param comparator A function that takes two array elements and returns zero\n * if they are equal, a negative number if the first element precedes the\n * second one in the sorting order, or a positive number if the second element\n * precedes the first one.\n * @return See {@link binarySearch2}\n */\nfunction binarySearch(array, key, comparator) {\n return binarySearch2(array.length, i => comparator(array[i], key));\n}\n/**\n * Performs a binary search algorithm over a sorted collection. Useful for cases\n * when we need to perform a binary search over something that isn't actually an\n * array, and converting data to an array would defeat the use of binary search\n * in the first place.\n *\n * @param length The collection length.\n * @param compareToKey A function that takes an index of an element in the\n * collection and returns zero if the value at this index is equal to the\n * search key, a negative number if the value precedes the search key in the\n * sorting order, or a positive number if the search key precedes the value.\n * @return A non-negative index of an element, if found. If not found, the\n * result is -(n+1) (or ~n, using bitwise notation), where n is the index\n * where the key should be inserted to maintain the sorting order.\n */\nfunction binarySearch2(length, compareToKey) {\n let low = 0, high = length - 1;\n while (low <= high) {\n const mid = ((low + high) / 2) | 0;\n const comp = compareToKey(mid);\n if (comp < 0) {\n low = mid + 1;\n }\n else if (comp > 0) {\n high = mid - 1;\n }\n else {\n return mid;\n }\n }\n return -(low + 1);\n}\nfunction quickSelect(nth, data, compare) {\n nth = nth | 0;\n if (nth >= data.length) {\n throw new TypeError('invalid index');\n }\n const pivotValue = data[Math.floor(data.length * Math.random())];\n const lower = [];\n const higher = [];\n const pivots = [];\n for (const value of data) {\n const val = compare(value, pivotValue);\n if (val < 0) {\n lower.push(value);\n }\n else if (val > 0) {\n higher.push(value);\n }\n else {\n pivots.push(value);\n }\n }\n if (nth < lower.length) {\n return quickSelect(nth, lower, compare);\n }\n else if (nth < lower.length + pivots.length) {\n return pivots[0];\n }\n else {\n return quickSelect(nth - (lower.length + pivots.length), higher, compare);\n }\n}\nfunction groupBy(data, compare) {\n const result = [];\n let currentGroup = undefined;\n for (const element of data.slice(0).sort(compare)) {\n if (!currentGroup || compare(currentGroup[0], element) !== 0) {\n currentGroup = [element];\n result.push(currentGroup);\n }\n else {\n currentGroup.push(element);\n }\n }\n return result;\n}\n/**\n * Splits the given items into a list of (non-empty) groups.\n * `shouldBeGrouped` is used to decide if two consecutive items should be in the same group.\n * The order of the items is preserved.\n */\nfunction* groupAdjacentBy(items, shouldBeGrouped) {\n let currentGroup;\n let last;\n for (const item of items) {\n if (last !== undefined && shouldBeGrouped(last, item)) {\n currentGroup.push(item);\n }\n else {\n if (currentGroup) {\n yield currentGroup;\n }\n currentGroup = [item];\n }\n last = item;\n }\n if (currentGroup) {\n yield currentGroup;\n }\n}\nfunction forEachAdjacent(arr, f) {\n for (let i = 0; i <= arr.length; i++) {\n f(i === 0 ? undefined : arr[i - 1], i === arr.length ? undefined : arr[i]);\n }\n}\nfunction forEachWithNeighbors(arr, f) {\n for (let i = 0; i < arr.length; i++) {\n f(i === 0 ? undefined : arr[i - 1], arr[i], i + 1 === arr.length ? undefined : arr[i + 1]);\n }\n}\n/**\n * Diffs two *sorted* arrays and computes the splices which apply the diff.\n */\nfunction sortedDiff(before, after, compare) {\n const result = [];\n function pushSplice(start, deleteCount, toInsert) {\n if (deleteCount === 0 && toInsert.length === 0) {\n return;\n }\n const latest = result[result.length - 1];\n if (latest && latest.start + latest.deleteCount === start) {\n latest.deleteCount += deleteCount;\n latest.toInsert.push(...toInsert);\n }\n else {\n result.push({ start, deleteCount, toInsert });\n }\n }\n let beforeIdx = 0;\n let afterIdx = 0;\n while (true) {\n if (beforeIdx === before.length) {\n pushSplice(beforeIdx, 0, after.slice(afterIdx));\n break;\n }\n if (afterIdx === after.length) {\n pushSplice(beforeIdx, before.length - beforeIdx, []);\n break;\n }\n const beforeElement = before[beforeIdx];\n const afterElement = after[afterIdx];\n const n = compare(beforeElement, afterElement);\n if (n === 0) {\n // equal\n beforeIdx += 1;\n afterIdx += 1;\n }\n else if (n < 0) {\n // beforeElement is smaller -> before element removed\n pushSplice(beforeIdx, 1, []);\n beforeIdx += 1;\n }\n else if (n > 0) {\n // beforeElement is greater -> after element added\n pushSplice(beforeIdx, 0, [afterElement]);\n afterIdx += 1;\n }\n }\n return result;\n}\n/**\n * Takes two *sorted* arrays and computes their delta (removed, added elements).\n * Finishes in `Math.min(before.length, after.length)` steps.\n */\nfunction delta(before, after, compare) {\n const splices = sortedDiff(before, after, compare);\n const removed = [];\n const added = [];\n for (const splice of splices) {\n removed.push(...before.slice(splice.start, splice.start + splice.deleteCount));\n added.push(...splice.toInsert);\n }\n return { removed, added };\n}\n/**\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @return The first n elements from array when sorted with compare.\n */\nfunction top(array, compare, n) {\n if (n === 0) {\n return [];\n }\n const result = array.slice(0, n).sort(compare);\n topStep(array, compare, result, n, array.length);\n return result;\n}\n/**\n * Asynchronous variant of `top()` allowing for splitting up work in batches between which the event loop can run.\n *\n * Returns the top N elements from the array.\n *\n * Faster than sorting the entire array when the array is a lot larger than N.\n *\n * @param array The unsorted array.\n * @param compare A sort function for the elements.\n * @param n The number of elements to return.\n * @param batch The number of elements to examine before yielding to the event loop.\n * @return The first n elements from array when sorted with compare.\n */\nfunction topAsync(array, compare, n, batch, token) {\n if (n === 0) {\n return Promise.resolve([]);\n }\n return new Promise((resolve, reject) => {\n (async () => {\n const o = array.length;\n const result = array.slice(0, n).sort(compare);\n for (let i = n, m = Math.min(n + batch, o); i < o; i = m, m = Math.min(m + batch, o)) {\n if (i > n) {\n await new Promise(resolve => setTimeout(resolve)); // any other delay function would starve I/O\n }\n if (token && token.isCancellationRequested) {\n throw new errors_1.CancellationError();\n }\n topStep(array, compare, result, i, m);\n }\n return result;\n })()\n .then(resolve, reject);\n });\n}\nfunction topStep(array, compare, result, i, m) {\n for (const n = result.length; i < m; i++) {\n const element = array[i];\n if (compare(element, result[n - 1]) < 0) {\n result.pop();\n const j = (0, arraysFind_1.findFirstIdxMonotonousOrArrLen)(result, e => compare(element, e) < 0);\n result.splice(j, 0, element);\n }\n }\n}\n/**\n * @returns New array with all falsy values removed. The original array IS NOT modified.\n */\nfunction coalesce(array) {\n return array.filter((e) => !!e);\n}\n/**\n * Remove all falsy values from `array`. The original array IS modified.\n */\nfunction coalesceInPlace(array) {\n let to = 0;\n for (let i = 0; i < array.length; i++) {\n if (!!array[i]) {\n array[to] = array[i];\n to += 1;\n }\n }\n array.length = to;\n}\n/**\n * @deprecated Use `Array.copyWithin` instead\n */\nfunction move(array, from, to) {\n array.splice(to, 0, array.splice(from, 1)[0]);\n}\n/**\n * @returns false if the provided object is an array and not empty.\n */\nfunction isFalsyOrEmpty(obj) {\n return !Array.isArray(obj) || obj.length === 0;\n}\nfunction isNonEmptyArray(obj) {\n return Array.isArray(obj) && obj.length > 0;\n}\n/**\n * Removes duplicates from the given array. The optional keyFn allows to specify\n * how elements are checked for equality by returning an alternate value for each.\n */\nfunction distinct(array, keyFn = value => value) {\n const seen = new Set();\n return array.filter(element => {\n const key = keyFn(element);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n });\n}\nfunction uniqueFilter(keyFn) {\n const seen = new Set();\n return element => {\n const key = keyFn(element);\n if (seen.has(key)) {\n return false;\n }\n seen.add(key);\n return true;\n };\n}\nfunction firstOrDefault(array, notFoundValue) {\n return array.length > 0 ? array[0] : notFoundValue;\n}\nfunction lastOrDefault(array, notFoundValue) {\n return array.length > 0 ? array[array.length - 1] : notFoundValue;\n}\nfunction commonPrefixLength(one, other, equals = (a, b) => a === b) {\n let result = 0;\n for (let i = 0, len = Math.min(one.length, other.length); i < len && equals(one[i], other[i]); i++) {\n result++;\n }\n return result;\n}\nfunction range(arg, to) {\n let from = typeof to === 'number' ? arg : 0;\n if (typeof to === 'number') {\n from = arg;\n }\n else {\n from = 0;\n to = arg;\n }\n const result = [];\n if (from <= to) {\n for (let i = from; i < to; i++) {\n result.push(i);\n }\n }\n else {\n for (let i = from; i > to; i--) {\n result.push(i);\n }\n }\n return result;\n}\nfunction index(array, indexer, mapper) {\n return array.reduce((r, t) => {\n r[indexer(t)] = mapper ? mapper(t) : t;\n return r;\n }, Object.create(null));\n}\n/**\n * Inserts an element into an array. Returns a function which, when\n * called, will remove that element from the array.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction insert(array, element) {\n array.push(element);\n return () => remove(array, element);\n}\n/**\n * Removes an element from an array if it can be found.\n *\n * @deprecated In almost all cases, use a `Set<T>` instead.\n */\nfunction remove(array, element) {\n const index = array.indexOf(element);\n if (index > -1) {\n array.splice(index, 1);\n return element;\n }\n return undefined;\n}\n/**\n * Insert `insertArr` inside `target` at `insertIndex`.\n * Please don't touch unless you understand https://jsperf.com/inserting-an-array-within-an-array\n */\nfunction arrayInsert(target, insertIndex, insertArr) {\n const before = target.slice(0, insertIndex);\n const after = target.slice(insertIndex);\n return before.concat(insertArr, after);\n}\n/**\n * Uses Fisher-Yates shuffle to shuffle the given array\n */\nfunction shuffle(array, _seed) {\n let rand;\n if (typeof _seed === 'number') {\n let seed = _seed;\n // Seeded random number generator in JS. Modified from:\n // https://stackoverflow.com/questions/521295/seeding-the-random-number-generator-in-javascript\n rand = () => {\n const x = Math.sin(seed++) * 179426549; // throw away most significant digits and reduce any potential bias\n return x - Math.floor(x);\n };\n }\n else {\n rand = Math.random;\n }\n for (let i = array.length - 1; i > 0; i -= 1) {\n const j = Math.floor(rand() * (i + 1));\n const temp = array[i];\n array[i] = array[j];\n array[j] = temp;\n }\n}\n/**\n * Pushes an element to the start of the array, if found.\n */\nfunction pushToStart(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.unshift(value);\n }\n}\n/**\n * Pushes an element to the end of the array, if found.\n */\nfunction pushToEnd(arr, value) {\n const index = arr.indexOf(value);\n if (index > -1) {\n arr.splice(index, 1);\n arr.push(value);\n }\n}\nfunction pushMany(arr, items) {\n for (const item of items) {\n arr.push(item);\n }\n}\nfunction mapArrayOrNot(items, fn) {\n return Array.isArray(items) ?\n items.map(fn) :\n fn(items);\n}\nfunction asArray(x) {\n return Array.isArray(x) ? x : [x];\n}\nfunction getRandomElement(arr) {\n return arr[Math.floor(Math.random() * arr.length)];\n}\n/**\n * Insert the new items in the array.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start inserting elements.\n * @param newItems The items to be inserted\n */\nfunction insertInto(array, start, newItems) {\n const startIdx = getActualStartIndex(array, start);\n const originalLength = array.length;\n const newItemsLength = newItems.length;\n array.length = originalLength + newItemsLength;\n // Move the items after the start index, start from the end so that we don't overwrite any value.\n for (let i = originalLength - 1; i >= startIdx; i--) {\n array[i + newItemsLength] = array[i];\n }\n for (let i = 0; i < newItemsLength; i++) {\n array[i + startIdx] = newItems[i];\n }\n}\n/**\n * Removes elements from an array and inserts new elements in their place, returning the deleted elements. Alternative to the native Array.splice method, it\n * can only support limited number of items due to the maximum call stack size limit.\n * @param array The original array.\n * @param start The zero-based location in the array from which to start removing elements.\n * @param deleteCount The number of elements to remove.\n * @returns An array containing the elements that were deleted.\n */\nfunction splice(array, start, deleteCount, newItems) {\n const index = getActualStartIndex(array, start);\n let result = array.splice(index, deleteCount);\n if (result === undefined) {\n // see https://bugs.webkit.org/show_bug.cgi?id=261140\n result = [];\n }\n insertInto(array, index, newItems);\n return result;\n}\n/**\n * Determine the actual start index (same logic as the native splice() or slice())\n * If greater than the length of the array, start will be set to the length of the array. In this case, no element will be deleted but the method will behave as an adding function, adding as many element as item[n*] provided.\n * If negative, it will begin that many elements from the end of the array. (In this case, the origin -1, meaning -n is the index of the nth last element, and is therefore equivalent to the index of array.length - n.) If array.length + start is less than 0, it will begin from index 0.\n * @param array The target array.\n * @param start The operation index.\n */\nfunction getActualStartIndex(array, start) {\n return start < 0 ? Math.max(start + array.length, 0) : Math.min(start, array.length);\n}\nvar CompareResult;\n(function (CompareResult) {\n function isLessThan(result) {\n return result < 0;\n }\n CompareResult.isLessThan = isLessThan;\n function isLessThanOrEqual(result) {\n return result <= 0;\n }\n CompareResult.isLessThanOrEqual = isLessThanOrEqual;\n function isGreaterThan(result) {\n return result > 0;\n }\n CompareResult.isGreaterThan = isGreaterThan;\n function isNeitherLessOrGreaterThan(result) {\n return result === 0;\n }\n CompareResult.isNeitherLessOrGreaterThan = isNeitherLessOrGreaterThan;\n CompareResult.greaterThan = 1;\n CompareResult.lessThan = -1;\n CompareResult.neitherLessOrGreaterThan = 0;\n})(CompareResult || (exports.CompareResult = CompareResult = {}));\nfunction compareBy(selector, comparator) {\n return (a, b) => comparator(selector(a), selector(b));\n}\nfunction tieBreakComparators(...comparators) {\n return (item1, item2) => {\n for (const comparator of comparators) {\n const result = comparator(item1, item2);\n if (!CompareResult.isNeitherLessOrGreaterThan(result)) {\n return result;\n }\n }\n return CompareResult.neitherLessOrGreaterThan;\n };\n}\n/**\n * The natural order on numbers.\n*/\nconst numberComparator = (a, b) => a - b;\nexports.numberComparator = numberComparator;\nconst booleanComparator = (a, b) => (0, exports.numberComparator)(a ? 1 : 0, b ? 1 : 0);\nexports.booleanComparator = booleanComparator;\nfunction reverseOrder(comparator) {\n return (a, b) => -comparator(a, b);\n}\nclass ArrayQueue {\n /**\n * Constructs a queue that is backed by the given array. Runtime is O(1).\n */\n constructor(items) {\n this.items = items;\n this.firstIdx = 0;\n this.lastIdx = this.items.length - 1;\n }\n get length() {\n return this.lastIdx - this.firstIdx + 1;\n }\n /**\n * Consumes elements from the beginning of the queue as long as the predicate returns true.\n * If no elements were consumed, `null` is returned. Has a runtime of O(result.length).\n */\n takeWhile(predicate) {\n // P(k) := k <= this.lastIdx && predicate(this.items[k])\n // Find s := min { k | k >= this.firstIdx && !P(k) } and return this.data[this.firstIdx...s)\n let startIdx = this.firstIdx;\n while (startIdx < this.items.length && predicate(this.items[startIdx])) {\n startIdx++;\n }\n const result = startIdx === this.firstIdx ? null : this.items.slice(this.firstIdx, startIdx);\n this.firstIdx = startIdx;\n return result;\n }\n /**\n * Consumes elements from the end of the queue as long as the predicate returns true.\n * If no elements were consumed, `null` is returned.\n * The result has the same order as the underlying array!\n */\n takeFromEndWhile(predicate) {\n // P(k) := this.firstIdx >= k && predicate(this.items[k])\n // Find s := max { k | k <= this.lastIdx && !P(k) } and return this.data(s...this.lastIdx]\n let endIdx = this.lastIdx;\n while (endIdx >= 0 && predicate(this.items[endIdx])) {\n endIdx--;\n }\n const result = endIdx === this.lastIdx ? null : this.items.slice(endIdx + 1, this.lastIdx + 1);\n this.lastIdx = endIdx;\n return result;\n }\n peek() {\n if (this.length === 0) {\n return undefined;\n }\n return this.items[this.firstIdx];\n }\n peekLast() {\n if (this.length === 0) {\n return undefined;\n }\n return this.items[this.lastIdx];\n }\n dequeue() {\n const result = this.items[this.firstIdx];\n this.firstIdx++;\n return result;\n }\n removeLast() {\n const result = this.items[this.lastIdx];\n this.lastIdx--;\n return result;\n }\n takeCount(count) {\n const result = this.items.slice(this.firstIdx, this.firstIdx + count);\n this.firstIdx += count;\n return result;\n }\n}\nexports.ArrayQueue = ArrayQueue;\n/**\n * This class is faster than an iterator and array for lazy computed data.\n*/\nclass CallbackIterable {\n static { this.empty = new CallbackIterable(_callback => { }); }\n constructor(\n /**\n * Calls the callback for every item.\n * Stops when the callback returns false.\n */\n iterate) {\n this.iterate = iterate;\n }\n forEach(handler) {\n this.iterate(item => { handler(item); return true; });\n }\n toArray() {\n const result = [];\n this.iterate(item => { result.push(item); return true; });\n return result;\n }\n filter(predicate) {\n return new CallbackIterable(cb => this.iterate(item => predicate(item) ? cb(item) : true));\n }\n map(mapFn) {\n return new CallbackIterable(cb => this.iterate(item => cb(mapFn(item))));\n }\n some(predicate) {\n let result = false;\n this.iterate(item => { result = predicate(item); return !result; });\n return result;\n }\n findFirst(predicate) {\n let result;\n this.iterate(item => {\n if (predicate(item)) {\n result = item;\n return false;\n }\n return true;\n });\n return result;\n }\n findLast(predicate) {\n let result;\n this.iterate(item => {\n if (predicate(item)) {\n result = item;\n }\n return true;\n });\n return result;\n }\n findLastMaxBy(comparator) {\n let result;\n let first = true;\n this.iterate(item => {\n if (first || CompareResult.isGreaterThan(comparator(item, result))) {\n first = false;\n result = item;\n }\n return true;\n });\n return result;\n }\n}\nexports.CallbackIterable = CallbackIterable;\n/**\n * Represents a re-arrangement of items in an array.\n */\nclass Permutation {\n constructor(_indexMap) {\n this._indexMap = _indexMap;\n }\n /**\n * Returns a permutation that sorts the given array according to the given compare function.\n */\n static createSortPermutation(arr, compareFn) {\n const sortIndices = Array.from(arr.keys()).sort((index1, index2) => compareFn(arr[index1], arr[index2]));\n return new Permutation(sortIndices);\n }\n /**\n * Returns a new array with the elements of the given array re-arranged according to this permutation.\n */\n apply(arr) {\n return arr.map((_, index) => arr[this._indexMap[index]]);\n }\n /**\n * Returns a new permutation that undoes the re-arrangement of this permutation.\n */\n inverse() {\n const inverseIndexMap = this._indexMap.slice();\n for (let i = 0; i < this._indexMap.length; i++) {\n inverseIndexMap[this._indexMap[i]] = i;\n }\n return new Permutation(inverseIndexMap);\n }\n}\nexports.Permutation = Permutation;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.MonotonousArray = void 0;\nexports.findLast = findLast;\nexports.findLastIdx = findLastIdx;\nexports.findLastMonotonous = findLastMonotonous;\nexports.findLastIdxMonotonous = findLastIdxMonotonous;\nexports.findFirstMonotonous = findFirstMonotonous;\nexports.findFirstIdxMonotonousOrArrLen = findFirstIdxMonotonousOrArrLen;\nexports.findFirstIdxMonotonous = findFirstIdxMonotonous;\nexports.findFirstMax = findFirstMax;\nexports.findLastMax = findLastMax;\nexports.findFirstMin = findFirstMin;\nexports.findMaxIdx = findMaxIdx;\nexports.mapFindFirst = mapFindFirst;\nfunction findLast(array, predicate) {\n const idx = findLastIdx(array, predicate);\n if (idx === -1) {\n return undefined;\n }\n return array[idx];\n}\nfunction findLastIdx(array, predicate, fromIndex = array.length - 1) {\n for (let i = fromIndex; i >= 0; i--) {\n const element = array[i];\n if (predicate(element)) {\n return i;\n }\n }\n return -1;\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `undefined` if no item matches, otherwise the last item that matches the predicate.\n */\nfunction findLastMonotonous(array, predicate) {\n const idx = findLastIdxMonotonous(array, predicate);\n return idx === -1 ? undefined : array[idx];\n}\n/**\n * Finds the last item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n *\n * @returns `startIdx - 1` if predicate is false for all items, otherwise the index of the last item that matches the predicate.\n */\nfunction findLastIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n let i = startIdx;\n let j = endIdxEx;\n while (i < j) {\n const k = Math.floor((i + j) / 2);\n if (predicate(array[k])) {\n i = k + 1;\n }\n else {\n j = k;\n }\n }\n return i - 1;\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `undefined` if no item matches, otherwise the first item that matches the predicate.\n */\nfunction findFirstMonotonous(array, predicate) {\n const idx = findFirstIdxMonotonousOrArrLen(array, predicate);\n return idx === array.length ? undefined : array[idx];\n}\n/**\n * Finds the first item where predicate is true using binary search.\n * `predicate` must be monotonous, i.e. `arr.map(predicate)` must be like `[false, ..., false, true, ..., true]`!\n *\n * @returns `endIdxEx` if predicate is false for all items, otherwise the index of the first item that matches the predicate.\n */\nfunction findFirstIdxMonotonousOrArrLen(array, predicate, startIdx = 0, endIdxEx = array.length) {\n let i = startIdx;\n let j = endIdxEx;\n while (i < j) {\n const k = Math.floor((i + j) / 2);\n if (predicate(array[k])) {\n j = k;\n }\n else {\n i = k + 1;\n }\n }\n return i;\n}\nfunction findFirstIdxMonotonous(array, predicate, startIdx = 0, endIdxEx = array.length) {\n const idx = findFirstIdxMonotonousOrArrLen(array, predicate, startIdx, endIdxEx);\n return idx === array.length ? -1 : idx;\n}\n/**\n * Use this when\n * * You have a sorted array\n * * You query this array with a monotonous predicate to find the last item that has a certain property.\n * * You query this array multiple times with monotonous predicates that get weaker and weaker.\n */\nclass MonotonousArray {\n static { this.assertInvariants = false; }\n constructor(_array) {\n this._array = _array;\n this._findLastMonotonousLastIdx = 0;\n }\n /**\n * The predicate must be monotonous, i.e. `arr.map(predicate)` must be like `[true, ..., true, false, ..., false]`!\n * For subsequent calls, current predicate must be weaker than (or equal to) the previous predicate, i.e. more entries must be `true`.\n */\n findLastMonotonous(predicate) {\n if (MonotonousArray.assertInvariants) {\n if (this._prevFindLastPredicate) {\n for (const item of this._array) {\n if (this._prevFindLastPredicate(item) && !predicate(item)) {\n throw new Error('MonotonousArray: current predicate must be weaker than (or equal to) the previous predicate.');\n }\n }\n }\n this._prevFindLastPredicate = predicate;\n }\n const idx = findLastIdxMonotonous(this._array, predicate, this._findLastMonotonousLastIdx);\n this._findLastMonotonousLastIdx = idx + 1;\n return idx === -1 ? undefined : this._array[idx];\n }\n}\nexports.MonotonousArray = MonotonousArray;\n/**\n * Returns the first item that is equal to or greater than every other item.\n*/\nfunction findFirstMax(array, comparator) {\n if (array.length === 0) {\n return undefined;\n }\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n const item = array[i];\n if (comparator(item, max) > 0) {\n max = item;\n }\n }\n return max;\n}\n/**\n * Returns the last item that is equal to or greater than every other item.\n*/\nfunction findLastMax(array, comparator) {\n if (array.length === 0) {\n return undefined;\n }\n let max = array[0];\n for (let i = 1; i < array.length; i++) {\n const item = array[i];\n if (comparator(item, max) >= 0) {\n max = item;\n }\n }\n return max;\n}\n/**\n * Returns the first item that is equal to or less than every other item.\n*/\nfunction findFirstMin(array, comparator) {\n return findFirstMax(array, (a, b) => -comparator(a, b));\n}\nfunction findMaxIdx(array, comparator) {\n if (array.length === 0) {\n return -1;\n }\n let maxIdx = 0;\n for (let i = 1; i < array.length; i++) {\n const item = array[i];\n if (comparator(item, array[maxIdx]) > 0) {\n maxIdx = i;\n }\n }\n return maxIdx;\n}\n/**\n * Returns the first mapped value of the array which is not undefined.\n */\nfunction mapFindFirst(items, mapFn) {\n for (const value of items) {\n const mapped = mapFn(value);\n if (mapped !== undefined) {\n return mapped;\n }\n }\n return undefined;\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nvar _a;\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetWithKey = void 0;\nexports.groupBy = groupBy;\nexports.diffSets = diffSets;\nexports.diffMaps = diffMaps;\nexports.intersection = intersection;\n/**\n * Groups the collection into a dictionary based on the provided\n * group function.\n */\nfunction groupBy(data, groupFn) {\n const result = Object.create(null);\n for (const element of data) {\n const key = groupFn(element);\n let target = result[key];\n if (!target) {\n target = result[key] = [];\n }\n target.push(element);\n }\n return result;\n}\nfunction diffSets(before, after) {\n const removed = [];\n const added = [];\n for (const element of before) {\n if (!after.has(element)) {\n removed.push(element);\n }\n }\n for (const element of after) {\n if (!before.has(element)) {\n added.push(element);\n }\n }\n return { removed, added };\n}\nfunction diffMaps(before, after) {\n const removed = [];\n const added = [];\n for (const [index, value] of before) {\n if (!after.has(index)) {\n removed.push(value);\n }\n }\n for (const [index, value] of after) {\n if (!before.has(index)) {\n added.push(value);\n }\n }\n return { removed, added };\n}\n/**\n * Computes the intersection of two sets.\n *\n * @param setA - The first set.\n * @param setB - The second iterable.\n * @returns A new set containing the elements that are in both `setA` and `setB`.\n */\nfunction intersection(setA, setB) {\n const result = new Set();\n for (const elem of setB) {\n if (setA.has(elem)) {\n result.add(elem);\n }\n }\n return result;\n}\nclass SetWithKey {\n static { _a = Symbol.toStringTag; }\n constructor(values, toKey) {\n this.toKey = toKey;\n this._map = new Map();\n this[_a] = 'SetWithKey';\n for (const value of values) {\n this.add(value);\n }\n }\n get size() {\n return this._map.size;\n }\n add(value) {\n const key = this.toKey(value);\n this._map.set(key, value);\n return this;\n }\n delete(value) {\n return this._map.delete(this.toKey(value));\n }\n has(value) {\n return this._map.has(this.toKey(value));\n }\n *entries() {\n for (const entry of this._map.values()) {\n yield [entry, entry];\n }\n }\n keys() {\n return this.values();\n }\n *values() {\n for (const entry of this._map.values()) {\n yield entry;\n }\n }\n clear() {\n this._map.clear();\n }\n forEach(callbackfn, thisArg) {\n this._map.forEach(entry => callbackfn.call(thisArg, entry, entry, this));\n }\n [Symbol.iterator]() {\n return this.values();\n }\n}\nexports.SetWithKey = SetWithKey;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.BugIndicatingError = exports.ErrorNoTelemetry = exports.ExpectedError = exports.NotSupportedError = exports.NotImplementedError = exports.ReadonlyError = exports.CancellationError = exports.errorHandler = exports.ErrorHandler = void 0;\nexports.setUnexpectedErrorHandler = setUnexpectedErrorHandler;\nexports.isSigPipeError = isSigPipeError;\nexports.onUnexpectedError = onUnexpectedError;\nexports.onUnexpectedExternalError = onUnexpectedExternalError;\nexports.transformErrorForSerialization = transformErrorForSerialization;\nexports.transformErrorFromSerialization = transformErrorFromSerialization;\nexports.isCancellationError = isCancellationError;\nexports.canceled = canceled;\nexports.illegalArgument = illegalArgument;\nexports.illegalState = illegalState;\nexports.getErrorMessage = getErrorMessage;\n// Avoid circular dependency on EventEmitter by implementing a subset of the interface.\nclass ErrorHandler {\n constructor() {\n this.listeners = [];\n this.unexpectedErrorHandler = function (e) {\n setTimeout(() => {\n if (e.stack) {\n if (ErrorNoTelemetry.isErrorNoTelemetry(e)) {\n throw new ErrorNoTelemetry(e.message + '\\n\\n' + e.stack);\n }\n throw new Error(e.message + '\\n\\n' + e.stack);\n }\n throw e;\n }, 0);\n };\n }\n addListener(listener) {\n this.listeners.push(listener);\n return () => {\n this._removeListener(listener);\n };\n }\n emit(e) {\n this.listeners.forEach((listener) => {\n listener(e);\n });\n }\n _removeListener(listener) {\n this.listeners.splice(this.listeners.indexOf(listener), 1);\n }\n setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n this.unexpectedErrorHandler = newUnexpectedErrorHandler;\n }\n getUnexpectedErrorHandler() {\n return this.unexpectedErrorHandler;\n }\n onUnexpectedError(e) {\n this.unexpectedErrorHandler(e);\n this.emit(e);\n }\n // For external errors, we don't want the listeners to be called\n onUnexpectedExternalError(e) {\n this.unexpectedErrorHandler(e);\n }\n}\nexports.ErrorHandler = ErrorHandler;\nexports.errorHandler = new ErrorHandler();\n/** @skipMangle */\nfunction setUnexpectedErrorHandler(newUnexpectedErrorHandler) {\n exports.errorHandler.setUnexpectedErrorHandler(newUnexpectedErrorHandler);\n}\n/**\n * Returns if the error is a SIGPIPE error. SIGPIPE errors should generally be\n * logged at most once, to avoid a loop.\n *\n * @see https://github.com/microsoft/vscode-remote-release/issues/6481\n */\nfunction isSigPipeError(e) {\n if (!e || typeof e !== 'object') {\n return false;\n }\n const cast = e;\n return cast.code === 'EPIPE' && cast.syscall?.toUpperCase() === 'WRITE';\n}\nfunction onUnexpectedError(e) {\n // ignore errors from cancelled promises\n if (!isCancellationError(e)) {\n exports.errorHandler.onUnexpectedError(e);\n }\n return undefined;\n}\nfunction onUnexpectedExternalError(e) {\n // ignore errors from cancelled promises\n if (!isCancellationError(e)) {\n exports.errorHandler.onUnexpectedExternalError(e);\n }\n return undefined;\n}\nfunction transformErrorForSerialization(error) {\n if (error instanceof Error) {\n const { name, message } = error;\n const stack = error.stacktrace || error.stack;\n return {\n $isError: true,\n name,\n message,\n stack,\n noTelemetry: ErrorNoTelemetry.isErrorNoTelemetry(error)\n };\n }\n // return as is\n return error;\n}\nfunction transformErrorFromSerialization(data) {\n let error;\n if (data.noTelemetry) {\n error = new ErrorNoTelemetry();\n }\n else {\n error = new Error();\n error.name = data.name;\n }\n error.message = data.message;\n error.stack = data.stack;\n return error;\n}\nconst canceledName = 'Canceled';\n/**\n * Checks if the given error is a promise in canceled state\n */\nfunction isCancellationError(error) {\n if (error instanceof CancellationError) {\n return true;\n }\n return error instanceof Error && error.name === canceledName && error.message === canceledName;\n}\n// !!!IMPORTANT!!!\n// Do NOT change this class because it is also used as an API-type.\nclass CancellationError extends Error {\n constructor() {\n super(canceledName);\n this.name = this.message;\n }\n}\nexports.CancellationError = CancellationError;\n/**\n * @deprecated use {@link CancellationError `new CancellationError()`} instead\n */\nfunction canceled() {\n const error = new Error(canceledName);\n error.name = error.message;\n return error;\n}\nfunction illegalArgument(name) {\n if (name) {\n return new Error(`Illegal argument: ${name}`);\n }\n else {\n return new Error('Illegal argument');\n }\n}\nfunction illegalState(name) {\n if (name) {\n return new Error(`Illegal state: ${name}`);\n }\n else {\n return new Error('Illegal state');\n }\n}\nclass ReadonlyError extends TypeError {\n constructor(name) {\n super(name ? `${name} is read-only and cannot be changed` : 'Cannot change read-only property');\n }\n}\nexports.ReadonlyError = ReadonlyError;\nfunction getErrorMessage(err) {\n if (!err) {\n return 'Error';\n }\n if (err.message) {\n return err.message;\n }\n if (err.stack) {\n return err.stack.split('\\n')[0];\n }\n return String(err);\n}\nclass NotImplementedError extends Error {\n constructor(message) {\n super('NotImplemented');\n if (message) {\n this.message = message;\n }\n }\n}\nexports.NotImplementedError = NotImplementedError;\nclass NotSupportedError extends Error {\n constructor(message) {\n super('NotSupported');\n if (message) {\n this.message = message;\n }\n }\n}\nexports.NotSupportedError = NotSupportedError;\nclass ExpectedError extends Error {\n constructor() {\n super(...arguments);\n this.isExpected = true;\n }\n}\nexports.ExpectedError = ExpectedError;\n/**\n * Error that when thrown won't be logged in telemetry as an unhandled error.\n */\nclass ErrorNoTelemetry extends Error {\n constructor(msg) {\n super(msg);\n this.name = 'CodeExpectedError';\n }\n static fromError(err) {\n if (err instanceof ErrorNoTelemetry) {\n return err;\n }\n const result = new ErrorNoTelemetry();\n result.message = err.message;\n result.stack = err.stack;\n return result;\n }\n static isErrorNoTelemetry(err) {\n return err.name === 'CodeExpectedError';\n }\n}\nexports.ErrorNoTelemetry = ErrorNoTelemetry;\n/**\n * This error indicates a bug.\n * Do not throw this for invalid user input.\n * Only catch this error to recover gracefully from bugs.\n */\nclass BugIndicatingError extends Error {\n constructor(message) {\n super(message || 'An unexpected bug occurred.');\n Object.setPrototypeOf(this, BugIndicatingError.prototype);\n // Because we know for sure only buggy code throws this,\n // we definitely want to break here and fix the bug.\n // eslint-disable-next-line no-debugger\n // debugger;\n }\n}\nexports.BugIndicatingError = BugIndicatingError;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.createSingleCallFunction = createSingleCallFunction;\n/**\n * Given a function, returns a function that is only calling that function once.\n */\nfunction createSingleCallFunction(fn, fnDidRunCallback) {\n const _this = this;\n let didCall = false;\n let result;\n return function () {\n if (didCall) {\n return result;\n }\n didCall = true;\n if (fnDidRunCallback) {\n try {\n result = fn.apply(_this, arguments);\n }\n finally {\n fnDidRunCallback();\n }\n }\n else {\n result = fn.apply(_this, arguments);\n }\n return result;\n };\n}\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.Iterable = void 0;\nvar Iterable;\n(function (Iterable) {\n function is(thing) {\n return thing && typeof thing === 'object' && typeof thing[Symbol.iterator] === 'function';\n }\n Iterable.is = is;\n const _empty = Object.freeze([]);\n function empty() {\n return _empty;\n }\n Iterable.empty = empty;\n function* single(element) {\n yield element;\n }\n Iterable.single = single;\n function wrap(iterableOrElement) {\n if (is(iterableOrElement)) {\n return iterableOrElement;\n }\n else {\n return single(iterableOrElement);\n }\n }\n Iterable.wrap = wrap;\n function from(iterable) {\n return iterable || _empty;\n }\n Iterable.from = from;\n function* reverse(array) {\n for (let i = array.length - 1; i >= 0; i--) {\n yield array[i];\n }\n }\n Iterable.reverse = reverse;\n function isEmpty(iterable) {\n return !iterable || iterable[Symbol.iterator]().next().done === true;\n }\n Iterable.isEmpty = isEmpty;\n function first(iterable) {\n return iterable[Symbol.iterator]().next().value;\n }\n Iterable.first = first;\n function some(iterable, predicate) {\n let i = 0;\n for (const element of iterable) {\n if (predicate(element, i++)) {\n return true;\n }\n }\n return false;\n }\n Iterable.some = some;\n function find(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n return element;\n }\n }\n return undefined;\n }\n Iterable.find = find;\n function* filter(iterable, predicate) {\n for (const element of iterable) {\n if (predicate(element)) {\n yield element;\n }\n }\n }\n Iterable.filter = filter;\n function* map(iterable, fn) {\n let index = 0;\n for (const element of iterable) {\n yield fn(element, index++);\n }\n }\n Iterable.map = map;\n function* flatMap(iterable, fn) {\n let index = 0;\n for (const element of iterable) {\n yield* fn(element, index++);\n }\n }\n Iterable.flatMap = flatMap;\n function* concat(...iterables) {\n for (const iterable of iterables) {\n yield* iterable;\n }\n }\n Iterable.concat = concat;\n function reduce(iterable, reducer, initialValue) {\n let value = initialValue;\n for (const element of iterable) {\n value = reducer(value, element);\n }\n return value;\n }\n Iterable.reduce = reduce;\n /**\n * Returns an iterable slice of the array, with the same semantics as `array.slice()`.\n */\n function* slice(arr, from, to = arr.length) {\n if (from < 0) {\n from += arr.length;\n }\n if (to < 0) {\n to += arr.length;\n }\n else if (to > arr.length) {\n to = arr.length;\n }\n for (; from < to; from++) {\n yield arr[from];\n }\n }\n Iterable.slice = slice;\n /**\n * Consumes `atMost` elements from iterable and returns the consumed elements,\n * and an iterable for the rest of the elements.\n */\n function consume(iterable, atMost = Number.POSITIVE_INFINITY) {\n const consumed = [];\n if (atMost === 0) {\n return [consumed, iterable];\n }\n const iterator = iterable[Symbol.iterator]();\n for (let i = 0; i < atMost; i++) {\n const next = iterator.next();\n if (next.done) {\n return [consumed, Iterable.empty()];\n }\n consumed.push(next.value);\n }\n return [consumed, { [Symbol.iterator]() { return iterator; } }];\n }\n Iterable.consume = consume;\n async function asyncToArray(iterable) {\n const result = [];\n for await (const item of iterable) {\n result.push(item);\n }\n return Promise.resolve(result);\n }\n Iterable.asyncToArray = asyncToArray;\n})(Iterable || (exports.Iterable = Iterable = {}));\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.DisposableMap = exports.ImmortalReference = exports.AsyncReferenceCollection = exports.ReferenceCollection = exports.SafeDisposable = exports.RefCountedDisposable = exports.MandatoryMutableDisposable = exports.MutableDisposable = exports.Disposable = exports.DisposableStore = exports.DisposableTracker = void 0;\nexports.setDisposableTracker = setDisposableTracker;\nexports.trackDisposable = trackDisposable;\nexports.markAsDisposed = markAsDisposed;\nexports.markAsSingleton = markAsSingleton;\nexports.isDisposable = isDisposable;\nexports.dispose = dispose;\nexports.disposeIfDisposable = disposeIfDisposable;\nexports.combinedDisposable = combinedDisposable;\nexports.toDisposable = toDisposable;\nexports.disposeOnReturn = disposeOnReturn;\nconst arrays_1 = require(\"vs/base/common/arrays\");\nconst collections_1 = require(\"vs/base/common/collections\");\nconst map_1 = require(\"./map\");\nconst functional_1 = require(\"vs/base/common/functional\");\nconst iterator_1 = require(\"vs/base/common/iterator\");\n// #region Disposable Tracking\n/**\n * Enables logging of potentially leaked disposables.\n *\n * A disposable is considered leaked if it is not disposed or not registered as the child of\n * another disposable. This tracking is very simple an only works for classes that either\n * extend Disposable or use a DisposableStore. This means there are a lot of false positives.\n */\nconst TRACK_DISPOSABLES = false;\nlet disposableTracker = null;\nclass DisposableTracker {\n constructor() {\n this.livingDisposables = new Map();\n }\n static { this.idx = 0; }\n getDisposableData(d) {\n let val = this.livingDisposables.get(d);\n if (!val) {\n val = { parent: null, source: null, isSingleton: false, value: d, idx: DisposableTracker.idx++ };\n this.livingDisposables.set(d, val);\n }\n return val;\n }\n trackDisposable(d) {\n const data = this.getDisposableData(d);\n if (!data.source) {\n data.source =\n new Error().stack;\n }\n }\n setParent(child, parent) {\n const data = this.getDisposableData(child);\n data.parent = parent;\n }\n markAsDisposed(x) {\n this.livingDisposables.delete(x);\n }\n markAsSingleton(disposable) {\n this.getDisposableData(disposable).isSingleton = true;\n }\n getRootParent(data, cache) {\n const cacheValue = cache.get(data);\n if (cacheValue) {\n return cacheValue;\n }\n const result = data.parent ? this.getRootParent(this.getDisposableData(data.parent), cache) : data;\n cache.set(data, result);\n return result;\n }\n getTrackedDisposables() {\n const rootParentCache = new Map();\n const leaking = [...this.livingDisposables.entries()]\n .filter(([, v]) => v.source !== null && !this.getRootParent(v, rootParentCache).isSingleton)\n .flatMap(([k]) => k);\n return leaking;\n }\n computeLeakingDisposables(maxReported = 10, preComputedLeaks) {\n let uncoveredLeakingObjs;\n if (preComputedLeaks) {\n uncoveredLeakingObjs = preComputedLeaks;\n }\n else {\n const rootParentCache = new Map();\n const leakingObjects = [...this.livingDisposables.values()]\n .filter((info) => info.source !== null && !this.getRootParent(info, rootParentCache).isSingleton);\n if (leakingObjects.length === 0) {\n return;\n }\n const leakingObjsSet = new Set(leakingObjects.map(o => o.value));\n // Remove all objects that are a child of other leaking objects. Assumes there are no cycles.\n uncoveredLeakingObjs = leakingObjects.filter(l => {\n return !(l.parent && leakingObjsSet.has(l.parent));\n });\n if (uncoveredLeakingObjs.length === 0) {\n throw new Error('There are cyclic diposable chains!');\n }\n }\n if (!uncoveredLeakingObjs) {\n return undefined;\n }\n function getStackTracePath(leaking) {\n function removePrefix(array, linesToRemove) {\n while (array.length > 0 && linesToRemove.some(regexp => typeof regexp === 'string' ? regexp === array[0] : array[0].match(regexp))) {\n array.shift();\n }\n }\n const lines = leaking.source.split('\\n').map(p => p.trim().replace('at ', '')).filter(l => l !== '');\n removePrefix(lines, ['Error', /^trackDisposable \\(.*\\)$/, /^DisposableTracker.trackDisposable \\(.*\\)$/]);\n return lines.reverse();\n }\n const stackTraceStarts = new map_1.SetMap();\n for (const leaking of uncoveredLeakingObjs) {\n const stackTracePath = getStackTracePath(leaking);\n for (let i = 0; i <= stackTracePath.length; i++) {\n stackTraceStarts.add(stackTracePath.slice(0, i).join('\\n'), leaking);\n }\n }\n // Put earlier leaks first\n uncoveredLeakingObjs.sort((0, arrays_1.compareBy)(l => l.idx, arrays_1.numberComparator));\n let message = '';\n let i = 0;\n for (const leaking of uncoveredLeakingObjs.slice(0, maxReported)) {\n i++;\n const stackTracePath = getStackTracePath(leaking);\n const stackTraceFormattedLines = [];\n for (let i = 0; i < stackTracePath.length; i++) {\n let line = stackTracePath[i];\n const starts = stackTraceStarts.get(stackTracePath.slice(0, i + 1).join('\\n'));\n line = `(shared with ${starts.size}/${uncoveredLeakingObjs.length} leaks) at ${line}`;\n const prevStarts = stackTraceStarts.get(stackTracePath.slice(0, i).join('\\n'));\n const continuations = (0, collections_1.groupBy)([...prevStarts].map(d => getStackTracePath(d)[i]), v => v);\n delete continuations[stackTracePath[i]];\n for (const [cont, set] of Object.entries(continuations)) {\n stackTraceFormattedLines.unshift(` - stacktraces of ${set.length} other leaks continue with ${cont}`);\n }\n stackTraceFormattedLines.unshift(line);\n }\n message += `\\n\\n\\n==================== Leaking disposable ${i}/${uncoveredLeakingObjs.length}: ${leaking.value.constructor.name} ====================\\n${stackTraceFormattedLines.join('\\n')}\\n============================================================\\n\\n`;\n }\n if (uncoveredLeakingObjs.length > maxReported) {\n message += `\\n\\n\\n... and ${uncoveredLeakingObjs.length - maxReported} more leaking disposables\\n\\n`;\n }\n return { leaks: uncoveredLeakingObjs, details: message };\n }\n}\nexports.DisposableTracker = DisposableTracker;\nfunction setDisposableTracker(tracker) {\n disposableTracker = tracker;\n}\nif (TRACK_DISPOSABLES) {\n const __is_disposable_tracked__ = '__is_disposable_tracked__';\n setDisposableTracker(new class {\n trackDisposable(x) {\n const stack = new Error('Potentially leaked disposable').stack;\n setTimeout(() => {\n if (!x[__is_disposable_tracked__]) {\n console.log(stack);\n }\n }, 3000);\n }\n setParent(child, parent) {\n if (child && child !== Disposable.None) {\n try {\n child[__is_disposable_tracked__] = true;\n }\n catch {\n // noop\n }\n }\n }\n markAsDisposed(disposable) {\n if (disposable && disposable !== Disposable.None) {\n try {\n disposable[__is_disposable_tracked__] = true;\n }\n catch {\n // noop\n }\n }\n }\n markAsSingleton(disposable) { }\n });\n}\nfunction trackDisposable(x) {\n disposableTracker?.trackDisposable(x);\n return x;\n}\nfunction markAsDisposed(disposable) {\n disposableTracker?.markAsDisposed(disposable);\n}\nfunction setParentOfDisposable(child, parent) {\n disposableTracker?.setParent(child, parent);\n}\nfunction setParentOfDisposables(children, parent) {\n if (!disposableTracker) {\n return;\n }\n for (const child of children) {\n disposableTracker.setParent(child, parent);\n }\n}\n/**\n * Indicates that the given object is a singleton which does not need to be disposed.\n*/\nfunction markAsSingleton(singleton) {\n disposableTracker?.markAsSingleton(singleton);\n return singleton;\n}\n/**\n * Check if `thing` is {@link IDisposable disposable}.\n */\nfunction isDisposable(thing) {\n return typeof thing === 'object' && thing !== null && typeof thing.dispose === 'function' && thing.dispose.length === 0;\n}\nfunction dispose(arg) {\n if (iterator_1.Iterable.is(arg)) {\n const errors = [];\n for (const d of arg) {\n if (d) {\n try {\n d.dispose();\n }\n catch (e) {\n errors.push(e);\n }\n }\n }\n if (errors.length === 1) {\n throw errors[0];\n }\n else if (errors.length > 1) {\n throw new AggregateError(errors, 'Encountered errors while disposing of store');\n }\n return Array.isArray(arg) ? [] : arg;\n }\n else if (arg) {\n arg.dispose();\n return arg;\n }\n}\nfunction disposeIfDisposable(disposables) {\n for (const d of disposables) {\n if (isDisposable(d)) {\n d.dispose();\n }\n }\n return [];\n}\n/**\n * Combine multiple disposable values into a single {@link IDisposable}.\n */\nfunction combinedDisposable(...disposables) {\n const parent = toDisposable(() => dispose(disposables));\n setParentOfDisposables(disposables, parent);\n return parent;\n}\n/**\n * Turn a function that implements dispose into an {@link IDisposable}.\n *\n * @param fn Clean up function, guaranteed to be called only **once**.\n */\nfunction toDisposable(fn) {\n const self = trackDisposable({\n dispose: (0, functional_1.createSingleCallFunction)(() => {\n markAsDisposed(self);\n fn();\n })\n });\n return self;\n}\n/**\n * Manages a collection of disposable values.\n *\n * This is the preferred way to manage multiple disposables. A `DisposableStore` is safer to work with than an\n * `IDisposable[]` as it considers edge cases, such as registering the same value multiple times or adding an item to a\n * store that has already been disposed of.\n */\nclass DisposableStore {\n static { this.DISABLE_DISPOSED_WARNING = false; }\n constructor() {\n this._toDispose = new Set();\n this._isDisposed = false;\n trackDisposable(this);\n }\n /**\n * Dispose of all registered disposables and mark this object as disposed.\n *\n * Any future disposables added to this object will be disposed of on `add`.\n */\n dispose() {\n if (this._isDisposed) {\n return;\n }\n markAsDisposed(this);\n this._isDisposed = true;\n this.clear();\n }\n /**\n * @return `true` if this object has been disposed of.\n */\n get isDisposed() {\n return this._isDisposed;\n }\n /**\n * Dispose of all registered disposables but do not mark this object as disposed.\n */\n clear() {\n if (this._toDispose.size === 0) {\n return;\n }\n try {\n dispose(this._toDispose);\n }\n finally {\n this._toDispose.clear();\n }\n }\n /**\n * Add a new {@link IDisposable disposable} to the collection.\n */\n add(o) {\n if (!o) {\n return o;\n }\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n setParentOfDisposable(o, this);\n if (this._isDisposed) {\n if (!DisposableStore.DISABLE_DISPOSED_WARNING) {\n console.warn(new Error('Trying to add a disposable to a DisposableStore that has already been disposed of. The added object will be leaked!').stack);\n }\n }\n else {\n this._toDispose.add(o);\n }\n return o;\n }\n /**\n * Deletes a disposable from store and disposes of it. This will not throw or warn and proceed to dispose the\n * disposable even when the disposable is not part in the store.\n */\n delete(o) {\n if (!o) {\n return;\n }\n if (o === this) {\n throw new Error('Cannot dispose a disposable on itself!');\n }\n this._toDispose.delete(o);\n o.dispose();\n }\n /**\n * Deletes the value from the store, but does not dispose it.\n */\n deleteAndLeak(o) {\n if (!o) {\n return;\n }\n if (this._toDispose.has(o)) {\n this._toDispose.delete(o);\n setParentOfDisposable(o, null);\n }\n }\n}\nexports.DisposableStore = DisposableStore;\n/**\n * Abstract base class for a {@link IDisposable disposable} object.\n *\n * Subclasses can {@linkcode _register} disposables that will be automatically cleaned up when this object is disposed of.\n */\nclass Disposable {\n /**\n * A disposable that does nothing when it is disposed of.\n *\n * TODO: This should not be a static property.\n */\n static { this.None = Object.freeze({ dispose() { } }); }\n constructor() {\n this._store = new DisposableStore();\n trackDisposable(this);\n setParentOfDisposable(this._store, this);\n }\n dispose() {\n markAsDisposed(this);\n this._store.dispose();\n }\n /**\n * Adds `o` to the collection of disposables managed by this object.\n */\n _register(o) {\n if (o === this) {\n throw new Error('Cannot register a disposable on itself!');\n }\n return this._store.add(o);\n }\n}\nexports.Disposable = Disposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed.\n *\n * This ensures that when the disposable value is changed, the previously held disposable is disposed of. You can\n * also register a `MutableDisposable` on a `Disposable` to ensure it is automatically cleaned up.\n */\nclass MutableDisposable {\n constructor() {\n this._isDisposed = false;\n trackDisposable(this);\n }\n get value() {\n return this._isDisposed ? undefined : this._value;\n }\n set value(value) {\n if (this._isDisposed || value === this._value) {\n return;\n }\n this._value?.dispose();\n if (value) {\n setParentOfDisposable(value, this);\n }\n this._value = value;\n }\n /**\n * Resets the stored value and disposed of the previously stored value.\n */\n clear() {\n this.value = undefined;\n }\n dispose() {\n this._isDisposed = true;\n markAsDisposed(this);\n this._value?.dispose();\n this._value = undefined;\n }\n /**\n * Clears the value, but does not dispose it.\n * The old value is returned.\n */\n clearAndLeak() {\n const oldValue = this._value;\n this._value = undefined;\n if (oldValue) {\n setParentOfDisposable(oldValue, null);\n }\n return oldValue;\n }\n}\nexports.MutableDisposable = MutableDisposable;\n/**\n * Manages the lifecycle of a disposable value that may be changed like {@link MutableDisposable}, but the value must\n * exist and cannot be undefined.\n */\nclass MandatoryMutableDisposable {\n constructor(initialValue) {\n this._disposable = new MutableDisposable();\n this._isDisposed = false;\n this._disposable.value = initialValue;\n }\n get value() {\n return this._disposable.value;\n }\n set value(value) {\n if (this._isDisposed || value === this._disposable.value) {\n return;\n }\n this._disposable.value = value;\n }\n dispose() {\n this._isDisposed = true;\n this._disposable.dispose();\n }\n}\nexports.MandatoryMutableDisposable = MandatoryMutableDisposable;\nclass RefCountedDisposable {\n constructor(_disposable) {\n this._disposable = _disposable;\n this._counter = 1;\n }\n acquire() {\n this._counter++;\n return this;\n }\n release() {\n if (--this._counter === 0) {\n this._disposable.dispose();\n }\n return this;\n }\n}\nexports.RefCountedDisposable = RefCountedDisposable;\n/**\n * A safe disposable can be `unset` so that a leaked reference (listener)\n * can be cut-off.\n */\nclass SafeDisposable {\n constructor() {\n this.dispose = () => { };\n this.unset = () => { };\n this.isset = () => false;\n trackDisposable(this);\n }\n set(fn) {\n let callback = fn;\n this.unset = () => callback = undefined;\n this.isset = () => callback !== undefined;\n this.dispose = () => {\n if (callback) {\n callback();\n callback = undefined;\n markAsDisposed(this);\n }\n };\n return this;\n }\n}\nexports.SafeDisposable = SafeDisposable;\nclass ReferenceCollection {\n constructor() {\n this.references = new Map();\n }\n acquire(key, ...args) {\n let reference = this.references.get(key);\n if (!reference) {\n reference = { counter: 0, object: this.createReferencedObject(key, ...args) };\n this.references.set(key, reference);\n }\n const { object } = reference;\n const dispose = (0, functional_1.createSingleCallFunction)(() => {\n if (--reference.counter === 0) {\n this.destroyReferencedObject(key, reference.object);\n this.references.delete(key);\n }\n });\n reference.counter++;\n return { object, dispose };\n }\n}\nexports.ReferenceCollection = ReferenceCollection;\n/**\n * Unwraps a reference collection of promised values. Makes sure\n * references are disposed whenever promises get rejected.\n */\nclass AsyncReferenceCollection {\n constructor(referenceCollection) {\n this.referenceCollection = referenceCollection;\n }\n async acquire(key, ...args) {\n const ref = this.referenceCollection.acquire(key, ...args);\n try {\n const object = await ref.object;\n return {\n object,\n dispose: () => ref.dispose()\n };\n }\n catch (error) {\n ref.dispose();\n throw error;\n }\n }\n}\nexports.AsyncReferenceCollection = AsyncReferenceCollection;\nclass ImmortalReference {\n constructor(object) {\n this.object = object;\n }\n dispose() { }\n}\nexports.ImmortalReference = ImmortalReference;\nfunction disposeOnReturn(fn) {\n const store = new DisposableStore();\n try {\n fn(store);\n }\n finally {\n store.dispose();\n }\n}\n/**\n * A map the manages the lifecycle of the values that it stores.\n */\nclass DisposableMap {\n constructor() {\n this._store = new Map();\n this._isDisposed = false;\n trackDisposable(this);\n }\n /**\n * Disposes of all stored values and mark this object as disposed.\n *\n * Trying to use this object after it has been disposed of is an error.\n */\n dispose() {\n markAsDisposed(this);\n this._isDisposed = true;\n this.clearAndDisposeAll();\n }\n /**\n * Disposes of all stored values and clear the map, but DO NOT mark this object as disposed.\n */\n clearAndDisposeAll() {\n if (!this._store.size) {\n return;\n }\n try {\n dispose(this._store.values());\n }\n finally {\n this._store.clear();\n }\n }\n has(key) {\n return this._store.has(key);\n }\n get size() {\n return this._store.size;\n }\n get(key) {\n return this._store.get(key);\n }\n set(key, value, skipDisposeOnOverwrite = false) {\n if (this._isDisposed) {\n console.warn(new Error('Trying to add a disposable to a DisposableMap that has already been disposed of. The added object will be leaked!').stack);\n }\n if (!skipDisposeOnOverwrite) {\n this._store.get(key)?.dispose();\n }\n this._store.set(key, value);\n }\n /**\n * Delete the value stored for `key` from this map and also dispose of it.\n */\n deleteAndDispose(key) {\n this._store.get(key)?.dispose();\n this._store.delete(key);\n }\n /**\n * Delete the value stored for `key` from this map but return it. The caller is\n * responsible for disposing of the value.\n */\n deleteAndLeak(key) {\n const value = this._store.get(key);\n this._store.delete(key);\n return value;\n }\n keys() {\n return this._store.keys();\n }\n values() {\n return this._store.values();\n }\n [Symbol.iterator]() {\n return this._store[Symbol.iterator]();\n }\n}\nexports.DisposableMap = DisposableMap;\n","\"use strict\";\n/*---------------------------------------------------------------------------------------------\n * Copyright (c) Microsoft Corporation. All rights reserved.\n * Licensed under the MIT License. See License.txt in the project root for license information.\n *--------------------------------------------------------------------------------------------*/\nObject.defineProperty(exports, \"__esModule\", { value: true });\nexports.SetMap = exports.BidirectionalMap = exports.CounterSet = exports.Touch = void 0;\nexports.getOrSet = getOrSet;\nexports.mapToString = mapToString;\nexports.setToString = setToString;\nexports.mapsStrictEqualIgnoreOrder = mapsStrictEqualIgnoreOrder;\nfunction getOrSet(map, key, value) {\n let result = map.get(key);\n if (result === undefined) {\n result = value;\n map.set(key, result);\n }\n return result;\n}\nfunction mapToString(map) {\n const entries = [];\n map.forEach((value, key) => {\n entries.push(`${key} => ${value}`);\n });\n return `Map(${map.size}) {${entries.join(', ')}}`;\n}\nfunction setToString(set) {\n const entries = [];\n set.forEach(value => {\n entries.push(value);\n });\n return `Set(${set.size}) {${entries.join(', ')}}`;\n}\nvar Touch;\n(function (Touch) {\n Touch[Touch[\"None\"] = 0] = \"None\";\n Touch[Touch[\"AsOld\"] = 1] = \"AsOld\";\n Touch[Touch[\"AsNew\"] = 2] = \"AsNew\";\n})(Touch || (exports.Touch = Touch = {}));\nclass CounterSet {\n constructor() {\n this.map = new Map();\n }\n add(value) {\n this.map.set(value, (this.map.get(value) || 0) + 1);\n return this;\n }\n delete(value) {\n let counter = this.map.get(value) || 0;\n if (counter === 0) {\n return false;\n }\n counter--;\n if (counter === 0) {\n this.map.delete(value);\n }\n else {\n this.map.set(value, counter);\n }\n return true;\n }\n has(value) {\n return this.map.has(value);\n }\n}\nexports.CounterSet = CounterSet;\n/**\n * A map that allows access both by keys and values.\n * **NOTE**: values need to be unique.\n */\nclass BidirectionalMap {\n constructor(entries) {\n this._m1 = new Map();\n this._m2 = new Map();\n if (entries) {\n for (const [key, value] of entries) {\n this.set(key, value);\n }\n }\n }\n clear() {\n this._m1.clear();\n this._m2.clear();\n }\n set(key, value) {\n this._m1.set(key, value);\n this._m2.set(value, key);\n }\n get(key) {\n return this._m1.get(key);\n }\n getKey(value) {\n return this._m2.get(value);\n }\n delete(key) {\n const value = this._m1.get(key);\n if (value === undefined) {\n return false;\n }\n this._m1.delete(key);\n this._m2.delete(value);\n return true;\n }\n forEach(callbackfn, thisArg) {\n this._m1.forEach((value, key) => {\n callbackfn.call(thisArg, value, key, this);\n });\n }\n keys() {\n return this._m1.keys();\n }\n values() {\n return this._m1.values();\n }\n}\nexports.BidirectionalMap = BidirectionalMap;\nclass SetMap {\n constructor() {\n this.map = new Map();\n }\n add(key, value) {\n let values = this.map.get(key);\n if (!values) {\n values = new Set();\n this.map.set(key, values);\n }\n values.add(value);\n }\n delete(key, value) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.delete(value);\n if (values.size === 0) {\n this.map.delete(key);\n }\n }\n forEach(key, fn) {\n const values = this.map.get(key);\n if (!values) {\n return;\n }\n values.forEach(fn);\n }\n get(key) {\n const values = this.map.get(key);\n if (!values) {\n return new Set();\n }\n return values;\n }\n}\nexports.SetMap = SetMap;\nfunction mapsStrictEqualIgnoreOrder(a, b) {\n if (a === b) {\n return true;\n }\n if (a.size !== b.size) {\n return false;\n }\n for (const [key, value] of a) {\n if (!b.has(key) || b.get(key) !== value) {\n return false;\n }\n }\n for (const [key] of b) {\n if (!a.has(key)) {\n return false;\n }\n }\n return true;\n}\n","// The module cache\nvar __webpack_module_cache__ = {};\n\n// The require function\nfunction __webpack_require__(moduleId) {\n\t// Check if module is in cache\n\tvar cachedModule = __webpack_module_cache__[moduleId];\n\tif (cachedModule !== undefined) {\n\t\treturn cachedModule.exports;\n\t}\n\t// Create a new module (and put it into the cache)\n\tvar module = __webpack_module_cache__[moduleId] = {\n\t\t// no module.id needed\n\t\t// no module.loaded needed\n\t\texports: {}\n\t};\n\n\t// Execute the module function\n\t__webpack_modules__[moduleId](module, module.exports, __webpack_require__);\n\n\t// Return the exports of the module\n\treturn module.exports;\n}\n\n","/**\n * Copyright (c) 2020 The xterm.js authors. All rights reserved.\n * @license MIT\n */\n\nimport type { ITerminalAddon, IDisposable } from '@xterm/xterm';\nimport type { ImageAddon as IImageApi } from '@xterm/addon-image';\nimport { IIPHandler } from './IIPHandler';\nimport { ImageRenderer } from './ImageRenderer';\nimport { ImageStorage, CELL_SIZE_DEFAULT } from './ImageStorage';\nimport { SixelHandler } from './SixelHandler';\nimport { ITerminalExt, IImageAddonOptions, IResetHandler } from './Types';\n\n// default values of addon ctor options\nconst DEFAULT_OPTIONS: IImageAddonOptions = {\n enableSizeReports: true,\n pixelLimit: 16777216, // limit to 4096 * 4096 pixels\n sixelSupport: true,\n sixelScrolling: true,\n sixelPaletteLimit: 256,\n sixelSizeLimit: 25000000,\n storageLimit: 128,\n showPlaceholder: true,\n iipSupport: true,\n iipSizeLimit: 20000000\n};\n\n// max palette size supported by the sixel lib (compile time setting)\nconst MAX_SIXEL_PALETTE_SIZE = 4096;\n\n// definitions for _xtermGraphicsAttributes sequence\nconst enum GaItem {\n COLORS = 1,\n SIXEL_GEO = 2,\n REGIS_GEO = 3\n}\nconst enum GaAction {\n READ = 1,\n SET_DEFAULT = 2,\n SET = 3,\n READ_MAX = 4\n}\nconst enum GaStatus {\n SUCCESS = 0,\n ITEM_ERROR = 1,\n ACTION_ERROR = 2,\n FAILURE = 3\n}\n\n\nexport class ImageAddon implements ITerminalAddon , IImageApi {\n private _opts: IImageAddonOptions;\n private _defaultOpts: IImageAddonOptions;\n private _storage: ImageStorage | undefined;\n private _renderer: ImageRenderer | undefined;\n private _disposables: IDisposable[] = [];\n private _terminal: ITerminalExt | undefined;\n private _handlers: Map<String, IResetHandler> = new Map();\n\n constructor(opts?: Partial<IImageAddonOptions>) {\n this._opts = Object.assign({}, DEFAULT_OPTIONS, opts);\n this._defaultOpts = Object.assign({}, DEFAULT_OPTIONS, opts);\n }\n\n public dispose(): void {\n for (const obj of this._disposables) {\n obj.dispose();\n }\n this._disposables.length = 0;\n this._handlers.clear();\n }\n\n private _disposeLater(...args: IDisposable[]): void {\n for (const obj of args) {\n this._disposables.push(obj);\n }\n }\n\n public activate(terminal: ITerminalExt): void {\n this._terminal = terminal;\n\n // internal data structures\n this._renderer = new ImageRenderer(terminal);\n this._storage = new ImageStorage(terminal, this._renderer, this._opts);\n\n // enable size reports\n if (this._opts.enableSizeReports) {\n // const windowOptions = terminal.getOption('windowOptions');\n // windowOptions.getWinSizePixels = true;\n // windowOptions.getCellSizePixels = true;\n // windowOptions.getWinSizeChars = true;\n // terminal.setOption('windowOptions', windowOptions);\n const windowOps = terminal.options.windowOptions || {};\n windowOps.getWinSizePixels = true;\n windowOps.getCellSizePixels = true;\n windowOps.getWinSizeChars = true;\n terminal.options.windowOptions = windowOps;\n }\n\n this._disposeLater(\n this._renderer,\n this._storage,\n\n // DECSET/DECRST/DA1/XTSMGRAPHICS handlers\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'h' }, params => this._decset(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'l' }, params => this._decrst(params)),\n terminal.parser.registerCsiHandler({ final: 'c' }, params => this._da1(params)),\n terminal.parser.registerCsiHandler({ prefix: '?', final: 'S' }, params => this._xtermGraphicsAttributes(params)),\n\n // render hook\n terminal.onRender(range => this._storage?.render(range)),\n\n /**\n * reset handlers covered:\n * - DECSTR\n * - RIS\n * - Terminal.reset()\n */\n terminal.parser.registerCsiHandler({ intermediates: '!', final: 'p' }, () => this.reset()),\n terminal.parser.registerEscHandler({ final: 'c' }, () => this.reset()),\n terminal._core._inputHandler.onRequestReset(() => this.reset()),\n\n // wipe canvas and delete alternate images on buffer switch\n terminal.buffer.onBufferChange(() => this._storage?.wipeAlternate()),\n\n // extend images to the right on resize\n terminal.onResize(metrics => this._storage?.viewportResize(metrics))\n );\n\n // SIXEL handler\n if (this._opts.sixelSupport) {\n const sixelHandler = new SixelHandler(this._opts, this._storage!, terminal);\n this._handlers.set('sixel', sixelHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerDcsHandler({ final: 'q' }, sixelHandler)\n );\n }\n\n // iTerm IIP handler\n if (this._opts.iipSupport) {\n const iipHandler = new IIPHandler(this._opts, this._renderer!, this._storage!, terminal);\n this._handlers.set('iip', iipHandler);\n this._disposeLater(\n terminal._core._inputHandler._parser.registerOscHandler(1337, iipHandler)\n );\n }\n }\n\n // Note: storageLimit is skipped here to not intoduce a surprising side effect.\n public reset(): boolean {\n // reset options customizable by sequences to defaults\n this._opts.sixelScrolling = this._defaultOpts.sixelScrolling;\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n // also clear image storage\n this._storage?.reset();\n // reset protocol handlers\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return false;\n }\n\n public get storageLimit(): number {\n return this._storage?.getLimit() || -1;\n }\n\n public set storageLimit(limit: number) {\n this._storage?.setLimit(limit);\n this._opts.storageLimit = limit;\n }\n\n public get storageUsage(): number {\n if (this._storage) {\n return this._storage.getUsage();\n }\n return -1;\n }\n\n public get showPlaceholder(): boolean {\n return this._opts.showPlaceholder;\n }\n\n public set showPlaceholder(value: boolean) {\n this._opts.showPlaceholder = value;\n this._renderer?.showPlaceholder(value);\n }\n\n public getImageAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.getImageAtBufferCell(x, y);\n }\n\n public extractTileAtBufferCell(x: number, y: number): HTMLCanvasElement | undefined {\n return this._storage?.extractTileAtBufferCell(x, y);\n }\n\n private _report(s: string): void {\n this._terminal?._core.coreService.triggerDataEvent(s);\n }\n\n private _decset(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = false;\n break;\n }\n }\n return false;\n }\n\n private _decrst(params: (number | number[])[]): boolean {\n for (let i = 0; i < params.length; ++i) {\n switch (params[i]) {\n case 80:\n this._opts.sixelScrolling = true;\n break;\n }\n }\n return false;\n }\n\n // overload DA to return something more appropriate\n private _da1(params: (number | number[])[]): boolean {\n if (params[0]) {\n return true;\n }\n // reported features:\n // 62 - VT220\n // 4 - SIXEL support\n // 9 - charsets\n // 22 - ANSI colors\n if (this._opts.sixelSupport) {\n this._report(`\\x1b[?62;4;9;22c`);\n return true;\n }\n return false;\n }\n\n /**\n * Implementation of xterm's graphics attribute sequence.\n *\n * Supported features:\n * - read/change palette limits (max 4096 by sixel lib)\n * - read SIXEL canvas geometry (reports current window canvas or\n * squared pixelLimit if canvas > pixel limit)\n *\n * Everything else is deactivated.\n */\n private _xtermGraphicsAttributes(params: (number | number[])[]): boolean {\n if (params.length < 2) {\n return true;\n }\n if (params[0] === GaItem.COLORS) {\n switch (params[1]) {\n case GaAction.READ:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n return true;\n case GaAction.SET_DEFAULT:\n this._opts.sixelPaletteLimit = this._defaultOpts.sixelPaletteLimit;\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n // also reset protocol handlers for now\n for (const handler of this._handlers.values()) {\n handler.reset();\n }\n return true;\n case GaAction.SET:\n if (params.length > 2 && !(params[2] instanceof Array) && params[2] <= MAX_SIXEL_PALETTE_SIZE) {\n this._opts.sixelPaletteLimit = params[2];\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${this._opts.sixelPaletteLimit}S`);\n } else {\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n }\n return true;\n case GaAction.READ_MAX:\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${MAX_SIXEL_PALETTE_SIZE}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n if (params[0] === GaItem.SIXEL_GEO) {\n switch (params[1]) {\n // we only implement read and read_max here\n case GaAction.READ:\n let width = this._renderer?.dimensions?.css.canvas.width;\n let height = this._renderer?.dimensions?.css.canvas.height;\n if (!width || !height) {\n // for some reason we have no working image renderer\n // --> fallback to default cell size\n const cellSize = CELL_SIZE_DEFAULT;\n width = (this._terminal?.cols || 80) * cellSize.width;\n height = (this._terminal?.rows || 24) * cellSize.height;\n }\n if (width * height < this._opts.pixelLimit) {\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${width.toFixed(0)};${height.toFixed(0)}S`);\n } else {\n // if we overflow pixelLimit report that squared instead\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n }\n return true;\n case GaAction.READ_MAX:\n // read_max returns pixelLimit as square area\n const x = Math.floor(Math.sqrt(this._opts.pixelLimit));\n this._report(`\\x1b[?${params[0]};${GaStatus.SUCCESS};${x};${x}S`);\n return true;\n default:\n this._report(`\\x1b[?${params[0]};${GaStatus.ACTION_ERROR}S`);\n return true;\n }\n }\n // exit with error on ReGIS or any other requests\n this._report(`\\x1b[?${params[0]};${GaStatus.ITEM_ERROR}S`);\n return true;\n }\n}\n"],"names":["root","factory","exports","module","define","amd","globalThis","_dec","s","Buffer","from","bs","atob","r","Uint8Array","length","i","charCodeAt","Object","defineProperty","value","InWasm","def","d","bytes","mod","W","WebAssembly","t","Promise","resolve","Module","compile","then","m","e","Instance","instantiate","instance","_wasmCtx","Error","add","red","n","green","blue","toRGBA8888","g","b","a","clamp","low","high","Math","max","min","h2c","t1","t2","c","normalizeRGB","round","DEFAULT_FOREGROUND","DEFAULT_BACKGROUND","PALETTE_ANSI_256","PALETTE_VT340_GREY","PALETTE_VT340_COLOR","normalizeHLS","nearestColorIndex","fromRGBA8888","alpha","BIG_ENDIAN","Uint32Array","buffer","console","warn","color","palette","Number","MAX_SAFE_INTEGER","idx","dr","dg","db","h","l","v","HLStoRGB","p","push","decodeAsync","decode","Decoder","DecoderAsync","Colors_1","wasm_1","WASM_BYTES","bytestring","result","decodeBase64","LIMITS","BYTES","WASM_MODULE","NULL_CANVAS","CallbackProxy","constructor","this","bandHandler","width","modeHandler","mode","handle_band","mode_parsed","DEFAULT_OPTIONS","memoryLimit","sixelColor","fillColor","paletteLimit","PALETTE_SIZE","truncate","opts","cbProxy","importObj","env","bind","inst","_instance","_cbProxy","_PIXEL_OFFSET","MAX_WIDTH","_canvas","_bandWidths","_maxWidth","_minWidth","_lastOffset","_currentHeight","_opts","assign","_handle_band","_initCanvas","_wasm","_chunk","memory","get_chunk_address","CHUNK_SIZE","_states","get_state_address","_palette","get_palette_address","set","_pSrc","get_p0_address","init","_fillColor","_truncate","_rasterWidth","_rasterHeight","_width","_height","_level","_mode","_paletteLimit","pixels","height","release","_realloc","offset","additionalPixels","newCanvas","ceil","adv","remaining","subarray","current_width","current_height","memoryUsage","byteLength","properties","level","memUsage","rasterAttributes","numerator","denominator","data","start","end","decodeString","j","data32","currentWidth","fill","escape","final","finalOffset","bw","currentHeight","data8","Uint8ClampedArray","dec","async","wasmDecode","MAP","split","map","el","D","EMPTY","keepSize","_inst","_d","_m32","_mem","size","grow","Memory","initial","put","DEFAULT_HEADER","name","preserveAspectRatio","inline","_renderer","_storage","_coreTerminal","_aborted","_hp","HeaderParser","_header","_metrics","UNSUPPORTED_TYPE","reset","state","dataPos","parse","fields","iipSizeLimit","success","w","cond","imageType","mime","pixelLimit","_resize","floor","blob","Blob","type","window","createImageBitmap","url","URL","createObjectURL","img","Image","addEventListener","revokeObjectURL","canvas","ImageRenderer","createCanvas","document","getContext","drawImage","addImage","src","setTimeout","resizeWidth","resizeHeight","bm","cw","dimensions","css","cell","CELL_SIZE_DEFAULT","ch","cols","rows","rw","_dim","rh","wf","hf","f","total","cdim","endsWith","parseInt","slice","toStr","String","fromCharCode","toInt","toSize","match","DECODERS","toString","TextDecoder","FILE_MARKER","MAX_FIELDCHARS","_buffer","_position","_key","pos","_storeValue","_a","k","_storeKey","d32","byteOffset","len","blockLength","jpgSize","Disposable","localDocument","createElement","createImageData","ctx","ImageData","imgData","undefined","_terminal","super","_optionsRefresh","_register","MutableDisposable","_oldOpen","_core","open","parent","call","_open","screenElement","optionsService","onOptionChange","option","rescaleCanvas","_renderService","refreshRows","toDisposable","removeLayerFromDom","_oldSetRenderer","setRenderer","_ctx","_placeholderBitmap","close","_placeholder","showPlaceholder","cellSize","_createPlaceHolder","clearLines","clearRect","clearAll","draw","imgSpec","tileId","col","row","count","_rescaleImage","actual","sx","sy","dx","dy","finalWidth","finalHeight","extractTile","drawPlaceholder","spec","actualCellSize","originalWidth","originalHeight","origCellSize","orig","renderer","insertLayerToDom","classList","appendChild","desynchronized","remove","bWidth","blueprint","black","white","y","shift","x","putImageData","screen","ctx2","bitmap","_coreBrowserService","ExtendedAttrsImage","ext","_urlId","_ext","underlineStyle","underlineColor","underlineVariantOffset","val","urlId","imageId","clone","isEmpty","EMPTY_ATTRS","_images","Map","_lastId","_lowestId","_fullyCleared","_needsFullClear","_pixelLimit","setLimit","storageLimit","error","message","getLimit","_viewportMetrics","dispose","values","marker","clear","RangeError","_evictOldest","getUsage","_getStoredPixels","storedPixels","_delImg","id","get","delete","ImageBitmap","wipeAlternate","zero","entries","bufferType","advanceCursor","sixelScrolling","_inputHandler","lineFeed","termCols","termRows","originX","originY","tileCount","_dirtyRowTracker","markDirty","line","lines","ybase","_writeToCell","endMarker","registerMarker","onDispose","active","_evictOnAlternate","render","range","ydisp","getBg","_extendedAttrs","startTile","startCol","viewportResize","metrics","oldCol","tilesPerRow","hasData","rightCol","_data","lastTile","expandCol","getImageAtBufferCell","extractTileAtBufferCell","room","used","current","old","oldSpec","imgId","DEFAULT_PALETTE","convertLe","_size","sixelPaletteLimit","hook","params","attr","colors","bg","isInverse","isFgDefault","foreground","rgba","isFgRGB","toColorRGB","getFgColor","ansi","isBgDefault","background","isBgRGB","getBgColor","extractActiveBg","_curAttrData","_themeService","sixelSizeLimit","unhook","Permutation","CallbackIterable","ArrayQueue","booleanComparator","numberComparator","CompareResult","tail","array","tail2","arr","equals","one","other","itemEquals","removeFastWithoutKeepingOrder","index","last","pop","binarySearch","key","comparator","binarySearch2","quickSelect","nth","compare","TypeError","pivotValue","random","lower","higher","pivots","groupBy","currentGroup","element","sort","groupAdjacentBy","items","shouldBeGrouped","item","forEachAdjacent","forEachWithNeighbors","sortedDiff","delta","before","after","splices","removed","added","splice","deleteCount","toInsert","top","topStep","topAsync","batch","token","reject","o","isCancellationRequested","errors_1","CancellationError","coalesce","filter","coalesceInPlace","to","move","isFalsyOrEmpty","obj","Array","isArray","isNonEmptyArray","distinct","keyFn","seen","Set","has","uniqueFilter","firstOrDefault","notFoundValue","lastOrDefault","commonPrefixLength","arg","indexer","mapper","reduce","create","insert","arrayInsert","target","insertIndex","insertArr","concat","shuffle","_seed","rand","seed","sin","temp","pushToStart","indexOf","unshift","pushToEnd","pushMany","mapArrayOrNot","fn","asArray","getRandomElement","insertInto","newItems","getActualStartIndex","compareBy","selector","tieBreakComparators","comparators","item1","item2","isNeitherLessOrGreaterThan","neitherLessOrGreaterThan","reverseOrder","arraysFind_1","compareToKey","mid","comp","pushSplice","latest","beforeIdx","afterIdx","beforeElement","afterElement","findFirstIdxMonotonousOrArrLen","startIdx","originalLength","newItemsLength","isLessThan","isLessThanOrEqual","isGreaterThan","greaterThan","lessThan","firstIdx","lastIdx","takeWhile","predicate","takeFromEndWhile","endIdx","peek","peekLast","dequeue","removeLast","takeCount","empty","_callback","iterate","forEach","handler","toArray","cb","mapFn","some","findFirst","findLast","findLastMaxBy","first","_indexMap","createSortPermutation","compareFn","sortIndices","keys","index1","index2","apply","_","inverse","inverseIndexMap","findLastIdx","fromIndex","findLastIdxMonotonous","endIdxEx","MonotonousArray","findLastMonotonous","findFirstMonotonous","findFirstIdxMonotonous","findFirstMax","findLastMax","findFirstMin","findMaxIdx","maxIdx","mapFindFirst","mapped","assertInvariants","_array","_findLastMonotonousLastIdx","_prevFindLastPredicate","SetWithKey","groupFn","diffSets","diffMaps","intersection","setA","setB","elem","Symbol","toStringTag","toKey","_map","entry","callbackfn","thisArg","iterator","BugIndicatingError","ErrorNoTelemetry","ExpectedError","NotSupportedError","NotImplementedError","ReadonlyError","errorHandler","ErrorHandler","setUnexpectedErrorHandler","newUnexpectedErrorHandler","isSigPipeError","cast","code","syscall","toUpperCase","onUnexpectedError","isCancellationError","onUnexpectedExternalError","transformErrorForSerialization","$isError","stack","stacktrace","noTelemetry","isErrorNoTelemetry","transformErrorFromSerialization","canceled","canceledName","illegalArgument","illegalState","getErrorMessage","err","listeners","unexpectedErrorHandler","addListener","listener","_removeListener","emit","getUnexpectedErrorHandler","arguments","isExpected","msg","fromError","setPrototypeOf","prototype","createSingleCallFunction","fnDidRunCallback","_this","didCall","Iterable","is","thing","_empty","freeze","single","wrap","iterableOrElement","iterable","reverse","next","done","find","flatMap","iterables","reducer","initialValue","consume","atMost","POSITIVE_INFINITY","consumed","asyncToArray","DisposableMap","ImmortalReference","AsyncReferenceCollection","ReferenceCollection","SafeDisposable","RefCountedDisposable","MandatoryMutableDisposable","DisposableStore","DisposableTracker","setDisposableTracker","tracker","disposableTracker","trackDisposable","markAsDisposed","markAsSingleton","singleton","isDisposable","disposeIfDisposable","disposables","combinedDisposable","children","child","setParent","setParentOfDisposables","disposeOnReturn","store","arrays_1","collections_1","map_1","functional_1","iterator_1","livingDisposables","getDisposableData","source","isSingleton","disposable","getRootParent","cache","cacheValue","getTrackedDisposables","rootParentCache","computeLeakingDisposables","maxReported","preComputedLeaks","uncoveredLeakingObjs","leakingObjects","info","leakingObjsSet","getStackTracePath","leaking","trim","replace","linesToRemove","regexp","removePrefix","stackTraceStarts","SetMap","stackTracePath","join","stackTraceFormattedLines","prevStarts","continuations","cont","leaks","details","setParentOfDisposable","errors","AggregateError","self","DISABLE_DISPOSED_WARNING","_toDispose","_isDisposed","isDisposed","deleteAndLeak","None","_store","_value","clearAndLeak","oldValue","_disposable","_counter","acquire","unset","isset","callback","references","args","reference","counter","object","createReferencedObject","destroyReferencedObject","referenceCollection","ref","clearAndDisposeAll","skipDisposeOnOverwrite","deleteAndDispose","Touch","BidirectionalMap","CounterSet","getOrSet","mapToString","setToString","mapsStrictEqualIgnoreOrder","_m1","_m2","getKey","__webpack_module_cache__","__webpack_require__","moduleId","cachedModule","__webpack_modules__","enableSizeReports","sixelSupport","iipSupport","_disposables","_handlers","_defaultOpts","_disposeLater","activate","terminal","ImageStorage","windowOps","options","windowOptions","getWinSizePixels","getCellSizePixels","getWinSizeChars","parser","registerCsiHandler","prefix","_decset","_decrst","_da1","_xtermGraphicsAttributes","onRender","intermediates","registerEscHandler","onRequestReset","onBufferChange","onResize","sixelHandler","SixelHandler","_parser","registerDcsHandler","iipHandler","IIPHandler","registerOscHandler","limit","storageUsage","_report","coreService","triggerDataEvent","toFixed","sqrt"],"sourceRoot":""}