@sportsdataverse/sdvtables 0.1.0 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (42) hide show
  1. package/README.md +70 -112
  2. package/data/table_themes.json +12136 -0
  3. package/data/table_themes.json.sha256 +1 -0
  4. package/dist/aggrid.d.ts +104 -0
  5. package/dist/aggrid.js +230 -0
  6. package/dist/aggrid.js.map +1 -0
  7. package/dist/chunk-3TJR7TKS.js +223 -0
  8. package/dist/chunk-3TJR7TKS.js.map +1 -0
  9. package/dist/{chunk-UCRLJGDL.js → chunk-R375P3MN.js} +963 -276
  10. package/dist/chunk-R375P3MN.js.map +1 -0
  11. package/dist/chunk-UTOVFIFT.js +15176 -0
  12. package/dist/chunk-UTOVFIFT.js.map +1 -0
  13. package/dist/{chunk-U6W6MWKW.js → chunk-VLF2S6VW.js} +7 -5
  14. package/dist/chunk-VLF2S6VW.js.map +1 -0
  15. package/dist/chunk-WBTFIGYK.js +189 -0
  16. package/dist/chunk-WBTFIGYK.js.map +1 -0
  17. package/dist/{engine-CkfxYXAL.d.ts → engine-BFIPJUlC.d.ts} +1 -1
  18. package/dist/export.d.ts +1 -1
  19. package/dist/export.js +4 -3
  20. package/dist/export.js.map +1 -1
  21. package/dist/html.d.ts +8 -5
  22. package/dist/html.js +4 -3
  23. package/dist/index.d.ts +121 -8
  24. package/dist/index.js +51 -3
  25. package/dist/index.js.map +1 -1
  26. package/dist/mui.d.ts +134 -0
  27. package/dist/mui.js +193 -0
  28. package/dist/mui.js.map +1 -0
  29. package/dist/react.d.ts +2 -2
  30. package/dist/react.js +3 -2
  31. package/dist/react.js.map +1 -1
  32. package/dist/spec-A88vJX5A.d.ts +748 -0
  33. package/dist/tanstack-table.d.ts +113 -0
  34. package/dist/tanstack-table.js +98 -0
  35. package/dist/tanstack-table.js.map +1 -0
  36. package/dist/{tokens-CpYFsFtf.d.ts → tokens-CHwBt9gs.d.ts} +1 -1
  37. package/package.json +40 -3
  38. package/dist/chunk-4VKYHOHL.js +0 -2081
  39. package/dist/chunk-4VKYHOHL.js.map +0 -1
  40. package/dist/chunk-U6W6MWKW.js.map +0 -1
  41. package/dist/chunk-UCRLJGDL.js.map +0 -1
  42. package/dist/spec-BEhLDtj_.d.ts +0 -430
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/errors.ts","../src/define.ts","../src/predicate.ts","../src/snake.ts","../src/format.ts","../src/themes/tokens.ts","../src/themes/sdv.ts","../src/themes/almanac.ts","../src/themes/athletic.ts","../src/themes/booktabs.ts","../src/themes/broadsheet.ts","../src/themes/brutalist.ts","../src/themes/luminance.ts","../src/themes/drench.ts","../src/themes/gtutils.ts","../src/themes/kenpom.ts","../src/themes/midnight.ts","../src/themes/ncaa.ts","../src/themes/pl.ts","../src/themes/savant.ts","../src/themes/scoreboard.ts","../src/themes/sofa.ts","../src/themes/swiss.ts","../src/themes/terminal.ts","../src/themes/tier.ts","../src/themes/tufte.ts","../src/themes/index.ts","../src/engine.ts"],"names":["_","hex6","v","onColor","matches"],"mappings":";;;AAEO,IAAM,cAAA,GAAN,cAA6B,YAAA,CAAa;AAAC;;;ACgG3C,IAAM,eAAkC,CAAC,SAAA,EAAW,SAAA,EAAW,SAAA,EAAW,WAAW,SAAS;AAI9F,SAAS,aAAA,GAAyC;AACvD,EAAA,MAAM,CAAA,GAAsD;AAAA,IAC1D,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,GAAG,CAAA,EAAE,CAAA;AAAA,IAClD,GAAA,EAAK,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,GAAG,CAAA,EAAE,CAAA;AAAA,IAChD,GAAA,EAAK,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,KAAA,EAAO,GAAA,EAAK,GAAG,CAAA,EAAE,CAAA;AAAA,IAChD,GAAA,EAAK,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,KAAA,EAAO,KAAK,MAAA,EAAQ,CAAA,EAAG,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA,EAAE,CAAA;AAAA,IACxE,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,KAAK,WAAA,EAAa,IAAA,EAAM,UAAA,EAAY,OAAA,EAAS,GAAG,CAAA,EAAE,CAAA;AAAA,IAC1F,OAAO,CAAC,IAAA,EAAM,EAAA,EAAI,CAAA,GAAI,EAAC,MAAO;AAAA,MAC5B,IAAA,EAAM,OAAA;AAAA,MACN,GAAA,EAAK,IAAA;AAAA,MACL,EAAA;AAAA,MACA,KAAA,EAAO,QAAA;AAAA,MACP,OAAA,EAAS,KAAA;AAAA,MACT,QAAA,EAAU,CAAA;AAAA,MACV,MAAA,EAAQ,KAAA;AAAA,MACR,KAAA,EAAO,IAAA;AAAA,MACP,aAAA,EAAe,SAAA;AAAA,MACf,aAAA,EAAe,SAAA;AAAA,MACf,SAAA,EAAW,IAAA;AAAA,MACX,GAAG;AAAA,KACL,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,IAAA,EAAM,CAAA,GAAI,EAAC,MAAO;AAAA,MACxB,IAAA,EAAM,OAAA;AAAA,MACN,GAAA,EAAK,KAAK,CAAC,CAAA;AAAA,MACX,IAAA;AAAA,MACA,SAAA,EAAW,GAAA;AAAA,MACX,KAAA,EAAO,KAAA;AAAA,MACP,OAAA,EAAS,CAAA;AAAA,MACT,aAAA,EAAe,CAAA;AAAA,MACf,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,IAAA;AAAA,MACb,WAAA,EAAa,GAAA;AAAA,MACb,GAAG;AAAA,KACL,CAAA;AAAA,IACA,IAAA,EAAM,CAAC,GAAA,EAAK,CAAA,MAAO,EAAE,IAAA,EAAM,MAAA,EAAQ,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,WAAA,EAAa,KAAA,EAAO,GAAG,CAAA,EAAE,CAAA;AAAA,IAC7E,QAAA,EAAU,CAAC,GAAA,EAAK,CAAA,MAAO,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,MAAA,EAAQ,EAAA,EAAI,GAAG,CAAA,EAAE,CAAA;AAAA,IACjE,QAAA,EAAU,CAAC,GAAA,EAAK,CAAA,MAAO,EAAE,IAAA,EAAM,UAAA,EAAY,GAAA,EAAK,QAAA,EAAU,MAAA,EAAQ,MAAA,EAAQ,EAAA,EAAI,GAAG,CAAA,EAAE,CAAA;AAAA,IACnF,UAAA,EAAY,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO;AAAA,MAC5B,IAAA,EAAM,YAAA;AAAA,MACN,GAAA;AAAA,MACA,OAAA,EAAS,CAAC,SAAA,EAAW,SAAS,CAAA;AAAA,MAC9B,QAAA,EAAU,YAAA;AAAA,MACV,SAAA,EAAW,MAAA;AAAA,MACX,UAAA,EAAY,QAAA;AAAA,MACZ,YAAA,EAAc,IAAA;AAAA,MACd,MAAA,EAAQ,EAAA;AAAA,MACR,OAAA,EAAS,KAAA;AAAA,MACT,YAAA,EAAc,IAAA;AAAA,MACd,UAAA,EAAY,EAAA;AAAA,MACZ,GAAG;AAAA,KACL,CAAA;AAAA,IACA,UAAA,EAAY,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,YAAA,EAAc,KAAK,OAAA,EAAS,YAAA,EAAc,OAAA,EAAS,KAAA,EAAO,GAAG,CAAA,EAAE,CAAA;AAAA;AAAA,IAErG,YAAA,EAAc,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO;AAAA,MAC9B,IAAA,EAAM,cAAA;AAAA,MACN,GAAA;AAAA,MACA,QAAA,EAAU,SAAA;AAAA,MACV,SAAA,EAAW,SAAA;AAAA,MACX,YAAA,EAAc,OAAA;AAAA,MACd,aAAA,EAAe,OAAA;AAAA,MACf,YAAA,EAAc,OAAA;AAAA,MACd,QAAA,EAAU,GAAA;AAAA,MACV,UAAA,EAAY,IAAA;AAAA,MACZ,GAAG;AAAA,KACL,CAAA;AAAA;AAAA,IAEA,aAAA,EAAe,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO;AAAA,MAC/B,IAAA,EAAM,eAAA;AAAA,MACN,GAAA;AAAA,MACA,MAAA,EAAQ,CAAC,CAAA,EAAG,GAAG,CAAA;AAAA,MACf,KAAA,EAAO,MAAA;AAAA,MACP,OAAA,EAAS,CAAC,SAAA,EAAW,SAAA,EAAW,SAAS,CAAA;AAAA,MACzC,OAAA,EAAS,KAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,CAAA;AAAA,MACb,UAAA,EAAY,EAAA;AAAA,MACZ,SAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,CAAA;AAAA,MACX,SAAA,EAAW,IAAA;AAAA,MACX,OAAA,EAAS,QAAA;AAAA,MACT,WAAA,EAAa,SAAA;AAAA,MACb,QAAA,EAAU,CAAA;AAAA,MACV,KAAA,EAAO,OAAA;AAAA,MACP,GAAG;AAAA,KACL,CAAA;AAAA;AAAA,IAEA,YAAA,EAAc,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO;AAAA,MAC9B,IAAA,EAAM,cAAA;AAAA,MACN,GAAA;AAAA,MACA,MAAA,EAAQ,CAAC,CAAA,EAAG,IAAA,EAAM,GAAG,CAAA;AAAA,MACrB,IAAA,EAAM,SAAA;AAAA,MACN,OAAA,EAAS,SAAA;AAAA,MACT,IAAA,EAAM,EAAA;AAAA,MACN,GAAG;AAAA,KACL,CAAA;AAAA,IACA,WAAW,CAAC,GAAA,EAAK,IAAA,EAAM,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,WAAA,EAAa,KAAK,IAAA,EAAM,IAAA,EAAM,WAAW,IAAA,EAAM,KAAA,EAAO,GAAG,CAAA,EAAE,CAAA;AAAA,IACtG,WAAA,EAAa,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO;AAAA,MAC7B,IAAA,EAAM,aAAA;AAAA,MACN,GAAA;AAAA,MACA,IAAA,EAAM,SAAA;AAAA,MACN,IAAA,EAAM,KAAA;AAAA,MACN,MAAA,EAAQ,KAAA;AAAA,MACR,SAAA,EAAW,CAAC,IAAI,CAAA;AAAA,MAChB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAG;AAAA,KACL,CAAA;AAAA,IACA,mBAAA,EAAqB,CAAC,GAAA,EAAK,KAAA,EAAO,MAAM,CAAA,MAAO;AAAA,MAC7C,IAAA,EAAM,qBAAA;AAAA,MACN,GAAA;AAAA,MACA,KAAA;AAAA,MACA,IAAA;AAAA,MACA,WAAA,EAAa,EAAA;AAAA,MACb,cAAA,EAAgB,EAAA;AAAA,MAChB,KAAA,EAAO,OAAA;AAAA,MACP,GAAG;AAAA,KACL,CAAA;AAAA,IACA,YAAA,EAAc,CAAC,GAAA,EAAK,CAAA,MAAO;AAAA,MACzB,IAAA,EAAM,cAAA;AAAA,MACN,GAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,OAAA,EAAS,SAAA;AAAA,MACT,QAAA,EAAU,CAAA;AAAA,MACV,GAAG;AAAA,KACL,CAAA;AAAA,IACA,WAAA,EAAa,CAAC,GAAA,EAAK,CAAA,MAAO;AAAA,MACxB,IAAA,EAAM,aAAA;AAAA,MACN,GAAA;AAAA,MACA,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,GAAA;AAAA,MACP,OAAA,EAAS,SAAA;AAAA,MACT,GAAG;AAAA,KACL,CAAA;AAAA,IACA,KAAA,EAAO,CAAC,GAAA,EAAK,CAAA,GAAI,EAAC,MAAO,EAAE,IAAA,EAAM,OAAA,EAAS,GAAA,EAAK,MAAA,EAAQ,MAAA,EAAQ,GAAG,CAAA,EAAE;AAAA,GACtE;AACA,EAAA,OAAO,EAAE,GAAG,CAAA,EAAG,OAAA,EAAS,EAAE,IAAA,EAAM,QAAA,EAAU,EAAE,KAAA,EAAM;AACpD;AAGA,IAAM,aAAA,GAAmD;AAAA,EACvD,OAAA,EAAS,SAAA;AAAA,EACT,UAAA,EAAY,SAAA;AAAA,EACZ,QAAA,EAAU;AACZ,CAAA;AAGO,IAAM,YAAA,GAAN,MAAM,aAAA,CAAkB;AAAA,EAC7B,YAA6B,CAAA,EAAmB;AAAnB,IAAA,IAAA,CAAA,CAAA,GAAA,CAAA;AAAA,EAAoB;AAAA,EAApB,CAAA;AAAA,EACrB,IAAI,CAAA,EAAuC;AACjD,IAAA,OAAO,IAAI,aAAA,CAAa,EAAE,GAAG,KAAK,CAAA,EAAG,WAAA,EAAa,CAAC,GAAG,IAAA,CAAK,CAAA,CAAE,WAAA,EAAa,CAAC,GAAG,CAAA;AAAA,EAChF;AAAA,EACA,GAAG,EAAA,EAA+B;AAChC,IAAA,OAAO,IAAI,aAAA,CAAa,EAAE,GAAG,IAAA,CAAK,CAAA,EAAG,IAAI,CAAA;AAAA,EAC3C;AAAA;AAAA,EAEA,OAAO,GAAA,EAA4C;AACjD,IAAA,OAAO,IAAI,cAAa,EAAE,GAAG,KAAK,CAAA,EAAG,MAAA,EAAQ,KAAK,CAAA;AAAA,EACpD;AAAA,EACA,QAAQ,EAAA,EAA8E;AACpF,IAAA,OAAO,IAAI,aAAA,CAAa,EAAE,GAAG,IAAA,CAAK,CAAA,EAAG,OAAA,EAAS,EAAA,CAAG,aAAA,EAAoB,CAAA,EAAG,CAAA;AAAA,EAC1E;AAAA,EACA,KAAA,CACE,IAAA,EACA,CAAA,GAAuE,EAAC,EACrD;AACnB,IAAA,OAAO,IAAI,aAAA,CAAa;AAAA,MACtB,GAAG,IAAA,CAAK,CAAA;AAAA,MACR,KAAA,EAAO;AAAA,QACL,IAAA;AAAA,QACA,OAAA,EAAS,CAAA,CAAE,OAAA,IAAW,aAAA,CAAc,IAAI,CAAA,IAAK,aAAA;AAAA,QAC7C,GAAI,EAAE,OAAA,GAAU,EAAE,SAAS,CAAA,CAAE,OAAA,KAAY;AAAC;AAC5C,KACD,CAAA;AAAA,EACH;AAAA,EACA,MAAM,IAAA,EAAiC;AACrC,IAAA,OAAO,KAAK,GAAA,CAAI,EAAE,IAAA,EAAM,OAAA,EAAS,MAAM,CAAA;AAAA,EACzC;AAAA,EACA,SAAS,IAAA,EAAiC;AACxC,IAAA,OAAO,KAAK,GAAA,CAAI,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,CAAA;AAAA,EAC5C;AAAA,EACA,WAAA,CAAY,KAAA,EAAe,CAAA,GAAmD,EAAC,EAAsB;AACnG,IAAA,OAAO,IAAA,CAAK,IAAI,EAAE,IAAA,EAAM,eAAe,KAAA,EAAO,GAAG,GAAG,CAAA;AAAA,EACtD;AAAA,EACA,UAAA,CAAW,IAAA,EAAc,CAAA,GAA0B,EAAC,EAAsB;AACxE,IAAA,OAAO,IAAA,CAAK,IAAI,EAAE,IAAA,EAAM,cAAc,IAAA,EAAM,GAAG,GAAG,CAAA;AAAA,EACpD;AAAA,EACA,UAAA,CAAW,CAAA,GAAiD,EAAC,EAAsB;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,YAAA,EAAc,SAAA,EAAW,CAAA,EAAG,IAAA,EAAM,EAAA,EAAI,KAAA,EAAO,OAAA,EAAS,GAAG,GAAG,CAAA;AAAA,EACtF;AAAA,EACA,QAAQ,GAAA,EAA4C;AAClD,IAAA,OAAO,KAAK,GAAA,CAAI,EAAE,IAAA,EAAM,SAAA,EAAW,KAAK,CAAA;AAAA,EAC1C;AAAA,EACA,YAAA,CAAa,CAAA,GAAmD,EAAC,EAAsB;AACrF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,cAAA,EAAgB,KAAA,EAAO,SAAA,EAAW,KAAA,EAAO,CAAA,EAAG,GAAG,CAAA,EAAG,CAAA;AAAA,EAC5E;AAAA,EACA,SAAA,CACE,GAAA,EACA,CAAA,GAAwD,EAAC,EACtC;AACnB,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,GAAA;AAAA,MACA,KAAA,EAAO,CAAA;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,IAAA,EAAM,IAAA;AAAA,MACN,OAAA,EAAS,aAAA;AAAA,MACT,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EACA,QAAA,CACE,IAAA,EACA,CAAA,GAAwD,EAAC,EACtC;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,UAAA,EAAY,MAAM,SAAA,EAAW,OAAA,EAAS,GAAG,CAAA,EAAG,CAAA;AAAA,EACtE;AAAA,EACA,SAAA,CACE,IAAA,EACA,CAAA,GAAyD,EAAC,EACvC;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,aAAa,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,WAAA,EAAa,CAAA,EAAG,QAAA,EAAU,MAAA,EAAQ,GAAG,GAAG,CAAA;AAAA,EACjG;AAAA,EACA,OAAA,CACE,KAAA,EACA,CAAA,GAAwD,EAAC,EACtC;AACnB,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,SAAA;AAAA,MACN,OAAO,OAAO,KAAA,KAAU,QAAA,GAAW,CAAC,KAAK,CAAA,GAAI,KAAA;AAAA,MAC7C,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,CAAA;AAAA,MACR,KAAA,EAAO,QAAA;AAAA,MACP,SAAA,EAAW,CAAA;AAAA,MACX,aAAA,EAAe,OAAA;AAAA,MACf,GAAA,EAAK,CAAC,CAAC,CAAA;AAAA,MACP,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EACA,UAAA,CAAW,CAAA,GAAiD,EAAC,EAAsB;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,OAAA,EAAS,MAAA,EAAQ,CAAA,EAAG,aAAA,EAAe,KAAA,EAAO,GAAG,GAAG,CAAA;AAAA,EAC/F;AAAA,EACA,UAAA,CACE,IAAA,EACA,MAAA,EACA,CAAA,GAAqE,EAAC,EACnD;AACnB,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,YAAA;AAAA,MACN,IAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,MACX,QAAA,EAAU,MAAA;AAAA,MACV,QAAA,EAAU,QAAA;AAAA,MACV,QAAA,EAAU,EAAA;AAAA,MACV,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,EAAA;AAAA,MACZ,QAAA,EAAU,OAAA;AAAA,MACV,UAAA,EAAY,MAAA;AAAA,MACZ,SAAA,EAAW,SAAA;AAAA,MACX,QAAA,EAAU,EAAA;AAAA,MACV,SAAA,EAAW,MAAA;AAAA,MACX,WAAA,EAAa,EAAA;AAAA,MACb,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA,EAEA,gBAAA,CAAiB,CAAA,GAAuD,EAAC,EAAsB;AAC7F,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,kBAAA;AAAA,MACN,KAAA,EAAO,CAAA;AAAA,MACP,MAAA,EAAQ,CAAA;AAAA,MACR,aAAA,EAAe,KAAA;AAAA,MACf,QAAA,EAAU,QAAA;AAAA,MACV,WAAA,EAAa,EAAA;AAAA,MACb,YAAA,EAAc,EAAA;AAAA,MACd,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EACA,cAAA,CACE,GAAA,EACA,CAAA,GAA6D,EAAC,EAC3C;AACnB,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,gBAAA;AAAA,MACN,GAAA;AAAA,MACA,QAAA,EAAU,KAAA;AAAA,MACV,KAAA,EAAO,QAAA;AAAA,MACP,UAAA,EAAY,EAAA;AAAA,MACZ,MAAA,EAAQ,IAAA;AAAA,MACR,GAAA,EAAK,EAAA;AAAA,MACL,SAAA,EAAW,YAAA;AAAA,MACX,KAAA,EAAO,QAAA;AAAA,MACP,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA;AAAA,EAEA,YAAA,CACE,KAAA,EACA,CAAA,GAA6D,EAAC,EAC3C;AACnB,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,cAAA;AAAA,MACN,KAAA;AAAA,MACA,MAAA,EAAQ,CAAC,IAAA,EAAM,IAAA,EAAM,GAAG,CAAA;AAAA,MACxB,OAAA,EAAS,CAAC,KAAA,EAAO,IAAA,EAAM,GAAG,CAAA;AAAA,MAC1B,WAAA,EAAa,IAAA;AAAA,MACb,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,IAAA;AAAA,MACP,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EACA,QAAA,CACE,OAAA,EACA,CAAA,GAA2D,EAAC,EACzC;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,YAAY,OAAA,EAAS,MAAA,EAAQ,KAAA,EAAO,IAAA,EAAM,MAAA,EAAQ,IAAA,EAAM,IAAA,EAAM,GAAG,GAAG,CAAA;AAAA,EAC9F;AAAA,EACA,SAAA,CACE,OAAA,EACA,CAAA,GAA4D,EAAC,EAC1C;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,aAAa,OAAA,EAAS,OAAA,EAAS,GAAA,EAAM,KAAA,EAAO,YAAA,EAAc,QAAA,EAAU,CAAA,EAAG,GAAG,GAAG,CAAA;AAAA,EACvG;AAAA,EACA,SAAA,CACE,QAAA,EACA,CAAA,GAA6D,EAAC,EAC3C;AACnB,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,QAAA;AAAA,MACA,KAAA,EAAO,KAAA;AAAA,MACP,SAAA,EAAW,KAAA;AAAA,MACX,KAAA,EAAO,OAAA;AAAA,MACP,UAAA,EAAY,OAAA;AAAA,MACZ,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EACA,SAAA,CAAU,CAAA,GAAgD,EAAC,EAAsB;AAC/E,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,WAAA;AAAA,MACN,OAAA,EAAS,IAAA;AAAA,MACT,IAAA,EAAM,KAAA;AAAA,MACN,QAAA,EAAU,QAAA;AAAA,MACV,KAAA,EAAO,SAAA;AAAA,MACP,KAAA,EAAO,CAAA;AAAA,MACP,IAAA,EAAM,8BAAA;AAAA,MACN,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EACA,UAAA,CAAW,CAAA,GAAiD,EAAC,EAAsB;AACjF,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,YAAA,EAAc,KAAA,EAAO,EAAA,EAAI,OAAA,EAAS,IAAA,EAAM,GAAG,CAAA,EAAG,CAAA;AAAA,EACxE;AAAA,EACA,UAAA,CACE,OAAA,EACA,CAAA,GAA6D,EAAC,EAC3C;AACnB,IAAA,OAAO,KAAK,GAAA,CAAI;AAAA,MACd,IAAA,EAAM,YAAA;AAAA,MACN,OAAA;AAAA,MACA,KAAA,EAAO,GAAA;AAAA,MACP,KAAA,EAAO,EAAA;AAAA,MACP,MAAA,EAAQ,IAAA;AAAA,MACR,IAAA,EAAM,QAAA;AAAA,MACN,IAAA,EAAM,IAAA;AAAA,MACN,KAAA,EAAO,MAAA;AAAA,MACP,GAAG;AAAA,KACJ,CAAA;AAAA,EACH;AAAA,EACA,KAAA,CAAM,CAAA,GAA4C,EAAC,EAAsB;AACvE,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,SAAS,KAAA,EAAO,CAAA,EAAG,GAAA,EAAK,EAAA,EAAI,MAAM,EAAA,EAAI,SAAA,EAAW,IAAA,EAAM,GAAG,GAAG,CAAA;AAAA,EACvF;AAAA,EACA,MACE,MAAA,EACA,OAAA,EACA,YAAA,EACA,CAAA,GAAoF,EAAC,EAClE;AACnB,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,SAAS,MAAA,EAAQ,OAAA,EAAS,YAAA,EAAc,SAAA,EAAW,MAAA,EAAQ,KAAA,EAAO,MAAA,EAAQ,GAAG,GAAG,CAAA;AAAA,EAC1G;AAAA,EACA,IAAA,CAAK,MAAA,EAAgB,CAAA,GAAsD,EAAC,EAAsB;AAChG,IAAA,OAAO,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,EAAM,MAAA,EAAQ,QAAQ,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA,EAAG,CAAA;AAAA,EAC9D;AAAA,EACA,KAAA,GAAwB;AACtB,IAAA,IAAI,IAAA,CAAK,CAAA,CAAE,OAAA,CAAQ,MAAA,KAAW,CAAA;AAC5B,MAAA,MAAM,IAAI,eAAe,8DAA8D,CAAA;AACzF,IAAA,MAAM,IAAA,uBAAW,GAAA,EAAY;AAC7B,IAAA,KAAA,MAAW,GAAA,IAAO,IAAA,CAAK,CAAA,CAAE,OAAA,EAAS;AAChC,MAAA,IAAI,IAAA,CAAK,GAAA,CAAI,GAAA,CAAI,GAAG,CAAA,EAAG,MAAM,IAAI,cAAA,CAAe,CAAA,YAAA,EAAe,GAAA,CAAI,GAAG,CAAA,eAAA,CAAiB,CAAA;AACvF,MAAA,IAAA,CAAK,GAAA,CAAI,IAAI,GAAG,CAAA;AAAA,IAClB;AACA,IAAA,IAAI,IAAA,CAAK,CAAA,CAAE,WAAA,CAAY,MAAA,CAAO,CAAC,MAAM,CAAA,CAAE,IAAA,KAAS,OAAO,CAAA,CAAE,MAAA,GAAS,CAAA;AAChE,MAAA,MAAM,IAAI,eAAe,mBAAmB,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,CAAA;AAAA,EACd;AACF;AAsBO,SAAS,WAAA,GAAsC;AACpD,EAAA,OAAO,IAAI,YAAA,CAAkB;AAAA,IAC3B,SAAS,EAAC;AAAA,IACV,aAAa,EAAC;AAAA,IACd,KAAA,EAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAS,aAAA;AAAc,GAC9C,CAAA;AACH;;;ACvgBA,IAAM,MAAA,GAAS,CAAC,CAAA,KACd,CAAA,KAAM,IAAA,IAAQ,CAAA,KAAM,MAAA,IAAc,OAAO,CAAA,KAAM,QAAA,IAAY,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA;AACpE,SAAS,OAAA,CAAa,GAAmB,GAAA,EAAmB;AACjE,EAAA,MAAM,CAAA,GAAK,GAAA,CAAgC,CAAA,CAAE,GAAG,CAAA;AAChD,EAAA,QAAQ,EAAE,EAAA;AAAI,IACZ,KAAK,QAAA;AACH,MAAA,OAAO,OAAO,CAAC,CAAA;AAAA,IACjB,KAAK,SAAA;AACH,MAAA,OAAO,CAAC,OAAO,CAAC,CAAA;AAAA,IAClB,KAAK,IAAA;AACH,MAAA,OAAO,MAAM,CAAA,CAAE,KAAA;AAAA,IACjB,KAAK,IAAA;AACH,MAAA,OAAO,MAAM,CAAA,CAAE,KAAA;AAAA,IACjB,KAAK,GAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,GAAK,CAAA,CAAE,KAAA;AAAA,IACzC,KAAK,IAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,IAAM,CAAA,CAAE,KAAA;AAAA,IAC1C,KAAK,GAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,GAAK,CAAA,CAAE,KAAA;AAAA,IACzC,KAAK,IAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,CAAA,IAAM,CAAA,CAAE,KAAA;AAAA,IAC1C,KAAK,IAAA;AACH,MAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,KAAK,CAAA,CAAE,KAAA,CAAM,SAAS,CAAC,CAAA;AAAA,IACrD,KAAK,OAAA;AACH,MAAA,OAAO,KAAA,CAAM,QAAQ,CAAA,CAAE,KAAK,KAAK,CAAC,CAAA,CAAE,KAAA,CAAM,QAAA,CAAS,CAAC,CAAA;AAAA,IACtD,KAAK,SAAA;AACH,MAAA,OAAO,OAAO,CAAA,KAAM,QAAA,IAAY,IAAI,MAAA,CAAO,MAAA,CAAO,CAAA,CAAE,KAAK,CAAC,CAAA,CAAE,IAAA,CAAK,CAAC,CAAA;AAAA,IACpE,SAAS;AACP,MAAA,MAAM,MAAa,CAAA,CAAE,EAAA;AACrB,MAAA,MAAM,IAAI,cAAA,CAAe,CAAA,qBAAA,EAAwB,MAAA,CAAO,GAAG,CAAC,CAAA,CAAE,CAAA;AAAA,IAChE;AAAA;AAEJ;AAMO,SAAS,UAAA,CACd,GAAA,EACA,IAAA,EACA,MAAA,GAAyB,IAAA,EACf;AACV,EAAA,IAAI,KAAA,CAAM,OAAA,CAAQ,GAAG,CAAA,EAAG;AACtB,IAAA,KAAA,MAAW,CAAA,IAAK,GAAA;AACd,MAAA,IAAI,CAAC,OAAO,SAAA,CAAU,CAAC,KAAK,CAAA,GAAI,CAAA,IAAK,KAAK,MAAA,CAAO,MAAA;AAC/C,QAAA,MAAM,IAAI,eAAe,CAAA,IAAA,EAAO,CAAC,kBAAkB,MAAA,CAAO,MAAA,GAAS,CAAC,CAAA,CAAE,CAAA;AAC1E,IAAA,IAAI,MAAA,KAAW,IAAA,EAAM,OAAO,CAAC,GAAG,GAAG,CAAA;AACnC,IAAA,MAAM,IAAA,GAAO,IAAI,GAAA,CAAI,GAAA,CAAI,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,CAAC,CAAC,CAAC,CAAA;AAC9C,IAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,GAAI,CAAC,CAAC,CAAA,GAAI,EAAG,CAAA;AAAA,EACxD;AACA,EAAA,MAAM,MAAgB,EAAC;AACvB,EAAA,IAAA,CAAK,OAAA,CAAQ,CAAC,CAAA,EAAG,CAAA,KAAM;AACrB,IAAA,IAAI,QAAQ,GAAA,EAAuB,CAAC,CAAA,EAAG,GAAA,CAAI,KAAK,CAAC,CAAA;AAAA,EACnD,CAAC,CAAA;AACD,EAAA,OAAO,GAAA;AACT;;;ACxDO,SAAS,UAAA,CACd,IAAA,EACA,CAAA,GAAgE,EAAC,EAC/C;AAClB,EAAA,IAAI,MAAA;AACJ,EAAA,IAAI,GAAA;AACJ,EAAA,IAAI,CAAA,CAAE,eAAe,MAAA,EAAW;AAC9B,IAAA,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,UAAU,CAAA;AAC7B,IAAA,IAAI,EAAE,GAAA,IAAO,CAAA,CAAA,EAAI,MAAM,IAAI,eAAe,+BAA+B,CAAA;AACzE,IAAA,MAAA,GAAS,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,GAAG,CAAA;AAAA,EACtC,CAAA,MAAO;AACL,IAAA,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAA,CAAE,KAAA,IAAS,CAAC,CAAA;AAChC,IAAA,IAAI,EAAE,MAAA,IAAU,CAAA,CAAA,EAAI,MAAM,IAAI,eAAe,0BAA0B,CAAA;AACvE,IAAA,GAAA,GAAM,IAAA,CAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,MAAM,CAAA;AAAA,EACtC;AACA,EAAA,MAAM,IAAA,GAAO,EAAE,IAAA,IAAQ,IAAA;AACvB,EAAA,OAAO,KAAA,CAAM,IAAA;AAAA,IAAK,EAAE,QAAQ,MAAA,EAAO;AAAA,IAAG,CAAC,CAAA,EAAG,CAAA,KACxC,KAAA,CAAM,IAAA,CAAK,EAAE,MAAA,EAAQ,GAAA,EAAI,EAAG,CAACA,IAAG,CAAA,KAAM,IAAA,CAAK,IAAI,GAAA,GAAM,CAAC,KAAK,IAAI;AAAA,GACjE;AACF;;;AClBO,IAAM,UAAU,CAAC,CAAA,KACtB,MAAM,IAAA,IACN,CAAA,KAAM,UACL,OAAO,CAAA,KAAM,YAAY,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,IACvC,OAAO,MAAM,QAAA,IAAY,CAAA,CAAE,MAAK,KAAM;AAGlC,SAAS,SAAS,CAAA,EAA2B;AAClD,EAAA,IAAI,OAAA,CAAQ,CAAC,CAAA,EAAG,OAAO,IAAA;AACvB,EAAA,IAAI,OAAO,CAAA,KAAM,QAAA,IAAY,qBAAqB,IAAA,CAAK,CAAC,GAAG,OAAO,IAAA;AAClE,EAAA,MAAM,IACJ,OAAO,CAAA,KAAM,QAAA,GACT,CAAA,GACA,OAAO,CAAA,KAAM,SAAA,GACX,MAAA,CAAO,CAAC,IACR,OAAO,CAAA,KAAM,WACX,MAAA,CAAO,CAAC,IACR,MAAA,CAAO,GAAA;AACjB,EAAA,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,IAAA,GAAO,CAAA;AAClC;AAEA,IAAM,QAAQ,CAAC,CAAA,KAAsB,CAAA,CAAE,OAAA,CAAQ,yBAAyB,GAAG,CAAA;AAG3E,SAAS,YAAA,CAAa,GAAW,MAAA,EAAwB;AACvD,EAAA,MAAM,KAAK,IAAI,QAAA,CAAS,IAAI,WAAA,CAAY,CAAC,CAAC,CAAA;AAC1C,EAAA,EAAA,CAAG,UAAA,CAAW,GAAG,CAAC,CAAA;AAClB,EAAA,MAAM,IAAA,GAAO,EAAA,CAAG,YAAA,CAAa,CAAC,CAAA;AAC9B,EAAA,MAAM,MAAA,GAAS,MAAA,CAAQ,IAAA,IAAQ,GAAA,GAAO,MAAM,CAAA;AAC5C,EAAA,MAAM,IAAA,GAAO,IAAA,GAAA,CAAS,EAAA,IAAM,GAAA,IAAO,EAAA;AACnC,EAAA,MAAM,CAAA,GAAI,MAAA,KAAW,CAAA,GAAI,IAAA,GAAO,OAAQ,EAAA,IAAM,GAAA;AAC9C,EAAA,MAAM,CAAA,GAAA,CAAK,MAAA,KAAW,CAAA,GAAI,CAAA,GAAI,MAAA,IAAU,IAAA;AACxC,EAAA,MAAM,GAAA,GAAM,CAAA,GAAI,GAAA,IAAO,MAAA,CAAO,MAAM,CAAA;AACpC,EAAA,IAAI,KAAK,CAAA,EAAG,OAAA,CAAQ,OAAO,MAAA,CAAO,CAAC,GAAG,QAAA,EAAS;AAC/C,EAAA,MAAM,CAAA,GAAI,MAAA,CAAO,CAAC,CAAC,CAAA;AACnB,EAAA,IAAI,IAAI,GAAA,IAAO,CAAA;AACf,EAAA,MAAM,CAAA,GAAI,GAAA,GAAA,CAAQ,EAAA,IAAM,CAAA,IAAK,EAAA;AAC7B,EAAA,MAAM,IAAA,GAAO,MAAO,CAAA,GAAI,EAAA;AACxB,EAAA,IAAI,IAAI,IAAA,IAAS,CAAA,KAAM,SAAS,CAAA,GAAI,EAAA,MAAQ,IAAK,CAAA,IAAK,EAAA;AACtD,EAAA,OAAO,EAAE,QAAA,EAAS;AACpB;AAMA,SAAS,KAAA,CAAM,CAAA,EAAW,MAAA,EAAgB,GAAA,EAAsB;AAC9D,EAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG,OAAO,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,GAAI,KAAA,GAAQ,CAAA,GAAI,IAAI,KAAA,GAAQ,MAAA;AAC1E,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,MAAM,CAAA,CAAE,QAAA,CAAS,MAAA,GAAS,CAAA,EAAG,GAAG,CAAA;AACpE,EAAA,MAAM,IAAI,CAAA,CAAE,KAAA,CAAM,CAAA,EAAG,CAAA,CAAE,SAAS,MAAM,CAAA;AACtC,EAAA,MAAM,CAAA,GAAI,CAAA,CAAE,KAAA,CAAM,CAAA,CAAE,SAAS,MAAM,CAAA;AACnC,EAAA,OAAA,CAAQ,IAAI,CAAA,IAAK,MAAA,CAAO,GAAG,CAAA,EAAG,EAAE,IAAI,GAAA,GAAM,EAAA,KAAO,GAAA,GAAM,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,CAAA,IAAM,SAAS,CAAA,GAAI,CAAA,CAAA,EAAI,CAAC,CAAA,CAAA,GAAK,EAAA,CAAA;AACjG;AAGO,SAAS,aAAA,CAAc,CAAA,EAAW,GAAA,GAAM,KAAA,EAAe;AAC5D,EAAA,IAAI,CAAC,OAAO,QAAA,CAAS,CAAC,GAAG,OAAO,CAAA,GAAI,IAAI,KAAA,GAAQ,MAAA;AAChD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,CAAE,aAAA,CAAc,CAAC,CAAA,CAAE,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAC,CAAA;AAC7D,EAAA,MAAM,KAAA,GAAQ,KAAA,CAAM,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,CAAA,GAAI,GAAG,CAAA,EAAG,KAAK,CAAA;AAC5D,EAAA,MAAM,IAAA,GAAO,KAAA,CAAM,KAAA,CAAM,GAAG,CAAA,CAAE,CAAC,CAAA,EAAG,OAAA,CAAQ,KAAA,EAAO,EAAE,CAAA,IAAK,EAAA;AACxD,EAAA,OAAO,KAAA,CAAM,CAAA,EAAG,IAAA,CAAK,MAAA,EAAQ,GAAG,CAAA;AAClC;AAMA,IAAM,QAAQ,CAAC,CAAA,KAAsB,CAAA,CAAE,OAAA,CAAQ,MAAM,QAAG,CAAA;AAKjD,SAAS,WAAA,CACd,CAAA,EACA,MAAA,EACA,UAAA,EACA,MAAA,EACQ;AACR,EAAA,MAAM,GAAA,GAAM,UAAA,KAAe,OAAA,IAAW,UAAA,KAAe,UAAA;AACrD,EAAA,IAAI,IAAA,GACF,CAAA,KAAM,IAAA,GACF,IAAA,GACA,WAAW,IAAA,IAAQ,MAAA,KAAW,MAAA,GAC5B,aAAA,CAAc,GAAG,GAAG,CAAA,GACpB,KAAA,CAAM,CAAA,EAAG,QAAQ,GAAG,CAAA;AAC5B,EAAA,IAAI,UAAA,KAAe,UAAA,EAAY,IAAA,GAAO,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,OAAA,IACrC,UAAA,KAAe,WAAW,IAAA,IAAQ,GAAA;AAC3C,EAAA,OAAO,IAAA,GAAO,MAAA;AAChB;AAEO,SAAS,YAAA,CACd,CAAA,EACA,CAAA,GAA+F,EAAC,EACxF;AACR,EAAA,MAAM,OAAO,CAAA,CAAE,MAAA,KAAW,MAAA,GAAY,aAAA,CAAc,GAAG,CAAA,CAAE,GAAA,IAAO,KAAK,CAAA,GAAI,MAAM,CAAA,EAAG,CAAA,CAAE,MAAA,EAAQ,CAAA,CAAE,OAAO,KAAK,CAAA;AAC1G,EAAA,MAAM,OAAO,CAAA,CAAE,SAAA,IAAa,CAAC,IAAA,CAAK,WAAW,GAAG,CAAA,IAAK,MAAA,CAAO,IAAA,CAAK,QAAQ,IAAA,EAAM,EAAE,CAAC,CAAA,KAAM,IAAI,GAAA,GAAM,EAAA;AAClG,EAAA,OAAO,CAAA,EAAG,CAAA,CAAE,MAAA,IAAU,EAAE,CAAA,EAAG,IAAI,CAAA,EAAG,KAAA,CAAM,IAAI,CAAC,CAAA,EAAG,CAAA,CAAE,UAAU,EAAE,CAAA,CAAA;AAChE;AAGO,SAAS,QAAQ,CAAA,EAAmB;AACzC,EAAA,MAAM,IAAI,IAAA,CAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,CAAA;AAChC,EAAA,MAAM,OAAO,CAAA,GAAI,GAAA;AACjB,EAAA,MAAM,MAAM,IAAA,IAAQ,EAAA,IAAM,IAAA,IAAQ,EAAA,GAAK,OAAQ,CAAC,IAAA,EAAM,IAAA,EAAM,IAAA,EAAM,IAAI,CAAA,CAAY,CAAA,GAAI,MAAM,CAAA,GAAI,CAAA,GAAI,KAAK,CAAC,CAAA;AAC1G,EAAA,OAAO,GAAG,IAAA,CAAK,KAAA,CAAM,CAAC,CAAC,GAAG,GAAG,CAAA,CAAA;AAC/B;AAEO,IAAM,IAAA,GAAO,CAAC,CAAA,KAAsB,CAAA,EAAG,MAAA,CAAO,MAAM,CAAA,EAAG,CAAA,EAAG,KAAK,CAAC,CAAC,CAAA,EAAA,CAAA;;;ACxGjE,IAAM,OAAA,GAAmD;AAAA;AAAA,EAE9D,WAAA,EAAa,EAAE,IAAA,EAAM,EAAA,EAAI,KAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,QAAA,EAAU,IAAI,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA,EAAG;AAAA,EAC3F,OAAA,EAAS,EAAE,IAAA,EAAM,EAAA,EAAI,KAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,QAAA,EAAU,IAAI,KAAA,EAAO,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA,EAAG;AAAA,EACtF,MAAA,EAAQ,EAAE,IAAA,EAAM,EAAA,EAAI,KAAK,CAAA,EAAG,KAAA,EAAO,EAAA,EAAI,QAAA,EAAU,IAAI,KAAA,EAAO,EAAA,EAAI,KAAA,EAAO,EAAA,EAAI,QAAQ,EAAA;AACrF;AACO,SAAS,aAAa,CAAA,EAA0B;AACrD,EAAA,MAAM,CAAA,GAAI,QAAQ,CAAC,CAAA;AACnB,EAAA,IAAI,CAAC,GAAG,MAAM,IAAI,eAAe,CAAA,oDAAA,EAAuD,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AACnG,EAAA,OAAO,CAAA;AACT;AAEO,SAAS,SAAS,CAAA,EAA4C;AACnE,EAAA,MAAM,IAAI,OAAA,CAAQ,WAAA;AAClB,EAAA,MAAM,CAAA,GAAI,aAAa,CAAC,CAAA;AACxB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,CAAA,CAAE,IAAA,GAAO,CAAA,CAAE,IAAA;AAAA,IACjB,GAAA,EAAK,CAAA,CAAE,GAAA,GAAM,CAAA,CAAE,GAAA;AAAA,IACf,KAAA,EAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA;AAAA,IACnB,QAAA,EAAU,CAAA,CAAE,QAAA,GAAW,CAAA,CAAE,QAAA;AAAA,IACzB,KAAA,EAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA;AAAA,IACnB,KAAA,EAAO,CAAA,CAAE,KAAA,GAAQ,CAAA,CAAE,KAAA;AAAA,IACnB,MAAA,EAAQ,CAAA,CAAE,MAAA,GAAS,CAAA,CAAE;AAAA,GACvB;AACF;AACO,IAAM,EAAA,GAA4B,IAAA;AAElC,SAAS,SAAA,CAAU,OAAe,GAAA,EAAqB;AAC5D,EAAA,IAAI;AACF,IAAA,OAAO,KAAK,KAAK,CAAA;AAAA,EACnB,CAAA,CAAA,MAAQ;AACN,IAAA,MAAM,IAAI,cAAA;AAAA,MACR,CAAA,EAAG,GAAG,CAAA,mEAAA,EAAsE,KAAK,CAAA,CAAA;AAAA,KACnF;AAAA,EACF;AACF;AA6DO,IAAM,UAAA,GAA6C;AAAA,EACxD,UAAA;AAAA,EACA,WAAA;AAAA,EACA,WAAA;AAAA,EACA,IAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,WAAA;AAAA,EACA,cAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,eAAA;AAAA,EACA,cAAA;AAAA,EACA,eAAA;AAAA,EACA,gBAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,eAAA;AAAA,EACA,YAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,SAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA,WAAA;AAAA,EACA,gBAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,UAAA;AAAA,EACA,YAAA;AAAA,EACA,KAAA;AAAA,EACA,YAAA;AAAA,EACA,UAAA;AAAA,EACA,UAAA;AAAA,EACA,WAAA;AAAA,EACA,YAAA;AAAA,EACA,kBAAA;AAAA,EACA,gBAAA;AAAA,EACA,mBAAA;AAAA,EACA,cAAA;AAAA,EACA,QAAA;AAAA,EACA,aAAA;AAAA,EACA,YAAA;AAAA,EACA,aAAA;AAAA,EACA;AACF;AASO,SAAS,UAAA,CAAW,GAAiB,IAAA,EAA2B;AACrE,EAAA,OAAO;AAAA,IACL,QAAA,EAAU,IAAA;AAAA,IACV,SAAA,EAAW,IAAA;AAAA,IACX,SAAA,EAAW,IAAA;AAAA,IACX,EAAA,EAAI,SAAA;AAAA,IACJ,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,SAAA;AAAA,IACP,MAAA,EAAQ,SAAA;AAAA,IACR,IAAA,EAAM,SAAA;AAAA,IACN,KAAA,EAAO,MAAA;AAAA,IACP,SAAA,EAAW,aAAA;AAAA,IACX,YAAA,EAAc,MAAA;AAAA,IACd,UAAA,EAAY,SAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,IACrB,cAAA,EAAgB,MAAA;AAAA,IAChB,aAAA,EAAe,QAAA;AAAA,IACf,aAAA,EAAe,SAAA;AAAA,IACf,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,IAC3B,aAAA,EAAe,QAAA;AAAA,IACf,cAAA,EAAgB,KAAA;AAAA,IAChB,OAAA,EAAS,aAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,IACrB,cAAA,EAAgB,MAAA;AAAA,IAChB,aAAA,EAAe,QAAA;AAAA,IACf,UAAA,EAAY,QAAA;AAAA,IACZ,cAAA,EAAgB,MAAA;AAAA,IAChB,iBAAA,EAAmB,MAAA;AAAA,IACnB,OAAA,EAAS,aAAA;AAAA,IACT,UAAA,EAAY,SAAA;AAAA,IACZ,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,IACrB,cAAA,EAAgB,MAAA;AAAA,IAChB,cAAA,EAAgB,MAAA;AAAA,IAChB,iBAAA,EAAmB,MAAA;AAAA,IACnB,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,IACnB,UAAA,EAAY,KAAA;AAAA,IACZ,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,IACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,IACpB,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,IAClB,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,IAClB,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,IACnB,UAAA,EAAY,QAAA;AAAA,IACZ,gBAAA,EAAkB,MAAA;AAAA,IAClB,cAAA,EAAgB,MAAA;AAAA,IAChB,iBAAA,EAAmB,MAAA;AAAA,IACnB,YAAA,EAAc,MAAA;AAAA,IACd,MAAA,EAAQ,aAAA;AAAA,IACR,WAAA,EAAa,SAAA;AAAA,IACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM,CAAA;AAAA,IACvB,WAAA,EAAa,QAAA;AAAA,IACb,OAAA,EAAS;AAAA,GACX;AACF;AACO,IAAM,YAAA,GACX,2IAAA;AACK,IAAM,YAAY,CAAC,MAAA,KAA2B,CAAA,CAAA,EAAI,MAAM,MAAM,YAAY,CAAA;AAC1E,IAAM,MAAA,GAAS,CAAC,CAAA,EAAW,KAAA,EAAe,KAAA,GAAQ,OAAA,KAAoB,CAAA,EAAG,EAAA,CAAG,CAAC,CAAC,CAAA,CAAA,EAAI,KAAK,IAAI,KAAK,CAAA,CAAA;AC3MhG,IAAM,QAAA,GAAW,SAAA;AACjB,IAAM,QAAA,GAAW,SAAA;AACjB,IAAM,WAAA,GAAc,0CAAA;AAa3B,IAAM,KAAA,GAAQ,CAAC,OAAA,MAA0B;AAAA,EACvC,EAAA,EAAI,SAAA;AAAA,EACJ,SAAA,EAAW,SAAA;AAAA,EACX,KAAA,EAAO,QAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,QAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT;AACF,CAAA,CAAA;AACA,IAAM,OAAO,OAAY;AAAA,EACvB,EAAA,EAAI,QAAA;AAAA,EACJ,SAAA,EAAW,QAAA;AAAA,EACX,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,KAAA,EAAO,SAAA;AAAA,EACP,IAAA,EAAM,SAAA;AAAA,EACN,IAAA,EAAM,SAAA;AAAA,EACN,OAAA,EAAS,SAAA;AAAA,EACT,OAAA,EAAS;AACX,CAAA,CAAA;AAEO,SAAS,WAAA,CAAY,EAAA,EAAY,EAAA,EAAY,MAAA,GAAS,GAAA,EAAa;AACxE,EAAA,KAAA,IAAS,CAAA,GAAI,CAAA,EAAG,CAAA,GAAI,EAAA,EAAI,CAAA,EAAA,EAAK;AAC3B,IAAA,MAAM,IAAI,GAAA,CAAI,EAAA,EAAI,EAAA,EAAI,IAAA,GAAO,IAAI,IAAI,CAAA;AACrC,IAAA,IAAI,QAAA,CAAS,CAAA,EAAG,EAAE,CAAA,IAAK,QAAQ,OAAO,CAAA;AAAA,EACxC;AACA,EAAA,OAAO,EAAA;AACT;AACA,SAAS,KAAA,CAAM,IAAA,EAAc,GAAA,EAAe,GAAA,EAAiB;AAC3D,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAiC,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AACtE,EAAA,MAAM,CAAA,GAAiB;AAAA,IACrB,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,MAAM,CAAC,CAAA;AAAA,IAClC,SAAA,EAAW,UAAU,OAAO,CAAA;AAAA,IAC5B,SAAA,EAAW,UAAU,OAAO,CAAA;AAAA,IAC5B,IAAI,GAAA,CAAI,EAAA;AAAA,IACR,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,OAAO,GAAA,CAAI,KAAA;AAAA,IACX,QAAQ,GAAA,CAAI,KAAA;AAAA,IACZ,MAAM,GAAA,CAAI,IAAA;AAAA,IACV,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,GAAA,CAAI,IAAI,CAAA;AAAA,IACzB,WAAW,GAAA,CAAI,SAAA;AAAA,IACf,YAAY,GAAA,CAAI,KAAA;AAAA,IAChB,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,IACzB,aAAA,EAAe,GAAA,CAAI,QAAA,IAAY,GAAA,CAAI,KAAA;AAAA,IACnC,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,UAAU,CAAA;AAAA,IAC/B,SAAS,GAAA,CAAI,EAAA;AAAA,IACb,YAAY,GAAA,CAAI,KAAA;AAAA,IAChB,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,IACzB,SAAS,GAAA,CAAI,OAAA;AAAA,IACb,YAAY,GAAA,CAAI,KAAA;AAAA,IAChB,WAAA,EAAa,KAAA;AAAA,IACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,IACzB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,IACvB,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IACvB,QAAA,EAAU,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IACrB,QAAA,EAAU,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IACrB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,IACtB,aAAa,GAAA,CAAI,KAAA;AAAA,IACjB,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ,CAAA;AAAA,IAC3B,SAAS,GAAA,CAAI;AAAA,GACf;AACA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,MAAA,EAAQ,CAAA;AAAA,IACR,KAAA,EAAO;AAAA,MACL,EAAE,MAAA,EAAQ,OAAA,EAAS,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MACvC,EAAE,MAAA,EAAQ,MAAA,EAAQ,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA;AAAE,KACxC;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,mCAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,SAAA,EAAY,CAAC,CAAA,UAAA,EAAa,CAAC,8BAA8B,CAAC,CAAA,4CAAA,CAAA;AAAA,MAC9D,GAAG,CAAC,CAAA,SAAA,EAAY,CAAC,CAAA,UAAA,EAAa,CAAC,6BAA6B,CAAC,CAAA,4CAAA,CAAA;AAAA,MAC7D,CAAA,EAAG,CAAC,CAAA,4CAAA,EAA+C,CAAC,CAAA,kDAAA,CAAA;AAAA,MACpD,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,GAAA,CAAI,EAAE,CAAA,CAAA;AAAA,KAC/D,CAAE,KAAK,IAAI;AAAA,GACf;AACF;AACO,IAAM,GAAA,GAAM,CAAC,GAAA,KAAyB;AAC3C,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,KAAA,IAAS,OAAA;AACpC,EAAA,IAAI,KAAA,KAAU,WAAW,KAAA,KAAU,MAAA;AACjC,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,gDAAA,EAAmD,KAAK,CAAA,CAAA,CAAG,CAAA;AACtF,EAAA,OAAO,KAAA,CAAM,OAAO,GAAA,EAAK,KAAA,KAAU,SAAS,IAAA,EAAK,GAAI,KAAA,CAAM,WAAW,CAAC,CAAA;AACzE,CAAA;AACO,IAAM,OAAA,GAAU,CAAC,GAAA,KAAyB;AAC/C,EAAA,MAAM,MAAA,GAAS,IAAI,OAAA,EAAS,MAAA;AAC5B,EAAA,IAAI,CAAC,MAAA,EAAQ,MAAM,IAAI,eAAe,mEAAmE,CAAA;AACzG,EAAA,IAAI,OAAA,GAAU,QAAA;AACd,EAAA,IAAI,SAAA,GAAY,QAAA;AAChB,EAAA,MAAM,IAAA,GAAO,IAAI,OAAA,EAAS,IAAA;AAC1B,EAAA,IAAI,IAAA,EAAM;AACR,IAAA,MAAM,KAAK,WAAA,CAAY,IAAA,EAAM,QAAQ,EAAE,MAAA,EAAQ,MAAM,CAAA;AACrD,IAAA,IAAI,CAAC,IAAI,MAAM,IAAI,oBAAoB,CAAA,EAAG,IAAI,CAAA,UAAA,EAAa,MAAM,CAAA,KAAA,CAAO,CAAA;AACxE,IAAA,MAAM,CAAA,GAAI,cAAA,CAAe,MAAA,EAAQ,EAAE,CAAA;AACnC,IAAA,MAAM,IAAI,cAAA,CAAe,MAAA,EAAQ,IAAI,EAAE,KAAA,EAAO,aAAa,CAAA;AAC3D,IAAA,IAAI,CAAA,EAAG;AACL,MAAA,OAAA,GAAU,CAAA;AACV,MAAA,SAAA,GAAY,CAAA,IAAK,CAAA;AAAA,IACnB,CAAA;AACE,MAAA,IAAA;AAAA,QACE,CAAA,kBAAA,EAAqB,MAAM,CAAA,CAAA,EAAI,IAAI,CAAA,CAAA;AAAA,QACnC,CAAA,sBAAA,EAAyB,MAAM,CAAA,OAAA,EAAU,IAAI,CAAA,mCAAA;AAAA,OAC/C;AAAA,EACJ;AACA,EAAA,MAAM,KAAA,GAAQ,QAAQ,OAAO,CAAA;AAC7B,EAAA,MAAM,GAAA,GAAM,MAAM,QAAA,CAAS,SAAA,EAAW,SAAS,CAAA,IAAK,GAAA,GAAM,YAAY,OAAO,CAAA;AAC7E,EAAA,OAAO,KAAA,CAAM,WAAW,GAAA,EAAK;AAAA,IAC3B,GAAG,GAAA;AAAA,IACH,SAAA,EAAW,OAAA;AAAA,IACX,KAAA;AAAA,IACA,QAAA,EAAU,WAAA,CAAY,OAAA,EAAS,KAAK,CAAA;AAAA,IACpC,OAAO,QAAA,CAAS,OAAA,EAAS,SAAS,CAAA,IAAK,IAAI,OAAA,GAAU;AAAA,GACtD,CAAA;AACH,CAAA;;;AC3JO,IAAM,OAAA,GAAU,CAAC,GAAA,KAAyB;AAC/C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,SAAA,GAAY,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,SAAA;AACzC,EAAA,MAAM,SAAS,SAAA,KAAc,MAAA,GAAS,aAAA,GAAgB,SAAA,CAAU,WAAW,QAAQ,CAAA;AACnF,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,MAAA,GAAS,UAAU,gBAAgB,CAAA;AACzC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,YAAY,CAAC,CAAA;AAAA,MACxC,SAAA,EAAW,MAAA;AAAA,MACX,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA;AAAA,MACA,IAAA;AAAA,MACA,MAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,iBAAA,EAAmB,MAAA,CAAO,GAAA,EAAK,GAAG,CAAA;AAAA,MAClC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACtB,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MAC9B,UAAU,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,EAAK,CAAC,CAAC,CAAA;AAAA,MAC/B,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACxB,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MAC/B,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAChC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAA,GAAS,CAAC;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,MAAA,EAAQ,YAAA,EAAc,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MAC5C,EAAE,MAAA,EAAQ,gBAAA,EAAkB,OAAA,EAAS,CAAC,GAAG,CAAA;AAAE,KAC7C;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,qCAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,sBAAA,EAAyB,MAAM,CAAA,CAAA,CAAA;AAAA,MACnC,GAAG,CAAC,CAAA,6CAAA,EAAgD,GAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,0CAAA,EAA6C,GAAG,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3I,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;ACrDO,IAAM,QAAA,GAAW,CAAC,GAAA,KAAyB;AAChD,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,IAAA,GAAO,UAAU,WAAW,CAAA;AAClC,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,GAAA,EAAK,OAAA,EAAS,QAAQ,CAAA;AAC3C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,kBAAkB,CAAC,CAAA;AAAA,MAC9C,SAAA,EAAW,IAAA;AAAA,MACX,SAAA,EAAW,IAAA;AAAA,MACX,EAAA;AAAA,MACA,KAAA;AAAA,MACA,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,UAAU,CAAA;AAAA,MAC/B,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACrB,OAAA,EAAS,OAAA;AAAA,MACT,UAAA,EAAY,OAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,SAAS,CAAA;AAAA,MACrC,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,MAAA,EAAQ,kBAAA,EAAoB,OAAA,EAAS,CAAC,GAAG,CAAA,EAAE;AAAA,MAC7C,EAAE,MAAA,EAAQ,WAAA,EAAa,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA;AAAE,KAC7C;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,8DAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,8CAAA,EAAiD,KAAK,CAAA,CAAA,CAAA;AAAA;AAAA,MAC1D,CAAA,EAAG,CAAC,CAAA,cAAA,EAAiB,CAAC,CAAA,iCAAA,CAAA;AAAA,MACtB,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,8CAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AC/DO,IAAM,QAAA,GAAW,CAAC,GAAA,KAAyB;AAChD,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,MACnC,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA;AAAA,MACA,UAAA,EAAY,GAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,aAAA,EAAe,SAAA;AAAA,MACf,aAAA,EAAe,QAAA;AAAA,MACf,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAChC,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MACnC,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAChC,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAClC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAM,CAAA;AAAA,IAC9D,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,iCAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,sBAAA,EAAyB,GAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC1C,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AC9CA,IAAM,KAAA,GAA6D;AAAA,EACjE,KAAA,EAAO,CAAC,SAAA,EAAW,SAAS,CAAA;AAAA,EAC5B,MAAA,EAAQ,CAAC,SAAA,EAAW,SAAS;AAC/B,CAAA;AACO,IAAM,UAAA,GAAa,CAAC,GAAA,KAAyB;AAClD,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,KAAA,IAAS,OAAA;AACpC,EAAA,MAAM,CAAC,EAAA,EAAI,IAAI,CAAA,GAAI,KAAA,CAAM,KAAK,CAAA,IAAK,CAAC,SAAA,CAAU,KAAA,EAAO,OAAO,CAAA,EAAG,SAAS,CAAA;AACxE,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,IAAA,GAAO,UAAU,aAAa,CAAA;AACpC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,gBAAgB,CAAC,CAAA;AAAA,MAC5C,SAAA,EAAW,UAAU,YAAY,CAAA;AAAA,MACjC,SAAA,EAAW,IAAA;AAAA,MACX,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACrB,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,aAAA,EAAe,SAAA;AAAA,MACf,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,aAAA,EAAe,QAAA;AAAA,MACf,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,iBAAA,EAAmB,MAAA,CAAO,GAAA,EAAK,GAAG,CAAA;AAAA,MAClC,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MAC7B,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MAC/B,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAChC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,MAAA,EAAQ,gBAAA,EAAkB,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MAChD,EAAE,QAAQ,YAAA,EAAc,OAAA,EAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,MAAA,EAAQ,IAAA,EAAK;AAAA,MAC1D,EAAE,MAAA,EAAQ,aAAA,EAAe,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA;AAAE,KAC/C;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,qCAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,iDAAA,EAAoD,EAAA,CAAG,IAAA,CAAK,GAAA,CAAI,CAAA,CAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAClF,GAAG,CAAC,CAAA,gFAAA,EAAmF,GAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,0CAAA,EAA6C,GAAG,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC9K,CAAA,EAAG,CAAC,CAAA,sBAAA,EAAyB,IAAI,gBAAgB,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC9D,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;ACnEO,IAAM,SAAA,GAAY,CAAC,GAAA,KAAyB;AACjD,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,KAAA,GAAQ,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAC3B,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,WAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MACrC,SAAA,EAAW,UAAU,eAAe,CAAA;AAAA,MACpC,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,MAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MACpB,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,SAAA;AAAA,MACf,aAAA,EAAe,GAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,OAAA,EAAS,GAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MAClB,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MAC7B,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACxB,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACvB,cAAA,EAAgB,KAAA;AAAA,MAChB,iBAAA,EAAmB,KAAA;AAAA,MACnB,YAAA,EAAc,KAAA;AAAA,MACd,WAAA,EAAa,GAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,QAAQ,SAAA,EAAW,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MAC9C,EAAE,MAAA,EAAQ,eAAA,EAAiB,OAAA,EAAS,CAAC,GAAG,CAAA;AAAE,KAC5C;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,CAAA,EAAG,CAAC,CAAA,iCAAA,EAAoC,GAAG,CAAA,CAAA,CAAA;AAAA,MAC3C,GAAG,CAAC,CAAA,qCAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,0BAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,6CAAA,EAAgD,GAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,2DAAA,EAA8D,GAAG,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC5J,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;ACjEA,IAAM,KAAA,GAAQ,CAAC,CAAA,EAAW,CAAA,KAAwC,CAAC,CAAA,GAAI,CAAA,EAAG,CAAA,EAAA,CAAI,CAAA,GAAI,CAAA,GAAI,CAAA,IAAK,CAAC,CAAA;AAE5F,IAAM,CAAA,GAAI,CAAC,KAAA,CAAM,IAAA,EAAM,IAAI,CAAA,EAAG,KAAA,CAAM,GAAA,EAAK,GAAG,CAAA,EAAG,KAAA,CAAM,IAAA,EAAM,IAAI,CAAC,CAAA;AAChE,IAAM,KAAA,GAAQ,KAAA,CAAM,MAAA,EAAQ,MAAM,CAAA;AAClC,IAAM,EAAA,GAAK,CAAC,CAAA,EAAmC,CAAA,EAAW,MAAsB,CAAA,CAAE,CAAC,CAAA,GAAI,CAAC,CAAA,IAAK,CAAA;AAC7F,IAAM,GAAA,GACJ,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,IAAK,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAA,GACnE,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,IAAK,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA,GACnE,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA,IAAK,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA,GAAI,EAAA,CAAG,CAAA,EAAG,GAAG,CAAC,CAAA,CAAA;AACrE,IAAM,GAAA,GAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA;AAAA,EAAI,CAAC,CAAA,KACzB,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA;AAAA,IACR,CAAC,CAAA,KAAA,CACE,EAAA,CAAG,CAAA,EAAA,CAAI,CAAA,GAAI,KAAK,CAAA,EAAA,CAAI,CAAA,GAAI,CAAA,IAAK,CAAC,IAAI,EAAA,CAAG,CAAA,EAAA,CAAI,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,GAAI,CAAA,IAAK,CAAC,CAAA,GAC/D,GAAG,CAAA,EAAA,CAAI,CAAA,GAAI,CAAA,IAAK,CAAA,EAAA,CAAI,IAAI,CAAA,IAAK,CAAC,CAAA,GAAI,EAAA,CAAG,IAAI,CAAA,GAAI,CAAA,IAAK,IAAI,CAAA,GAAI,CAAA,IAAK,CAAC,CAAA,IAClE;AAAA;AAEN,CAAA;AACA,IAAM,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,MAAA,CAAO,CAAC,GAAA,EAAK,CAAA,KAAM,GAAA,GAAA,CAAO,KAAA,CAAM,CAAC,CAAA,IAAK,CAAA,IAAK,EAAA,CAAG,GAAA,EAAK,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC,CAAC,CAAA;AACrG,IAAM,CAAA,GAAI,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA,CAAI,CAAC,CAAA,KAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,EAAE,GAAA,CAAI,CAAC,CAAA,KAAA,CAAO,CAAA,CAAE,CAAC,CAAA,IAAK,CAAA,IAAK,EAAA,CAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAC,CAAC,CAAA;AAEvE,SAAS,eAAA,CAAgB,OAAe,KAAA,EAAuB;AACpE,EAAA,MAAM,CAAA,GAAIC,KAAK,KAAK,CAAA;AACpB,EAAA,MAAM,GAAA,GAAM,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CACjB,GAAA,CAAI,CAAC,CAAA,KAAM,MAAA,CAAO,QAAA,CAAS,CAAA,CAAE,MAAM,CAAA,EAAG,CAAA,GAAI,CAAC,CAAA,EAAG,EAAE,CAAA,GAAI,GAAG,CAAA,CACvD,IAAI,CAACC,EAAAA,KAAOA,EAAAA,GAAI,OAAA,GAAUA,EAAAA,GAAI,KAAA,GAAA,CAAA,CAAUA,EAAAA,GAAI,KAAA,IAAS,UAAU,GAAI,CAAA;AACtE,EAAA,MAAM,CAAC,GAAG,CAAA,EAAG,CAAC,IAAI,CAAC,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,CAAE,GAAA;AAAA,IAAI,CAAC,MAC/B,CAAC,CAAA,EAAG,GAAG,CAAC,CAAA,CAAE,OAAO,CAAC,GAAA,EAAK,MAAM,GAAA,GAAA,CAAO,GAAA,CAAI,CAAC,CAAA,IAAK,CAAA,IAAK,GAAG,CAAA,EAAG,CAAA,EAAG,CAAC,CAAA,EAAG,CAAC;AAAA,GACnE;AACA,EAAA,MAAM,CAAC,EAAA,EAAI,EAAA,EAAI,EAAE,CAAA,GAAI,KAAA;AACrB,EAAA,MAAM,KAAA,GAAQ,CAAA,GAAI,EAAA,GAAK,CAAA,GAAI,CAAA,GAAI,CAAA;AAC/B,EAAA,MAAM,MAAA,GAAS,EAAA,GAAK,EAAA,GAAK,EAAA,GAAK,CAAA,GAAI,EAAA;AAClC,EAAA,MAAM,CAAC,EAAA,EAAI,EAAE,CAAA,GAAI,QAAQ,CAAE,CAAA,GAAI,CAAA,GAAK,KAAA,EAAQ,IAAI,CAAA,GAAK,KAAK,CAAA,GAAI,CAAC,GAAG,CAAC,CAAA;AACnE,EAAA,MAAM,KAAK,CAAA,GAAI,EAAA;AACf,EAAA,IAAI,GAAA,GAAM,EAAA,IAAM,GAAA,GAAM,KAAA,GAAS,KAAA,GAAQ,KAAM,EAAA,GAAK,GAAA,GAAM,EAAA,KAAO,CAAA,GAAI,CAAA,CAAA,GAAK,EAAA;AACxE,EAAA,MAAM,CAAA,GAAI,EAAA,GAAK,GAAA,IAAO,EAAA,GAAM,IAAI,EAAA,GAAM,MAAA,CAAA;AACtC,EAAA,MAAM,CAAA,GAAI,EAAA,GAAK,GAAA,IAAO,EAAA,GAAM,IAAI,EAAA,GAAM,MAAA,CAAA;AACtC,EAAA,MAAM,GAAA,GAAM,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC3B,EAAA,MAAM,MAAA,GAAS,IAAA,CAAK,KAAA,CAAM,CAAA,EAAG,CAAC,CAAA;AAC9B,EAAA,MAAM,OAAO,GAAA,GAAM,GAAA;AACnB,EAAA,IAAI,IAAA,IAAQ,GAAG,OAAO,SAAA;AACtB,EAAA,GAAA,GAAM,IAAA,IAAQ,CAAA,GAAI,GAAA,GAAM,GAAA,IAAO,IAAI,IAAA,CAAK,GAAA,CAAI,EAAE,IAAA,CAAK,GAAA,CAAI,IAAA,IAAQ,CAAA,GAAI,IAAA,CAAK,IAAI,KAAA,CAAM,CAAA,CAAA;AAElF,EAAA,MAAM,EAAA,GAAK,OAAO,GAAA,GAAM,QAAA,GAAA,CAAA,CAAa,MAAM,EAAA,IAAM,GAAA,KAAQ,IAAI,GAAA,GAAM,KAAA,CAAA;AACnE,EAAA,MAAM,KAAM,MAAA,GAAS,IAAA,CAAK,IAAI,GAAG,CAAA,IAAM,KAAK,GAAA,CAAA,GAAO,SAAA;AACnD,EAAA,MAAM,KAAM,MAAA,GAAS,IAAA,CAAK,IAAI,GAAG,CAAA,IAAM,KAAK,GAAA,CAAA,GAAO,SAAA;AACnD,EAAA,MAAM,EAAA,GAAM,CAAA,GAAI,EAAA,GAAK,EAAA,IAAO,CAAA,GAAI,EAAA,CAAA;AAChC,EAAA,MAAM,KAAK,CAAC,EAAA,GAAK,IAAI,CAAA,GAAI,EAAA,GAAM,IAAI,EAAA,GAAM,EAAA;AACzC,EAAA,MAAM,KAAA,GAAQ,CAAC,CAAA,KAAuB,CAAA,GAAI,MAAA,GAAU,QAAQ,CAAA,KAAM,CAAA,GAAI,GAAA,CAAA,GAAO,KAAA,GAAQ,KAAA,GAAQ,CAAA;AAC7F,EAAA,MAAM,GAAA,GAAM;AAAA,IACV,OAAO,QAAA,GAAW,EAAA,GAAK,UAAU,EAAA,GAAK,QAAA,GAAW,MAAM,GAAG,CAAA;AAAA,IAC1D,OAAO,SAAA,GAAY,EAAA,GAAK,WAAW,EAAA,GAAK,QAAA,GAAW,MAAM,GAAG,CAAA;AAAA,IAC5D,OAAO,QAAA,GAAW,EAAA,GAAK,WAAW,EAAA,GAAK,QAAA,GAAW,MAAM,GAAG;AAAA,GAC7D;AACA,EAAA,OAAO,IAAI,GAAA,CACR,GAAA;AAAA,IAAI,CAAC,MACJ,IAAA,CAAK,GAAA,CAAI,KAAK,IAAA,CAAK,GAAA,CAAI,GAAG,IAAA,CAAK,KAAA,CAAM,MAAM,CAAA,GAAI,GAAG,CAAC,CAAC,CAAA,CACjD,SAAS,EAAE,CAAA,CACX,QAAA,CAAS,CAAA,EAAG,GAAG;AAAA,GACpB,CACC,IAAA,CAAK,EAAE,CAAC,CAAA,CAAA;AACb;;;ACxDO,IAAM,MAAA,GAAS,CAAC,GAAA,KAAyB;AAC9C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,QAAQ,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,KAAA,IAAS,WAAW,OAAO,CAAA;AAChE,EAAA,MAAM,GAAA,GAAMC,QAAQ,KAAK,CAAA;AACzB,EAAA,MAAM,WAAW,GAAA,KAAQ,SAAA;AACzB,EAAA,MAAM,IAAA,GAAO,eAAA,CAAgB,KAAA,EAAO,QAAA,GAAW,OAAO,GAAG,CAAA;AACzD,EAAA,MAAM,OAAA,GAAU,eAAA,CAAgB,KAAA,EAAO,QAAA,GAAW,MAAM,IAAI,CAAA;AAC5D,EAAA,MAAM,SAAA,GAAY,WAAA,CAAY,KAAA,EAAO,GAAA,EAAK,GAAG,CAAA;AAC7C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,UAAU,CAAC,CAAA;AAAA,MACtC,EAAA,EAAI,KAAA;AAAA,MACJ,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA,EAAQ,GAAA;AAAA,MACR,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACrB,SAAA,EAAW,KAAA;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,OAAA,EAAS,KAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACjC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACtB,OAAA,EAAS,OAAA;AAAA,MACT,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACjB,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACxB,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACvB,UAAA,EAAY,WAAW,QAAA,GAAW,MAAA;AAAA;AAAA,MAClC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,UAAA,EAAY,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IACxD,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,qCAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,6CAAA,EAAgD,GAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,0CAAA,EAA6C,GAAG,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3I,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,KAAK,CAAA,CAAA;AAAA,KAC9D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AC/CO,IAAM,OAAA,GAAU,CAAC,GAAA,KAAyB;AAC/C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,MAAM,OAAA,GAAU,UAAU,kBAAkB,CAAA;AAC5C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,SAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MACrC,SAAA,EAAW,OAAA;AAAA,MACX,SAAA,EAAW,OAAA;AAAA,MACX,EAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACrB,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,IAAA,EAAM,MAAM,CAAA;AAAA,MAC7B,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAY,EAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,SAAS,CAAA;AAAA,MACrC,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,QAAQ,SAAA,EAAW,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MAC9C,EAAE,MAAA,EAAQ,kBAAA,EAAoB,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA;AAAE,KACpD;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,CAAA,EAAG,CAAC,CAAA,cAAA,EAAiB,CAAC,CAAA,iCAAA,CAAA;AAAA,MACtB,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,8CAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;ACpDO,IAAM,MAAA,GAAS,CAAC,GAAA,KAAyB;AAC9C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,MAAM,OAAA,GAAU,MAAA;AAChB,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,gBAAgB,CAAC,CAAA;AAAA,MAC5C,EAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,SAAS,CAAA;AAAA,MAC1B,YAAA,EAAc,QAAA;AAAA,MACd,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,UAAU,CAAA;AAAA,MAC/B,OAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAY,OAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS,IAAA;AAAA,MACT,UAAA,EAAY,OAAA;AAAA,MACZ,WAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACnC,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ;AAAA,KAC7B;AAAA,IACA,OAAO,EAAC;AAAA,IACR,KAAA,EAAO,CAAC,CAAA,KACN;AAAA;AAAA,MAEE,GAAG,CAAC,CAAA,iGAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,kGAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,aAAA,EAAgB,CAAC,CAAA,8CAAA,CAAA;AAAA;AAAA,MACrB,GAAG,CAAC,CAAA,gCAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AC3DO,IAAM,QAAA,GAAW,CAAC,GAAA,KAAyB;AAChD,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,SAAA;AACf,EAAA,MAAM,OAAA,GAAU,SAAA;AAChB,EAAA,MAAM,OAAA,GAAU,SAAA;AAChB,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,OAAO,CAAC,CAAA;AAAA,MACnC,EAAA,EAAI,MAAA;AAAA,MACJ,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACrB,SAAA,EAAW,MAAA;AAAA,MACX,UAAA,EAAY,OAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,OAAA,EAAS,OAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACjC,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MAC9B,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,UAAA,EAAY,MAAA;AAAA;AAAA,MACZ,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MAChC,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAChC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,OAAA,EAAS,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IACrD,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,6CAAA,EAAgD,GAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,0CAAA,EAA6C,GAAG,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC3I,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,MAAM,CAAA,CAAA;AAAA,KAC/D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AC1CO,IAAM,IAAA,GAAO,CAAC,GAAA,KAAyB;AAC5C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,OAAA,GAAU,UAAU,SAAS,CAAA;AACnC,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,WAAW,CAAC,CAAA;AAAA,MACvC,EAAA;AAAA,MACA,MAAA,EAAQ,SAAA;AAAA;AAAA,MACR,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,aAAa,CAAA;AAAA,MAC9B,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,UAAU,CAAA;AAAA,MAC/B,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,OAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACjC,QAAA,EAAU,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACrB,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACnC,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,QAAQ,WAAA,EAAa,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAE;AAAA,MAChD,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,CAAC,GAAG,CAAA;AAAE,KACtC;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,CAAA,EAAG,CAAC,CAAA,eAAA,EAAkB,CAAC,CAAA,uDAAA,CAAA;AAAA,MACvB,CAAA,EAAG,CAAC,CAAA,sBAAA,EAAyB,OAAO,CAAA,CAAA,CAAA;AAAA,MACpC,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,8CAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AChDO,IAAM,EAAA,GAAK,CAAC,GAAA,KAAyB;AAC1C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,MAAA,GAAS,SAAA;AACf,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,IAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MACrC,EAAA;AAAA,MACA,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,GAAA;AAAA,MACP,IAAA,EAAM,MAAA;AAAA,MACN,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MACvB,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACxB,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,IAAA,EAAM,MAAM,CAAA;AAAA,MAC7B,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACrB,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACnC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,SAAA,EAAW,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IAClD,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,CAAA,EAAG,CAAC,CAAA,4BAAA,EAA+B,MAAM,CAAA,CAAA,CAAA;AAAA,MACzC,GAAG,CAAC,CAAA,kCAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,gDAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,0BAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;ACtDO,IAAM,MAAA,GAAS,CAAC,GAAA,KAAyB;AAC9C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,QAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,kBAAkB,CAAC,CAAA;AAAA,MAC9C,EAAA;AAAA,MACA,MAAA,EAAQ,SAAA;AAAA;AAAA,MACR,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,aAAa,CAAA;AAAA,MAC9B,YAAA,EAAc,QAAA;AAAA,MACd,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,UAAU,CAAA;AAAA,MAC/B,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACjC,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACnC,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,kBAAA,EAAoB,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IAChE,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,8CAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;ACnDO,IAAM,UAAA,GAAa,CAAC,GAAA,KAAyB;AAClD,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,MAAM,KAAA,GAAQ,SAAA;AACd,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,MAAM,SAAA,GAAY,UAAU,kBAAkB,CAAA;AAC9C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,YAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,QAAQ,CAAC,CAAA;AAAA,MACpC,SAAA,EAAW,SAAA;AAAA,MACX,SAAA,EAAW,SAAA;AAAA,MACX,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA;AAAA,MACA,MAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACrB,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,aAAA,EAAe,KAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAA,GAAW,CAAC,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAYA,QAAQ,MAAM,CAAA;AAAA;AAAA,MAC1B,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACtB,OAAA,EAAS,SAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,UAAU,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,EAAK,CAAC,CAAC,CAAA;AAAA,MAC/B,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACxB,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAClC,WAAA,EAAa,KAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO;AAAA,MACL,EAAE,MAAA,EAAQ,QAAA,EAAU,OAAA,EAAS,CAAC,GAAG,CAAA,EAAE;AAAA,MACnC,EAAE,MAAA,EAAQ,kBAAA,EAAoB,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA;AAAE,KACpD;AAAA,IACA,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,+BAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,qCAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,gFAAA,EAAmF,GAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MACpG,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;ACpDO,IAAM,IAAA,GAAO,CAAC,GAAA,KAAyB;AAC5C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,KAAA,IAAS,OAAA;AACpC,EAAA,IAAI,KAAA,KAAU,WAAW,KAAA,KAAU,MAAA;AACjC,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,iDAAA,EAAoD,KAAK,CAAA,CAAA,CAAG,CAAA;AACvF,EAAA,MAAM,EAAA,GAAK,KAAA,KAAU,OAAA,GAAU,SAAA,GAAY,SAAA;AAC3C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,sBAAsB,CAAC,CAAA;AAAA,MAClD,EAAA;AAAA,MACA,IAAA,EAAM,KAAA,KAAU,OAAA,GAAU,SAAA,GAAY,SAAA;AAAA,MACtC,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,aAAa,CAAA;AAAA,MAC9B,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,EAAA,EAAI,UAAU,CAAA;AAAA,MAC/B,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,MAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,OAAO,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,SAAS,CAAA;AAAA,MACrC,UAAA,EAAY,EAAA,CAAG,EAAA,EAAI,QAAQ;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,sBAAA,EAAwB,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IACpE,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,8CAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;ACrDO,IAAM,KAAA,GAAQ,CAAC,GAAA,KAAyB;AAC7C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,SAAS,CAAC,CAAA;AAAA,MACrC,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA;AAAA,MACA,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,aAAA,EAAe,SAAA;AAAA,MACf,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACtB,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACtB,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACjB,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACxB,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACvB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,GAAG,CAAA;AAAA,MAC/B,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,SAAA,EAAW,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IACvD,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,GAAG,CAAC,CAAA,qCAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,6CAAA,EAAgD,GAAG,CAAA,CAAE,GAAA,GAAM,EAAE,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,0CAAA,EAA6C,GAAG,IAAA,CAAK,IAAA,CAAK,EAAE,GAAA,GAAM,CAAC,CAAC,CAAC,CAAA,CAAA,CAAA;AAAA,MAC5I,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;ACnDO,IAAM,QAAA,GAAW,CAAC,GAAA,KAAyB;AAChD,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,MAAA,GAAS,SAAA;AACf,EAAA,MAAM,OAAA,GAAU,SAAA;AAChB,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,UAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,gBAAgB,CAAC,CAAA;AAAA,MAC5C,EAAA,EAAI,MAAA;AAAA,MACJ,IAAA,EAAM,OAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA;AAAA,MACA,IAAA;AAAA,MACA,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACrB,SAAA,EAAW,MAAA;AAAA,MACX,UAAA,EAAY,OAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,aAAA,EAAe,SAAA;AAAA,MACf,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAA,GAAW,CAAC,CAAA;AAAA,MAC/B,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,aAAA,EAAe,QAAA;AAAA,MACf,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACtB,OAAA,EAAS,MAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,cAAA,EAAgB,WAAA;AAAA,MAChB,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MAC9B,UAAU,EAAA,CAAG,IAAA,CAAK,IAAI,CAAA,CAAE,GAAA,EAAK,CAAC,CAAC,CAAA;AAAA,MAC/B,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAI,CAAA;AAAA,MACnB,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACxB,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,GAAA,GAAM,CAAC,CAAA;AAAA,MACvB,UAAA,EAAY,KAAA;AAAA,MACZ,cAAA,EAAgB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MAChC,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MACjC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAM;AAAA,KACzB;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,gBAAA,EAAkB,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IACzD,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,CAAA,EAAG,CAAC,CAAA,6CAAA,EAAgD,EAAA,CAAG,EAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,EAAI,CAAC,CAAA,8CAAA,CAAA;AAAA,MACtE,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,MAAM,CAAA,CAAA;AAAA,KAC/D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AC5CO,IAAM,IAAA,GAAO,CAAC,GAAA,KAAyB;AAC5C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,CAAA,GAAI,QAAA,CAAS,GAAA,CAAI,OAAO,CAAA;AAC9B,EAAA,MAAM,EAAA,GAAK,CAAC,CAAA,EAAW,IAAA,KAAuB,GAAG,CAAA,GAAI,CAAA,CAAE,IAAI,CAAC,CAAA;AAC5D,EAAA,MAAM,KAAA,GAAQ,GAAA,CAAI,OAAA,EAAS,KAAA,IAAS,MAAA;AACpC,EAAA,IAAI,KAAA,KAAU,WAAW,KAAA,KAAU,MAAA;AACjC,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,iDAAA,EAAoD,KAAK,CAAA,CAAA,CAAG,CAAA;AACvF,EAAA,MAAM,EAAA,GAAK,KAAA,KAAU,MAAA,GAAS,SAAA,GAAY,SAAA;AAC1C,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,MAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,QAAQ,CAAC,CAAA;AAAA,MACpC,EAAA;AAAA,MACA,IAAA,EAAM,KAAA,KAAU,MAAA,GAAS,SAAA,GAAY,SAAA;AAAA,MACrC,KAAA,EAAO,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACxB,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACxB,cAAA,EAAgB,KAAA;AAAA,MAChB,YAAA,EAAc,EAAA,CAAG,IAAA,EAAM,MAAM,CAAA;AAAA,MAC7B,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACxB,QAAA,EAAU,KAAA;AAAA,MACV,OAAA,EAAS,EAAA;AAAA,MACT,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACxB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,OAAO,CAAA;AAAA,MACpC,QAAA,EAAU,EAAA,CAAG,GAAA,EAAK,KAAK,CAAA;AAAA,MACvB,QAAA,EAAU,EAAA,CAAG,EAAA,EAAI,MAAM,CAAA;AAAA,MACvB,UAAA,EAAY,KAAA;AAAA,MACZ,GAAA,EAAK,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MAChB,UAAA,EAAY,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACvB,SAAA,EAAW,EAAA,CAAG,CAAA,EAAG,KAAK,CAAA;AAAA,MACtB,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,SAAS,CAAA;AAAA,MACrC,UAAA,EAAY,EAAA,CAAG,IAAA,EAAM,MAAM;AAAA,KAC7B;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,QAAA,EAAU,SAAS,CAAC,GAAA,EAAK,GAAG,CAAA,EAAG,CAAA;AAAA,IACjD,KAAA,EAAO,CAAC,CAAA,KACN;AAAA,MACE,CAAA,EAAG,CAAC,CAAA,cAAA,EAAiB,CAAC,CAAA,iCAAA,CAAA;AAAA,MACtB,GAAG,CAAC,CAAA,0CAAA,CAAA;AAAA,MACJ,GAAG,CAAC,CAAA,8CAAA,CAAA;AAAA,MACJ,CAAA,EAAG,CAAC,CAAA,gDAAA,EAAmD,EAAE,CAAA,CAAA;AAAA,KAC3D,CAAE,KAAK,IAAI;AAAA,GACf;AACF,CAAA;;;AC1DO,IAAM,KAAA,GAAQ,CAAC,GAAA,KAAyB;AAC7C,EAAA,MAAM,CAAA,GAAI,YAAA,CAAa,GAAA,CAAI,OAAO,CAAA;AAClC,EAAA,MAAM,SAAS,SAAA,CAAU,GAAA,CAAI,OAAA,EAAS,MAAA,IAAU,WAAW,QAAQ,CAAA;AACnE,EAAA,MAAM,GAAA,GAAM,SAAA;AACZ,EAAA,MAAM,SAAA,GAAY,SAAA;AAClB,EAAA,MAAM,IAAA,GAAO,SAAA;AACb,EAAA,MAAM,EAAA,GAAK,SAAA;AACX,EAAA,OAAO;AAAA,IACL,IAAA,EAAM,OAAA;AAAA,IACN,MAAA,EAAQ;AAAA,MACN,GAAG,UAAA,CAAW,CAAA,EAAG,SAAA,CAAU,aAAa,CAAC,CAAA;AAAA,MACzC,EAAA;AAAA,MACA,IAAA,EAAM,GAAA;AAAA,MACN,KAAA,EAAO,SAAA;AAAA,MACP,MAAA;AAAA,MACA,IAAA,EAAM,IAAA;AAAA,MACN,SAAA,EAAW,EAAA;AAAA,MACX,UAAA,EAAY,GAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAK,CAAA;AAAA,MACrB,aAAA,EAAe,SAAA;AAAA,MACf,aAAA,EAAe,QAAA;AAAA,MACf,YAAA,EAAc,EAAA,CAAG,CAAA,CAAE,QAAQ,CAAA;AAAA,MAC3B,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,SAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,UAAA,EAAY,QAAA;AAAA,MACZ,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,iBAAA,EAAmB,MAAA,CAAO,CAAA,EAAG,MAAM,CAAA;AAAA,MACnC,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,OAAA,EAAS,EAAA;AAAA,MACT,UAAA,EAAY,MAAA;AAAA,MACZ,WAAA,EAAa,KAAA;AAAA,MACb,SAAA,EAAW,EAAA,CAAG,CAAA,CAAE,KAAA,GAAQ,CAAC,CAAA;AAAA,MACzB,QAAA,EAAU,GAAG,IAAA,CAAK,GAAA,CAAI,EAAE,GAAA,GAAM,CAAA,EAAG,CAAC,CAAC,CAAA;AAAA,MACnC,QAAA,EAAU,EAAA,CAAG,CAAA,CAAE,IAAA,GAAO,CAAC,CAAA;AAAA,MACvB,GAAA,EAAK,EAAA,CAAG,CAAA,CAAE,GAAG,CAAA;AAAA,MACb,gBAAA,EAAkB,MAAA,CAAO,CAAA,EAAG,IAAI,CAAA;AAAA,MAChC,WAAA,EAAa,SAAA;AAAA,MACb,UAAA,EAAY,EAAA,CAAG,CAAA,CAAE,MAAA,GAAS,CAAC,CAAA;AAAA,MAC3B,WAAA,EAAa;AAAA,KACf;AAAA,IACA,KAAA,EAAO,CAAC,EAAE,MAAA,EAAQ,aAAA,EAAe,OAAA,EAAS,CAAC,GAAA,EAAK,GAAA,EAAK,GAAG,CAAA,EAAG,MAAA,EAAQ,MAAM,CAAA;AAAA,IACzE,OAAO,CAAC,CAAA,KACN,CAAC,CAAA,EAAG,CAAC,qCAAqC,CAAA,EAAG,CAAC,CAAA,sBAAA,EAAyB,EAAA,CAAG,EAAE,GAAA,GAAM,CAAC,CAAC,CAAA,CAAA,CAAG,CAAA,CAAE,KAAK,IAAI;AAAA,GACtG;AACF,CAAA;;;AC3BO,IAAM,MAAA,GAA6C;AAAA,EACxD,GAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,QAAA;AAAA,EACA,QAAA;AAAA,EACA,UAAA;AAAA,EACA,SAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,MAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA,EAAA;AAAA,EACA,MAAA;AAAA,EACA,UAAA;AAAA,EACA,IAAA;AAAA,EACA,KAAA;AAAA,EACA,QAAA;AAAA,EACA,IAAA;AAAA,EACA;AACF;AACO,IAAM,WAAA,GAAiC,MAAA,CAAO,IAAA,CAAK,MAAM;AACzD,SAAS,aAAa,GAAA,EAAsB;AACjD,EAAA,MAAM,GAAA,GAAM,MAAA,CAAO,GAAA,CAAI,IAAI,CAAA;AAC3B,EAAA,IAAI,CAAC,GAAA,EAAK,MAAM,IAAI,cAAA,CAAe,CAAA,eAAA,EAAkB,GAAA,CAAI,IAAI,CAAA,UAAA,EAAa,WAAA,CAAY,IAAA,CAAK,IAAI,CAAC,CAAA,CAAE,CAAA;AAClG,EAAA,OAAO,IAAI,GAAG,CAAA;AAChB;;;ACuFO,IAAM,aAAA,uBAAyC,GAAA,CAAI;AAAA,EACxD,KAAA;AAAA,EACA,KAAA;AAAA,EACA,KAAA;AAAA,EACA,MAAA;AAAA,EACA,OAAA;AAAA,EACA,OAAA;AAAA,EACA,YAAA;AAAA,EACA,YAAA;AAAA,EACA;AACF,CAAC;AAGM,SAAS,UAAU,CAAA,EAAqB;AAC7C,EAAA,OACE,MAAM,IAAA,IACN,CAAA,KAAM,UACN,CAAA,KAAM,EAAA,IACL,OAAO,CAAA,KAAM,QAAA,IAAY,OAAO,KAAA,CAAM,CAAC,KACvC,CAAA,YAAa,IAAA,IAAQ,OAAO,KAAA,CAAM,CAAA,CAAE,SAAS,CAAA;AAElD;AAGA,IAAM,QAAA,GAAW,IAAI,IAAA,CAAK,QAAA,CAAS,IAAA,EAAM,EAAE,OAAA,EAAS,IAAA,EAAM,WAAA,EAAa,MAAA,EAAQ,CAAA;AACxE,IAAM,UAAA,GAAyB,CAAC,CAAA,EAAG,CAAA,KAAM,OAAO,CAAC,CAAA,GAAI,OAAO,CAAC,CAAA;AAE7D,IAAM,WAAA,GAA0B,CAAC,CAAA,EAAG,CAAA,KAAM,QAAA,CAAS,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,EAAG,MAAA,CAAO,CAAC,CAAC,CAAA;AAE/E,IAAM,WAAA,GAA0B,CAAC,CAAA,EAAG,CAAA,KAAM;AAC/C,EAAA,MAAM,CAAA,GAAI,CAAC,CAAA,KAAwB,CAAA,YAAa,OAAO,CAAA,CAAE,OAAA,EAAQ,GAAI,IAAI,IAAA,CAAK,MAAA,CAAO,CAAC,CAAC,EAAE,OAAA,EAAQ;AACjG,EAAA,MAAM,CAAA,GAAI,EAAE,CAAC,CAAA;AACb,EAAA,MAAM,CAAA,GAAI,EAAE,CAAC,CAAA;AACb,EAAA,OAAO,MAAA,CAAO,MAAM,CAAC,CAAA,IAAK,OAAO,KAAA,CAAM,CAAC,CAAA,GAAI,CAAA,GAAI,CAAA,GAAI,CAAA;AACtD,CAAA;AAEA,IAAM,OAAA,GAAU,CAAM,GAAA,EAAU,GAAA,KAA0B,IAAgC,GAAG,CAAA;AAStF,SAAS,aAAA,CAAmB,KAAsB,IAAA,EAAkC;AACzF,EAAA,IAAI,GAAA,CAAI,OAAA,EAAS,OAAO,GAAA,CAAI,OAAA;AAC5B,EAAA,IAAI,aAAA,CAAc,GAAA,CAAI,GAAA,CAAI,IAAI,GAAG,OAAO,UAAA;AACxC,EAAA,MAAM,SAAS,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,KAAM,QAAQ,CAAA,EAAG,GAAA,CAAI,GAAG,CAAC,EAAE,IAAA,CAAK,CAAC,MAAM,CAAC,SAAA,CAAU,CAAC,CAAC,CAAA;AAC7E,EAAA,OAAO,OAAO,MAAA,KAAW,QAAA,GAAW,UAAA,GAAa,MAAA,YAAkB,OAAO,WAAA,GAAc,WAAA;AAC1F;AAGO,SAAS,eAAA,CAAgB,KAAiB,GAAA,EAA0B;AACzE,EAAA,OAAO,CAAC,GAAG,CAAA,KAAM;AACf,IAAA,MAAM,EAAA,GAAK,UAAU,CAAC,CAAA;AACtB,IAAA,MAAM,EAAA,GAAK,UAAU,CAAC,CAAA;AACtB,IAAA,IAAI,MAAM,EAAA,EAAI,OAAO,OAAO,EAAA,GAAK,CAAA,GAAI,KAAK,CAAA,GAAI,EAAA;AAC9C,IAAA,MAAM,CAAA,GAAI,GAAA,CAAI,CAAA,EAAG,CAAC,CAAA;AAClB,IAAA,IAAI,MAAA,CAAO,KAAA,CAAM,CAAC,CAAA,EAAG,OAAO,CAAA;AAC5B,IAAA,OAAO,GAAA,KAAQ,KAAA,GAAQ,CAAA,GAAI,CAAC,CAAA;AAAA,EAC9B,CAAA;AACF;AAQO,SAAS,UAAA,CAAgB,MAAsB,GAAA,EAA8B;AAClF,EAAA,MAAM,GAAA,GAAM,KAAK,OAAA,CAAQ,IAAA,CAAK,CAAC,CAAA,KAAM,CAAA,CAAE,QAAQ,GAAG,CAAA;AAClD,EAAA,IAAI,CAAC,GAAA;AACH,IAAA,MAAM,IAAI,cAAA;AAAA,MACR,CAAA,gBAAA,EAAmB,GAAG,CAAA,eAAA,EAAkB,IAAA,CAAK,OAAA,CAAQ,GAAA,CAAI,CAAC,CAAA,KAAM,CAAA,CAAE,GAAG,CAAA,CAAE,IAAA,CAAK,IAAI,CAAC,CAAA;AAAA,KACnF;AACF,EAAA,OAAO,GAAA;AACT;AAQO,SAAS,SAAA,CAAe,IAAA,EAAsB,IAAA,EAAsB,IAAA,EAA0B;AACnG,EAAA,IAAI,CAAC,IAAA,EAAM,OAAO,CAAC,GAAG,IAAI,CAAA;AAC1B,EAAA,MAAM,GAAA,GAAM,UAAA,CAAW,IAAA,EAAM,IAAA,CAAK,GAAG,CAAA;AACrC,EAAA,MAAM,MAAM,eAAA,CAAgB,aAAA,CAAc,KAAK,IAAI,CAAA,EAAG,KAAK,GAAG,CAAA;AAE9D,EAAA,OAAO,CAAC,GAAG,IAAI,EAAE,IAAA,CAAK,CAAC,GAAG,CAAA,KAAM,GAAA,CAAI,QAAQ,CAAA,EAAG,GAAA,CAAI,GAAG,CAAA,EAAG,OAAA,CAAQ,GAAG,GAAA,CAAI,GAAG,CAAC,CAAC,CAAA;AAC/E;AAEO,SAASC,QAAAA,CAAa,MAAA,EAA0B,KAAA,EAAgB,GAAA,EAAmB;AACxF,EAAA,IAAI,OAAO,MAAA,KAAW,UAAA,EAAY,OAAO,MAAA,CAAO,OAAO,GAAG,CAAA;AAC1D,EAAA,IAAI,OAAO,MAAA,KAAW,QAAA;AACpB,IAAA,OAAO,MAAA,CAAO,SAAS,EAAE,CAAA,CACtB,aAAY,CACZ,QAAA,CAAS,MAAA,CAAO,WAAA,EAAa,CAAA;AAClC,EAAA,OAAO,KAAA,KAAU,MAAA;AACnB;AAUO,SAAS,YAAA,CAAkB,IAAA,EAAsB,IAAA,EAAsB,KAAA,EAA+B;AAC3G,EAAA,MAAM,SAAS,MAAA,CAAO,OAAA,CAAQ,MAAM,OAAO,CAAA,CAAE,IAAI,CAAC,CAAC,GAAA,EAAK,CAAC,MAAM,CAAC,UAAA,CAAW,MAAM,GAAG,CAAA,EAAG,CAAC,CAAU,CAAA;AAClG,EAAA,MAAM,CAAA,GAAI,KAAA,CAAM,YAAA,CAAa,IAAA,GAAO,WAAA,EAAY;AAChD,EAAA,MAAM,UAAA,GAAa,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,CAAA,CAAE,GAAG,CAAC,CAAA;AAC3E,EAAA,MAAM,WAAW,KAAA,CAAM,cAAA;AACvB,EAAA,OAAO,IAAA,CAAK,MAAA;AAAA,IACV,CAAC,GAAA,KAAA,CACE,QAAA,KAAa,IAAA,IAAQ,QAAA,CAAS,GAAG,CAAA,KAClC,MAAA,CAAO,KAAA,CAAM,CAAC,CAAC,GAAA,EAAK,CAAC,MAAMA,QAAAA,CAAQ,CAAA,EAAG,OAAA,CAAQ,GAAA,EAAK,GAAA,CAAI,GAAG,CAAA,EAAG,GAAG,CAAC,CAAA,KAChE,CAAA,KAAM,EAAA,IACL,UAAA,CAAW,IAAA;AAAA,MAAK,CAAC,CAAA,KACf,MAAA,CAAO,OAAA,CAAQ,GAAA,EAAK,CAAA,CAAE,GAAG,CAAA,IAAK,EAAE,CAAA,CAC7B,WAAA,EAAY,CACZ,SAAS,CAAC;AAAA,KACf;AAAA,GACN;AACF;AASO,SAAS,QAAA,CACd,IAAA,EACA,IAAA,EACA,QAAA,EACoC;AACpC,EAAA,MAAM,SAAA,GAAY,KAAK,GAAA,CAAI,CAAA,EAAG,KAAK,IAAA,CAAK,IAAA,CAAK,MAAA,GAAS,QAAQ,CAAC,CAAA;AAC/D,EAAA,MAAM,CAAA,GAAI,KAAK,GAAA,CAAI,IAAA,CAAK,IAAI,CAAA,EAAG,IAAI,CAAA,EAAG,SAAA,GAAY,CAAC,CAAA;AACnD,EAAA,MAAM,KAAA,GACJ,QAAA,KAAa,MAAA,CAAO,iBAAA,GAAoB,CAAC,GAAG,IAAI,CAAA,GAAI,IAAA,CAAK,KAAA,CAAM,CAAA,GAAI,QAAA,EAAA,CAAW,CAAA,GAAI,KAAK,QAAQ,CAAA;AACjG,EAAA,OAAO,EAAE,IAAA,EAAM,KAAA,EAAO,SAAA,EAAU;AAClC;AAGO,SAAS,WAAA,CAAY,SAAsB,GAAA,EAA6B;AAC7E,EAAA,IAAI,CAAC,OAAA,IAAW,OAAA,CAAQ,GAAA,KAAQ,KAAK,OAAO,KAAA;AAC5C,EAAA,OAAO,OAAA,CAAQ,GAAA,KAAQ,KAAA,GAAQ,MAAA,GAAS,IAAA;AAC1C;AAEA,SAAS,cAAc,CAAA,EAAmB;AACxC,EAAA,IAAI,CAAA,KAAM,MAAA,CAAO,iBAAA,EAAmB,OAAO,CAAA;AAC3C,EAAA,IAAI,CAAC,MAAA,CAAO,SAAA,CAAU,CAAC,KAAK,CAAA,GAAI,CAAA;AAC9B,IAAA,MAAM,IAAI,cAAA,CAAe,CAAA,qDAAA,EAAwD,MAAA,CAAO,CAAC,CAAC,CAAA,CAAE,CAAA;AAC9F,EAAA,OAAO,CAAA;AACT;AAEA,IAAM,UAAU,CAAC,CAAA,EAAwB,MACvC,CAAA,CAAE,IAAA,KAAS,EAAE,IAAA,IAAQ,CAAC,GAAG,CAAC,EAAE,KAAA,CAAM,CAAC,OAAO,CAAA,CAAE,GAAA,CAAI,EAAE,CAAC,CAAA;AACrD,IAAM,MAAA,GAAqB,EAAE,IAAA,EAAM,QAAA,EAAS;AAMrC,SAAS,WAAA,CACd,IAAA,EACA,IAAA,EACA,OAAA,GAAwB,EAAC,EACb;AACZ,EAAA,IAAI,QAAQ,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,OAAA,CAAQ,KAAK,GAAG,CAAA;AACnD,EAAA,IAAI,KAAA,GAAyB;AAAA,IAC3B,IAAA,EAAM,QAAQ,IAAA,IAAQ,IAAA;AAAA,IACtB,SAAS,EAAC;AAAA,IACV,YAAA,EAAc,EAAA;AAAA,IACd,IAAA,EAAM,CAAA;AAAA,IACN,QAAA,EAAU,cAAc,OAAA,CAAQ,QAAA,IAAY,KAAK,WAAA,EAAa,QAAA,IAAY,OAAO,iBAAiB,CAAA;AAAA,IAClG,QAAQ,EAAC;AAAA,IACT,cAAA,EAAgB,IAAA;AAAA,IAChB,SAAA,sBAAe,GAAA,EAAI;AAAA,IACnB,MAAA,EAAQ,EAAE,GAAA,EAAK,CAAA,EAAG,KAAK,IAAA;AAAK,GAC9B;AACA,EAAA,MAAM,SAAA,uBAAgB,GAAA,EAAiC;AACvD,EAAA,MAAM,IAAA,GAAO,CAAC,KAAA,KAA4B;AACxC,IAAA,KAAA,MAAW,MAAM,CAAC,GAAG,SAAS,CAAA,KAAM,KAAK,CAAA;AAAA,EAC3C,CAAA;AACA,EAAA,MAAM,MAAM,IAAA,CAAK,MAAA;AACjB,EAAA,IAAI,MAAA,GAAS,IAAA;AACb,EAAA,IAAI,OAAA,GAAmC,IAAA;AACvC,EAAA,IAAI,MAAA,GAAS,KAAA;AACb,EAAA,MAAM,KAAA,GAAQ,CAAC,GAAA,KAAqB;AAClC,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,MAAM,CAAA,GAAI,OAAA,EAAS,GAAA,CAAI,GAAG,CAAA;AAC1B,MAAA,OAAO,CAAA,KAAM,MAAA,GAAY,EAAA,GAAK,MAAA,CAAO,CAAC,CAAA;AAAA,IACxC;AACA,IAAA,MAAM,CAAA,GAAI,OAAA,CAAQ,GAAA,EAAK,GAAG,CAAA;AAC1B,IAAA,OAAO,SAAA,CAAU,CAAC,CAAA,GAAI,EAAA,GAAK,OAAO,CAAC,CAAA;AAAA,EACrC,CAAA;AACA,EAAA,MAAM,SAAA,GAAY,CAAC,IAAA,KAA+B;AAChD,IAAA,MAAA,GAAS,IAAA;AACT,IAAA,IAAI,QAAQ,MAAA,EAAW;AACrB,MAAA,OAAA,GAAU,IAAI,GAAA,CAAI,IAAA,CAAK,GAAA,CAAI,CAAC,CAAA,EAAG,CAAA,KAAM,CAAC,CAAA,EAAG,CAAC,CAAU,CAAC,CAAA;AACrD,MAAA;AAAA,IACF;AACA,IAAA,IAAI,MAAA,EAAQ;AAEZ,IAAA,MAAM,GAAA,GAAM,KAAK,GAAA,CAAI,KAAK,EAAE,MAAA,CAAO,CAAC,EAAA,KAAO,EAAA,KAAO,EAAE,CAAA;AACpD,IAAA,MAAM,QAAQ,GAAA,CAAI,MAAA,GAAS,IAAI,GAAA,CAAI,GAAG,CAAA,CAAE,IAAA;AACxC,IAAA,IAAI,QAAQ,CAAA,EAAG;AACb,MAAA,MAAA,GAAS,IAAA;AACT,MAAA,OAAA,CAAQ,IAAA;AAAA,QACN,CAAA,mBAAA,EAAsB,GAAG,CAAA,uBAAA,EAAqB,KAAK,CAAA,kDAAA;AAAA,OACrD;AAAA,IACF;AAAA,EACF,CAAA;AACA,EAAA,SAAA,CAAU,IAAI,CAAA;AACd,EAAA,IAAI,OAAA,GAAyB,IAAA;AAC7B,EAAA,MAAM,UAAU,MAA0B;AACxC,IAAA,MAAM,QAAA,GAAW,YAAA,CAAa,IAAA,EAAM,MAAA,EAAQ,KAAK,CAAA;AACjD,IAAA,MAAM,MAAA,GAAS,SAAA,CAAU,IAAA,EAAM,QAAA,EAAU,MAAM,IAAI,CAAA;AACnD,IAAA,MAAM,EAAE,IAAA,EAAM,QAAA,EAAU,SAAA,EAAU,GAAI,SAAS,MAAA,EAAQ,KAAA,CAAM,IAAA,EAAM,KAAA,CAAM,QAAQ,CAAA;AACjF,IAAA,OAAO,EAAE,KAAA,EAAO,IAAA,EAAM,UAAU,aAAA,EAAe,QAAA,CAAS,QAAQ,SAAA,EAAU;AAAA,EAC5E,CAAA;AACA,EAAA,IAAI,WAAW,OAAA,EAAQ;AACvB,EAAA,MAAM,MAAA,GAAS,CAAC,KAAA,EAAiC,KAAA,GAAoB,MAAA,KAAiB;AACpF,IAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,GAAG,KAAA,EAAM;AAC7B,IAAA,QAAA,GAAW,OAAA,EAAQ;AACnB,IAAA,IAAI,KAAA,CAAM,IAAA,GAAO,QAAA,CAAS,SAAA,GAAY,CAAA,EAAG;AACvC,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,IAAA,EAAM,QAAA,CAAS,YAAY,CAAA,EAAE;AACjD,MAAA,QAAA,GAAW,OAAA,EAAQ;AAAA,IACrB;AACA,IAAA,MAAM,OAAO,IAAA,CAAK,GAAA,CAAI,GAAG,QAAA,CAAS,IAAA,CAAK,SAAS,CAAC,CAAA;AACjD,IAAA,IAAI,KAAA,CAAM,MAAA,CAAO,GAAA,GAAM,IAAA,EAAM;AAE3B,MAAA,KAAA,GAAQ,EAAE,GAAG,KAAA,EAAO,MAAA,EAAQ,EAAE,GAAG,KAAA,CAAM,MAAA,EAAQ,GAAA,EAAK,IAAA,EAAK,EAAE;AAC3D,MAAA,QAAA,GAAW,EAAE,GAAG,QAAA,EAAU,KAAA,EAAM;AAAA,IAClC;AACA,IAAA,IAAA,CAAK,KAAK,CAAA;AAAA,EACZ,CAAA;AACA,EAAA,OAAO;AAAA,IACL,IAAA;AAAA,IACA,IAAI,OAAA,GAAU;AACZ,MAAA,OAAO,MAAA;AAAA,IACT,CAAA;AAAA,IACA,IAAI,KAAA,GAAQ;AACV,MAAA,OAAO,QAAA,CAAS,KAAA;AAAA,IAClB,CAAA;AAAA,IACA,IAAI,IAAA,GAAO;AACT,MAAA,OAAO,QAAA,CAAS,IAAA;AAAA,IAClB,CAAA;AAAA,IACA,IAAI,aAAA,GAAgB;AAClB,MAAA,OAAO,QAAA,CAAS,aAAA;AAAA,IAClB,CAAA;AAAA,IACA,IAAI,SAAA,GAAY;AACd,MAAA,OAAO,QAAA,CAAS,SAAA;AAAA,IAClB,CAAA;AAAA,IACA,IAAI,OAAA,GAAU;AACZ,MAAA,OAAO,IAAA,CAAK,OAAA,CAAQ,MAAA,CAAO,CAAC,CAAA,KAAM,CAAC,QAAA,CAAS,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,CAAA,CAAE,GAAG,CAAC,CAAA;AAAA,IAC1E,CAAA;AAAA,IACA,OAAA,CAAQ,KAAK,GAAA,EAAK;AAChB,MAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,GAAG,CAAA;AACtC,MAAA,MAAA,CAAO,EAAE,IAAA,EAAM,GAAA,KAAQ,IAAA,GAAO,IAAA,GAAO,EAAE,GAAA,EAAK,GAAA,EAAI,EAAG,IAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC9D,CAAA;AAAA,IACA,SAAA,CAAU,KAAK,MAAA,EAAQ;AACrB,MAAA,UAAA,CAAW,MAAM,GAAG,CAAA;AACpB,MAAA,MAAM,EAAE,CAAC,GAAG,GAAG,UAAU,GAAG,IAAA,KAAS,KAAA,CAAM,OAAA;AAC3C,MAAA,MAAM,OAAA,GACJ,MAAA,KAAW,IAAA,IAAQ,MAAA,KAAW,UAAa,MAAA,KAAW,EAAA,GAAK,IAAA,GAAO,EAAE,GAAG,IAAA,EAAM,CAAC,GAAG,GAAG,MAAA,EAAO;AAC7F,MAAA,MAAA,CAAO,EAAE,OAAA,EAAS,IAAA,EAAM,CAAA,EAAG,CAAA;AAAA,IAC7B,CAAA;AAAA,IACA,gBAAgB,IAAA,EAAM;AACpB,MAAA,MAAA,CAAO,EAAE,YAAA,EAAc,IAAA,EAAM,IAAA,EAAM,GAAG,CAAA;AAAA,IACxC,CAAA;AAAA,IACA,QAAQ,CAAA,EAAG;AACT,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,CAAC,CAAA,EAAG;AACzB,MAAA,MAAA,CAAO,EAAE,IAAA,EAAM,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,CAAC,GAAG,QAAA,CAAS,SAAA,GAAY,CAAC,CAAC,GAAG,CAAA;AAAA,IAC/E,CAAA;AAAA,IACA,YAAY,CAAA,EAAG;AACb,MAAA,MAAA,CAAO,EAAE,QAAA,EAAU,aAAA,CAAc,CAAC,CAAA,EAAG,IAAA,EAAM,GAAG,CAAA;AAAA,IAChD,CAAA;AAAA,IACA,YAAA,CAAa,KAAK,OAAA,EAAS;AACzB,MAAA,UAAA,CAAW,MAAM,GAAG,CAAA;AACpB,MAAA,MAAM,SAAA,GAAY,KAAA,CAAM,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA;AAC3C,MAAA,MAAM,IAAA,GAAO,OAAA,KAAY,MAAA,GAAY,CAAC,YAAY,CAAC,OAAA;AACnD,MAAA,MAAM,SAAS,IAAA,GACX,SAAA,GACE,KAAA,CAAM,MAAA,GACN,CAAC,GAAG,KAAA,CAAM,MAAA,EAAQ,GAAG,IACvB,KAAA,CAAM,MAAA,CAAO,OAAO,CAAC,CAAA,KAAM,MAAM,GAAG,CAAA;AACxC,MAAA,MAAA,CAAO,EAAE,MAAA,EAAQ,IAAA,EAAM,IAAA,IAAQ,KAAA,CAAM,IAAA,EAAM,GAAA,KAAQ,GAAA,GAAM,IAAA,GAAO,KAAA,CAAM,IAAA,EAAM,CAAA;AAAA,IAC9E,CAAA;AAAA,IACA,QAAQ,IAAA,EAAM;AACZ,MAAA,SAAA,CAAU,IAAI,CAAA;AACd,MAAA,MAAA,CAAO,EAAE,CAAA;AAAA,IACX,CAAA;AAAA,IACA,KAAA;AAAA,IACA,kBAAkB,MAAA,EAAQ;AACxB,MAAA,IAAI,MAAA,KAAW,MAAM,cAAA,EAAgB;AACrC,MAAA,MAAA,CAAO,EAAE,cAAA,EAAgB,MAAA,EAAQ,IAAA,EAAM,GAAG,CAAA;AAAA,IAC5C,CAAA;AAAA,IACA,aAAa,GAAA,EAAK;AAChB,MAAA,IAAI,OAAA,CAAQ,GAAA,EAAK,KAAA,CAAM,SAAS,CAAA,EAAG;AACnC,MAAA,MAAM,SAAA,GAAiC,IAAI,GAAA,CAAI,GAAG,CAAA;AAClD,MAAA,MAAA,CAAO,EAAE,WAAU,EAAG,EAAE,MAAM,QAAA,EAAU,GAAA,EAAK,WAAW,CAAA;AAAA,IAC1D,CAAA;AAAA,IACA,YAAA,EAAc,MAAM,KAAA,CAAM,SAAA;AAAA,IAC1B,SAAA,CAAU,KAAK,GAAA,EAAK;AAClB,MAAA,IAAI,CAAC,MAAA,CAAO,QAAA,CAAS,GAAG,CAAA,EAAG;AAC3B,MAAA,IAAI,GAAA,KAAQ,IAAA,EAAM,UAAA,CAAW,IAAA,EAAM,GAAG,CAAA;AACtC,MAAA,MAAM,CAAA,GAAI,IAAA,CAAK,GAAA,CAAI,CAAA,EAAG,KAAK,GAAA,CAAI,IAAA,CAAK,KAAA,CAAM,GAAG,CAAA,EAAG,QAAA,CAAS,IAAA,CAAK,MAAA,GAAS,CAAC,CAAC,CAAA;AACzE,MAAA,IAAI,MAAM,KAAA,CAAM,MAAA,CAAO,OAAO,GAAA,KAAQ,KAAA,CAAM,OAAO,GAAA,EAAK;AACxD,MAAA,MAAA,CAAO,EAAE,MAAA,EAAQ,EAAE,KAAK,CAAA,EAAG,GAAA,IAAO,CAAA;AAAA,IACpC,CAAA;AAAA,IACA,SAAS,EAAA,EAAI;AACX,MAAA,IAAI,OAAO,OAAA,EAAS;AACpB,MAAA,OAAA,GAAU,EAAA;AACV,MAAA,IAAA,CAAK,EAAE,IAAA,EAAM,OAAA,EAAS,EAAA,EAAI,CAAA;AAAA,IAC5B,CAAA;AAAA,IACA,UAAU,MAAM,OAAA;AAAA,IAChB,UAAU,EAAA,EAAI;AACZ,MAAA,SAAA,CAAU,IAAI,EAAE,CAAA;AAChB,MAAA,OAAO,MAAM;AACX,QAAA,SAAA,CAAU,OAAO,EAAE,CAAA;AAAA,MACrB,CAAA;AAAA,IACF,CAAA;AAAA,IACA,aAAa,MAAM;AAAA,GACrB;AACF","file":"chunk-4VKYHOHL.js","sourcesContent":["// src/errors.ts — spec §3: sdvtables adds TableSpecError to the SdvplotError hierarchy (the base sets name = new.target.name)\nimport { SdvplotError } from \"@sportsdataverse/sdvplot\";\nexport class TableSpecError extends SdvplotError {}\n","// src/define.ts — the fluent builder. Every method returns a NEW builder (immutable), build() validates once.\nimport { TableSpecError } from \"./errors.js\";\nimport type { ColumnBase, ColumnSpec, Decoration, Density, NumericKey, TableSpec } from \"./spec.js\";\n\ntype Opt<T, K extends PropertyKey> = Omit<T, \"kind\" | \"key\" | K>;\ntype Base<Row, K extends keyof Row & string> = Omit<ColumnBase<Row, K>, \"key\">;\ntype Col<Row, Kind extends ColumnSpec<Row>[\"kind\"]> = Extract<ColumnSpec<Row>, { kind: Kind }>;\ntype Partialize<T, Req extends keyof T> = Partial<Omit<T, Req>> & Pick<T, Req>;\n\nexport interface ColumnFactory<Row> {\n text<K extends keyof Row & string>(key: K, o?: Base<Row, K>): Col<Row, \"text\">;\n num<K extends NumericKey<Row>>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"num\">, never>>,\n ): Col<Row, \"num\">;\n int<K extends NumericKey<Row>>(key: K, o?: Base<Row, K>): Col<Row, \"int\">;\n pct<K extends NumericKey<Row>>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"pct\">, never>>,\n ): Col<Row, \"pct\">;\n rank<K extends NumericKey<Row>>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"rank\">, never>>,\n ): Col<Row, \"rank\">;\n delta<K extends NumericKey<Row>>(\n from: K,\n to: NumericKey<Row>,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"delta\">, \"to\">>,\n ): Col<Row, \"delta\">;\n tally(\n keys: readonly [NumericKey<Row>, ...NumericKey<Row>[]],\n o?: Base<Row, NumericKey<Row>> & Partial<Opt<Col<Row, \"tally\">, \"keys\">>,\n ): Col<Row, \"tally\">;\n logo<K extends keyof Row & string>(\n key: K,\n o: Base<Row, K> & Partialize<Opt<Col<Row, \"logo\">, never>, \"league\">,\n ): Col<Row, \"logo\">;\n wordmark<K extends keyof Row & string>(\n key: K,\n o: Base<Row, K> & Partialize<Opt<Col<Row, \"wordmark\">, never>, \"league\">,\n ): Col<Row, \"wordmark\">;\n headshot<K extends keyof Row & string>(\n key: K,\n o: Base<Row, K> & Partialize<Opt<Col<Row, \"headshot\">, never>, \"league\">,\n ): Col<Row, \"headshot\">;\n colorPills<K extends NumericKey<Row>>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"colorPills\">, never>>,\n ): Col<Row, \"colorPills\">;\n colorRanks<K extends NumericKey<Row>>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"colorRanks\">, never>>,\n ): Col<Row, \"colorRanks\">;\n colorResults<K extends keyof Row & string>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"colorResults\">, never>>,\n ): Col<Row, \"colorResults\">;\n percentileBar<K extends NumericKey<Row>>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"percentileBar\">, never>>,\n ): Col<Row, \"percentileBar\">;\n indicatorBox<K extends keyof Row & string>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"indicatorBox\">, never>>,\n ): Col<Row, \"indicatorBox\">;\n highlight<K extends keyof Row & string>(\n key: K,\n when: Col<Row, \"highlight\">[\"when\"],\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"highlight\">, \"when\">>,\n ): Col<Row, \"highlight\">;\n highlightNa<K extends keyof Row & string>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"highlightNa\">, never>>,\n ): Col<Row, \"highlightNa\">;\n mergeStackTeamColor<K extends keyof Row & string>(\n key: K,\n stack: keyof Row & string,\n team: keyof Row & string,\n o: Base<Row, K> & Partialize<Opt<Col<Row, \"mergeStackTeamColor\">, \"stack\" | \"team\">, \"league\">,\n ): Col<Row, \"mergeStackTeamColor\">;\n teamColorBar<K extends keyof Row & string>(\n key: K,\n o: Base<Row, K> & Partialize<Opt<Col<Row, \"teamColorBar\">, never>, \"league\">,\n ): Col<Row, \"teamColorBar\">;\n teamColorBg<K extends keyof Row & string>(\n key: K,\n o: Base<Row, K> & Partialize<Opt<Col<Row, \"teamColorBg\">, never>, \"league\">,\n ): Col<Row, \"teamColorBg\">;\n image<K extends keyof Row & string>(\n key: K,\n o?: Base<Row, K> & Partial<Opt<Col<Row, \"image\">, never>>,\n ): Col<Row, \"image\">;\n /** gtUtils aliases — same objects, old names (see src/aliases.ts). */\n fmtRank: ColumnFactory<Row>[\"rank\"];\n fmtTally: ColumnFactory<Row>[\"tally\"];\n}\n\n/** gtUtils/sdvplot `_RANK_PALETTE` (green → red), shared by colorRanks, the legend fallback and tiers. */\nexport const RANK_PALETTE: readonly string[] = [\"#3D8B6E\", \"#9DC5A7\", \"#EDE0CC\", \"#DB9070\", \"#BE4D3A\"];\n\n// Defaults are the sdvplotR / sdvplot defaults, verbatim (PARITY_TABLES.md; file:line beside each that was corrected); listed once, here.\n// Typed against ColumnFactory (no cast), so every arrow is contextually typed and the defaults are checked against the kind.\nexport function columnFactory<Row>(): ColumnFactory<Row> {\n const f: Omit<ColumnFactory<Row>, \"fmtRank\" | \"fmtTally\"> = {\n text: (key, o = {}) => ({ kind: \"text\", key, ...o }),\n num: (key, o = {}) => ({ kind: \"num\", key, ...o }),\n int: (key, o = {}) => ({ kind: \"int\", key, ...o }),\n pct: (key, o = {}) => ({ kind: \"pct\", key, digits: 1, scale: true, ...o }),\n rank: (key, o = {}) => ({ kind: \"rank\", key, superscript: true, suffixSize: \"0.7em\", ...o }),\n delta: (from, to, o = {}) => ({\n kind: \"delta\",\n key: from,\n to,\n label: \"Change\",\n percent: false,\n decimals: 1,\n arrows: false,\n color: true,\n colorPositive: \"#1B7837\",\n colorNegative: \"#B2182B\",\n forceSign: true,\n ...o,\n }),\n tally: (keys, o = {}) => ({\n kind: \"tally\",\n key: keys[0],\n keys,\n separator: \"-\",\n share: false,\n shareOf: 0,\n shareDecimals: 1,\n shareLabel: \"%\",\n sharePrefix: \" (\",\n shareSuffix: \")\",\n ...o,\n }),\n logo: (key, o) => ({ kind: \"logo\", key, height: 30, includeName: false, ...o }),\n wordmark: (key, o) => ({ kind: \"wordmark\", key, height: 30, ...o }),\n headshot: (key, o) => ({ kind: \"headshot\", key, idSystem: \"espn\", height: 30, ...o }),\n colorPills: (key, o = {}) => ({\n kind: \"colorPills\",\n key,\n palette: [\"#C84630\", \"#5DA271\"],\n fillType: \"continuous\",\n rankOrder: \"desc\",\n formatType: \"number\",\n scalePercent: true,\n suffix: \"\",\n reverse: false,\n outlineWidth: 0.25,\n pillHeight: 25,\n ...o,\n }),\n colorRanks: (key, o = {}) => ({ kind: \"colorRanks\", key, palette: RANK_PALETTE, reverse: false, ...o }),\n // gt_color_results fills the whole row (_cells.py:155-222); spec §6.1 lists it among the c.* kinds\n colorResults: (key, o = {}) => ({\n kind: \"colorResults\",\n key,\n winColor: \"#5DA271\",\n lossColor: \"#C84630\",\n winTextColor: \"white\",\n lossTextColor: \"white\",\n tieTextColor: \"white\",\n tieValue: \"T\",\n resultType: \"wl\",\n ...o,\n }),\n // width: the <th> width, Python gt_percentile_bar width=220 px (_layout.py:662-684)\n percentileBar: (key, o = {}) => ({\n kind: \"percentileBar\",\n key,\n domain: [0, 100],\n scale: \"auto\",\n palette: [\"#3661AD\", \"#C9C9C9\", \"#D22D49\"],\n reverse: false,\n trackColor: \"#E9E9E9\",\n trackHeight: 6,\n markerSize: 22,\n textColor: \"#FFFFFF\",\n ringWidth: 2,\n fullTrack: true,\n naLabel: \"—\",\n naTextColor: \"#9A9A9A\",\n decimals: 0,\n width: \"220px\",\n ...o,\n }),\n // gt_indicator_boxes: color_yes #FCCF10, color_no #EEEEEE, 20x20 box, yes = value 1 (_cells.py:1337-1347, :1414-1416)\n indicatorBox: (key, o = {}) => ({\n kind: \"indicatorBox\",\n key,\n truthy: [1, true, \"1\"],\n fill: \"#FCCF10\",\n neutral: \"#EEEEEE\",\n size: 20,\n ...o,\n }),\n highlight: (key, when, o = {}) => ({ kind: \"highlight\", key, when, fill: \"#FFF3B0\", bold: false, ...o }),\n highlightNa: (key, o = {}) => ({\n kind: \"highlightNa\",\n key,\n fill: \"#F0F0F0\",\n bold: false,\n italic: false,\n naStrings: [\"NA\"],\n ignoreCase: false,\n ...o,\n }),\n mergeStackTeamColor: (key, stack, team, o) => ({\n kind: \"mergeStackTeamColor\",\n key,\n stack,\n team,\n fontSizeTop: 14,\n fontSizeBottom: 12,\n color: \"black\",\n ...o,\n }),\n teamColorBar: (key, o) => ({\n kind: \"teamColorBar\",\n key,\n which: \"primary\",\n naColor: \"#b3b3b3\",\n barWidth: 4,\n ...o,\n }),\n teamColorBg: (key, o) => ({\n kind: \"teamColorBg\",\n key,\n which: \"primary\",\n alpha: 0.4,\n naColor: \"#b3b3b3\",\n ...o,\n }),\n image: (key, o = {}) => ({ kind: \"image\", key, height: \"55px\", ...o }),\n };\n return { ...f, fmtRank: f.rank, fmtTally: f.tally };\n}\n\n/** Themes whose Python default density is \"compact\" (_themes.py:241-242, :1108, :1212); every other theme defaults to \"comfortable\". */\nconst THEME_DENSITY: Readonly<Record<string, Density>> = {\n almanac: \"compact\",\n scoreboard: \"compact\",\n terminal: \"compact\",\n};\n\ntype D<Row, T extends Decoration<Row>[\"type\"]> = Extract<Decoration<Row>, { type: T }>;\nexport class TableBuilder<Row> {\n constructor(private readonly s: TableSpec<Row>) {}\n private add(d: Decoration<Row>): TableBuilder<Row> {\n return new TableBuilder({ ...this.s, decorations: [...this.s.decorations, d] });\n }\n id(id: string): TableBuilder<Row> {\n return new TableBuilder({ ...this.s, id });\n }\n /** J31: the link id column (see `TableSpec.rowKey`). */\n rowKey(key: keyof Row & string): TableBuilder<Row> {\n return new TableBuilder({ ...this.s, rowKey: key });\n }\n columns(fn: (c: ColumnFactory<Row>) => readonly ColumnSpec<Row>[]): TableBuilder<Row> {\n return new TableBuilder({ ...this.s, columns: fn(columnFactory<Row>()) });\n }\n theme(\n name: string,\n o: { density?: Density; options?: Readonly<Record<string, string>> } = {},\n ): TableBuilder<Row> {\n return new TableBuilder({\n ...this.s,\n theme: {\n name,\n density: o.density ?? THEME_DENSITY[name] ?? \"comfortable\",\n ...(o.options ? { options: o.options } : {}),\n },\n });\n }\n title(text: string): TableBuilder<Row> {\n return this.add({ type: \"title\", text });\n }\n subtitle(text: string): TableBuilder<Row> {\n return this.add({ type: \"subtitle\", text });\n }\n titleHeader(title: string, o: Omit<D<Row, \"titleHeader\">, \"type\" | \"title\"> = {}): TableBuilder<Row> {\n return this.add({ type: \"titleHeader\", title, ...o });\n }\n sourceNote(html: string, o: { unsafe?: boolean } = {}): TableBuilder<Row> {\n return this.add({ type: \"sourceNote\", html, ...o });\n }\n caption538(o: Partial<Omit<D<Row, \"caption538\">, \"type\">> = {}): TableBuilder<Row> {\n return this.add({ type: \"caption538\", ruleWidth: 1, size: 12, align: \"right\", ...o });\n }\n groupBy(key: keyof Row & string): TableBuilder<Row> {\n return this.add({ type: \"groupBy\", key });\n }\n groupStripes(o: Partial<Omit<D<Row, \"groupStripes\">, \"type\">> = {}): TableBuilder<Row> {\n return this.add({ type: \"groupStripes\", color: \"#F5F5F5\", start: 2, ...o });\n }\n rowAccent(\n key: keyof Row & string,\n o: Partial<Omit<D<Row, \"rowAccent\">, \"type\" | \"key\">> = {},\n ): TableBuilder<Row> {\n return this.add({\n type: \"rowAccent\",\n key,\n width: 4,\n side: \"left\",\n hide: true,\n naColor: \"transparent\",\n ...o,\n });\n }\n boldRows(\n rows: D<Row, \"boldRows\">[\"rows\"],\n o: Partial<Omit<D<Row, \"boldRows\">, \"type\" | \"rows\">> = {},\n ): TableBuilder<Row> {\n return this.add({ type: \"boldRows\", rows, textColor: \"black\", ...o });\n }\n spotlight(\n rows: D<Row, \"spotlight\">[\"rows\"],\n o: Partial<Omit<D<Row, \"spotlight\">, \"type\" | \"rows\">> = {},\n ): TableBuilder<Row> {\n return this.add({ type: \"spotlight\", rows, bold: true, accentWidth: 4, dimColor: \"auto\", ...o });\n }\n cutline(\n after: number | readonly number[],\n o: Partial<Omit<D<Row, \"cutline\">, \"type\" | \"after\">> = {},\n ): TableBuilder<Row> {\n return this.add({\n type: \"cutline\",\n after: typeof after === \"number\" ? [after] : after,\n color: \"#A6081A\",\n weight: 2,\n style: \"dashed\",\n labelSize: 9,\n labelPosition: \"below\",\n gap: [0],\n ...o,\n });\n }\n borderGrid(o: Partial<Omit<D<Row, \"borderGrid\">, \"type\">> = {}): TableBuilder<Row> {\n return this.add({ type: \"borderGrid\", color: \"black\", weight: 1, includeLabels: false, ...o });\n }\n borderBars(\n side: \"top\" | \"bottom\",\n colors: readonly string[],\n o: Partial<Omit<D<Row, \"borderBars\">, \"type\" | \"side\" | \"colors\">> = {},\n ): TableBuilder<Row> {\n return this.add({\n type: \"borderBars\",\n side,\n colors,\n barHeight: 10,\n barWidth: \"100%\",\n barAlign: \"center\",\n imgWidth: 30,\n imgHeight: 30,\n imgPadding: 10,\n imgAlign: \"right\",\n textWeight: \"bold\",\n textColor: \"#FFFFFF\",\n textSize: 18,\n textAlign: \"left\",\n textPadding: 10,\n ...o,\n });\n }\n // location \"bottom\": Python gt_legend_continuous default (_layout.py:357)\n legendContinuous(o: Partial<Omit<D<Row, \"legendContinuous\">, \"type\">> = {}): TableBuilder<Row> {\n return this.add({\n type: \"legendContinuous\",\n nBins: 5,\n digits: 0,\n titlePosition: \"top\",\n location: \"bottom\",\n swatchWidth: 40,\n swatchHeight: 12,\n ...o,\n });\n }\n legendDiscrete(\n key: D<Row, \"legendDiscrete\">[\"key\"],\n o: Partial<Omit<D<Row, \"legendDiscrete\">, \"type\" | \"key\">> = {},\n ): TableBuilder<Row> {\n return this.add({\n type: \"legendDiscrete\",\n key,\n location: \"top\",\n shape: \"square\",\n swatchSize: 14,\n border: true,\n gap: 14,\n direction: \"horizontal\",\n align: \"center\",\n ...o,\n });\n }\n // hideP: Python hide_p=True (_layout.py:1303)\n significance(\n pairs: D<Row, \"significance\">[\"pairs\"],\n o: Partial<Omit<D<Row, \"significance\">, \"type\" | \"pairs\">> = {},\n ): TableBuilder<Row> {\n return this.add({\n type: \"significance\",\n pairs,\n levels: [0.01, 0.05, 0.1],\n symbols: [\"***\", \"**\", \"*\"],\n superscript: true,\n note: true,\n hideP: true,\n ...o,\n });\n }\n outliers(\n columns: readonly (keyof Row & string)[],\n o: Partial<Omit<D<Row, \"outliers\">, \"type\" | \"columns\">> = {},\n ): TableBuilder<Row> {\n return this.add({ type: \"outliers\", columns, method: \"iqr\", side: \"both\", bold: true, ...o });\n }\n scaleNote(\n columns: readonly (keyof Row & string)[],\n o: Partial<Omit<D<Row, \"scaleNote\">, \"type\" | \"columns\">> = {},\n ): TableBuilder<Row> {\n return this.add({ type: \"scaleNote\", columns, divisor: 1000, where: \"sourceNote\", decimals: 0, ...o });\n }\n socialTag(\n accounts: Readonly<Record<string, string>>,\n o: Partial<Omit<D<Row, \"socialTag\">, \"type\" | \"accounts\">> = {},\n ): TableBuilder<Row> {\n return this.add({\n type: \"socialTag\",\n accounts,\n stack: false,\n separator: \" | \",\n align: \"right\",\n iconHeight: \"0.9em\",\n ...o,\n });\n }\n watermark(o: Partial<Omit<D<Row, \"watermark\">, \"type\">> = {}): TableBuilder<Row> {\n return this.add({\n type: \"watermark\",\n opacity: 0.06,\n size: \"60%\",\n position: \"center\",\n color: \"#000000\",\n angle: 0,\n font: \"Helvetica, Arial, sans-serif\",\n ...o,\n });\n }\n wrapLabels(o: Partial<Omit<D<Row, \"wrapLabels\">, \"type\">> = {}): TableBuilder<Row> {\n return this.add({ type: \"wrapLabels\", width: 12, balance: true, ...o });\n }\n marginalia(\n columns: readonly (keyof Row & string)[],\n o: Partial<Omit<D<Row, \"marginalia\">, \"type\" | \"columns\">> = {},\n ): TableBuilder<Row> {\n return this.add({\n type: \"marginalia\",\n columns,\n width: 220,\n label: \"\",\n italic: true,\n size: \"0.92em\",\n rule: true,\n align: \"left\",\n ...o,\n });\n }\n snake(o: Partial<Omit<D<Row, \"snake\">, \"type\">> = {}): TableBuilder<Row> {\n return this.add({ type: \"snake\", nCols: 2, gap: 20, fill: \"\", cleanGaps: true, ...o });\n }\n tiers(\n levels: readonly string[],\n tierKey: keyof Row & string,\n imageColumns: readonly (keyof Row & string)[],\n o: Partial<Omit<D<Row, \"tiers\">, \"type\" | \"levels\" | \"tierKey\" | \"imageColumns\">> = {},\n ): TableBuilder<Row> {\n return this.add({ type: \"tiers\", levels, tierKey, imageColumns, imgHeight: \"55px\", style: \"dark\", ...o });\n }\n font(family: string, o: Partial<Omit<D<Row, \"font\">, \"type\" | \"family\">> = {}): TableBuilder<Row> {\n return this.add({ type: \"font\", family, google: true, ...o });\n }\n build(): TableSpec<Row> {\n if (this.s.columns.length === 0)\n throw new TableSpecError(\"a table needs at least one column: call .columns(c => [...])\");\n const seen = new Set<string>();\n for (const col of this.s.columns) {\n if (seen.has(col.key)) throw new TableSpecError(`column key \"${col.key}\" appears twice`);\n seen.add(col.key);\n }\n if (this.s.decorations.filter((d) => d.type === \"title\").length > 1)\n throw new TableSpecError(\"only one .title()\");\n return this.s;\n }\n}\n/**\n * Start a table spec for rows of type `Row`: chain `.columns(...)`, decorations and `.theme(...)`, then `.build()`.\n * The spec is plain data: render it with `renderHTML` (`@sportsdataverse/sdvtables/html`).\n *\n * @example\n * ```ts\n * import { defineTable } from \"@sportsdataverse/sdvtables\";\n * import { renderHTML } from \"@sportsdataverse/sdvtables/html\";\n *\n * const rows = [\n * { team: \"KC\", wins: 15, losses: 2 },\n * { team: \"BUF\", wins: 13, losses: 4 },\n * { team: \"LAC\", wins: 11, losses: 6 },\n * ];\n * const spec = defineTable<(typeof rows)[number]>()\n * .columns((c) => [c.text(\"team\"), c.int(\"wins\"), c.int(\"losses\")])\n * .title(\"AFC, 2024\")\n * .build();\n * renderHTML(spec, rows);\n * ```\n */\nexport function defineTable<Row>(): TableBuilder<Row> {\n return new TableBuilder<Row>({\n columns: [],\n decorations: [],\n theme: { name: \"sdv\", density: \"comfortable\" },\n });\n}\n","// src/predicate.ts\nimport { TableSpecError } from \"./errors.js\";\nimport type { Predicate, RowSelector } from \"./spec.js\";\nconst isNull = (v: unknown): boolean =>\n v === null || v === undefined || (typeof v === \"number\" && Number.isNaN(v));\nexport function matches<Row>(p: Predicate<Row>, row: Row): boolean {\n const v = (row as Record<string, unknown>)[p.key];\n switch (p.op) {\n case \"isNull\":\n return isNull(v);\n case \"notNull\":\n return !isNull(v);\n case \"==\":\n return v === p.value;\n case \"!=\":\n return v !== p.value;\n case \">\":\n return typeof v === \"number\" && v > (p.value as number);\n case \">=\":\n return typeof v === \"number\" && v >= (p.value as number);\n case \"<\":\n return typeof v === \"number\" && v < (p.value as number);\n case \"<=\":\n return typeof v === \"number\" && v <= (p.value as number);\n case \"in\":\n return Array.isArray(p.value) && p.value.includes(v);\n case \"notIn\":\n return Array.isArray(p.value) && !p.value.includes(v);\n case \"matches\":\n return typeof v === \"string\" && new RegExp(String(p.value)).test(v);\n default: {\n const bad: never = p.op;\n throw new TableSpecError(`unknown predicate op ${String(bad)}`);\n }\n }\n}\n/**\n * The indices into `rows` that `sel` picks. A predicate tests each row; an index array names positions in `source`\n * (default `rows`), matched to `rows` by identity. An interactive render passes the table's source rows, so `[5]`\n * stays the sixth data row whatever page, filter or sort shows it (A49). Throws `TableSpecError` for an index outside `source`.\n */\nexport function selectRows<Row>(\n sel: RowSelector<Row>,\n rows: readonly Row[],\n source: readonly Row[] = rows,\n): number[] {\n if (Array.isArray(sel)) {\n for (const i of sel)\n if (!Number.isInteger(i) || i < 0 || i >= source.length)\n throw new TableSpecError(`row ${i} is outside 0..${source.length - 1}`);\n if (source === rows) return [...sel];\n const want = new Set(sel.map((i) => source[i])); // ponytail: one Set per selector, O(rows); no index map needed\n return rows.flatMap((r, i) => (want.has(r) ? [i] : []));\n }\n const out: number[] = [];\n rows.forEach((r, i) => {\n if (matches(sel as Predicate<Row>, r)) out.push(i);\n });\n return out;\n}\n","// src/snake.ts — gt_snake_align: blocks and rows per block as Python _snake_shape (_layout.py:1630-1640)\nimport { TableSpecError } from \"./errors.js\";\n\nexport function snakeAlign<Row>(\n rows: readonly Row[],\n o: { nCols?: number; rowsPerCol?: number; fill?: Row | null } = {},\n): (Row | null)[][] {\n let blocks: number;\n let per: number;\n if (o.rowsPerCol !== undefined) {\n per = Math.trunc(o.rowsPerCol);\n if (!(per >= 1)) throw new TableSpecError(\"rowsPerCol must be at least 1\");\n blocks = Math.ceil(rows.length / per);\n } else {\n blocks = Math.trunc(o.nCols ?? 2);\n if (!(blocks >= 1)) throw new TableSpecError(\"nCols must be at least 1\");\n per = Math.ceil(rows.length / blocks);\n }\n const fill = o.fill ?? null;\n return Array.from({ length: blocks }, (_, j) =>\n Array.from({ length: per }, (_, k) => rows[j * per + k] ?? fill),\n );\n}\n","// src/format.ts — ports of sdvplot Python great_tables/_cells.py `_number` / `_natural` / `_format_value`.\n// Rounding is HALF-TO-EVEN on exact binary ties, like Python's f-format and `round` (controller ruling R2);\n// JS `toFixed` / `Math.round` round exact ties away from zero.\n\nexport const isBlank = (v: unknown): boolean =>\n v === null ||\n v === undefined ||\n (typeof v === \"number\" && Number.isNaN(v)) ||\n (typeof v === \"string\" && v.trim() === \"\");\n\n/** Python `_number` (_cells.py:963-971): numbers, booleans and numeric strings; anything else (and NaN) is null. Infinities pass. */\nexport function toNumber(v: unknown): number | null {\n if (isBlank(v)) return null;\n if (typeof v === \"string\" && /^\\s*[+-]?0[xXoObB]/.test(v)) return null; // JS Number() reads 0x10; Python float() does not\n const n =\n typeof v === \"number\"\n ? v\n : typeof v === \"boolean\"\n ? Number(v)\n : typeof v === \"string\"\n ? Number(v)\n : Number.NaN;\n return Number.isNaN(n) ? null : n;\n}\n\nconst group = (s: string): string => s.replace(/\\B(?=(\\d{3})+(?!\\d))/g, \",\");\n\n/** `|x|` rounded to `digits` decimals as an integer string of `x * 10^digits`, exact on the double's binary value, ties to even. */\nfunction scaledDigits(a: number, digits: number): string {\n const dv = new DataView(new ArrayBuffer(8));\n dv.setFloat64(0, a);\n const bits = dv.getBigUint64(0);\n const biased = Number((bits >> 52n) & 0x7ffn);\n const frac = bits & ((1n << 52n) - 1n);\n const m = biased === 0 ? frac : frac | (1n << 52n);\n const e = (biased === 0 ? 1 : biased) - 1075; // a = m * 2^e\n const num = m * 10n ** BigInt(digits);\n if (e >= 0) return (num << BigInt(e)).toString();\n const k = BigInt(-e);\n let q = num >> k;\n const r = num & ((1n << k) - 1n);\n const half = 1n << (k - 1n);\n if (r > half || (r === half && (q & 1n) === 1n)) q += 1n;\n return q.toString();\n}\n\n/**\n * Python `f\"{v:,.{digits}f}\"`: fixed decimals for any `digits`, exact ties to even, sign kept even when the result rounds to zero\n * (`-0.04` -> `-0.0`). Pure BigInt on the double's exact binary value, so no `toFixed` 100-digit cap or exponent form at 1e21.\n */\nfunction fixed(v: number, digits: number, big: boolean): string {\n if (!Number.isFinite(v)) return Number.isNaN(v) ? \"nan\" : v > 0 ? \"inf\" : \"-inf\";\n const s = scaledDigits(Math.abs(v), digits).padStart(digits + 1, \"0\");\n const i = s.slice(0, s.length - digits);\n const f = s.slice(s.length - digits);\n return (v < 0 || Object.is(v, -0) ? \"-\" : \"\") + (big ? group(i) : i) + (digits > 0 ? `.${f}` : \"\");\n}\n\n/** Python `_natural` (_cells.py:974-980): decimals = what `f\"{v:.7g}\"` needs (up to 7 significant figures), then `v` itself is printed with them. */\nexport function naturalDigits(v: number, big = false): string {\n if (!Number.isFinite(v)) return v > 0 ? \"Inf\" : \"-Inf\";\n const exp = Number(Math.abs(v).toExponential(6).split(\"e\")[1]);\n const seven = fixed(Math.abs(v), Math.max(0, 6 - exp), false); // 7 significant figures, ties to even\n const frac = seven.split(\".\")[1]?.replace(/0+$/, \"\") ?? \"\";\n return fixed(v, frac.length, big);\n}\n\n/**\n * Sign-glyph rule: great_tables prints negatives from fmt_number/fmt_percent with U+2212, so `formatNumber` (num/int/pct/delta cells)\n * swaps the ASCII \"-\" for it. `formatValue` ports Python `_format_value` (pill/box/bar labels), which prints a plain \"-\", and does NOT. `fixed()`/`naturalDigits()` stay ASCII on purpose: `pxOf` feeds CSS via Number(fixed(...)).\n */\nconst minus = (s: string): string => s.replace(/-/g, \"−\");\n\nexport type FormatType = \"number\" | \"comma\" | \"currency\" | \"percent\";\n\n/** Python `_format_value` (_cells.py:983-998): a missing value prints `NA`. */\nexport function formatValue(\n v: number | null,\n digits: number | null | undefined,\n formatType: FormatType,\n suffix: string,\n): string {\n const big = formatType === \"comma\" || formatType === \"currency\";\n let core =\n v === null\n ? \"NA\"\n : digits === null || digits === undefined\n ? naturalDigits(v, big)\n : fixed(v, digits, big);\n if (formatType === \"currency\") core = `$${core}`;\n else if (formatType === \"percent\") core += \"%\";\n return core + suffix; // ASCII minus on purpose (_cells.py:983-998); only formatNumber uses U+2212\n}\n\nexport function formatNumber(\n v: number,\n o: { digits?: number; big?: boolean; prefix?: string; suffix?: string; forceSign?: boolean } = {},\n): string {\n const body = o.digits === undefined ? naturalDigits(v, o.big ?? false) : fixed(v, o.digits, o.big ?? false);\n const sign = o.forceSign && !body.startsWith(\"-\") && Number(body.replace(/,/g, \"\")) !== 0 ? \"+\" : \"\";\n return `${o.prefix ?? \"\"}${sign}${minus(body)}${o.suffix ?? \"\"}`;\n}\n\n/** Python `_ordinal_suffix` (_cells.py:1460) on the truncated integer. */\nexport function ordinal(n: number): string {\n const t = Math.abs(Math.trunc(n));\n const m100 = t % 100;\n const suf = m100 >= 11 && m100 <= 13 ? \"th\" : ([\"th\", \"st\", \"nd\", \"rd\"] as const)[t % 10 <= 3 ? t % 10 : 0];\n return `${Math.trunc(n)}${suf}`;\n}\n\nexport const pxOf = (n: number): string => `${Number(fixed(n, 1, false))}px`;\n","// src/themes/tokens.ts\nimport { hex6 } from \"@sportsdataverse/sdvplot\";\nimport { TableSpecError } from \"../errors.js\";\nimport { pxOf } from \"../format.js\";\nimport type { Density, ThemeRef } from \"../spec.js\";\nexport type Role = \"body\" | \"pad\" | \"title\" | \"subtitle\" | \"label\" | \"group\" | \"source\";\nexport type DensitySizes = Readonly<Record<Role, number>>;\nexport const DENSITY: Readonly<Record<Density, DensitySizes>> = {\n // sdvplotR utils-theme.R .theme_density() = _marks.py DENSITY\n comfortable: { body: 14, pad: 6, title: 26, subtitle: 15, label: 10, group: 11, source: 11 },\n compact: { body: 12, pad: 3, title: 22, subtitle: 13, label: 9, group: 10, source: 10 },\n social: { body: 17, pad: 9, title: 34, subtitle: 19, label: 12, group: 13, source: 13 },\n};\nexport function densitySizes(d: Density): DensitySizes {\n const s = DENSITY[d];\n if (!s) throw new TableSpecError(`density must be comfortable, compact or social, not ${String(d)}`);\n return s;\n}\n/** Multipliers against \"comfortable\" — sdvplotR .theme_density_mult(), for themes that hard-code px sizes. */\nexport function scaleFor(d: Density): Readonly<Record<Role, number>> {\n const b = DENSITY.comfortable;\n const s = densitySizes(d);\n return {\n body: s.body / b.body,\n pad: s.pad / b.pad,\n title: s.title / b.title,\n subtitle: s.subtitle / b.subtitle,\n label: s.label / b.label,\n group: s.group / b.group,\n source: s.source / b.source,\n };\n}\nexport const px: (n: number) => string = pxOf;\n/** Python `_color` (_themes.py:85-90): a color option must be opaque hex; returns lowercase `#rrggbb`, else TableSpecError. */\nexport function hexOption(value: string, arg: string): string {\n try {\n return hex6(value);\n } catch {\n throw new TableSpecError(\n `${arg} must be a hex color with no transparency, such as '#8C2F1E', not \"${value}\"`,\n );\n }\n}\nexport interface GoogleFont {\n readonly family: string;\n readonly weights: readonly number[];\n readonly italic?: boolean;\n}\nexport interface ThemeTokens {\n fontBody: string;\n fontLabel: string;\n fontTitle: string;\n bg: string;\n text: string;\n muted: string;\n accent: string;\n rule: string;\n hline: string;\n headingBg: string;\n headingAlign: \"left\" | \"center\";\n titleColor: string;\n titleWeight: string;\n titleSize: string;\n titleTransform: string;\n titleTracking: string;\n subtitleColor: string;\n subtitleSize: string;\n subtitleStyle: string;\n subtitleWeight: string;\n labelBg: string;\n labelColor: string;\n labelWeight: string;\n labelSize: string;\n labelTransform: string;\n labelTracking: string;\n labelStyle: string;\n labelBorderTop: string;\n labelBorderBottom: string;\n groupBg: string;\n groupColor: string;\n groupWeight: string;\n groupSize: string;\n groupTransform: string;\n groupBorderTop: string;\n groupBorderBottom: string;\n bodySize: string;\n bodyWeight: string;\n pad: string;\n headingPad: string;\n labelPad: string;\n groupPad: string;\n sourcePad: string;\n lineHeight: string;\n bodyBorderBottom: string;\n tableBorderTop: string;\n tableBorderBottom: string;\n tableBorderX: string;\n stripe: string;\n sourceColor: string;\n sourceSize: string;\n sourceStyle: string;\n horizon: string;\n}\nexport const TOKEN_KEYS: readonly (keyof ThemeTokens)[] = [\n \"fontBody\",\n \"fontLabel\",\n \"fontTitle\",\n \"bg\",\n \"text\",\n \"muted\",\n \"accent\",\n \"rule\",\n \"hline\",\n \"headingBg\",\n \"headingAlign\",\n \"titleColor\",\n \"titleWeight\",\n \"titleSize\",\n \"titleTransform\",\n \"titleTracking\",\n \"subtitleColor\",\n \"subtitleSize\",\n \"subtitleStyle\",\n \"subtitleWeight\",\n \"labelBg\",\n \"labelColor\",\n \"labelWeight\",\n \"labelSize\",\n \"labelTransform\",\n \"labelTracking\",\n \"labelStyle\",\n \"labelBorderTop\",\n \"labelBorderBottom\",\n \"groupBg\",\n \"groupColor\",\n \"groupWeight\",\n \"groupSize\",\n \"groupTransform\",\n \"groupBorderTop\",\n \"groupBorderBottom\",\n \"bodySize\",\n \"bodyWeight\",\n \"pad\",\n \"headingPad\",\n \"labelPad\",\n \"groupPad\",\n \"sourcePad\",\n \"lineHeight\",\n \"bodyBorderBottom\",\n \"tableBorderTop\",\n \"tableBorderBottom\",\n \"tableBorderX\",\n \"stripe\",\n \"sourceColor\",\n \"sourceSize\",\n \"sourceStyle\",\n \"horizon\",\n];\nexport interface Theme {\n readonly name: string;\n readonly tokens: ThemeTokens;\n readonly fonts: readonly GoogleFont[] /** extra scoped rules; `sel` is `#<tableId>` */;\n readonly rules: (sel: string) => string;\n}\nexport type ThemeDef = (ref: ThemeRef) => Theme;\n/** Tokens every theme starts from; a theme overrides what it sets, so a forgotten key is \"no rule\", never undefined. */\nexport function baseTokens(d: DensitySizes, font: string): ThemeTokens {\n return {\n fontBody: font,\n fontLabel: font,\n fontTitle: font,\n bg: \"#FFFFFF\",\n text: \"#333333\",\n muted: \"#5A5A5A\",\n accent: \"#333333\",\n rule: \"#D3D3D3\",\n hline: \"none\",\n headingBg: \"transparent\",\n headingAlign: \"left\",\n titleColor: \"inherit\",\n titleWeight: \"700\",\n titleSize: px(d.title),\n titleTransform: \"none\",\n titleTracking: \"normal\",\n subtitleColor: \"inherit\",\n subtitleSize: px(d.subtitle),\n subtitleStyle: \"normal\",\n subtitleWeight: \"400\",\n labelBg: \"transparent\",\n labelColor: \"inherit\",\n labelWeight: \"700\",\n labelSize: px(d.label),\n labelTransform: \"none\",\n labelTracking: \"normal\",\n labelStyle: \"normal\",\n labelBorderTop: \"none\",\n labelBorderBottom: \"none\",\n groupBg: \"transparent\",\n groupColor: \"inherit\",\n groupWeight: \"700\",\n groupSize: px(d.group),\n groupTransform: \"none\",\n groupBorderTop: \"none\",\n groupBorderBottom: \"none\",\n bodySize: px(d.body),\n bodyWeight: \"400\",\n pad: px(d.pad),\n headingPad: px(d.pad),\n labelPad: px(d.pad),\n groupPad: px(d.pad),\n sourcePad: px(d.pad),\n lineHeight: \"normal\",\n bodyBorderBottom: \"none\",\n tableBorderTop: \"none\",\n tableBorderBottom: \"none\",\n tableBorderX: \"none\",\n stripe: \"transparent\",\n sourceColor: \"inherit\",\n sourceSize: px(d.source),\n sourceStyle: \"normal\",\n horizon: \"none\",\n };\n}\nexport const SYSTEM_FONTS =\n \"system-ui, 'Segoe UI', Roboto, Helvetica, Arial, sans-serif, 'Apple Color Emoji', 'Segoe UI Emoji', 'Segoe UI Symbol', 'Noto Color Emoji'\"; // _marks.R_FONTS\nexport const fontStack = (family: string): string => `'${family}', ${SYSTEM_FONTS}`;\nexport const border = (w: number, color: string, style = \"solid\"): string => `${px(w)} ${style} ${color}`;\n","// src/themes/sdv.ts — port of _marks._light_palette/_dark_palette/_build_theme/gt_theme_sdv_team\nimport {\n UnresolvedTeamError,\n contrast,\n mix,\n onColor,\n resolveSync,\n teamColorsSync,\n warn,\n} from \"@sportsdataverse/sdvplot\";\nimport type { League } from \"@sportsdataverse/sdvplot\";\nimport { TableSpecError } from \"../errors.js\";\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Theme,\n type ThemeTokens,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const SDV_NAVY = \"#0B1A33\";\nexport const SDV_CYAN = \"#7FE6DC\";\nexport const SDV_HORIZON = \"linear-gradient(90deg, #3346F0, #7FE6DC)\";\ninterface Pal {\n bg: string;\n headingBg: string;\n title: string;\n subtitle?: string;\n muted: string;\n label: string;\n text: string;\n rule: string;\n groupBg: string;\n horizon: string;\n}\nconst light = (horizon: string): Pal => ({\n bg: \"#FFFFFF\",\n headingBg: \"#FFFFFF\",\n title: SDV_NAVY,\n muted: \"#4A5A75\",\n label: \"#16305C\",\n text: SDV_NAVY,\n rule: \"#E3E8F1\",\n groupBg: \"#EEF3FA\",\n horizon,\n});\nconst dark = (): Pal => ({\n bg: SDV_NAVY,\n headingBg: SDV_NAVY,\n title: \"#FFFFFF\",\n muted: \"#A9B8D0\",\n label: \"#9CCBFF\",\n text: \"#EAEBEC\",\n rule: \"#1D3A66\",\n groupBg: \"#16305C\",\n horizon: SDV_HORIZON,\n});\n/** sdvplotR .theme_secondary_on() (_marks.py:619-628): fg blended toward bg as far as still clears 4.5:1 (weights 0.45 + i*0.05, unrounded). */\nexport function secondaryOn(bg: string, fg: string, target = 4.5): string {\n for (let i = 0; i < 12; i++) {\n const c = mix(bg, fg, 0.45 + i * 0.05);\n if (contrast(c, bg) >= target) return c;\n }\n return fg;\n}\nfunction build(name: string, ref: ThemeRef, pal: Pal): Theme {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: keyof typeof k): string => px(n * k[role]);\n const t: ThemeTokens = {\n ...baseTokens(d, fontStack(\"Lato\")),\n fontLabel: fontStack(\"Chivo\"),\n fontTitle: fontStack(\"Chivo\"),\n bg: pal.bg,\n text: pal.text,\n muted: pal.muted,\n accent: pal.label,\n rule: pal.rule,\n hline: border(1, pal.rule),\n headingBg: pal.headingBg,\n titleColor: pal.title,\n titleWeight: \"800\",\n titleSize: sz(22, \"title\"),\n subtitleColor: pal.subtitle ?? pal.muted,\n subtitleSize: sz(14, \"subtitle\"),\n labelBg: pal.bg,\n labelColor: pal.label,\n labelWeight: \"500\",\n labelSize: sz(13, \"label\"),\n groupBg: pal.groupBg,\n groupColor: pal.label,\n groupWeight: \"500\",\n groupSize: sz(13, \"group\"),\n bodySize: sz(15, \"body\"),\n pad: sz(7, \"pad\"),\n headingPad: sz(4, \"pad\"),\n labelPad: sz(6, \"pad\"),\n groupPad: sz(8, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n sourceColor: pal.muted,\n sourceSize: sz(12, \"source\"),\n horizon: pal.horizon,\n };\n return {\n name,\n tokens: t,\n fonts: [\n { family: \"Chivo\", weights: [500, 800] },\n { family: \"Lato\", weights: [400, 700] },\n ],\n rules: (s) =>\n [\n `${s} th.sdvt-label{padding-bottom:10px}`,\n `${s} caption,${s} tfoot td,${s} th.sdvt-label:first-child,${s} td.sdvt-cell:first-child{padding-left:14px}`,\n `${s} caption,${s} tfoot td,${s} th.sdvt-label:last-child,${s} td.sdvt-cell:last-child{padding-right:14px}`,\n `${s} .sdvt-title{padding-top:12px;display:block}${s} .sdvt-subtitle{padding-bottom:12px;display:block}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${pal.bg}}`,\n ].join(\"\\n\"),\n };\n}\nexport const sdv = (ref: ThemeRef): Theme => {\n const style = ref.options?.style ?? \"light\";\n if (style !== \"light\" && style !== \"dark\")\n throw new TableSpecError(`sdv theme style must be \"light\" or \"dark\", not \"${style}\"`);\n return build(\"sdv\", ref, style === \"dark\" ? dark() : light(SDV_HORIZON));\n};\nexport const sdvTeam = (ref: ThemeRef): Theme => {\n const league = ref.options?.league as League | undefined;\n if (!league) throw new TableSpecError('sdvTeam needs options.league (e.g. { league: \"nfl\", team: \"KC\" })');\n let primary = SDV_NAVY;\n let secondary = SDV_CYAN;\n const team = ref.options?.team;\n if (team) {\n const id = resolveSync(team, league, { strict: true });\n if (!id) throw new UnresolvedTeamError(`${team} is not a ${league} team`);\n const p = teamColorsSync(league, id);\n const s = teamColorsSync(league, id, { which: \"secondary\" });\n if (p) {\n primary = p;\n secondary = s ?? p;\n } else\n warn(\n `sdvtables:sdvTeam:${league}:${team}`,\n `no colors on file for ${league} team \"${team}\"; using the SportsDataverse colors`,\n ); // _marks.py:819-820\n }\n const title = onColor(primary);\n const pal = light(contrast(secondary, \"#ffffff\") >= 1.5 ? secondary : primary);\n return build(\"sdvTeam\", ref, {\n ...pal,\n headingBg: primary,\n title,\n subtitle: secondaryOn(primary, title),\n label: contrast(primary, \"#ffffff\") >= 3 ? primary : SDV_NAVY,\n });\n};\n","// src/themes/almanac.ts — gt_theme_almanac (_themes.py:241-348): a slab body, narrow condensed labels, tight rows, banded stripes\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const almanac = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#8C2F1E\", \"accent\");\n const stripeOpt = ref.options?.stripe ?? \"#F1F1EF\";\n const stripe = stripeOpt === \"none\" ? \"transparent\" : hexOption(stripeOpt, \"stripe\"); // Python stripe=None → no banding\n const ink = \"#1A1A1A\";\n const secondary = \"#6B6B68\";\n const rule = \"#D8D8D4\";\n const bg = \"#FFFFFF\";\n const narrow = fontStack(\"Archivo Narrow\");\n return {\n name: \"almanac\",\n tokens: {\n ...baseTokens(d, fontStack(\"Zilla Slab\")),\n fontLabel: narrow,\n bg,\n text: ink,\n muted: secondary,\n accent,\n rule,\n stripe,\n headingBg: bg,\n titleColor: ink,\n titleSize: px(d.title),\n subtitleColor: secondary,\n subtitleWeight: \"400\",\n subtitleSize: px(d.subtitle),\n labelBg: bg,\n labelColor: ink,\n labelWeight: \"700\",\n labelSize: px(d.label + 1),\n labelTransform: \"uppercase\",\n labelTracking: \"0.05em\",\n labelBorderBottom: border(1.5, ink),\n labelPad: px(d.pad + 1),\n groupBg: bg,\n groupColor: accent,\n groupWeight: \"700\",\n groupSize: px(d.group + 1),\n groupTransform: \"uppercase\",\n groupBorderTop: border(1, rule),\n groupPad: px(Math.max(d.pad, 3)),\n bodySize: px(d.body),\n pad: px(d.pad),\n headingPad: px(d.pad + 2),\n sourcePad: px(d.pad + 2),\n bodyBorderBottom: border(1, ink),\n tableBorderTop: border(2, accent),\n sourceColor: secondary,\n sourceSize: px(d.source + 1),\n },\n fonts: [\n { family: \"Zilla Slab\", weights: [400, 700] },\n { family: \"Archivo Narrow\", weights: [700] },\n ],\n rules: (s) =>\n [\n `${s} th.sdvt-group{letter-spacing:0.05em}`,\n `${s} tfoot td{font-family:${narrow}}`,\n `${s} .sdvt-subtitle{display:block;padding-bottom:${px(d.pad + 6)}}${s} .sdvt-title{display:block;padding-bottom:${px(Math.ceil(d.pad / 2))}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/athletic.ts — gt_theme_athletic (_themes.py:1317-1405): mono body, dotted row rules, column rules, black group bars.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density) (sdvplotR .theme_scale_output()); great_tables' own defaults (8px rows) scale too.\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const athletic = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const bg = \"#FFFFFF\";\n const work = fontStack(\"Work Sans\");\n const hline = border(1.5, \"black\", \"dotted\");\n return {\n name: \"athletic\",\n tokens: {\n ...baseTokens(d, fontStack(\"Spline Sans Mono\")),\n fontLabel: work,\n fontTitle: work,\n bg,\n hline,\n titleWeight: \"650\",\n titleSize: sz(22, \"title\"),\n subtitleWeight: \"500\",\n subtitleSize: sz(14, \"subtitle\"),\n labelBg: bg,\n labelWeight: \"650\",\n labelSize: sz(12, \"label\"),\n labelTransform: \"uppercase\",\n labelBorderBottom: border(1, \"black\"),\n labelPad: sz(5, \"pad\"),\n groupBg: \"black\",\n groupColor: \"white\",\n groupWeight: \"650\",\n groupSize: sz(12, \"group\"),\n groupBorderBottom: border(1, \"black\"),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(12, \"body\"),\n bodyWeight: \"500\",\n pad: sz(8, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"#D3D3D3\"),\n sourceSize: sz(10, \"source\"),\n },\n fonts: [\n { family: \"Spline Sans Mono\", weights: [500] },\n { family: \"Work Sans\", weights: [500, 650] },\n ],\n rules: (s) =>\n [\n `${s} td.sdvt-cell:not(:first-child){border-left:0.5px solid black}`,\n `${s} tbody tr:first-child td.sdvt-cell{border-top:${hline}}`, // _themes.py:1371: the dotted top rule is on EVERY body cell, the first row too\n `${s} td.sdvt-cell,${s} th.sdvt-label{text-align:center}`,\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-subtitle{display:block;padding:0 0 4px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/booktabs.ts — gt_theme_booktabs (_themes.py:351-448): three horizontal rules and nothing else, in a serif\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const booktabs = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#111111\", \"accent\");\n const ink = \"#111111\";\n const secondary = \"#5A5A5A\";\n const bg = \"#FFFFFF\";\n return {\n name: \"booktabs\",\n tokens: {\n ...baseTokens(d, fontStack(\"Tinos\")),\n bg,\n text: ink,\n muted: secondary,\n accent,\n titleColor: ink,\n titleSize: px(d.title),\n subtitleColor: secondary,\n subtitleStyle: \"italic\",\n subtitleSize: px(d.subtitle),\n labelBg: bg,\n labelColor: ink,\n labelWeight: \"700\",\n labelSize: px(d.label + 1),\n labelBorderTop: border(2, accent),\n labelBorderBottom: border(1, accent),\n labelPad: px(Math.max(d.pad - 1, 2)),\n groupBg: bg,\n groupColor: accent,\n groupWeight: \"700\",\n groupSize: px(d.group + 1),\n groupBorderTop: border(1, accent),\n groupPad: px(Math.max(d.pad - 2, 2)),\n bodySize: px(d.body),\n pad: px(d.pad),\n bodyBorderBottom: border(2, accent),\n sourceColor: secondary,\n sourceSize: px(d.source),\n },\n fonts: [{ family: \"Tinos\", weights: [400, 700], italic: true }],\n rules: (s) =>\n [\n `${s} th.sdvt-group{font-style:italic}`,\n `${s} tfoot td{padding-top:${px(d.pad + 4)}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/broadsheet.ts — gt_theme_broadsheet (_themes.py:451-571): a serif body on warm paper, small letterspaced sans labels, hairlines\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nconst PAPER: Readonly<Record<string, readonly [string, string]>> = {\n white: [\"#FBFAF7\", \"#DEDAD2\"],\n salmon: [\"#FFF1E5\", \"#EAD9C7\"],\n};\nexport const broadsheet = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#A6081A\", \"accent\");\n const paper = ref.options?.paper ?? \"white\";\n const [bg, rule] = PAPER[paper] ?? [hexOption(paper, \"paper\"), \"#DEDAD2\"];\n const ink = \"#16130F\";\n const secondary = \"#5C574F\";\n const sans = fontStack(\"Public Sans\");\n return {\n name: \"broadsheet\",\n tokens: {\n ...baseTokens(d, fontStack(\"Source Serif 4\")),\n fontTitle: fontStack(\"Newsreader\"),\n fontLabel: sans,\n bg,\n text: ink,\n muted: secondary,\n accent,\n rule,\n hline: border(1, rule),\n headingBg: bg,\n titleColor: ink,\n titleWeight: \"600\",\n titleSize: px(d.title),\n subtitleColor: secondary,\n subtitleSize: px(d.subtitle),\n subtitleStyle: \"italic\",\n labelBg: bg,\n labelColor: secondary,\n labelWeight: \"600\",\n labelSize: px(d.label),\n labelTransform: \"uppercase\",\n labelTracking: \"0.09em\",\n labelBorderBottom: border(1.5, ink),\n labelPad: px(Math.max(d.pad - 2, 2)),\n groupBg: bg,\n groupColor: accent,\n groupWeight: \"700\",\n groupSize: px(d.group),\n groupTransform: \"uppercase\",\n groupBorderTop: border(1, ink),\n groupPad: px(Math.max(d.pad - 3, 2)),\n bodySize: px(d.body),\n pad: px(d.pad),\n bodyBorderBottom: border(1, ink),\n tableBorderTop: border(2, accent),\n sourceColor: secondary,\n sourceSize: px(d.source),\n },\n fonts: [\n { family: \"Source Serif 4\", weights: [400, 600] },\n { family: \"Newsreader\", weights: [400, 600], italic: true },\n { family: \"Public Sans\", weights: [600, 700] },\n ],\n rules: (s) =>\n [\n `${s} th.sdvt-group{letter-spacing:0.08em}`,\n `${s} tr.sdvt-group-row + tr td.sdvt-cell{padding-top:${px(Math.max(d.pad - 2, 2))}}`,\n `${s} .sdvt-subtitle{display:block;font-family:var(--sdvt-font-title);padding-bottom:${px(d.pad + 8)}}${s} .sdvt-title{display:block;padding-bottom:${px(Math.ceil(d.pad / 2))}}`,\n `${s} tfoot td{font-family:${sans};padding-top:${px(d.pad + 4)}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/brutalist.ts — gt_theme_brutalist (_themes.py:770-881): heavy black frame, knocked-out label bar, Archivo Black headline\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const brutalist = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#FF3B00\", \"accent\");\n const ink = \"#000000\";\n const bg = \"#FFFFFF\";\n const frame = border(3, ink);\n return {\n name: \"brutalist\",\n tokens: {\n ...baseTokens(d, fontStack(\"Archivo\")),\n fontTitle: fontStack(\"Archivo Black\"),\n bg,\n text: ink,\n muted: ink,\n accent,\n rule: ink,\n hline: border(1, ink),\n headingBg: bg,\n titleColor: ink,\n titleWeight: \"400\", // Archivo Black carries its own weight; Python sets none\n titleSize: px(d.title + 6),\n titleTransform: \"uppercase\",\n titleTracking: \"-0.02em\",\n subtitleColor: ink,\n subtitleWeight: \"600\",\n subtitleSize: px(d.subtitle),\n labelBg: ink,\n labelColor: \"#FFFFFF\",\n labelWeight: \"700\",\n labelSize: px(d.label + 1),\n labelTransform: \"uppercase\",\n labelTracking: \"0.04em\",\n labelPad: px(d.pad),\n groupBg: bg,\n groupColor: accent,\n groupWeight: \"700\",\n groupSize: px(d.group + 1),\n groupTransform: \"uppercase\",\n groupBorderTop: border(2, ink),\n groupPad: px(Math.max(d.pad - 1, 3)),\n bodySize: px(d.body),\n bodyWeight: \"500\",\n pad: px(d.pad),\n headingPad: px(d.pad + 2),\n sourcePad: px(d.pad + 2),\n tableBorderTop: frame,\n tableBorderBottom: frame,\n tableBorderX: frame,\n sourceColor: ink,\n sourceSize: px(d.source),\n },\n fonts: [\n { family: \"Archivo\", weights: [500, 600, 700] },\n { family: \"Archivo Black\", weights: [400] },\n ],\n rules: (s) =>\n [\n `${s} caption{border-bottom:3px solid ${ink}}`,\n `${s} th.sdvt-group{letter-spacing:0.06em}`,\n `${s} tfoot td{font-weight:500}`,\n `${s} .sdvt-subtitle{display:block;padding-bottom:${px(d.pad + 2)}}${s} .sdvt-title{display:block;line-height:1.05;padding-bottom:${px(Math.ceil(d.pad / 2))}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/luminance.ts — gt::adjust_luminance(), a line-for-line port of Python `_themes._adjust_luminance` (_themes.py:179-239)\nimport { hex6 } from \"@sportsdataverse/sdvplot\";\nconst c2to3 = (x: number, y: number): [number, number, number] => [x / y, 1, (1 - x - y) / y];\n// grDevices make.rgb(): sRGB primaries and R's own D65 white point (0.3137, 0.3291)\nconst P = [c2to3(0.64, 0.33), c2to3(0.3, 0.6), c2to3(0.15, 0.06)] as const;\nconst WHITE = c2to3(0.3137, 0.3291);\nconst at = (m: readonly (readonly number[])[], i: number, j: number): number => m[i]?.[j] ?? 0;\nconst DET =\n at(P, 0, 0) * (at(P, 1, 1) * at(P, 2, 2) - at(P, 1, 2) * at(P, 2, 1)) -\n at(P, 0, 1) * (at(P, 1, 0) * at(P, 2, 2) - at(P, 1, 2) * at(P, 2, 0)) +\n at(P, 0, 2) * (at(P, 1, 0) * at(P, 2, 1) - at(P, 1, 1) * at(P, 2, 0));\nconst INV = [0, 1, 2].map((i) =>\n [0, 1, 2].map(\n (j) =>\n (at(P, (j + 1) % 3, (i + 1) % 3) * at(P, (j + 2) % 3, (i + 2) % 3) -\n at(P, (j + 1) % 3, (i + 2) % 3) * at(P, (j + 2) % 3, (i + 1) % 3)) /\n DET,\n ),\n);\nconst S = [0, 1, 2].map((j) => [0, 1, 2].reduce((acc, k) => acc + (WHITE[k] ?? 0) * at(INV, k, j), 0));\nconst M = [0, 1, 2].map((r) => [0, 1, 2].map((j) => (S[r] ?? 0) * at(P, r, j)));\n/** Shift a color's HCL luminance `steps` along a logistic curve (R's grDevices math). */\nexport function adjustLuminance(color: string, steps: number): string {\n const c = hex6(color);\n const lin = [1, 3, 5]\n .map((i) => Number.parseInt(c.slice(i, i + 2), 16) / 255)\n .map((v) => (v < 0.04045 ? v / 12.92 : ((v + 0.055) / 1.055) ** 2.4));\n const [x, y, z] = [0, 1, 2].map((j) =>\n [0, 1, 2].reduce((acc, k) => acc + (lin[k] ?? 0) * at(M, k, j), 0),\n ) as [number, number, number];\n const [wx, wy, wz] = WHITE;\n const denom = x + 15 * y + 3 * z;\n const wdenom = wx + 15 * wy + 3 * wz;\n const [u1, v1] = denom ? [(4 * x) / denom, (9 * y) / denom] : [1, 1];\n const yr = y / wy;\n let lum = yr <= 216 / 24389 ? (24389 / 27) * yr : 116 * yr ** (1 / 3) - 16;\n const u = 13 * lum * (u1 - (4 * wx) / wdenom);\n const v = 13 * lum * (v1 - (9 * wy) / wdenom);\n const hue = Math.atan2(v, u);\n const chroma = Math.hypot(u, v);\n const frac = lum / 100;\n if (frac <= 0) return \"#000000\";\n lum = frac >= 1 ? 100 : 100 / (1 + Math.exp(-(Math.log(frac / (1 - frac)) + steps)));\n // grDevices hcl(h, c, l): polar Luv back to sRGB, clamped into gamut\n const yy = 100 * (lum > 7.999592 ? ((lum + 16) / 116) ** 3 : lum / 903.3);\n const uu = (chroma * Math.cos(hue)) / (13 * lum) + 0.1978398;\n const vv = (chroma * Math.sin(hue)) / (13 * lum) + 0.4683363;\n const xx = (9 * yy * uu) / (4 * vv);\n const zz = -xx / 3 - 5 * yy + (3 * yy) / vv;\n const gamma = (t: number): number => (t > 0.00304 ? 1.055 * t ** (1 / 2.4) - 0.055 : 12.92 * t);\n const out = [\n gamma((3.240479 * xx - 1.53715 * yy - 0.498535 * zz) / 100),\n gamma((-0.969256 * xx + 1.875992 * yy + 0.041556 * zz) / 100),\n gamma((0.055648 * xx - 0.204043 * yy + 1.057311 * zz) / 100),\n ];\n return `#${out\n .map((t) =>\n Math.min(255, Math.max(0, Math.trunc(255 * t + 0.5)))\n .toString(16)\n .padStart(2, \"0\"),\n )\n .join(\"\")}`;\n}\n","// src/themes/drench.ts — gt_theme_drench (_themes.py:884-995): the whole table in one saturated hue; ink, rule and band derive from it\nimport { onColor } from \"@sportsdataverse/sdvplot\";\nimport type { ThemeRef } from \"../spec.js\";\nimport { adjustLuminance } from \"./luminance.js\";\nimport { secondaryOn } from \"./sdv.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const drench = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const color = hexOption(ref.options?.color ?? \"#123F5E\", \"color\");\n const ink = onColor(color);\n const darkType = ink === \"#000000\";\n const rule = adjustLuminance(color, darkType ? -0.6 : 0.9); // shift the ground rather than laying gray over it\n const surface = adjustLuminance(color, darkType ? 0.5 : -0.7);\n const secondary = secondaryOn(color, ink, 4.5);\n return {\n name: \"drench\",\n tokens: {\n ...baseTokens(d, fontStack(\"Gabarito\")),\n bg: color,\n text: ink,\n muted: secondary,\n accent: ink,\n rule,\n hline: border(1, rule),\n headingBg: color,\n titleColor: ink,\n titleSize: px(d.title + 2),\n subtitleColor: secondary,\n subtitleWeight: \"400\",\n subtitleSize: px(d.subtitle),\n labelBg: color,\n labelColor: secondary,\n labelWeight: \"700\",\n labelSize: px(d.label),\n labelTransform: \"uppercase\",\n labelTracking: \"0.08em\",\n labelBorderBottom: border(1, rule),\n labelPad: px(d.pad + 1),\n groupBg: surface,\n groupColor: ink,\n groupWeight: \"700\",\n groupSize: px(d.group),\n groupTransform: \"uppercase\",\n groupPad: px(Math.max(d.pad - 1, 3)),\n bodySize: px(d.body),\n bodyWeight: \"500\",\n pad: px(d.pad + 1),\n headingPad: px(d.pad + 2),\n sourcePad: px(d.pad + 2),\n lineHeight: darkType ? \"normal\" : \"1.55\", // light type on a saturated ground reads lighter than it is\n sourceColor: secondary,\n sourceSize: px(d.source),\n },\n fonts: [{ family: \"Gabarito\", weights: [400, 500, 700] }],\n rules: (s) =>\n [\n `${s} th.sdvt-group{letter-spacing:0.06em}`,\n `${s} .sdvt-subtitle{display:block;padding-bottom:${px(d.pad + 8)}}${s} .sdvt-title{display:block;padding-bottom:${px(Math.ceil(d.pad / 2))}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${color}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/gtutils.ts — gt_theme_gtutils (_themes.py:1408-1498): cream ground, centered cells, a rule under every row but the last.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density). Nothing sets the table font, title or subtitle size, so\n// great_tables' defaults apply: a 16px table font, a 125% title and an 85% subtitle (percentages follow the table font, hence the body role).\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const gtutils = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const bg = \"#FFFDF5\";\n const rule = \"#8A817C\";\n const signika = fontStack(\"Signika Negative\");\n return {\n name: \"gtutils\",\n tokens: {\n ...baseTokens(d, fontStack(\"Almarai\")),\n fontLabel: signika,\n fontTitle: signika,\n bg,\n rule,\n hline: border(1, rule),\n titleWeight: \"650\",\n titleSize: sz(20, \"body\"),\n subtitleWeight: \"500\",\n subtitleSize: sz(13.6, \"body\"),\n labelBg: bg,\n labelWeight: \"650\",\n labelSize: sz(14, \"label\"),\n labelBorderBottom: border(1, \"black\"),\n labelPad: \"2px\",\n groupBg: rule,\n groupColor: bg,\n groupWeight: \"650\",\n groupSize: sz(14, \"group\"),\n groupBorderBottom: border(1, \"black\"),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(16, \"body\"),\n bodyWeight: \"500\",\n pad: sz(1, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"#D3D3D3\"),\n sourceSize: sz(12, \"source\"),\n },\n fonts: [\n { family: \"Almarai\", weights: [400, 500, 700] },\n { family: \"Signika Negative\", weights: [500, 650] },\n ],\n rules: (s) =>\n [\n `${s} td.sdvt-cell,${s} th.sdvt-label{text-align:center}`,\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-subtitle{display:block;padding:0 0 4px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/kenpom.ts — gt_theme_kenpom (_themes.py:1509-1602): Helvetica, pale-blue label and group bands, alternating row tint.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density). Helvetica Neue is a system face: no Google font.\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const kenpom = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const bg = \"#FFFFFF\";\n const band = \"#c3d9ff\";\n const bandInk = \"#02b\";\n return {\n name: \"kenpom\",\n tokens: {\n ...baseTokens(d, fontStack(\"Helvetica Neue\")),\n bg,\n hline: border(1, \"#000000\"),\n headingAlign: \"center\",\n titleWeight: \"650\",\n titleSize: sz(18, \"title\"),\n subtitleWeight: \"500\",\n subtitleSize: sz(14, \"subtitle\"),\n labelBg: band,\n labelColor: bandInk,\n labelWeight: \"650\",\n labelSize: sz(14, \"label\"),\n labelPad: \"2px\",\n groupBg: band,\n groupColor: bandInk,\n groupWeight: \"bold\",\n groupSize: sz(14, \"group\"),\n groupBorderBottom: border(1, \"black\"),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(16, \"body\"),\n bodyWeight: \"500\",\n pad: sz(2, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"white\"),\n sourceSize: sz(12, \"source\"),\n },\n fonts: [],\n rules: (s) =>\n [\n // R's odd and even rows (1-based), counted over data rows only (group rows excluded)\n `${s} tbody tr.sdvt-row:nth-child(odd of :not(.sdvt-group-row)) td.sdvt-cell{background-color:#F2FAFD}`,\n `${s} tbody tr.sdvt-row:nth-child(even of :not(.sdvt-group-row)) td.sdvt-cell{background-color:#e5ecf9}`,\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-title,${s} .sdvt-subtitle{display:block;text-align:left}`, // the title and subtitle styles align left inside a centered heading\n `${s} .sdvt-subtitle{padding:0 0 4px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/midnight.ts — gt_theme_midnight (_themes.py:998-1099): light type on a near-black ground, a raised label band, one cool accent\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const midnight = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#5B8DEF\", \"accent\"); // lowercased, as Python _color → hex6\n const ground = \"#0C0D10\";\n const surface = \"#16181D\";\n const primary = \"#E8E9ED\";\n const secondary = \"#9498A3\";\n const rule = \"#24272E\";\n return {\n name: \"midnight\",\n tokens: {\n ...baseTokens(d, fontStack(\"Chivo\")),\n bg: ground,\n text: primary,\n muted: secondary,\n accent,\n rule,\n hline: border(1, rule),\n headingBg: ground,\n titleColor: primary,\n titleWeight: \"700\",\n titleSize: px(d.title),\n subtitleColor: secondary,\n subtitleWeight: \"400\",\n subtitleSize: px(d.subtitle),\n labelBg: surface,\n labelColor: secondary,\n labelWeight: \"600\",\n labelSize: px(d.label + 1),\n labelBorderBottom: border(1, rule),\n labelPad: px(Math.max(d.pad - 1, 3)),\n groupBg: ground,\n groupColor: accent,\n groupWeight: \"700\",\n groupSize: px(d.group),\n groupBorderTop: border(1, rule),\n groupPad: px(Math.max(d.pad - 2, 2)),\n bodySize: px(d.body),\n pad: px(d.pad),\n lineHeight: \"1.55\", // light on dark reads lighter than it is\n bodyBorderBottom: border(1, rule),\n tableBorderTop: border(2, accent),\n sourceColor: secondary,\n sourceSize: px(d.source),\n },\n fonts: [{ family: \"Chivo\", weights: [400, 600, 700] }],\n rules: (s) =>\n [\n `${s} .sdvt-subtitle{display:block;padding-bottom:${px(d.pad + 8)}}${s} .sdvt-title{display:block;padding-bottom:${px(Math.ceil(d.pad / 2))}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${ground}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/ncaa.ts — gt_theme_ncaa (_themes.py:1605-1700): Open Sans, a black uppercase label bar, charcoal group bars, striped rows, left-aligned.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density).\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const ncaa = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const bg = \"#FFFFFF\";\n const almarai = fontStack(\"Almarai\");\n return {\n name: \"ncaa\",\n tokens: {\n ...baseTokens(d, fontStack(\"Open Sans\")),\n bg,\n stripe: \"#F4F4F4\", // opt_row_striping() default in great_tables\n hline: border(1, \"transparent\"),\n titleSize: sz(18, \"title\"),\n subtitleWeight: \"400\",\n subtitleSize: sz(14, \"subtitle\"),\n labelBg: \"#000000\",\n labelColor: \"white\",\n labelWeight: \"400\", // great_tables' column-label default; Python sets none\n labelSize: sz(14, \"label\"),\n labelTransform: \"uppercase\",\n labelBorderTop: border(1, \"black\"),\n labelPad: sz(5, \"pad\"),\n groupBg: \"#3C3A40\",\n groupColor: \"#ffffff\",\n groupWeight: \"650\",\n groupSize: sz(14, \"group\"),\n groupBorderBottom: border(1, \"black\"),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(14, \"body\"),\n pad: sz(2, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"white\"),\n sourceSize: sz(12, \"source\"),\n },\n fonts: [\n { family: \"Open Sans\", weights: [400, 650, 700] },\n { family: \"Almarai\", weights: [400] },\n ],\n rules: (s) =>\n [\n `${s} th.sdvt-label,${s} td.sdvt-cell{padding:5px 5px 5px 25px;text-align:left}`,\n `${s} tfoot td{font-family:${almarai}}`,\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-subtitle{display:block;padding:0 0 4px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/pl.ts — gt_theme_pl (_themes.py:1703-1791): DM Sans in purple on white, a purple rule under every row but the last.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density). Nothing sets the title or subtitle size, so great_tables'\n// 125% / 85% of its 16px table font apply (percentages follow the table font, hence the body role); title, subtitle and notes keep its #333333.\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const pl = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const bg = \"#FFFFFF\";\n const purple = \"#37003c\";\n const dim = \"#87668a\";\n return {\n name: \"pl\",\n tokens: {\n ...baseTokens(d, fontStack(\"DM Sans\")),\n bg,\n text: purple,\n muted: dim,\n rule: purple,\n hline: border(1, purple),\n titleColor: \"#333333\",\n titleWeight: \"650\",\n titleSize: sz(20, \"body\"),\n subtitleColor: \"#333333\",\n subtitleWeight: \"500\",\n subtitleSize: sz(13.6, \"body\"),\n labelBg: bg,\n labelColor: dim,\n labelWeight: \"650\",\n labelSize: sz(13, \"label\"),\n labelBorderBottom: border(1, purple),\n labelPad: sz(5, \"pad\"),\n groupBg: \"#C0BACA\",\n groupColor: \"#ffffff\",\n groupWeight: \"650\",\n groupSize: sz(12, \"group\"),\n groupBorderBottom: border(1, purple),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(14, \"body\"),\n pad: sz(2, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"white\"),\n sourceColor: \"#333333\",\n sourceSize: sz(12, \"source\"),\n },\n fonts: [{ family: \"DM Sans\", weights: [500, 650] }],\n rules: (s) =>\n [\n `${s} tbody{border-top:1px solid ${purple}}`,\n `${s} th.sdvt-label{padding-bottom:3px}`,\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-subtitle{display:block;padding:2px 0 6px}`,\n `${s} tfoot td{line-height:1.2}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/savant.ts — gt_theme_savant (_themes.py:1794-1877): Roboto Condensed, black group bars, striped rows, a centered heading.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density).\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const savant = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const bg = \"#FFFFFF\";\n return {\n name: \"savant\",\n tokens: {\n ...baseTokens(d, fontStack(\"Roboto Condensed\")),\n bg,\n stripe: \"#F4F4F4\", // opt_row_striping() default in great_tables\n hline: border(1, \"transparent\"),\n headingAlign: \"center\",\n titleSize: sz(18, \"title\"),\n subtitleWeight: \"400\",\n subtitleSize: sz(14, \"subtitle\"),\n labelBg: bg,\n labelWeight: \"700\",\n labelSize: sz(14, \"label\"),\n labelBorderTop: border(1, \"black\"),\n labelPad: \"2px\",\n groupBg: \"#000000\",\n groupColor: \"#FFFDF5\",\n groupWeight: \"650\",\n groupSize: sz(14, \"group\"),\n groupBorderBottom: border(1, \"black\"),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(14, \"body\"),\n pad: sz(1, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"white\"),\n sourceSize: sz(12, \"source\"),\n },\n fonts: [{ family: \"Roboto Condensed\", weights: [400, 650, 700] }],\n rules: (s) =>\n [\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-subtitle{display:block;padding:0 0 4px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/scoreboard.ts — gt_theme_scoreboard (_themes.py:1108-1209): condensed caps on a solid accent label bar\nimport { onColor } from \"@sportsdataverse/sdvplot\";\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const scoreboard = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#0E1621\", \"accent\");\n const ink = \"#141719\";\n const rule = \"#E6E9ED\";\n const muted = \"#5A6069\";\n const bg = \"#FFFFFF\";\n const condensed = fontStack(\"Barlow Condensed\");\n return {\n name: \"scoreboard\",\n tokens: {\n ...baseTokens(d, fontStack(\"Barlow\")),\n fontLabel: condensed,\n fontTitle: condensed,\n bg,\n text: ink,\n muted,\n accent,\n rule,\n hline: border(1, rule),\n headingBg: bg,\n titleColor: ink,\n titleSize: px(d.title + 4),\n titleTransform: \"uppercase\",\n titleTracking: \"0.01em\",\n subtitleColor: muted,\n subtitleWeight: \"500\",\n subtitleSize: px(d.subtitle + 1),\n labelBg: accent,\n labelColor: onColor(accent), // a pale accent needs dark labels, so measure it\n labelWeight: \"700\",\n labelSize: px(d.label + 2),\n labelTransform: \"uppercase\",\n labelTracking: \"0.06em\",\n labelPad: px(d.pad + 2),\n groupBg: \"#F2F4F6\",\n groupColor: accent,\n groupWeight: \"700\",\n groupSize: px(d.group + 1),\n groupTransform: \"uppercase\",\n groupPad: px(Math.max(d.pad, 3)),\n bodySize: px(d.body),\n bodyWeight: \"500\",\n pad: px(d.pad),\n headingPad: px(d.pad + 1),\n sourcePad: px(d.pad + 2),\n bodyBorderBottom: border(2, accent),\n sourceColor: muted,\n sourceSize: px(d.source),\n },\n fonts: [\n { family: \"Barlow\", weights: [500] },\n { family: \"Barlow Condensed\", weights: [500, 700] },\n ],\n rules: (s) =>\n [\n `${s} caption{letter-spacing:0.01em}`,\n `${s} th.sdvt-group{letter-spacing:0.06em}`,\n `${s} .sdvt-subtitle{display:block;font-family:var(--sdvt-font-title);padding-bottom:${px(d.pad + 6)}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/sofa.ts — gt_theme_sofa (_themes.py:1880-1968): Sofia Sans Condensed on cream (or navy), no rules between rows.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density). great_tables switches the text to white on the navy ground.\nimport { TableSpecError } from \"../errors.js\";\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const sofa = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const style = ref.options?.style ?? \"light\";\n if (style !== \"light\" && style !== \"dark\")\n throw new TableSpecError(`sofa theme style must be \"light\" or \"dark\", not \"${style}\"`);\n const bg = style === \"light\" ? \"#F0EAD6\" : \"#1c2632\";\n return {\n name: \"sofa\",\n tokens: {\n ...baseTokens(d, fontStack(\"Sofia Sans Condensed\")),\n bg,\n text: style === \"light\" ? \"#333333\" : \"#FFFFFF\",\n hline: border(1, \"transparent\"),\n titleSize: sz(22, \"title\"),\n subtitleWeight: \"400\",\n subtitleSize: sz(14, \"subtitle\"),\n labelBg: bg,\n labelWeight: \"bold\",\n labelSize: sz(14, \"label\"),\n labelPad: \"2px\",\n groupBg: bg,\n groupWeight: \"bold\",\n groupSize: sz(14, \"group\"),\n groupBorderBottom: border(1, \"black\"),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(14, \"body\"),\n pad: sz(1, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"#D3D3D3\"),\n sourceSize: sz(10, \"source\"),\n },\n fonts: [{ family: \"Sofia Sans Condensed\", weights: [400, 650, 700] }],\n rules: (s) =>\n [\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-subtitle{display:block;padding:0 0 4px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/swiss.ts — gt_theme_swiss (_themes.py:574-669): generous padding does the separating, one rule under the labels\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const swiss = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#111111\", \"accent\");\n const ink = \"#111111\";\n const secondary = \"#6B6B6B\"; // 5.28:1 on white; #7A7A7A missed 4.5\n const bg = \"#FFFFFF\";\n return {\n name: \"swiss\",\n tokens: {\n ...baseTokens(d, fontStack(\"Archivo\")),\n bg,\n text: ink,\n muted: secondary,\n accent,\n headingBg: bg,\n titleColor: ink,\n titleSize: px(d.title + 4),\n titleTracking: \"-0.02em\",\n subtitleColor: secondary,\n subtitleWeight: \"400\",\n subtitleSize: px(d.subtitle),\n labelBg: bg,\n labelColor: ink,\n labelWeight: \"500\",\n labelSize: px(d.label),\n labelTransform: \"uppercase\",\n labelTracking: \"0.12em\",\n labelBorderBottom: border(1, accent),\n labelPad: px(d.pad + 2),\n groupBg: bg,\n groupColor: secondary,\n groupWeight: \"500\",\n groupSize: px(d.group),\n groupTransform: \"uppercase\",\n groupPad: px(d.pad + 6),\n bodySize: px(d.body),\n pad: px(d.pad + 5),\n headingPad: px(d.pad + 4),\n sourcePad: px(d.pad + 4),\n bodyBorderBottom: border(1, ink),\n sourceColor: secondary,\n sourceSize: px(d.source),\n },\n fonts: [{ family: \"Archivo\", weights: [400, 500, 700] }],\n rules: (s) =>\n [\n `${s} th.sdvt-group{letter-spacing:0.12em}`,\n `${s} .sdvt-subtitle{display:block;padding-bottom:${px(d.pad + 14)}}${s} .sdvt-title{display:block;padding-bottom:${px(Math.ceil(d.pad / 2))}}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/terminal.ts — gt_theme_terminal (_themes.py:1212-1314): monospace readout on a near-black ground, a rule on every row\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const terminal = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#FFB86C\", \"accent\");\n const ground = \"#0F1115\";\n const primary = \"#C9D1D9\";\n const secondary = \"#7D8590\";\n const rule = \"#262B33\";\n return {\n name: \"terminal\",\n tokens: {\n ...baseTokens(d, fontStack(\"JetBrains Mono\")),\n bg: ground,\n text: primary,\n muted: secondary,\n accent,\n rule,\n hline: border(1, rule),\n headingBg: ground,\n titleColor: primary,\n titleSize: px(d.title - 2),\n titleTransform: \"uppercase\",\n titleTracking: \"0.04em\",\n subtitleColor: secondary,\n subtitleWeight: \"400\",\n subtitleSize: px(d.subtitle - 1),\n labelBg: ground,\n labelColor: accent,\n labelWeight: \"700\",\n labelSize: px(d.label),\n labelTransform: \"uppercase\",\n labelTracking: \"0.08em\",\n labelBorderBottom: border(1, accent),\n labelPad: px(d.pad + 1),\n groupBg: ground,\n groupColor: accent,\n groupWeight: \"700\",\n groupSize: px(d.group),\n groupTransform: \"uppercase\",\n groupBorderTop: border(1, rule),\n groupPad: px(Math.max(d.pad, 3)),\n bodySize: px(d.body),\n pad: px(d.pad),\n headingPad: px(d.pad + 2),\n sourcePad: px(d.pad + 2),\n lineHeight: \"1.5\",\n tableBorderTop: border(1, accent),\n tableBorderBottom: border(1, rule),\n sourceColor: secondary,\n sourceSize: px(d.source),\n },\n fonts: [{ family: \"JetBrains Mono\", weights: [400, 700] }],\n rules: (s) =>\n [\n `${s} .sdvt-subtitle{display:block;padding-bottom:${px(d.pad + 6)}}${s} .sdvt-title{display:block;padding-bottom:2px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${ground}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/tier.ts — gt_theme_tier (_themes.py:1971-2055): Oswald on near-black (or white), centered cells, a rule under every row but the last.\n// Hard-coded px in Python → written at \"comfortable\" and scaled by scaleFor(density). Only the title and subtitle are styled, so great_tables'\n// defaults apply elsewhere: a 16px table font, 100% labels and group rows, 90% notes (percentages follow the table font, hence the body role).\n// great_tables switches the text to white on the dark ground.\nimport { TableSpecError } from \"../errors.js\";\nimport type { ThemeRef } from \"../spec.js\";\nimport {\n type Role,\n type Theme,\n baseTokens,\n border,\n densitySizes,\n fontStack,\n px,\n scaleFor,\n} from \"./tokens.js\";\nexport const tier = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const k = scaleFor(ref.density);\n const sz = (n: number, role: Role): string => px(n * k[role]);\n const style = ref.options?.style ?? \"dark\";\n if (style !== \"light\" && style !== \"dark\")\n throw new TableSpecError(`tier theme style must be \"light\" or \"dark\", not \"${style}\"`);\n const bg = style === \"dark\" ? \"#1a1a17\" : \"#ffffff\";\n return {\n name: \"tier\",\n tokens: {\n ...baseTokens(d, fontStack(\"Oswald\")),\n bg,\n text: style === \"dark\" ? \"#FFFFFF\" : \"#333333\",\n hline: border(1, \"black\"),\n titleWeight: \"650\",\n titleSize: sz(20, \"body\"),\n subtitleWeight: \"500\",\n subtitleSize: sz(13.6, \"body\"),\n labelBg: bg,\n labelWeight: \"400\",\n labelSize: sz(16, \"body\"),\n labelPad: \"2px\",\n groupBg: bg,\n groupWeight: \"400\",\n groupSize: sz(16, \"body\"),\n groupBorderBottom: border(1, \"black\"),\n groupPad: sz(1.5, \"pad\"),\n bodySize: sz(16, \"body\"),\n bodyWeight: \"500\",\n pad: sz(1, \"pad\"),\n headingPad: sz(4, \"pad\"),\n sourcePad: sz(4, \"pad\"),\n bodyBorderBottom: border(2, \"#D3D3D3\"),\n sourceSize: sz(14.4, \"body\"),\n },\n fonts: [{ family: \"Oswald\", weights: [500, 650] }],\n rules: (s) =>\n [\n `${s} td.sdvt-cell,${s} th.sdvt-label{text-align:center}`,\n `${s} caption{padding-top:6px;padding-bottom:0}`,\n `${s} .sdvt-subtitle{display:block;padding:0 0 4px}`,\n `${s} tbody tr:last-child td{border-bottom:2px solid ${bg}}`,\n ].join(\"\\n\"),\n };\n};\n","// src/themes/tufte.ts — gt_theme_tufte (_themes.py:672-767): italic de-emphasized labels, one hairline, cream paper\nimport type { ThemeRef } from \"../spec.js\";\nimport { type Theme, baseTokens, border, densitySizes, fontStack, hexOption, px } from \"./tokens.js\";\nexport const tufte = (ref: ThemeRef): Theme => {\n const d = densitySizes(ref.density);\n const accent = hexOption(ref.options?.accent ?? \"#111111\", \"accent\");\n const ink = \"#111111\";\n const secondary = \"#6F6A60\";\n const hair = \"#C9C4B8\";\n const bg = \"#FFFFF8\";\n return {\n name: \"tufte\",\n tokens: {\n ...baseTokens(d, fontStack(\"EB Garamond\")),\n bg,\n text: ink,\n muted: secondary,\n accent,\n rule: hair,\n headingBg: bg,\n titleColor: ink,\n titleWeight: \"500\",\n titleSize: px(d.title),\n subtitleColor: secondary,\n subtitleStyle: \"italic\",\n subtitleSize: px(d.subtitle),\n labelBg: bg,\n labelColor: secondary,\n labelWeight: \"400\",\n labelStyle: \"italic\",\n labelSize: px(d.label + 2),\n labelBorderBottom: border(1, accent),\n labelPad: px(Math.max(d.pad - 1, 2)),\n groupBg: bg,\n groupColor: accent,\n groupWeight: \"600\",\n groupSize: px(d.group + 2),\n groupPad: px(Math.max(d.pad - 1, 2)),\n bodySize: px(d.body + 1),\n pad: px(d.pad),\n bodyBorderBottom: border(1, hair),\n sourceColor: secondary,\n sourceSize: px(d.source + 1),\n sourceStyle: \"italic\",\n },\n fonts: [{ family: \"EB Garamond\", weights: [400, 500, 600], italic: true }],\n rules: (s) =>\n [`${s} th.sdvt-group{font-style:italic}`, `${s} tfoot td{padding-top:${px(d.pad + 4)}}`].join(\"\\n\"),\n };\n};\n","import { TableSpecError } from \"../errors.js\";\nimport type { ThemeRef } from \"../spec.js\";\nimport { almanac } from \"./almanac.js\";\nimport { athletic } from \"./athletic.js\";\nimport { booktabs } from \"./booktabs.js\";\nimport { broadsheet } from \"./broadsheet.js\";\nimport { brutalist } from \"./brutalist.js\";\nimport { drench } from \"./drench.js\";\nimport { gtutils } from \"./gtutils.js\";\nimport { kenpom } from \"./kenpom.js\";\nimport { midnight } from \"./midnight.js\";\nimport { ncaa } from \"./ncaa.js\";\nimport { pl } from \"./pl.js\";\nimport { savant } from \"./savant.js\";\nimport { scoreboard } from \"./scoreboard.js\";\nimport { sdv, sdvTeam } from \"./sdv.js\";\nimport { sofa } from \"./sofa.js\";\nimport { swiss } from \"./swiss.js\";\nimport { terminal } from \"./terminal.js\";\nimport { tier } from \"./tier.js\";\nimport type { Theme, ThemeDef } from \"./tokens.js\";\nimport { tufte } from \"./tufte.js\";\nexport const THEMES: Readonly<Record<string, ThemeDef>> = {\n sdv,\n sdvTeam,\n almanac,\n athletic,\n booktabs,\n broadsheet,\n brutalist,\n drench,\n gtutils,\n kenpom,\n midnight,\n ncaa,\n pl,\n savant,\n scoreboard,\n sofa,\n swiss,\n terminal,\n tier,\n tufte,\n};\nexport const THEME_NAMES: readonly string[] = Object.keys(THEMES);\nexport function resolveTheme(ref: ThemeRef): Theme {\n const def = THEMES[ref.name];\n if (!def) throw new TableSpecError(`unknown theme \"${ref.name}\"; one of ${THEME_NAMES.join(\", \")}`);\n return def(ref);\n}\nexport type { Theme, ThemeTokens, GoogleFont, ThemeDef } from \"./tokens.js\";\n","import type { RowFilter } from \"@sportsdataverse/sdvplot\";\nimport { TableSpecError } from \"./errors.js\";\nimport type { ColumnSpec, TableSpec } from \"./spec.js\";\n\n// J31: the row test setExternalFilter takes is sdvplot's own type, so a selection store's brush predicate fits as is\nexport type { RowFilter };\n\nexport type SortDir = \"asc\" | \"desc\";\nexport interface Sort {\n readonly col: string;\n readonly dir: SortDir;\n}\n/** A column filter as a function: tests the column's cell `value` (the whole `row` comes along for context). */\nexport type ValuePredicate<Row> = (value: unknown, row: Row) => boolean;\n/** What `setFilter` takes for a column: a predicate on its value, a case-insensitive substring, or an exact number or boolean. */\nexport type FilterValue<Row> = ValuePredicate<Row> | string | number | boolean;\nexport type Comparator = (a: unknown, b: unknown) => number;\n/** J31: what `subscribe` listeners receive. Every mutation emits exactly one event. */\nexport type TableEvent =\n | { readonly type: \"change\" }\n | { readonly type: \"hover\"; readonly id: string | null }\n | { readonly type: \"select\"; readonly ids: ReadonlySet<string> };\n/**\n * Task 10 (A45, A48): the keyboard cursor of an interactive table. `row` is the body row holding the grid's one tab\n * stop, as a page-relative index (that row's `data-row`); `col` is the column `s` sorts, null until `h`/`l` picks one.\n */\nexport interface TableCursor {\n readonly row: number;\n readonly col: string | null;\n}\n\n/** The whole user-controlled state of a table: sort, filters, page, hidden columns, and the J31 link fields. Immutable; every mutation replaces it. */\nexport interface TableState<Row> {\n readonly sort: Sort | null;\n readonly filters: Readonly<Record<string, FilterValue<Row>>>;\n readonly globalFilter: string;\n /** 0-based */\n readonly page: number;\n /** positive integer, or Infinity for \"all rows\" */\n readonly pageSize: number;\n /** column keys hidden by toggleColumn */\n readonly hidden: readonly string[];\n /** J31: set by setExternalFilter; ANDed with the column and global filters */\n readonly externalFilter: RowFilter<Row> | null;\n /** J31: row ids (see `rowId`); NOT pruned to the rows present, so a linked store's ids round-trip intact */\n readonly selection: ReadonlySet<string>;\n /** Task 10: the keyboard cursor; its row is kept on the current page */\n readonly cursor: TableCursor;\n}\n/** What `Table.getSnapshot()` returns: the state plus the derived visible page. Referentially stable until the next mutation. */\nexport interface TableSnapshot<Row> {\n readonly state: TableState<Row>;\n /** the visible page: filtered → sorted → sliced */\n readonly rows: readonly Row[];\n readonly filteredCount: number;\n /** always at least 1 */\n readonly pageCount: number;\n}\n/** Initial state for `createTable`; `pageSize` beats `spec.interactive.pageSize`, and `sort` must name a spec column. */\nexport interface TableOptions {\n readonly pageSize?: number;\n readonly sort?: Sort;\n}\n/**\n * The headless table engine: holds the rows and a `TableState`, derives the visible page, and notifies subscribers.\n * Renderers (static HTML, hydrate, React) read `rows`/`columns` and call the setters; nothing here touches the DOM.\n *\n * @example A hover set before any view attaches: the view lights it when it does (getHover)\n * ```ts\n * import { createTable, defineTable } from \"@sportsdataverse/sdvtables\";\n * import { hydrate, renderHTML } from \"@sportsdataverse/sdvtables/html\";\n *\n * // 2024 AFC: Kansas City 15 wins, Buffalo 13\n * const spec = defineTable<{ team: string; wins: number }>()\n * .columns((c) => [c.text(\"team\"), c.int(\"wins\")])\n * .rowKey(\"team\")\n * .build();\n * const table = createTable(spec, [\n * { team: \"KC\", wins: 15 },\n * { team: \"BUF\", wins: 13 },\n * ]);\n * table.setHover(\"BUF\"); // a linked figure's hover, before the table is on the page\n * table.getHover(); // \"BUF\"\n * const root = document.createElement(\"div\");\n * root.innerHTML = renderHTML(table, { fonts: false });\n * hydrate(root, table); // Buffalo's row gets sdvt-hover as it attaches\n * root;\n * ```\n */\nexport interface Table<Row> {\n readonly spec: TableSpec<Row>;\n /** the source rows: the ones given to `createTable`, or the last `setRows` */\n readonly allRows: readonly Row[];\n readonly state: TableState<Row>;\n readonly rows: readonly Row[];\n readonly filteredCount: number;\n readonly pageCount: number;\n /** visible columns in spec order */\n readonly columns: readonly ColumnSpec<Row>[];\n setSort(col: string, dir: SortDir | null): void;\n setFilter(col: string, filter: FilterValue<Row> | null | undefined): void;\n setGlobalFilter(text: string): void;\n setPage(n: number): void;\n setPageSize(n: number): void;\n toggleColumn(col: string, visible?: boolean): void;\n /**\n * Replace the source rows (a React parent's new array, a live feed). Sort, filters, the external filter, hidden\n * columns and selection are kept; the page is clamped to the new page count; one `\"change\"` event. Without a\n * `rowKey`, row ids are indices into the NEW rows, so a kept selection means the rows at those positions.\n */\n setRows(rows: readonly Row[]): void;\n /** J31: `String(row[spec.rowKey])` (\"\" when missing), else the row's index in `allRows` */\n rowId(row: Row): string;\n /** J31: same function again is a no-op; a new one resets the page */\n setExternalFilter(filter: RowFilter<Row> | null): void;\n /** J31: emits `{ type: \"select\" }`; an equal set is a no-op */\n setSelection(ids: ReadonlySet<string>): void;\n getSelection(): ReadonlySet<string>;\n /** J31: emits `{ type: \"hover\" }` without changing state; the same id twice in a row is a no-op */\n setHover(id: string | null): void;\n /**\n * J31: the last `setHover` id, or null. A view that attaches (`hydrate`) or mounts (`<SdvTable table/>`) after a\n * hover reads it, since no event comes until the hover changes.\n */\n getHover(): string | null;\n /**\n * Task 10: move the keyboard cursor. `row` is clamped to the current page; `col` must name a spec column, or be\n * null. One `\"change\"` event; an equal cursor (after clamping) is a no-op, and a non-finite `row` is ignored.\n */\n setCursor(row: number, col: string | null): void;\n subscribe(fn: (event: TableEvent) => void): () => void;\n /** referentially stable until the next mutation — what useSyncExternalStore reads */\n getSnapshot(): TableSnapshot<Row>;\n}\n\n/** Phase 4 column kinds whose values sort numerically. */\nexport const NUMERIC_KINDS: ReadonlySet<string> = new Set([\n \"num\",\n \"int\",\n \"pct\",\n \"rank\",\n \"delta\",\n \"tally\",\n \"colorPills\",\n \"colorRanks\",\n \"percentileBar\",\n]);\n\n/** null, undefined, \"\", NaN, and an invalid `Date` are missing; `withMissingLast` sorts them last. */\nexport function isMissing(v: unknown): boolean {\n return (\n v === null ||\n v === undefined ||\n v === \"\" ||\n (typeof v === \"number\" && Number.isNaN(v)) ||\n (v instanceof Date && Number.isNaN(v.getTime()))\n );\n}\n\n// Pinned to \"en\" so the SSR process and the viewer's browser sort text identically.\nconst collator = new Intl.Collator(\"en\", { numeric: true, sensitivity: \"base\" });\nexport const compareNum: Comparator = (a, b) => Number(a) - Number(b);\n/** Text sorts under the `en` locale (numeric-aware, case- and accent-insensitive), never the host default, so server and client agree. */\nexport const compareText: Comparator = (a, b) => collator.compare(String(a), String(b));\n/** Date values compare by time; an unparsable one is missing (see `isMissing`), so the comparator stays transitive. */\nexport const compareDate: Comparator = (a, b) => {\n const t = (v: unknown): number => (v instanceof Date ? v.getTime() : new Date(String(v)).getTime());\n const x = t(a);\n const y = t(b);\n return Number.isNaN(x) || Number.isNaN(y) ? 0 : x - y;\n};\n\nconst fieldOf = <Row>(row: Row, key: string): unknown => (row as Record<string, unknown>)[key];\n\n/**\n * The comparator `applySort` uses for `col`: its own `compare`, else numeric for a numeric kind or numeric samples, by\n * time for `Date` samples, else `en`-locale text.\n * Engine plumbing for custom renderers: it may change before 1.0.\n *\n * @beta\n */\nexport function comparatorFor<Row>(col: ColumnSpec<Row>, rows: readonly Row[]): Comparator {\n if (col.compare) return col.compare as Comparator; // Phase 4 types it on Row[K]; the engine compares unknowns\n if (NUMERIC_KINDS.has(col.kind)) return compareNum;\n const sample = rows.map((r) => fieldOf(r, col.key)).find((v) => !isMissing(v));\n return typeof sample === \"number\" ? compareNum : sample instanceof Date ? compareDate : compareText;\n}\n\n/** Missing values sort last in BOTH directions; never returns NaN. */\nexport function withMissingLast(cmp: Comparator, dir: SortDir): Comparator {\n return (a, b) => {\n const ma = isMissing(a);\n const mb = isMissing(b);\n if (ma || mb) return ma === mb ? 0 : ma ? 1 : -1;\n const c = cmp(a, b);\n if (Number.isNaN(c)) return 0;\n return dir === \"asc\" ? c : -c;\n };\n}\n\n/**\n * The spec's column with this key; throws `TableSpecError` naming every column when there is none.\n * Engine plumbing for custom renderers: it may change before 1.0.\n *\n * @beta\n */\nexport function findColumn<Row>(spec: TableSpec<Row>, key: string): ColumnSpec<Row> {\n const col = spec.columns.find((c) => c.key === key);\n if (!col)\n throw new TableSpecError(\n `unknown column \"${key}\"; columns are ${spec.columns.map((c) => c.key).join(\", \")}`,\n );\n return col;\n}\n\n/**\n * A sorted copy of `rows` (stable; missing values last in both directions); `sort` null keeps the input order.\n * Engine plumbing for custom renderers: it may change before 1.0.\n *\n * @beta\n */\nexport function applySort<Row>(spec: TableSpec<Row>, rows: readonly Row[], sort: Sort | null): Row[] {\n if (!sort) return [...rows];\n const col = findColumn(spec, sort.col);\n const cmp = withMissingLast(comparatorFor(col, rows), sort.dir);\n // Array.prototype.sort is stable since ES2019, so ties keep input order.\n return [...rows].sort((a, b) => cmp(fieldOf(a, col.key), fieldOf(b, col.key)));\n}\n\nexport function matches<Row>(filter: FilterValue<Row>, value: unknown, row: Row): boolean {\n if (typeof filter === \"function\") return filter(value, row);\n if (typeof filter === \"string\")\n return String(value ?? \"\")\n .toLowerCase()\n .includes(filter.toLowerCase());\n return value === filter;\n}\n\n// ponytail: O(rows × columns) scan per change; index the lower-cased text if tables pass ~50k rows.\n/**\n * The rows `state` keeps, in input order: its external filter, every column filter and the global search over the\n * visible columns, all ANDed.\n * Engine plumbing for custom renderers: it may change before 1.0.\n *\n * @beta\n */\nexport function applyFilters<Row>(spec: TableSpec<Row>, rows: readonly Row[], state: TableState<Row>): Row[] {\n const active = Object.entries(state.filters).map(([key, f]) => [findColumn(spec, key), f] as const);\n const q = state.globalFilter.trim().toLowerCase();\n const searchable = spec.columns.filter((c) => !state.hidden.includes(c.key));\n const external = state.externalFilter;\n return rows.filter(\n (row) =>\n (external === null || external(row)) &&\n active.every(([col, f]) => matches(f, fieldOf(row, col.key), row)) &&\n (q === \"\" ||\n searchable.some((c) =>\n String(fieldOf(row, c.key) ?? \"\")\n .toLowerCase()\n .includes(q),\n )),\n );\n}\n\n/**\n * Page `page` (0-based, clamped to the pages there are) of `rows` at `pageSize` (Infinity: all of them), and the\n * page count, at least 1.\n * Engine plumbing for custom renderers: it may change before 1.0.\n *\n * @beta\n */\nexport function paginate<Row>(\n rows: readonly Row[],\n page: number,\n pageSize: number,\n): { rows: Row[]; pageCount: number } {\n const pageCount = Math.max(1, Math.ceil(rows.length / pageSize)); // n / Infinity → 0 → 1 page\n const p = Math.min(Math.max(0, page), pageCount - 1);\n const slice =\n pageSize === Number.POSITIVE_INFINITY ? [...rows] : rows.slice(p * pageSize, (p + 1) * pageSize);\n return { rows: slice, pageCount };\n}\n\n/** Header-click cycle shared by hydrate and React: asc → desc → none. */\nexport function nextSortDir(current: Sort | null, col: string): SortDir | null {\n if (!current || current.col !== col) return \"asc\";\n return current.dir === \"asc\" ? \"desc\" : null;\n}\n\nfunction checkPageSize(n: number): number {\n if (n === Number.POSITIVE_INFINITY) return n;\n if (!Number.isInteger(n) || n < 1)\n throw new TableSpecError(`pageSize must be a positive integer or Infinity, got ${String(n)}`);\n return n;\n}\n\nconst sameSet = (a: ReadonlySet<string>, b: ReadonlySet<string>): boolean =>\n a.size === b.size && [...a].every((id) => b.has(id));\nconst CHANGE: TableEvent = { type: \"change\" };\n\n/**\n * Build a headless `Table` over `rows`: sort, filter, paginate, hide columns, and subscribe to changes.\n * Throws `TableSpecError` for an unknown column or an invalid page size; never mutates `rows`.\n */\nexport function createTable<Row>(\n spec: TableSpec<Row>,\n rows: readonly Row[],\n options: TableOptions = {},\n): Table<Row> {\n if (options.sort) findColumn(spec, options.sort.col);\n let state: TableState<Row> = {\n sort: options.sort ?? null,\n filters: {},\n globalFilter: \"\",\n page: 0,\n pageSize: checkPageSize(options.pageSize ?? spec.interactive?.pageSize ?? Number.POSITIVE_INFINITY),\n hidden: [],\n externalFilter: null,\n selection: new Set(),\n cursor: { row: 0, col: null },\n };\n const listeners = new Set<(event: TableEvent) => void>();\n const emit = (event: TableEvent): void => {\n for (const fn of [...listeners]) fn(event);\n };\n const key = spec.rowKey;\n let source = rows;\n let indexOf: Map<Row, number> | null = null;\n let warned = false;\n const rowId = (row: Row): string => {\n if (key === undefined) {\n const i = indexOf?.get(row);\n return i === undefined ? \"\" : String(i);\n }\n const v = fieldOf(row, key);\n return isMissing(v) ? \"\" : String(v);\n };\n const setSource = (next: readonly Row[]): void => {\n source = next;\n if (key === undefined) {\n indexOf = new Map(next.map((r, i) => [r, i] as const));\n return;\n }\n if (warned) return;\n // Duplicate ids collapse to one link id (selecting one highlights all); say so once per table.\n const ids = next.map(rowId).filter((id) => id !== \"\");\n const dupes = ids.length - new Set(ids).size;\n if (dupes > 0) {\n warned = true;\n console.warn(\n `sdvtables: rowKey \"${key}\" is not unique — ${dupes} duplicate id(s); linked selection will merge them`,\n );\n }\n };\n setSource(rows);\n let hovered: string | null = null;\n const compute = (): TableSnapshot<Row> => {\n const filtered = applyFilters(spec, source, state);\n const sorted = applySort(spec, filtered, state.sort);\n const { rows: pageRows, pageCount } = paginate(sorted, state.page, state.pageSize);\n return { state, rows: pageRows, filteredCount: filtered.length, pageCount };\n };\n let snapshot = compute();\n const update = (patch: Partial<TableState<Row>>, event: TableEvent = CHANGE): void => {\n state = { ...state, ...patch };\n snapshot = compute();\n if (state.page > snapshot.pageCount - 1) {\n state = { ...state, page: snapshot.pageCount - 1 };\n snapshot = compute();\n }\n const last = Math.max(0, snapshot.rows.length - 1);\n if (state.cursor.row > last) {\n // Task 10: a filter, page or new rows that shrink the page pull the cursor row back onto it\n state = { ...state, cursor: { ...state.cursor, row: last } };\n snapshot = { ...snapshot, state };\n }\n emit(event);\n };\n return {\n spec,\n get allRows() {\n return source;\n },\n get state() {\n return snapshot.state;\n },\n get rows() {\n return snapshot.rows;\n },\n get filteredCount() {\n return snapshot.filteredCount;\n },\n get pageCount() {\n return snapshot.pageCount;\n },\n get columns() {\n return spec.columns.filter((c) => !snapshot.state.hidden.includes(c.key));\n },\n setSort(col, dir) {\n if (dir !== null) findColumn(spec, col);\n update({ sort: dir === null ? null : { col, dir }, page: 0 });\n },\n setFilter(col, filter) {\n findColumn(spec, col);\n const { [col]: _dropped, ...rest } = state.filters;\n const filters =\n filter === null || filter === undefined || filter === \"\" ? rest : { ...rest, [col]: filter };\n update({ filters, page: 0 });\n },\n setGlobalFilter(text) {\n update({ globalFilter: text, page: 0 });\n },\n setPage(n) {\n if (!Number.isFinite(n)) return; // NaN/±Infinity: a caller bug, not a page\n update({ page: Math.max(0, Math.min(Math.trunc(n), snapshot.pageCount - 1)) });\n },\n setPageSize(n) {\n update({ pageSize: checkPageSize(n), page: 0 });\n },\n toggleColumn(col, visible) {\n findColumn(spec, col);\n const hiddenNow = state.hidden.includes(col);\n const hide = visible === undefined ? !hiddenNow : !visible;\n const hidden = hide\n ? hiddenNow\n ? state.hidden\n : [...state.hidden, col]\n : state.hidden.filter((c) => c !== col);\n update({ hidden, sort: hide && state.sort?.col === col ? null : state.sort });\n },\n setRows(next) {\n setSource(next);\n update({}); // every state field kept; update re-clamps the page and emits once\n },\n rowId,\n setExternalFilter(filter) {\n if (filter === state.externalFilter) return; // no recompute, no echo: the J31 loop guard\n update({ externalFilter: filter, page: 0 });\n },\n setSelection(ids) {\n if (sameSet(ids, state.selection)) return;\n const selection: ReadonlySet<string> = new Set(ids); // a copy: the caller may reuse its set\n update({ selection }, { type: \"select\", ids: selection });\n },\n getSelection: () => state.selection,\n setCursor(row, col) {\n if (!Number.isFinite(row)) return; // as setPage: NaN/±Infinity is a caller bug, not a row\n if (col !== null) findColumn(spec, col);\n const r = Math.max(0, Math.min(Math.trunc(row), snapshot.rows.length - 1));\n if (r === state.cursor.row && col === state.cursor.col) return;\n update({ cursor: { row: r, col } });\n },\n setHover(id) {\n if (id === hovered) return;\n hovered = id;\n emit({ type: \"hover\", id });\n },\n getHover: () => hovered,\n subscribe(fn) {\n listeners.add(fn);\n return () => {\n listeners.delete(fn);\n };\n },\n getSnapshot: () => snapshot,\n };\n}\n"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../src/html/hydrate.ts","../src/html/index.ts"],"names":[],"mappings":"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","file":"chunk-U6W6MWKW.js","sourcesContent":["import type { Table } from \"../engine.js\";\nimport { TableSpecError } from \"../errors.js\";\nimport {\n applyHover,\n captureFocus,\n handleClick,\n handleHover,\n handleInput,\n handleKeydown,\n} from \"./controls.js\";\nimport { pagerLabel, renderToolbar, tableRenderOptions } from \"./interactive.js\";\nimport { renderParts, tableHTML } from \"./parts.js\";\n\n/** I2: each element's live binding, so hydrating it again replaces the old one (see `replace`). */\nconst live = new WeakMap<Element, () => void>();\n/** Bodies a teardown left behind the engine (it dropped a render still owed); the next hydrate of one redraws it. */\n// ponytail: exists for React StrictMode's double effect (mount, cleanup, mount); weak, so it never holds a body alive\nconst behind = new WeakSet<Element>();\n\nconst edge = (button: Element | null, atEdge: boolean): void => {\n if (atEdge) button?.setAttribute(\"aria-disabled\", \"true\");\n else button?.removeAttribute(\"aria-disabled\");\n};\n\n/**\n * Progressive enhancement for markup produced by `renderHTML(table)`: one delegated click + input listener drive the\n * engine; each change re-renders ONLY the table block (`[data-sdv-body]`) and the pager, once, on the next animation\n * frame, however many changes land in it (the engine state itself moves synchronously). One exception: a click,\n * pointer move or key on the table while a change to its rows (a sort, filter, page turn or `setRows`) waits for that\n * frame draws it at once, so the event never reads an old row as the one now at its index; a click or key on a row\n * this replaced acts on nothing, and Enter or Space on it is consumed, so the page does not scroll. A change that keeps\n * the rows (a selection, the cursor, a keyed row re-sent as a new object) waits for its frame. Toolbar inputs are\n * rebuilt only when a column is hidden or shown; otherwise their values are synced from the engine state, so an\n * external filter change shows in the box. A row hover (the pointer's, or a linked figure's through `linkSelection`)\n * re-renders nothing: the row gets the `sdvt-hover` class, which survives the next re-render; a hover the engine\n * already holds (`getHover`) shows on attach. A focused control, or a focusable element inside a rendered cell, that\n * the re-render replaced gets focus back (shadow-root mounts included). Attaching does NOT reconcile the SSR markup\n * against the engine state: render the markup from the same table state you hydrate. Hydrating an element again\n * replaces its previous binding (HMR, client-side navigation, an effect without cleanup) after drawing any change that\n * binding still owed, so every control still acts once. The returned teardown is idempotent and drops a render still\n * owed; hydrating that element again redraws it (on the next frame, or at once for an event that comes first), so React\n * StrictMode's mount, cleanup, mount leaves no stale rows. Until the teardown runs, the table's subscriber keeps `el`\n * alive as long as the table lives.\n */\nexport function hydrate<Row>(el: Element, table: Table<Row>): () => void {\n const body = el.querySelector(\"[data-sdv-body]\");\n if (!body)\n throw new TableSpecError(\n \"hydrate: no [data-sdv-body] in element; render it with renderHTML(table) first\",\n );\n live.get(el)?.();\n\n let hidden = table.state.hidden; // the engine replaces this array only when a column is hidden or shown\n // the rows the body shows: the SSR markup's until the first render; unknown (null) on a body a teardown left behind,\n // so an event before its redraw frame redraws first, even when the engine now holds no row\n let drawn: readonly Row[] | null = behind.has(body) ? null : table.rows;\n const render = (): void => {\n cancel = undefined;\n const root = el.getRootNode() as Document | ShadowRoot;\n const restore = captureFocus(el);\n const p = renderParts(table.spec, table.rows, { css: \"none\", ...tableRenderOptions(table) });\n body.innerHTML = tableHTML(p);\n drawn = table.rows; // after the write: a render that throws leaves the rows the body still shows on record\n // M8: a hidden column's filter input leaves the toolbar (and comes back), as in renderHTML(table) and <SdvTable/>\n const toolbar = el.querySelector(\".sdvt-toolbar\");\n if (toolbar && table.state.hidden !== hidden) toolbar.outerHTML = renderToolbar(table, p.labels);\n hidden = table.state.hidden;\n const label = el.querySelector(\"[data-sdv-page-label]\");\n const page = pagerLabel(table);\n if (label && label.textContent !== page) label.textContent = page; // M6: an unchanged live region is not re-announced\n edge(el.querySelector('[data-sdv-page=\"prev\"]'), table.state.page === 0);\n edge(el.querySelector('[data-sdv-page=\"next\"]'), table.state.page >= table.pageCount - 1);\n // I1: an external setFilter / setGlobalFilter / clear moves the engine state, not the box; a focused input wins\n for (const input of Array.from(\n el.querySelectorAll<HTMLInputElement>(\"[data-sdv-filter],[data-sdv-global-filter]\"),\n )) {\n if (input === root.activeElement) continue;\n const key = input.getAttribute(\"data-sdv-filter\");\n const f = key === null ? table.state.globalFilter : table.state.filters[key];\n const want = typeof f === \"string\" ? f : \"\";\n if (input.value !== want) input.value = want;\n }\n applyHover(el, table, table.getHover()); // the body was rebuilt: a linked figure's hover survives it\n restore();\n };\n // M6: one render per animation frame however many changes land in it (typing in an unpaged 1000-row table\n // re-rendered ~660 KB per keystroke); a timer where there is no requestAnimationFrame\n let cancel: (() => void) | undefined;\n const schedule = (): void => {\n if (cancel) return;\n if (typeof requestAnimationFrame === \"function\") {\n const id = requestAnimationFrame(render);\n cancel = () => cancelAnimationFrame(id);\n } else {\n const id = setTimeout(render, 0);\n cancel = () => clearTimeout(id);\n }\n };\n // a row event while a render that changes the rows is pending would read the old body's data-row against the new\n // rows (LV's row as BUF): render first, so the target is a current row, or a replaced one that names no row. A\n // pending render that keeps the rows (a selection, the cursor) leaves data-row right, and the target in place.\n // A keyed row re-sent as a new object (a live feed) keeps its id, so the old body's data-row still names it: it moved\n // only when its object AND its id differ. Never ids saved at render: without a rowKey those are positions, so the\n // old row 3 would read as whatever is at index 3 now; the engine's id of an old object is \"\" (gone) or its new index\n const same = (r: Row, i: number): boolean => {\n const was = drawn?.[i] as Row; // the lengths match\n return r === was || table.rowId(r) === table.rowId(was);\n };\n const flush = (): boolean => {\n const rows = table.rows;\n if (!cancel || (rows.length === drawn?.length && rows.every(same))) return false;\n cancel();\n render();\n return true;\n };\n const onClick = (e: Event): void => {\n flush();\n handleClick(table, e.target);\n };\n const onInput = (e: Event): void => handleInput(table, e.target);\n const onHover = (e: Event): void => {\n flush();\n handleHover(table, e.target); // J31 (A7)\n };\n const onKeydown = (e: Event): void => {\n const k = e as KeyboardEvent;\n // the flush replaced the focused body row: Enter and Space act on nothing, and Space must not scroll the page. A\n // row only: a sort button rebuilt under focus gets it back, and the browser's activation of it still sorts\n if (\n flush() &&\n (k.key === \" \" || k.key === \"Enter\") &&\n (k.target as Element).matches(\".sdvt-row[data-row]\")\n )\n k.preventDefault();\n handleKeydown(table, el, k); // Task 10\n };\n\n el.addEventListener(\"click\", onClick);\n el.addEventListener(\"input\", onInput);\n el.addEventListener(\"mouseover\", onHover);\n el.addEventListener(\"mouseleave\", onHover);\n el.addEventListener(\"keydown\", onKeydown);\n // J31: a hover changes no state, and re-rendering on it would replace the row under the pointer: a class toggle\n const unsubscribe = table.subscribe((e) => {\n if (e.type !== \"hover\") schedule();\n // a pending render means the DOM still shows the old rows, which data-row would misread: render applies it\n else if (cancel === undefined) applyHover(el, table, e.id);\n });\n applyHover(el, table, table.getHover()); // a hover set before this attached (a linked figure's) shows now\n if (behind.delete(body)) schedule(); // a teardown dropped a render this body still owes (StrictMode's cleanup)\n const teardown = (): void => {\n if (live.get(el) === replace) live.delete(el);\n unsubscribe();\n if (cancel) {\n cancel();\n behind.add(body); // the body stays behind the engine until the next hydrate of it redraws\n }\n cancel = undefined;\n el.removeEventListener(\"click\", onClick);\n el.removeEventListener(\"input\", onInput);\n el.removeEventListener(\"mouseover\", onHover);\n el.removeEventListener(\"mouseleave\", onHover);\n el.removeEventListener(\"keydown\", onKeydown);\n };\n // M3: hydrating `el` again first draws a change this binding still owes, so the next one starts from a current body\n // (its `drawn` is the engine's rows); a plain teardown drops it, since the element may no longer be ours to write,\n // and leaves the body `behind` for whichever hydrate comes next\n const replace = (): void => {\n if (cancel) {\n cancel();\n render();\n }\n teardown();\n };\n live.set(el, replace);\n return teardown;\n}\n","// src/html/index.ts — the public renderer entry; the body lives in parts.ts (Phase 5 Task 2).\nimport { loadGsis, loadLeague } from \"@sportsdataverse/sdvplot\";\nimport type { League } from \"@sportsdataverse/sdvplot\";\nimport type { Table } from \"../engine.js\";\nimport { TableSpecError } from \"../errors.js\";\nimport type { Density, TableSpec } from \"../spec.js\";\nimport { loadTeamNames } from \"../team-name.js\";\nimport { THEME_NAMES } from \"../themes/index.js\";\nimport { renderInteractive } from \"./interactive.js\";\nimport { type RenderOptions, assemble, labelOf, renderParts } from \"./parts.js\";\n\nexport type { ColumnScale, RenderContext } from \"./cells.js\";\nexport { fontsLink } from \"./fonts.js\";\nexport type { GoogleFont } from \"../themes/tokens.js\";\nexport type { RenderOptions, RenderedParts } from \"./parts.js\";\nexport {\n assemble,\n attrsText,\n fontsLinkFor,\n labelOf,\n renderParts,\n sortAria,\n styleSheet,\n tableHTML,\n themeKey,\n} from \"./parts.js\";\n\n/** Leagues whose shards the spec needs (team-aware columns + the sdvTeam theme). Headshot columns need no shard: ESPN ids are pure URLs. */\nexport function leaguesOf<Row>(spec: TableSpec<Row>): League[] {\n const out = new Set<League>();\n for (const c of spec.columns) if (\"league\" in c && c.kind !== \"headshot\") out.add(c.league);\n if (spec.theme.name === \"sdvTeam\" && spec.theme.options?.league)\n out.add(spec.theme.options.league as League);\n return [...out];\n}\n/** The documented preparation step: every league shard the spec names, plus the gsis map when a headshot column uses gsis ids (J27). Task 7 adds team names. */\nexport async function prepare<Row>(spec: TableSpec<Row>): Promise<void> {\n const gsis = spec.columns.some((c) => c.kind === \"headshot\" && c.idSystem === \"gsis\");\n await Promise.all([...leaguesOf(spec).map((l) => loadLeague(l)), ...(gsis ? [loadGsis()] : [])]);\n await loadTeamNames(leaguesOf(spec));\n}\n\nfunction isTable<Row>(x: TableSpec<Row> | Table<Row>): x is Table<Row> {\n return typeof (x as Table<Row>).subscribe === \"function\";\n}\n/**\n * Static markup from a spec, or the interactive document (toolbar, aria-sort headers, pager) from a `createTable`\n * instance.\n *\n * A spec renders as one HTML string, synchronously: the theme as a scoped `<style>` (with `css: \"none\"` the host\n * page emits `styleSheet(spec)` once instead), then the table. Cells that read league data (logos, team names) need\n * `await prepare(spec)` first, or use `renderHTMLAsync`. Throws `TableSpecError` for a column the rows lack or an\n * unknown theme.\n *\n * @example\n * ```ts\n * import { defineTable } from \"@sportsdataverse/sdvtables\";\n * import { renderHTML } from \"@sportsdataverse/sdvtables/html\";\n *\n * const rows = [\n * { team: \"BUF\", pf: 525, pa: 368 },\n * { team: \"DEN\", pf: 425, pa: 311 },\n * { team: \"LAC\", pf: 402, pa: 301 },\n * ];\n * const spec = defineTable<(typeof rows)[number]>()\n * .columns((c) => [c.text(\"team\"), c.int(\"pf\", { label: \"Points for\" }), c.int(\"pa\", { label: \"Points against\" })])\n * .theme(\"athletic\")\n * .build();\n * renderHTML(spec, rows);\n * ```\n */\nexport function renderHTML<Row>(table: Table<Row>, opts?: RenderOptions): string;\nexport function renderHTML<Row>(spec: TableSpec<Row>, rows: readonly Row[], opts?: RenderOptions): string;\nexport function renderHTML<Row>(\n a: TableSpec<Row> | Table<Row>,\n b?: readonly Row[] | RenderOptions,\n c: RenderOptions = {},\n): string {\n if (isTable(a)) return renderInteractive(a, (b as RenderOptions | undefined) ?? {});\n return assemble(renderParts(a, (b as readonly Row[] | undefined) ?? [], c));\n}\nexport { createTable } from \"../engine.js\";\nexport { handleClick, handleHover, handleInput, handleKeydown, keyAction, rowIdAt } from \"./controls.js\";\nexport type { KeyAction, KeyContext } from \"./controls.js\";\nexport { hydrate } from \"./hydrate.js\";\nexport {\n pagerLabel,\n renderInteractive,\n renderPager,\n renderToolbar,\n tableRenderOptions,\n} from \"./interactive.js\";\nexport async function renderHTMLAsync<Row>(\n spec: TableSpec<Row>,\n rows: readonly Row[],\n opts: RenderOptions = {},\n): Promise<string> {\n await prepare(spec);\n return renderHTML(spec, rows, opts);\n}\nexport function toElement<Row>(\n spec: TableSpec<Row>,\n rows: readonly Row[],\n opts: RenderOptions = {},\n): HTMLElement {\n if (typeof document === \"undefined\")\n throw new TableSpecError(\"toElement needs a DOM (browser, happy-dom or jsdom); use renderHTML in Node\");\n const t = document.createElement(\"template\");\n t.innerHTML = renderHTML(spec, rows, opts).trim();\n const el = t.content.querySelector(\"div.sdvt\");\n if (!(el instanceof HTMLElement)) throw new TableSpecError(\"renderHTML produced no wrapper\");\n // the fonts <link> goes to <head> once per href (A100), so the theme fonts load without a duplicate per table\n const link = t.content.querySelector(\"link\");\n const href = link?.getAttribute(\"href\");\n if (\n link &&\n href &&\n !Array.from(document.head.querySelectorAll(\"link\")).some((l) => l.getAttribute(\"href\") === href)\n )\n document.head.append(link);\n return el;\n}\n/**\n * gt_theme_preview (_themes.py:2058-2064): one HTML string per theme, first n rows, compact; sdvTeam shown with\n * league nfl and no team.\n *\n * @example\n * ```ts\n * import { defineTable } from \"@sportsdataverse/sdvtables\";\n * import { themePreview } from \"@sportsdataverse/sdvtables/html\";\n *\n * const rows = [\n * { team: \"KC\", wins: 15, losses: 2 },\n * { team: \"BUF\", wins: 13, losses: 4 },\n * ];\n * const spec = defineTable<(typeof rows)[number]>()\n * .columns((c) => [c.text(\"team\"), c.int(\"wins\"), c.int(\"losses\")])\n * .build();\n * Object.values(themePreview(spec, rows, [\"sdv\", \"athletic\", \"midnight\"])).join(\"\\n\");\n * ```\n */\nexport function themePreview<Row>(\n spec: TableSpec<Row>,\n rows: readonly Row[],\n themes?: readonly string[],\n o: { n?: number; density?: Density } = {},\n): Record<string, string> {\n const n = o.n ?? 5;\n if (!Number.isInteger(n) || n < 1) throw new TableSpecError(`n must be a positive whole number, got ${n}`);\n const out: Record<string, string> = {};\n for (const name of themes ?? THEME_NAMES)\n out[name] = renderHTML(\n {\n ...spec,\n theme: {\n name,\n density: o.density ?? \"compact\",\n ...(name === \"sdvTeam\" ? { options: { league: \"nfl\" } } : {}),\n },\n },\n rows.slice(0, n),\n );\n return out;\n}\nexport { labelOf as columnLabel };\n"]}